aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/language-semantics
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2024-02-02 16:28:19 +0100
committerLibravatar Kristóf Marussy <kristof@marussy.com>2024-02-02 17:36:24 +0100
commit2dfcb286216419976368ad926f8ac7f018aa2bf9 (patch)
treeb9d235ebf2049e42e58126e743c782333d64681a /subprojects/language-semantics
parentrefactor: serialize solutions as modules (diff)
downloadrefinery-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')
-rw-r--r--subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java4
-rw-r--r--subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ProblemTraceImpl.java4
-rw-r--r--subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/SemanticsUtils.java10
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
8import com.google.inject.Inject; 8import com.google.inject.Inject;
9import com.google.inject.Singleton; 9import com.google.inject.Singleton;
10import com.google.inject.name.Named;
10import org.eclipse.emf.ecore.EObject; 11import org.eclipse.emf.ecore.EObject;
11import org.eclipse.emf.ecore.util.EcoreUtil; 12import org.eclipse.emf.ecore.util.EcoreUtil;
12import org.eclipse.xtext.naming.IQualifiedNameConverter; 13import org.eclipse.xtext.naming.IQualifiedNameConverter;
@@ -16,6 +17,7 @@ import org.eclipse.xtext.scoping.IScope;
16import org.jetbrains.annotations.NotNull; 17import org.jetbrains.annotations.NotNull;
17import org.jetbrains.annotations.Nullable; 18import org.jetbrains.annotations.Nullable;
18import tools.refinery.language.model.problem.Problem; 19import tools.refinery.language.model.problem.Problem;
20import tools.refinery.language.naming.ProblemQualifiedNameProvider;
19 21
20import java.util.Optional; 22import 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 }