    @Test
    public void testGetFilteredSymbols() throws InterruptedException, ExecutionException, IOException {

        File coordinatesFiles = addFileToFolder(workspaceRoot, "Coordinates.groovy",
                "class Coordinates implements ICoordinates {\n"
                        + "   double latitude\n"
                        + "   double longitude\n"
                        + "   double longitude2\n"
                        + "   private double CoordinatesVar\n"
                        + "   double getAt(int idx) {\n"
                        + "      def someString = \"Also in symbols\"\n"
                        + "      if (idx == 0) latitude\n"
                        + "      else if (idx == 1) longitude\n"
                        + "      else throw new Exception(\"Wrong coordinate index, use 0 or 1 \")\n"
                        + "   }\n"
                        + "}\n");
        File icoordinatesFiles = addFileToFolder(workspaceRoot, "foo/folder", "ICoordinates.groovy",
                "interface ICoordinates {\n"
                        + "   abstract double getAt(int idx);\n"
                        + "}\n");
        parser.parseAllSymbols();

        Set<SymbolInformation> filteredSymbols = parser.getFilteredSymbols("Coordinates");
        assertEquals(Sets.newHashSet(new SymbolInformation(
                        "Coordinates",
                        SymbolKind.Class,
                        createLocation(coordinatesFiles.toPath(), Ranges.createRange(0, 0, 1, 0)))),
                filteredSymbols);

        filteredSymbols = parser.getFilteredSymbols("Coordinates*");
        assertEquals(Sets.newHashSet(
                new SymbolInformation(
                        "Coordinates",
                        SymbolKind.Class,
                        createLocation(coordinatesFiles.toPath(), Ranges.createRange(0, 0, 1, 0))),
                new SymbolInformation(
                        "CoordinatesVar",
                        SymbolKind.Field,
                        createLocation(coordinatesFiles.toPath(), Ranges.createRange(4, 3, 4, 32)),
                        "Coordinates")),
                filteredSymbols);

        filteredSymbols = parser.getFilteredSymbols("Coordinates?");
        assertEquals(NO_SYMBOLS, filteredSymbols);

        filteredSymbols = parser.getFilteredSymbols("*Coordinates*");
        assertThat(filteredSymbols).containsExactlyInAnyOrder(
                new SymbolInformation(
                        "Coordinates",
                        SymbolKind.Class,
                        createLocation(coordinatesFiles.toPath(), Ranges.createRange(0, 0, 1, 0))),
                new SymbolInformation(
                        "ICoordinates",
                        SymbolKind.Interface,
                        createLocation(icoordinatesFiles.toPath(), Ranges.createRange(0, 0, 1, 0))),
                new SymbolInformation(
                        "CoordinatesVar",
                        SymbolKind.Field,
                        createLocation(coordinatesFiles.toPath(), Ranges.createRange(4, 3, 4, 32)),
                        "Coordinates"));

        filteredSymbols = parser.getFilteredSymbols("Coordinates???");
        assertEquals(Sets.newHashSet(
                new SymbolInformation(
                        "CoordinatesVar",
                        SymbolKind.Field,
                        createLocation(coordinatesFiles.toPath(), Ranges.createRange(4, 3, 4, 32)),
                        "Coordinates")),
                filteredSymbols);
        filteredSymbols = parser.getFilteredSymbols("Coordinates...");
        assertEquals(NO_SYMBOLS, filteredSymbols);
        filteredSymbols = parser.getFilteredSymbols("*Coordinates...*");
        assertEquals(NO_SYMBOLS, filteredSymbols);
        filteredSymbols = parser.getFilteredSymbols("*Coordinates.??*");
        assertEquals(NO_SYMBOLS, filteredSymbols);
    }