aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/language-ide/src/main/java/tools
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/language-ide/src/main/java/tools')
-rw-r--r--subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/ProblemCrossrefProposalProvider.java29
-rw-r--r--subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java14
-rw-r--r--subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/TypeHashProvider.java3
3 files changed, 31 insertions, 15 deletions
diff --git a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/ProblemCrossrefProposalProvider.java b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/ProblemCrossrefProposalProvider.java
index a09a475b..8dad8f8a 100644
--- a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/ProblemCrossrefProposalProvider.java
+++ b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/ProblemCrossrefProposalProvider.java
@@ -24,9 +24,9 @@ import tools.refinery.language.model.problem.*;
24import tools.refinery.language.naming.NamingUtil; 24import tools.refinery.language.naming.NamingUtil;
25import tools.refinery.language.naming.ProblemQualifiedNameConverter; 25import tools.refinery.language.naming.ProblemQualifiedNameConverter;
26import tools.refinery.language.resource.ProblemResourceDescriptionStrategy; 26import tools.refinery.language.resource.ProblemResourceDescriptionStrategy;
27import tools.refinery.language.scoping.imports.ImportAdapterProvider;
27import tools.refinery.language.scoping.imports.ImportCollector; 28import tools.refinery.language.scoping.imports.ImportCollector;
28import tools.refinery.language.utils.BuiltinSymbols; 29import tools.refinery.language.utils.BuiltinSymbols;
29import tools.refinery.language.utils.ProblemDesugarer;
30import tools.refinery.language.utils.ProblemUtil; 30import tools.refinery.language.utils.ProblemUtil;
31import tools.refinery.language.validation.ReferenceCounter; 31import tools.refinery.language.validation.ReferenceCounter;
32 32
@@ -43,10 +43,10 @@ public class ProblemCrossrefProposalProvider extends IdeCrossrefProposalProvider
43 private ReferenceCounter referenceCounter; 43 private ReferenceCounter referenceCounter;
44 44
45 @Inject 45 @Inject
46 private ProblemDesugarer desugarer; 46 private ImportCollector importCollector;
47 47
48 @Inject 48 @Inject
49 private ImportCollector importCollector; 49 private ImportAdapterProvider importAdapterProvider;
50 50
51 @Override 51 @Override
52 protected Iterable<IEObjectDescription> queryScope(IScope scope, CrossReference crossReference, 52 protected Iterable<IEObjectDescription> queryScope(IScope scope, CrossReference crossReference,
@@ -125,16 +125,27 @@ public class ProblemCrossrefProposalProvider extends IdeCrossrefProposalProvider
125 return oppositeShouldBeVisible(candidateReferenceDeclaration, context); 125 return oppositeShouldBeVisible(candidateReferenceDeclaration, context);
126 } 126 }
127 127
128 var builtinSymbolsOption = desugarer.getBuiltinSymbols(context.getRootModel()); 128 if (eReference.equals(ProblemPackage.Literals.VARIABLE_OR_NODE_EXPR__VARIABLE_OR_NODE)) {
129 if (builtinSymbolsOption.isEmpty()) { 129 var assignedVariable = getAssignedVariable(context.getCurrentModel());
130 return true; 130 if (assignedVariable != null && Objects.equals(assignedVariable, candidate.getEObjectOrProxy())) {
131 return false;
132 }
131 } 133 }
132 var builtinSymbols = builtinSymbolsOption.get(); 134
135 var builtinSymbols = importAdapterProvider.getBuiltinSymbols(context.getResource());
133 136
134 return builtinSymbolAwareShouldBeVisible(candidate, context, eReference, builtinSymbols, 137 return builtinSymbolAwareShouldBeVisible(candidate, context, eReference, builtinSymbols,
135 candidateEObjectOrProxy); 138 candidateEObjectOrProxy);
136 } 139 }
137 140
141 private VariableOrNode getAssignedVariable(EObject context) {
142 var assignmentExpr = EcoreUtil2.getContainerOfType(context, AssignmentExpr.class);
143 if (assignmentExpr != null && assignmentExpr.getLeft() instanceof VariableOrNodeExpr variableOrNodeExpr) {
144 return variableOrNodeExpr.getVariableOrNode();
145 }
146 return null;
147 }
148
138 private boolean importedModuleShouldBeVisible(IEObjectDescription candidate, ContentAssistContext context) { 149 private boolean importedModuleShouldBeVisible(IEObjectDescription candidate, ContentAssistContext context) {
139 var moduleKind = candidate.getUserData(ProblemResourceDescriptionStrategy.MODULE_KIND); 150 var moduleKind = candidate.getUserData(ProblemResourceDescriptionStrategy.MODULE_KIND);
140 if (!ModuleKind.MODULE.getName().equals(moduleKind)) { 151 if (!ModuleKind.MODULE.getName().equals(moduleKind)) {
@@ -187,8 +198,8 @@ public class ProblemCrossrefProposalProvider extends IdeCrossrefProposalProvider
187 if (builtinSymbols.exists().equals(candidateEObjectOrProxy)) { 198 if (builtinSymbols.exists().equals(candidateEObjectOrProxy)) {
188 return false; 199 return false;
189 } 200 }
190 var arity = candidate.getUserData(ProblemResourceDescriptionStrategy.ARITY); 201 return ProblemResourceDescriptionStrategy.TYPE_LIKE_TRUE.equals(
191 return arity == null || arity.equals("1"); 202 candidate.getUserData(ProblemResourceDescriptionStrategy.TYPE_LIKE));
192 } 203 }
193 204
194 if (eReference.equals(ProblemPackage.Literals.CLASS_DECLARATION__SUPER_TYPES)) { 205 if (eReference.equals(ProblemPackage.Literals.CLASS_DECLARATION__SUPER_TYPES)) {
diff --git a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java
index 891c73c7..06f0e758 100644
--- a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java
+++ b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java
@@ -18,7 +18,6 @@ import org.eclipse.xtext.service.OperationCanceledManager;
18import org.eclipse.xtext.util.CancelIndicator; 18import org.eclipse.xtext.util.CancelIndicator;
19import org.jetbrains.annotations.NotNull; 19import org.jetbrains.annotations.NotNull;
20import tools.refinery.language.model.problem.*; 20import tools.refinery.language.model.problem.*;
21import tools.refinery.language.utils.ProblemDesugarer;
22import tools.refinery.language.utils.ProblemUtil; 21import tools.refinery.language.utils.ProblemUtil;
23 22
24import java.util.List; 23import java.util.List;
@@ -26,6 +25,8 @@ import java.util.List;
26public class ProblemSemanticHighlightingCalculator extends DefaultSemanticHighlightingCalculator { 25public class ProblemSemanticHighlightingCalculator extends DefaultSemanticHighlightingCalculator {
27 private static final String BUILTIN_CLASS = "builtin"; 26 private static final String BUILTIN_CLASS = "builtin";
28 private static final String ABSTRACT_CLASS = "abstract"; 27 private static final String ABSTRACT_CLASS = "abstract";
28 private static final String DATATYPE_CLASS = "datatype";
29 private static final String AGGREGATOR_CLASS = "aggregator";
29 private static final String CONTAINMENT_CLASS = "containment"; 30 private static final String CONTAINMENT_CLASS = "containment";
30 private static final String ERROR_CLASS = "error"; 31 private static final String ERROR_CLASS = "error";
31 private static final String NODE_CLASS = "node"; 32 private static final String NODE_CLASS = "node";
@@ -36,9 +37,6 @@ public class ProblemSemanticHighlightingCalculator extends DefaultSemanticHighli
36 private OperationCanceledManager operationCanceledManager; 37 private OperationCanceledManager operationCanceledManager;
37 38
38 @Inject 39 @Inject
39 private ProblemDesugarer desugarer;
40
41 @Inject
42 private TypeHashProvider typeHashProvider; 40 private TypeHashProvider typeHashProvider;
43 41
44 @Override 42 @Override
@@ -112,8 +110,14 @@ public class ProblemSemanticHighlightingCalculator extends DefaultSemanticHighli
112 if (eObject instanceof ClassDeclaration classDeclaration && classDeclaration.isAbstract()) { 110 if (eObject instanceof ClassDeclaration classDeclaration && classDeclaration.isAbstract()) {
113 classesBuilder.add(ABSTRACT_CLASS); 111 classesBuilder.add(ABSTRACT_CLASS);
114 } 112 }
113 if (eObject instanceof DatatypeDeclaration) {
114 classesBuilder.add(DATATYPE_CLASS);
115 }
116 if (eObject instanceof AggregatorDeclaration) {
117 classesBuilder.add(AGGREGATOR_CLASS);
118 }
115 if (eObject instanceof ReferenceDeclaration referenceDeclaration 119 if (eObject instanceof ReferenceDeclaration referenceDeclaration
116 && desugarer.isContainmentReference(referenceDeclaration)) { 120 && ProblemUtil.isContainmentReference(referenceDeclaration)) {
117 classesBuilder.add(CONTAINMENT_CLASS); 121 classesBuilder.add(CONTAINMENT_CLASS);
118 } 122 }
119 if (isError && reference != null) { 123 if (isError && reference != null) {
diff --git a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/TypeHashProvider.java b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/TypeHashProvider.java
index 82a6af06..2821e1b6 100644
--- a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/TypeHashProvider.java
+++ b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/TypeHashProvider.java
@@ -17,6 +17,7 @@ import org.eclipse.xtext.scoping.impl.GlobalResourceDescriptionProvider;
17import org.eclipse.xtext.util.IResourceScopeCache; 17import org.eclipse.xtext.util.IResourceScopeCache;
18import tools.refinery.language.documentation.DocumentationCommentParser; 18import tools.refinery.language.documentation.DocumentationCommentParser;
19import tools.refinery.language.model.problem.*; 19import tools.refinery.language.model.problem.*;
20import tools.refinery.language.naming.NamingUtil;
20import tools.refinery.language.resource.ProblemResourceDescriptionStrategy; 21import tools.refinery.language.resource.ProblemResourceDescriptionStrategy;
21import tools.refinery.language.scoping.imports.ImportCollector; 22import tools.refinery.language.scoping.imports.ImportCollector;
22import tools.refinery.language.utils.ProblemUtil; 23import tools.refinery.language.utils.ProblemUtil;
@@ -55,7 +56,7 @@ public class TypeHashProvider {
55 if (qualifiedName == null) { 56 if (qualifiedName == null) {
56 return null; 57 return null;
57 } 58 }
58 var qualifiedNameString = qualifiedNameConverter.toString(qualifiedName); 59 var qualifiedNameString = qualifiedNameConverter.toString(NamingUtil.addRootPrefix(qualifiedName));
59 var problem = EcoreUtil2.getContainerOfType(relation, Problem.class); 60 var problem = EcoreUtil2.getContainerOfType(relation, Problem.class);
60 if (problem == null) { 61 if (problem == null) {
61 return null; 62 return null;