diff options
author | Nathan Ridge | 2016-06-01 06:28:43 +0000 |
---|---|---|
committer | Nathan Ridge | 2016-06-09 23:48:19 +0000 |
commit | f184c70bdb4a9b2cce35bf6debed62f8d11aeb70 (patch) | |
tree | 7d31ec26e624e47d1bb84a31e2ccbacd345b3d65 /core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist | |
parent | 9dc70ec8a5dc501d17f928e4a3f5a930d00f506d (diff) | |
download | org.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
Change-Id: I688f617e4a92da06e5bde4a91224088f2b40410f
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.java | 38 |
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(); |