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$