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
return false;
			if (fQualifierMatcher == null)
				return true;
			return fQualifierMatcher.match(type.getTypeContainerName());
		}
		
		private String adjustPattern(String pattern) {
			if (pattern.length() != 0 && pattern.indexOf('*') == -1 && pattern.indexOf('?') == -1)
				return pattern + '*';
			else
				return pattern;
		}
	}
	
	/*
	 * A string comparator which is aware of obfuscated code
	 * (type names starting with lower case characters).
	 */
	private static class StringComparator implements Comparator {
	    public int compare(Object left, Object right) {
	     	String leftString= (String) left;
	     	String rightString= (String) right;
	     		     	
	     	if (Strings.isLowerCase(leftString.charAt(0)) &&
	     		!Strings.isLowerCase(rightString.charAt(0)))
	     		return +1;
	     	if (Strings.isLowerCase(rightString.charAt(0)) &&
	     		!Strings.isLowerCase(leftString.charAt(0)))
	     		return -1;