Bug 4964 Automatic Code Assist needs to be smarter
Build 204 While writing SWT code, I type the following: button.dispose At this point, I do not realize that the code assist list is up because I am not looking. There are 2 items in the list now: DISPOSED int - Widget dispose() void - Widget I then type "(" because the line I was typing was supposed to be: button.dispose(); But as soon as I type the "(" then automatic code assist seems to insert whatever is selected. Since DISPOSED is first in the list and is selected, I ended up with: button.DISPOSED which isn't even close to what I want, and I have to delete it all and start again, paying more attention this time. Code assist should notice that I have typed a ( and that this matches "dispose ()" far better than "DISPOSED". Either that, or it needs to be case sensitive when it is automatically inserting stuff.
org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCompletionProposal.java
if (types.length == 0 || types[0].getSourceRange().getOffset() > fReplacementOffset) {
					
					return;
				}
				String[] prefOrder= ImportOrganizePreferencePage.getImportOrderPreference();
				int threshold= ImportOrganizePreferencePage.getImportNumberThreshold();					
				ImportsStructure impStructure= new ImportsStructure(cu, prefOrder, threshold, true);
				impStructure.addImport(fImportDeclaration.getElementName());
				
				impStructure.create(false, null);
			} catch (CoreException e) {
				JavaPlugin.log(e);
			}
		}
	}
	
	/*
	 * @see ICompletionProposalExtension#apply(IDocument, char)
	 */
	public void apply(IDocument document, char trigger) {
		try {
			
			if (trigger == (char) 0) {
				document.replace(fReplacementOffset, fReplacementLength, fReplacementString);
			} else {
				StringBuffer buffer= new StringBuffer(fReplacementString);
				
				if ((fReplacementLength < buffer.length() && buffer.charAt(fReplacementLength) != trigger)) {
					buffer.insert(fCursorPosition, trigger);
					++fCursorPosition;