Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZoltan Ujhelyi2018-06-08 12:17:26 +0000
committerZoltan Ujhelyi2018-07-03 14:27:04 +0000
commit6e0109460c538e543f656762aadbb2d86503d1e4 (patch)
treeef79edfeace41b3dbf50d0ac281e77324b0d07cc
parent9bcb451547372319c4c7c9ccbf884182ec341d56 (diff)
downloadorg.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>
-rw-r--r--query/plugins/org.eclipse.viatra.query.patternlanguage.emf.ui/src/org/eclipse/viatra/query/patternlanguage/emf/ui/contentassist/EMFPatternLanguageProposalProvider.java15
-rw-r--r--query/plugins/org.eclipse.viatra.query.patternlanguage.emf.ui/src/org/eclipse/viatra/query/patternlanguage/emf/ui/contentassist/PatternImporter.java22
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

Back to the top