Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathan Ridge2016-06-01 06:28:43 +0000
committerNathan Ridge2016-06-09 23:48:19 +0000
commitf184c70bdb4a9b2cce35bf6debed62f8d11aeb70 (patch)
tree7d31ec26e624e47d1bb84a31e2ccbacd345b3d65 /core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist
parent9dc70ec8a5dc501d17f928e4a3f5a930d00f506d (diff)
downloadorg.eclipse.cdt-f184c70bdb4a9b2cce35bf6debed62f8d11aeb70.tar.gz
org.eclipse.cdt-f184c70bdb4a9b2cce35bf6debed62f8d11aeb70.tar.xz
org.eclipse.cdt-f184c70bdb4a9b2cce35bf6debed62f8d11aeb70.zip
Bug 495095 - Acquire the index read lock while generating parameter guesses
Diffstat (limited to 'core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist')
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/ParameterGuessingProposal.java38
1 files changed, 29 insertions, 9 deletions
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/ParameterGuessingProposal.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/ParameterGuessingProposal.java
index b860195ce62..51fff869d2a 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/ParameterGuessingProposal.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/ParameterGuessingProposal.java
@@ -17,6 +17,10 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Status;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.BadPositionCategoryException;
import org.eclipse.jface.text.IDocument;
@@ -41,14 +45,19 @@ import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.texteditor.link.EditorLinkedModeUI;
+import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.IFunction;
import org.eclipse.cdt.core.dom.ast.IParameter;
import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.model.CModelException;
+import org.eclipse.cdt.core.model.ILanguage;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.ui.CUIPlugin;
+import org.eclipse.cdt.internal.core.model.ASTCache.ASTRunnable;
+
+import org.eclipse.cdt.internal.ui.editor.ASTProvider;
import org.eclipse.cdt.internal.ui.editor.CEditor;
import org.eclipse.cdt.internal.ui.editor.EditorHighlightingSynchronizer;
@@ -166,17 +175,28 @@ public class ParameterGuessingProposal extends FunctionCompletionProposal {
public void apply(final IDocument document, char trigger, int offset) {
super.apply(document, trigger, offset);
- // Initialize necessary fields.
- fParametersNames = getFunctionParametersNames(fFunctionParameters);
- fParametersTypes = getFunctionParametersTypes(fFunctionParameters);
-
if (fGuessArguments) {
- try {
- guessParameters();
- } catch (Exception e) {
- CUIPlugin.log(e);
+ IStatus status = ASTProvider.getASTProvider().runOnAST(fTranslationUnit, ASTProvider.WAIT_ACTIVE_ONLY,
+ new NullProgressMonitor(), new ASTRunnable() {
+ @Override
+ public IStatus runOnAST(ILanguage lang, IASTTranslationUnit astRoot) throws CoreException {
+ if (astRoot == null)
+ return Status.CANCEL_STATUS;
+ // Initialize necessary fields.
+ fParametersNames = getFunctionParametersNames(fFunctionParameters);
+ fParametersTypes = getFunctionParametersTypes(fFunctionParameters);
+
+ try {
+ guessParameters();
+ } catch (Exception e) {
+ CUIPlugin.log(e);
+ return Status.CANCEL_STATUS;
+ }
+ return Status.OK_STATUS;
+ }
+ });
+ if (Status.CANCEL_STATUS == status)
return;
- }
}
int baseOffset = getReplacementOffset();

Back to the top