diff options
author | 2024-03-05 22:01:10 +0100 | |
---|---|---|
committer | 2024-04-07 14:55:46 +0200 | |
commit | c14d8efd509f834b80573bc0339bb990698b265c (patch) | |
tree | dc3ca21785ea17bc75a861f373ee69ec64d6e97f /subprojects/language-ide | |
parent | feat(language): validate assignment expressions (diff) | |
download | refinery-c14d8efd509f834b80573bc0339bb990698b265c.tar.gz refinery-c14d8efd509f834b80573bc0339bb990698b265c.tar.zst refinery-c14d8efd509f834b80573bc0339bb990698b265c.zip |
feat(language): type inference
* Customizable operator overloads.
* Customizable aggregation operators.
* Simplify ProblemQualifiedNameProvider.
Diffstat (limited to 'subprojects/language-ide')
3 files changed, 14 insertions, 17 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 8b2542f3..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, |
@@ -132,11 +132,7 @@ public class ProblemCrossrefProposalProvider extends IdeCrossrefProposalProvider | |||
132 | } | 132 | } |
133 | } | 133 | } |
134 | 134 | ||
135 | var builtinSymbolsOption = desugarer.getBuiltinSymbols(context.getRootModel()); | 135 | var builtinSymbols = importAdapterProvider.getBuiltinSymbols(context.getResource()); |
136 | if (builtinSymbolsOption.isEmpty()) { | ||
137 | return true; | ||
138 | } | ||
139 | var builtinSymbols = builtinSymbolsOption.get(); | ||
140 | 136 | ||
141 | return builtinSymbolAwareShouldBeVisible(candidate, context, eReference, builtinSymbols, | 137 | return builtinSymbolAwareShouldBeVisible(candidate, context, eReference, builtinSymbols, |
142 | candidateEObjectOrProxy); | 138 | candidateEObjectOrProxy); |
@@ -144,7 +140,7 @@ public class ProblemCrossrefProposalProvider extends IdeCrossrefProposalProvider | |||
144 | 140 | ||
145 | private VariableOrNode getAssignedVariable(EObject context) { | 141 | private VariableOrNode getAssignedVariable(EObject context) { |
146 | var assignmentExpr = EcoreUtil2.getContainerOfType(context, AssignmentExpr.class); | 142 | var assignmentExpr = EcoreUtil2.getContainerOfType(context, AssignmentExpr.class); |
147 | if (assignmentExpr.getLeft() instanceof VariableOrNodeExpr variableOrNodeExpr) { | 143 | if (assignmentExpr != null && assignmentExpr.getLeft() instanceof VariableOrNodeExpr variableOrNodeExpr) { |
148 | return variableOrNodeExpr.getVariableOrNode(); | 144 | return variableOrNodeExpr.getVariableOrNode(); |
149 | } | 145 | } |
150 | return null; | 146 | return null; |
@@ -202,8 +198,8 @@ public class ProblemCrossrefProposalProvider extends IdeCrossrefProposalProvider | |||
202 | if (builtinSymbols.exists().equals(candidateEObjectOrProxy)) { | 198 | if (builtinSymbols.exists().equals(candidateEObjectOrProxy)) { |
203 | return false; | 199 | return false; |
204 | } | 200 | } |
205 | var arity = candidate.getUserData(ProblemResourceDescriptionStrategy.ARITY); | 201 | return ProblemResourceDescriptionStrategy.TYPE_LIKE_TRUE.equals( |
206 | return arity == null || arity.equals("1"); | 202 | candidate.getUserData(ProblemResourceDescriptionStrategy.TYPE_LIKE)); |
207 | } | 203 | } |
208 | 204 | ||
209 | 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 a8849b7c..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; |
@@ -27,6 +26,7 @@ public class ProblemSemanticHighlightingCalculator extends DefaultSemanticHighli | |||
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"; |
29 | private static final String DATATYPE_CLASS = "datatype"; | 28 | private static final String DATATYPE_CLASS = "datatype"; |
29 | private static final String AGGREGATOR_CLASS = "aggregator"; | ||
30 | private static final String CONTAINMENT_CLASS = "containment"; | 30 | private static final String CONTAINMENT_CLASS = "containment"; |
31 | private static final String ERROR_CLASS = "error"; | 31 | private static final String ERROR_CLASS = "error"; |
32 | private static final String NODE_CLASS = "node"; | 32 | private static final String NODE_CLASS = "node"; |
@@ -37,9 +37,6 @@ public class ProblemSemanticHighlightingCalculator extends DefaultSemanticHighli | |||
37 | private OperationCanceledManager operationCanceledManager; | 37 | private OperationCanceledManager operationCanceledManager; |
38 | 38 | ||
39 | @Inject | 39 | @Inject |
40 | private ProblemDesugarer desugarer; | ||
41 | |||
42 | @Inject | ||
43 | private TypeHashProvider typeHashProvider; | 40 | private TypeHashProvider typeHashProvider; |
44 | 41 | ||
45 | @Override | 42 | @Override |
@@ -116,8 +113,11 @@ public class ProblemSemanticHighlightingCalculator extends DefaultSemanticHighli | |||
116 | if (eObject instanceof DatatypeDeclaration) { | 113 | if (eObject instanceof DatatypeDeclaration) { |
117 | classesBuilder.add(DATATYPE_CLASS); | 114 | classesBuilder.add(DATATYPE_CLASS); |
118 | } | 115 | } |
116 | if (eObject instanceof AggregatorDeclaration) { | ||
117 | classesBuilder.add(AGGREGATOR_CLASS); | ||
118 | } | ||
119 | if (eObject instanceof ReferenceDeclaration referenceDeclaration | 119 | if (eObject instanceof ReferenceDeclaration referenceDeclaration |
120 | && desugarer.isContainmentReference(referenceDeclaration)) { | 120 | && ProblemUtil.isContainmentReference(referenceDeclaration)) { |
121 | classesBuilder.add(CONTAINMENT_CLASS); | 121 | classesBuilder.add(CONTAINMENT_CLASS); |
122 | } | 122 | } |
123 | 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; |