diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/WorkspaceSymbolHandler.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/WorkspaceSymbolHandler.java index 62fbec3290..4762241e26 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/WorkspaceSymbolHandler.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/WorkspaceSymbolHandler.java @@ -70,9 +70,8 @@ public static List search(String query, int maxResults, Strin if (qualIndex != -1) { qualifierName = tQuery.substring(0, qualIndex); typeName = tQuery.substring(qualIndex + 1); - qualifierMatchRule = SearchPattern.R_CAMELCASE_MATCH; - if (qualifierName.contains("*") || qualifierName.contains("?")) { - qualifierMatchRule = SearchPattern.R_PATTERN_MATCH; + if (!qualifierName.contains("*") && !qualifierName.contains("?")) { + qualifierName = String.format("*%s*", qualifierName); } } diff --git a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/WorkspaceSymbolHandlerTest.java b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/WorkspaceSymbolHandlerTest.java index a5487d98ce..4cf6636a37 100644 --- a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/WorkspaceSymbolHandlerTest.java +++ b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/WorkspaceSymbolHandlerTest.java @@ -128,7 +128,7 @@ public void testProjectSearch() { public void testCamelCaseSearch() { List results = WorkspaceSymbolHandler.search("NPE", monitor); assertNotNull(results); - assertEquals("NullPointerException", results.get(0).getName()); + assertTrue(results.stream().anyMatch(s -> s.getName().equals("NullPointerException"))); results = WorkspaceSymbolHandler.search("HaMa", monitor); String className = "HashMap"; @@ -201,6 +201,17 @@ public void testSearchAllTypesOfPackage() { assertTrue(results.stream().anyMatch(s -> "Exception".equals(s.getName()) && "java.lang".equals(s.getContainerName()))); } + @Test + public void testSearchPartialPackage() { + List results = WorkspaceSymbolHandler.search("util.Array", monitor); + assertTrue(results.size() > 1); + assertTrue(results.stream().anyMatch(s -> s.getName().equals("ArrayList") && s.getContainerName().equals("java.util"))); + + results = WorkspaceSymbolHandler.search("util.Pattern", monitor); + assertTrue(results.size() > 1); + assertTrue(results.stream().anyMatch(s -> s.getName().equals("Pattern") && s.getContainerName().equals("java.util.regex"))); + } + @Test public void testSearchWithoutDuplicate() { List results = WorkspaceSymbolHandler.search("*", monitor);