[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
 	 */