Bug 29805 Resolve end symbol problem in Open Type dialog
Build I20030115 Here is the proposal we want to implement (it is pretty much what Randy Hudson proposed): The user must explicitly disable the adding of the wildcard by using a special end symbol. But instead of using the '.' JDT proposes to use the % character. Here are the reasons: - '.' is used in fully qualified name as a separator. The open type dialog already supports entering qualified names (e.g. junit.framework.* shows all types in the framework package). So it will be confusing if we use it as the end symbol as well. - '$' is used by various Unix tools (grep, ...) to denote the end symbol, but it is as legal character inside a Java identifier. Some generated classes inside rt.jar contain a $ character. - so we have to use a character that is not a legal character for Java identifiers. We tried several operators and we decide to go for the % since it is easy to recognize and easy to type. I have opened the bug to further track this issue. Please add comments to this bug instead of replying to this post since bugs are easier trackable.
org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/TypeSelectionDialog.java
private static class TypeFilterMatcher implements FilteredList.FilterMatcher {
		private StringMatcher fMatcher;
		private StringMatcher fQualifierMatcher;
		
		/*
		 * @see FilteredList.FilterMatcher#setFilter(String, boolean)
		 */
		public void setFilter(String pattern, boolean ignoreCase, boolean igoreWildCards) {
			int qualifierIndex= pattern.lastIndexOf("."); 
						
			if (qualifierIndex == -1) {
				fQualifierMatcher= null;
				fMatcher= new StringMatcher(adjustPattern(pattern), ignoreCase, igoreWildCards);
				
			
			} else {
				fQualifierMatcher= new StringMatcher(pattern.substring(0, qualifierIndex), ignoreCase, igoreWildCards);
				fMatcher= new StringMatcher(adjustPattern(pattern.substring(qualifierIndex + 1)), ignoreCase, igoreWildCards);
			}
		}
		/*
		 * @see FilteredList.FilterMatcher#match(Object)
		 */
		public boolean match(Object element) {
			if (!(element instanceof TypeInfo))
				return false;
			TypeInfo type= (TypeInfo) element;
			if (!fMatcher.match(type.getTypeName()))