diff options
Diffstat (limited to 'subprojects/language-ide/src/main/java/tools')
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.*; | |||
24 | import tools.refinery.language.naming.NamingUtil; | 24 | import tools.refinery.language.naming.NamingUtil; |
25 | import tools.refinery.language.naming.ProblemQualifiedNameConverter; | 25 | import tools.refinery.language.naming.ProblemQualifiedNameConverter; |
26 | import tools.refinery.language.resource.ProblemResourceDescriptionStrategy; | 26 | import tools.refinery.language.resource.ProblemResourceDescriptionStrategy; |
27 | import tools.refinery.language.scoping.imports.ImportAdapterProvider; | ||
27 | import tools.refinery.language.scoping.imports.ImportCollector; | 28 | import tools.refinery.language.scoping.imports.ImportCollector; |
28 | import tools.refinery.language.utils.BuiltinSymbols; | 29 | import tools.refinery.language.utils.BuiltinSymbols; |
29 | import tools.refinery.language.utils.ProblemDesugarer; | ||
30 | import tools.refinery.language.utils.ProblemUtil; | 30 | import tools.refinery.language.utils.ProblemUtil; |
31 | import tools.refinery.language.validation.ReferenceCounter; | 31 | import 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; | |||
18 | import org.eclipse.xtext.util.CancelIndicator; | 18 | import org.eclipse.xtext.util.CancelIndicator; |
19 | import org.jetbrains.annotations.NotNull; | 19 | import org.jetbrains.annotations.NotNull; |
20 | import tools.refinery.language.model.problem.*; | 20 | import tools.refinery.language.model.problem.*; |
21 | import tools.refinery.language.utils.ProblemDesugarer; | ||
22 | import tools.refinery.language.utils.ProblemUtil; | 21 | import tools.refinery.language.utils.ProblemUtil; |
23 | 22 | ||
24 | import java.util.List; | 23 | import java.util.List; |
@@ -26,6 +25,8 @@ import java.util.List; | |||
26 | public class ProblemSemanticHighlightingCalculator extends DefaultSemanticHighlightingCalculator { | 25 | public 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; | |||
17 | import org.eclipse.xtext.util.IResourceScopeCache; | 17 | import org.eclipse.xtext.util.IResourceScopeCache; |
18 | import tools.refinery.language.documentation.DocumentationCommentParser; | 18 | import tools.refinery.language.documentation.DocumentationCommentParser; |
19 | import tools.refinery.language.model.problem.*; | 19 | import tools.refinery.language.model.problem.*; |
20 | import tools.refinery.language.naming.NamingUtil; | ||
20 | import tools.refinery.language.resource.ProblemResourceDescriptionStrategy; | 21 | import tools.refinery.language.resource.ProblemResourceDescriptionStrategy; |
21 | import tools.refinery.language.scoping.imports.ImportCollector; | 22 | import tools.refinery.language.scoping.imports.ImportCollector; |
22 | import tools.refinery.language.utils.ProblemUtil; | 23 | import 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; |