[312914] [content assist]content assist some times fails to insert the selected value
diff --git a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/StructuredTextEditor.java b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/StructuredTextEditor.java
index 8bb50ff..c6d4feb 100644
--- a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/StructuredTextEditor.java
+++ b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/StructuredTextEditor.java
@@ -69,7 +69,10 @@
import org.eclipse.jface.text.ITypedRegion;
import org.eclipse.jface.text.Region;
import org.eclipse.jface.text.TextSelection;
+import org.eclipse.jface.text.contentassist.ContentAssistEvent;
import org.eclipse.jface.text.contentassist.ContentAssistant;
+import org.eclipse.jface.text.contentassist.ICompletionListener;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.jface.text.contentassist.IContentAssistant;
import org.eclipse.jface.text.information.IInformationPresenter;
import org.eclipse.jface.text.information.IInformationProvider;
@@ -836,6 +839,29 @@
private class CharacterPairListener implements VerifyKeyListener {
private CharacterPairing[] fInserters = new CharacterPairing[0];
+ private ICompletionListener fCompletionListener;
+ private boolean fIsCompleting = false;
+
+ public void installCompletionListener() {
+ ISourceViewer viewer = getSourceViewer();
+ if (viewer instanceof StructuredTextViewer) {
+ fCompletionListener = new ICompletionListener() {
+
+ public void assistSessionStarted(ContentAssistEvent event) {
+ fIsCompleting = true;
+ }
+
+ public void assistSessionEnded(ContentAssistEvent event) {
+ fIsCompleting = false;
+ }
+
+ public void selectionChanged(ICompletionProposal proposal, boolean smartToggle) {
+ }
+
+ };
+ ((StructuredTextViewer) viewer).getContentAssistFacade().addCompletionListener(fCompletionListener);
+ }
+ }
/**
* Add the pairing to the list of inserters
@@ -855,6 +881,11 @@
* Perform cleanup on the character pair inserters
*/
void dispose() {
+ ISourceViewer viewer = getSourceViewer();
+ if (viewer instanceof StructuredTextViewer) {
+ ((StructuredTextViewer) viewer).getContentAssistFacade().removeCompletionListener(fCompletionListener);
+ }
+
for (int i = 0; i < fInserters.length; i++) {
final AbstractCharacterPairInserter inserter = fInserters[i].inserter;
SafeRunner.run(new ISafeRunnable() {
@@ -870,7 +901,7 @@
}
public void verifyKey(final VerifyEvent event) {
- if (!event.doit || getInsertMode() != SMART_INSERT || isBlockSelectionModeEnabled() && isMultilineSelection())
+ if (!event.doit || getInsertMode() != SMART_INSERT || fIsCompleting || isBlockSelectionModeEnabled() && isMultilineSelection())
return;
final boolean[] paired = { false };
for (int i = 0; i < fInserters.length; i++) {
@@ -1494,8 +1525,10 @@
}
installCharacterPairing();
ISourceViewer viewer = getSourceViewer();
- if (viewer instanceof ITextViewerExtension)
+ if (viewer instanceof ITextViewerExtension) {
((ITextViewerExtension) viewer).appendVerifyKeyListener(fPairInserter);
+ fPairInserter.installCompletionListener();
+ }
}
diff --git a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/StructuredTextViewer.java b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/StructuredTextViewer.java
index 83bbde2..7315061 100644
--- a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/StructuredTextViewer.java
+++ b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/StructuredTextViewer.java
@@ -28,6 +28,8 @@
import org.eclipse.jface.text.Region;
import org.eclipse.jface.text.TextSelection;
import org.eclipse.jface.text.contentassist.IContentAssistant;
+import org.eclipse.jface.text.contentassist.IContentAssistantExtension2;
+import org.eclipse.jface.text.contentassist.IContentAssistantExtension4;
import org.eclipse.jface.text.formatter.FormattingContext;
import org.eclipse.jface.text.formatter.FormattingContextProperties;
import org.eclipse.jface.text.formatter.IContentFormatterExtension;
@@ -37,6 +39,7 @@
import org.eclipse.jface.text.projection.ProjectionDocument;
import org.eclipse.jface.text.quickassist.IQuickAssistAssistant;
import org.eclipse.jface.text.reconciler.IReconciler;
+import org.eclipse.jface.text.source.ContentAssistantFacade;
import org.eclipse.jface.text.source.IAnnotationModel;
import org.eclipse.jface.text.source.IOverviewRuler;
import org.eclipse.jface.text.source.IVerticalRuler;
@@ -101,6 +104,8 @@
*/
private boolean fFormatterSet = false;
+ private ContentAssistantFacade fContentAssistantFacade;
+
/**
* @see org.eclipse.jface.text.source.SourceViewer#SourceViewer(Composite,
* IVerticalRuler, IOverviewRuler, boolean, int)
@@ -216,6 +221,8 @@
if (fContentAssistant != null) {
fContentAssistant.install(this);
+ if (fContentAssistant instanceof IContentAssistantExtension2 && fContentAssistant instanceof IContentAssistantExtension4)
+ fContentAssistantFacade= new ContentAssistantFacade(fContentAssistant);
fContentAssistantInstalled = true;
}
else {
@@ -821,6 +828,10 @@
}
}
+ public ContentAssistantFacade getContentAssistFacade() {
+ return fContentAssistantFacade;
+ }
+
/**
* Uninstalls anything that was installed by configure
*/