Bug 578547 - Make TypeInfoFilter more robust
- modify TypeInfoFilter constructor to prefix the package pattern
with * if the first character of the typed text starts with an
upper-case character, implying a type rather than a package
- add new test to TypeInfoTest
Change-Id: I702c62a6bff471b44d2e0206fccf8187c7342af9
Reviewed-on: https://git.eclipse.org/r/c/jdt/eclipse.jdt.ui/+/190394
Tested-by: JDT Bot <jdt-bot@eclipse.org>
Tested-by: Jeff Johnston <jjohnstn@redhat.com>
Reviewed-by: Jeff Johnston <jjohnstn@redhat.com>
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeInfoTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeInfoTest.java
index d2914ac..5e0b677 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeInfoTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeInfoTest.java
@@ -277,4 +277,27 @@
// assertEquals("sun.nio.ch.WindowsSelectorImpl", TypeInfoFilter.simplifySearchText(" - locked <0x0000000087428348> (a sun.nio.ch.WindowsSelectorImpl) "));
// "- waiting to re-lock in wait() <0x00000007005919b0> (a java.lang.ref.ReferenceQueue$Lock)"
}
-}
+
+ @Test
+ public void testBug578547() {
+ IJavaElement[] elements= new IJavaElement[] { fJProject1 };
+ IJavaSearchScope scope= SearchEngine.createJavaSearchScope(elements);
+
+ TypeInfoFilter filter= new TypeInfoFilter("TestInner1.TestInner2", scope, 0, null);
+ assertEquals("TestInner2", filter.getNamePattern());
+ assertEquals("*TestInner1*", filter.getPackagePattern());
+
+ filter= new TypeInfoFilter("TestInner1.TestInner2.TestInner3", scope, 0, null);
+ assertEquals("TestInner3", filter.getNamePattern());
+ assertEquals("*TestInner1.TestInner2*", filter.getPackagePattern());
+
+ filter= new TypeInfoFilter("org.eclipse.jdt.IProblemInfo", scope, 0, null);
+ assertEquals("IProblemInfo", filter.getNamePattern());
+ assertEquals("org*.eclipse*.jdt*", filter.getPackagePattern());
+
+ filter= new TypeInfoFilter("Test", scope, 0, null);
+ assertEquals("Test", filter.getNamePattern());
+ assertEquals(null, filter.getPackagePattern());
+ }
+
+}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/TypeInfoFilter.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/TypeInfoFilter.java
index 9a1a016..6e6cb25 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/TypeInfoFilter.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/TypeInfoFilter.java
@@ -146,7 +146,12 @@
fNameMatcher= new PatternMatcher(text);
fPackageMatcher= null;
} else {
- fPackageMatcher= new PatternMatcher(evaluatePackagePattern(text.substring(0, index)));
+ if (Character.isUpperCase(text.charAt(0))) {
+ // might be referring to class so add wild-card at front
+ fPackageMatcher= new PatternMatcher(evaluatePackagePattern("*" + text.substring(0, index))); //$NON-NLS-1$
+ } else {
+ fPackageMatcher= new PatternMatcher(evaluatePackagePattern(text.substring(0, index)));
+ }
String name= text.substring(index + 1);
if (name.length() == 0)
name= "*"; //$NON-NLS-1$