aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/language-ide
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2024-03-05 22:01:10 +0100
committerLibravatar Kristóf Marussy <kristof@marussy.com>2024-04-07 14:55:46 +0200
commitc14d8efd509f834b80573bc0339bb990698b265c (patch)
treedc3ca21785ea17bc75a861f373ee69ec64d6e97f /subprojects/language-ide
parentfeat(language): validate assignment expressions (diff)
downloadrefinery-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')
-rw-r--r--subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/ProblemCrossrefProposalProvider.java18
-rw-r--r--subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java10
-rw-r--r--subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/TypeHashProvider.java3
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.*;
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,
@@ -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;
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;
@@ -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;
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;