diff options
author | Kristóf Marussy <kristof@marussy.com> | 2024-02-02 16:28:19 +0100 |
---|---|---|
committer | Kristóf Marussy <kristof@marussy.com> | 2024-02-02 17:36:24 +0100 |
commit | 2dfcb286216419976368ad926f8ac7f018aa2bf9 (patch) | |
tree | b9d235ebf2049e42e58126e743c782333d64681a /subprojects/language-semantics | |
parent | refactor: serialize solutions as modules (diff) | |
download | refinery-2dfcb286216419976368ad926f8ac7f018aa2bf9.tar.gz refinery-2dfcb286216419976368ad926f8ac7f018aa2bf9.tar.zst refinery-2dfcb286216419976368ad926f8ac7f018aa2bf9.zip |
refactor(language): name disambiguation
* Use fully qualified names starting with :: (as in C++) to unambiguously refer
to an element.
* Name shadowing within modules.
Diffstat (limited to 'subprojects/language-semantics')
3 files changed, 12 insertions, 6 deletions
diff --git a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java index b462fd70..7c649232 100644 --- a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java +++ b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java | |||
@@ -247,7 +247,7 @@ public class ModelInitializer { | |||
247 | } | 247 | } |
248 | 248 | ||
249 | private String getName(Relation relation) { | 249 | private String getName(Relation relation) { |
250 | return semanticsUtils.getName(relation).orElseGet(() -> "::" + relationInfoMap.size()); | 250 | return semanticsUtils.getNameWithoutRootPrefix(relation).orElseGet(() -> "::" + relationInfoMap.size()); |
251 | } | 251 | } |
252 | 252 | ||
253 | private void collectMetamodel() { | 253 | private void collectMetamodel() { |
@@ -659,7 +659,7 @@ public class ModelInitializer { | |||
659 | var variableOrNode = variableOrNodeExpr.getVariableOrNode(); | 659 | var variableOrNode = variableOrNodeExpr.getVariableOrNode(); |
660 | if (variableOrNode instanceof Node node) { | 660 | if (variableOrNode instanceof Node node) { |
661 | int nodeId = getNodeId(node); | 661 | int nodeId = getNodeId(node); |
662 | var tempVariable = Variable.of(semanticsUtils.getName(node).orElse("_" + nodeId)); | 662 | var tempVariable = Variable.of(semanticsUtils.getNameWithoutRootPrefix(node).orElse("_" + nodeId)); |
663 | literals.add(new ConstantLiteral(tempVariable, nodeId)); | 663 | literals.add(new ConstantLiteral(tempVariable, nodeId)); |
664 | argumentList.add(tempVariable); | 664 | argumentList.add(tempVariable); |
665 | } else if (variableOrNode instanceof tools.refinery.language.model.problem.Variable problemVariable) { | 665 | } else if (variableOrNode instanceof tools.refinery.language.model.problem.Variable problemVariable) { |
diff --git a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ProblemTraceImpl.java b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ProblemTraceImpl.java index f686e980..aef0fd89 100644 --- a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ProblemTraceImpl.java +++ b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ProblemTraceImpl.java | |||
@@ -79,7 +79,7 @@ class ProblemTraceImpl implements ProblemTrace { | |||
79 | try { | 79 | try { |
80 | return nodeTrace.getOrThrow(node); | 80 | return nodeTrace.getOrThrow(node); |
81 | } catch (IllegalStateException e) { | 81 | } catch (IllegalStateException e) { |
82 | var qualifiedName = semanticsUtils.getName(node); | 82 | var qualifiedName = semanticsUtils.getNameWithoutRootPrefix(node); |
83 | throw new TracedException(node, "No node ID for " + qualifiedName, e); | 83 | throw new TracedException(node, "No node ID for " + qualifiedName, e); |
84 | } | 84 | } |
85 | } | 85 | } |
@@ -144,7 +144,7 @@ class ProblemTraceImpl implements ProblemTrace { | |||
144 | public PartialRelation getPartialRelation(Relation relation) { | 144 | public PartialRelation getPartialRelation(Relation relation) { |
145 | var partialRelation = mutableRelationTrace.get(relation); | 145 | var partialRelation = mutableRelationTrace.get(relation); |
146 | if (partialRelation == null) { | 146 | if (partialRelation == null) { |
147 | var qualifiedName = semanticsUtils.getName(relation); | 147 | var qualifiedName = semanticsUtils.getNameWithoutRootPrefix(relation); |
148 | throw new TracedException(relation, "No partial relation for " + qualifiedName); | 148 | throw new TracedException(relation, "No partial relation for " + qualifiedName); |
149 | } | 149 | } |
150 | return partialRelation; | 150 | return partialRelation; |
diff --git a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/SemanticsUtils.java b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/SemanticsUtils.java index b72ba697..110295b2 100644 --- a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/SemanticsUtils.java +++ b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/SemanticsUtils.java | |||
@@ -7,6 +7,7 @@ package tools.refinery.language.semantics; | |||
7 | 7 | ||
8 | import com.google.inject.Inject; | 8 | import com.google.inject.Inject; |
9 | import com.google.inject.Singleton; | 9 | import com.google.inject.Singleton; |
10 | import com.google.inject.name.Named; | ||
10 | import org.eclipse.emf.ecore.EObject; | 11 | import org.eclipse.emf.ecore.EObject; |
11 | import org.eclipse.emf.ecore.util.EcoreUtil; | 12 | import org.eclipse.emf.ecore.util.EcoreUtil; |
12 | import org.eclipse.xtext.naming.IQualifiedNameConverter; | 13 | import org.eclipse.xtext.naming.IQualifiedNameConverter; |
@@ -16,6 +17,7 @@ import org.eclipse.xtext.scoping.IScope; | |||
16 | import org.jetbrains.annotations.NotNull; | 17 | import org.jetbrains.annotations.NotNull; |
17 | import org.jetbrains.annotations.Nullable; | 18 | import org.jetbrains.annotations.Nullable; |
18 | import tools.refinery.language.model.problem.Problem; | 19 | import tools.refinery.language.model.problem.Problem; |
20 | import tools.refinery.language.naming.ProblemQualifiedNameProvider; | ||
19 | 21 | ||
20 | import java.util.Optional; | 22 | import java.util.Optional; |
21 | 23 | ||
@@ -25,10 +27,14 @@ public class SemanticsUtils { | |||
25 | private IQualifiedNameProvider qualifiedNameProvider; | 27 | private IQualifiedNameProvider qualifiedNameProvider; |
26 | 28 | ||
27 | @Inject | 29 | @Inject |
30 | @Named(ProblemQualifiedNameProvider.NAMED_DELEGATE) | ||
31 | private IQualifiedNameProvider delegateQualifiedNameProvider; | ||
32 | |||
33 | @Inject | ||
28 | private IQualifiedNameConverter qualifiedNameConverter; | 34 | private IQualifiedNameConverter qualifiedNameConverter; |
29 | 35 | ||
30 | public Optional<String> getName(EObject eObject) { | 36 | public Optional<String> getNameWithoutRootPrefix(EObject eObject) { |
31 | var qualifiedName = qualifiedNameProvider.getFullyQualifiedName(eObject); | 37 | var qualifiedName = delegateQualifiedNameProvider.getFullyQualifiedName(eObject); |
32 | if (qualifiedName == null) { | 38 | if (qualifiedName == null) { |
33 | return Optional.empty(); | 39 | return Optional.empty(); |
34 | } | 40 | } |