Bug 125012 [Field Assist] Clarify lifecycle of the ILabelProvider used by ContentProposalAdapter
I20060119-0800 Clients who want to port their field content assistants from jface.text.contentassist to jface.fieldassist would expect to be able to supply an image in IContentProposal, e.g. with a 'Image getImage();' method as in ICompletionProposal. Without icons, e.g. proposals for java type names would look quite different from the ones you get in the java editor. There's also a lot more functionality in ICompletionProposal and the 4 ICompletionProposalExtension* interfaces. Some of those concepts must also be supported in fieldassist if clients such as the Find/Replace dialog and Java type completions in dialogs should switch (e.g. the additionalProposalInfo to show documentation for regex proposals, etc.). I can file separate bugs for these functionalities if you want to discuss them one by one.
bundles/org.eclipse.jface/src/org/eclipse/jface/fieldassist/ContentProposalAdapter.java
StringBuffer sb = new StringBuffer(
						"--- [ContentProposalAdapter]\n"); 
				sb.append(who);
				sb.append(" - e: keyCode=" + e.keyCode + hex(e.keyCode)); 
				sb.append("; character=" + e.character + hex(e.character)); 
				sb.append("; stateMask=" + e.stateMask + hex(e.stateMask)); 
				sb.append("; doit=" + e.doit); 
				sb.append("; detail=" + e.detail + hex(e.detail)); 
				sb.append("; widget=" + e.widget); 
				System.out.println(sb);
			}
			private String hex(int i) {
				return "[0x" + Integer.toHexString(i) + ']'; 
			}
		};
		control.addListener(SWT.KeyDown, controlListener);
		if (DEBUG)
			System.out
					.println("ContentProposalAdapter#installControlListener() - installed"); 
	}
	/**
	 * Open the proposal popup and display the proposals provided
	 * by the proposal provider.  This method returns immediately.
	 * That is, it does not wait for a proposal to be selected.
	 */
	protected void openProposalPopup() {
		if (popup == null) {
			popup = new ContentProposalPopup(null, filterProposals);
			popup.open();
			popup.getShell().addDisposeListener(new DisposeListener() {