diff options
author | Zoltan Ujhelyi | 2018-06-08 12:17:26 +0000 |
---|---|---|
committer | Zoltan Ujhelyi | 2018-07-03 14:27:04 +0000 |
commit | 6e0109460c538e543f656762aadbb2d86503d1e4 (patch) | |
tree | ef79edfeace41b3dbf50d0ac281e77324b0d07cc | |
parent | 9bcb451547372319c4c7c9ccbf884182ec341d56 (diff) | |
download | org.eclipse.viatra-6e0109460c538e543f656762aadbb2d86503d1e4.tar.gz org.eclipse.viatra-6e0109460c538e543f656762aadbb2d86503d1e4.tar.xz org.eclipse.viatra-6e0109460c538e543f656762aadbb2d86503d1e4.zip |
[535692] Postpone pattern resolution for content assist
Change-Id: Ib96bc155fd28bd1b3fc069bfe0f2d234d7f180f8
Signed-off-by: Zoltan Ujhelyi <zoltan.ujhelyi@incquerylabs.com>
2 files changed, 19 insertions, 18 deletions
diff --git a/query/plugins/org.eclipse.viatra.query.patternlanguage.emf.ui/src/org/eclipse/viatra/query/patternlanguage/emf/ui/contentassist/EMFPatternLanguageProposalProvider.java b/query/plugins/org.eclipse.viatra.query.patternlanguage.emf.ui/src/org/eclipse/viatra/query/patternlanguage/emf/ui/contentassist/EMFPatternLanguageProposalProvider.java index 380ab1260..6e65a4c55 100644 --- a/query/plugins/org.eclipse.viatra.query.patternlanguage.emf.ui/src/org/eclipse/viatra/query/patternlanguage/emf/ui/contentassist/EMFPatternLanguageProposalProvider.java +++ b/query/plugins/org.eclipse.viatra.query.patternlanguage.emf.ui/src/org/eclipse/viatra/query/patternlanguage/emf/ui/contentassist/EMFPatternLanguageProposalProvider.java @@ -14,7 +14,6 @@ import static org.eclipse.emf.ecore.util.EcoreUtil.getRootContainer; import java.util.Set; -import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EClassifier; import org.eclipse.emf.ecore.EDataType; @@ -64,7 +63,6 @@ import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor; import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor.Delegate; import org.eclipse.xtext.ui.editor.model.IXtextDocument; import org.eclipse.xtext.xbase.typesystem.IExpressionScope.Anchor; -import org.eclipse.xtext.xbase.ui.hover.XbaseInformationControlInput; import com.google.common.base.Function; import com.google.common.base.Functions; @@ -108,17 +106,10 @@ public class EMFPatternLanguageProposalProvider extends AbstractEMFPatternLangua super.createProposals(context, acceptor); } - private ICompletionProposal configureProposal(ICompletionProposal original) { + private ICompletionProposal configurePatternProposal(ICompletionProposal original) { if (original instanceof ConfigurableCompletionProposal) { ConfigurableCompletionProposal prop = (ConfigurableCompletionProposal) original; - Object info = prop.getAdditionalProposalInfo(new NullProgressMonitor()); - if (info instanceof XbaseInformationControlInput) { - XbaseInformationControlInput input = (XbaseInformationControlInput) info; - if (input.getElement() instanceof Pattern) { - final Pattern pattern = (Pattern) input.getElement(); - prop.setTextApplier(new PatternImporter(pattern)); - } - } + prop.setTextApplier(new PatternImporter()); } return original; @@ -129,7 +120,7 @@ public class EMFPatternLanguageProposalProvider extends AbstractEMFPatternLangua ContentAssistContext contentAssistContext) { Function<IEObjectDescription, ICompletionProposal> factory = super.getProposalFactory(ruleName, contentAssistContext); if (contentAssistContext.getCurrentNode().getSemanticElement() instanceof PatternCall && ga.getQualifiedNameRule().getName().equals(ruleName)) { - factory = Functions.compose(this::configureProposal, factory); + factory = Functions.compose(this::configurePatternProposal, factory); } return factory; diff --git a/query/plugins/org.eclipse.viatra.query.patternlanguage.emf.ui/src/org/eclipse/viatra/query/patternlanguage/emf/ui/contentassist/PatternImporter.java b/query/plugins/org.eclipse.viatra.query.patternlanguage.emf.ui/src/org/eclipse/viatra/query/patternlanguage/emf/ui/contentassist/PatternImporter.java index bf7800a58..ca3b4a45a 100644 --- a/query/plugins/org.eclipse.viatra.query.patternlanguage.emf.ui/src/org/eclipse/viatra/query/patternlanguage/emf/ui/contentassist/PatternImporter.java +++ b/query/plugins/org.eclipse.viatra.query.patternlanguage.emf.ui/src/org/eclipse/viatra/query/patternlanguage/emf/ui/contentassist/PatternImporter.java @@ -12,6 +12,7 @@ package org.eclipse.viatra.query.patternlanguage.emf.ui.contentassist; import java.util.Objects; +import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.text.edits.ReplaceEdit; @@ -27,6 +28,7 @@ import org.eclipse.xtext.ui.editor.contentassist.ReplacementTextApplier; import org.eclipse.xtext.ui.editor.model.IXtextDocument; import org.eclipse.xtext.util.concurrent.IUnitOfWork; import org.eclipse.xtext.util.concurrent.IUnitOfWork.Void; +import org.eclipse.xtext.xbase.ui.hover.XbaseInformationControlInput; import com.google.common.base.Predicates; import com.google.common.base.Strings; @@ -40,27 +42,35 @@ import com.google.common.collect.Iterators; * @author Zoltan Ujhelyi * */ +@SuppressWarnings("restriction") final class PatternImporter extends ReplacementTextApplier { - private final Pattern targetPattern; - private final String targetPackage; private ImportState importStatus; + private Pattern targetPattern; private enum ImportState { NONE, SAMEPACKAGE, FOUND, CONFLICTING } - public PatternImporter(Pattern targetPattern) { - this.targetPattern = targetPattern; - targetPackage = PatternLanguageHelper.getPackageName(targetPattern); + private Pattern getTargetPattern(ConfigurableCompletionProposal prop) { + Object info = prop.getAdditionalProposalInfo(new NullProgressMonitor()); + if (info instanceof XbaseInformationControlInput) { + XbaseInformationControlInput input = (XbaseInformationControlInput) info; + if (input.getElement() instanceof Pattern) { + return (Pattern) input.getElement(); + } + } + return null; } - + @Override public void apply(final IDocument document, final ConfigurableCompletionProposal proposal) throws BadLocationException { if (document instanceof IXtextDocument) { IXtextDocument xtextDocument = (IXtextDocument) document; + targetPattern = getTargetPattern(proposal); if (targetPattern == null || Strings.isNullOrEmpty(targetPattern.getName())) return; + final String targetPackage = PatternLanguageHelper.getPackageName(targetPattern); importStatus = ((IXtextDocument) document).readOnly(new IUnitOfWork<ImportState, XtextResource>() { @Override |