Bug 538943: [SourceEditor] Add workarounds for bug 94106 and bug 512251
to fix hiding of context information popups
Change-Id: Iedfe0cc1873bcde16095242e3553842975f699a8
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ContentAssist.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ContentAssist.java
index 7627979..05459de 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ContentAssist.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ContentAssist.java
@@ -14,6 +14,8 @@
package org.eclipse.statet.ltk.ui.sourceediting.assist;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
import org.eclipse.jface.bindings.keys.KeySequence;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.contentassist.ContentAssistEvent;
@@ -25,11 +27,14 @@
import org.eclipse.jface.text.contentassist.IContextInformation;
import org.eclipse.jface.text.contentassist.IContextInformationValidator;
import org.eclipse.osgi.util.NLS;
+import org.eclipse.ui.statushandlers.StatusManager;
import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
import org.eclipse.statet.ecommons.ui.SharedMessages;
import org.eclipse.statet.ecommons.ui.workbench.WorkbenchUIUtils;
+import org.eclipse.statet.internal.ltk.ui.LTKUIPlugin;
+
/**
* LTK content assistant.
@@ -214,8 +219,27 @@
return super.isContextInfoPopupActive();
}
- void hidePopups() {
- super.hide();
+ public void hidePopups() {
+ hide();
+ }
+
+ @Override
+ protected void hide() {
+ // Workaround for bug 94106 (-> loop) and bug 512251 (-> catch exception) in Platform Text
+ try {
+ super.hide();
+ }
+ catch (final RuntimeException e) {
+ StatusManager.getManager().handle(new Status(IStatus.ERROR, LTKUIPlugin.BUNDLE_ID,
+ "An error occurred when hiding content assistant.", e ));
+ }
+
+ for (int counter= 0; counter < 100 && isContextInfoPopupActive(); counter++) {
+ try {
+ super.hide();
+ }
+ catch (final RuntimeException e) {}
+ }
}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ContentAssistProcessor.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ContentAssistProcessor.java
index 2cf49a5..c77e105 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ContentAssistProcessor.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ContentAssistProcessor.java
@@ -470,11 +470,6 @@
final IAssistCompletionProposal[] result= filterAndSortCompletionProposals(proposals,
context, m.newChild(1) );
- if (result.length > 1
- && assistant.isContextInfoPopupActive1()
- && !assistant.isProposalPopupActive1()) {
- assistant.hidePopups();
- }
if (modificationStamp != 0) {
this.informationModeOffset= context.getInvocationOffset();
this.informationModeTimestamp= System.nanoTime();