aboutsummaryrefslogtreecommitdiffstats
path: root/language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java
diff options
context:
space:
mode:
Diffstat (limited to 'language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java')
-rw-r--r--language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java67
1 files changed, 33 insertions, 34 deletions
diff --git a/language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java b/language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java
index 686e54df..da737e3d 100644
--- a/language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java
+++ b/language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java
@@ -6,6 +6,7 @@ import org.eclipse.viatra.solver.language.model.problem.NamedElement;
6import org.eclipse.viatra.solver.language.model.problem.Node; 6import org.eclipse.viatra.solver.language.model.problem.Node;
7import org.eclipse.viatra.solver.language.model.problem.Problem; 7import org.eclipse.viatra.solver.language.model.problem.Problem;
8import org.eclipse.viatra.solver.language.model.problem.Variable; 8import org.eclipse.viatra.solver.language.model.problem.Variable;
9import org.eclipse.viatra.solver.language.naming.NamingUtil;
9import org.eclipse.xtext.EcoreUtil2; 10import org.eclipse.xtext.EcoreUtil2;
10import org.eclipse.xtext.naming.IQualifiedNameConverter; 11import org.eclipse.xtext.naming.IQualifiedNameConverter;
11import org.eclipse.xtext.naming.QualifiedName; 12import org.eclipse.xtext.naming.QualifiedName;
@@ -27,61 +28,59 @@ public class ProblemResourceDescriptionStrategy extends DefaultResourceDescripti
27 if (!shouldExport(eObject)) { 28 if (!shouldExport(eObject)) {
28 return false; 29 return false;
29 } 30 }
30 if (!(eObject instanceof NamedElement)) { 31 var qualifiedName = getNameAsQualifiedName(eObject);
31 return true; 32 if (qualifiedName == null) {
32 }
33 NamedElement namedElement = (NamedElement) eObject;
34 String name = namedElement.getName();
35 if (name == null || name.isEmpty()) {
36 return true; 33 return true;
37 } 34 }
38 Problem problem = EcoreUtil2.getContainerOfType(namedElement, Problem.class); 35 var problem = EcoreUtil2.getContainerOfType(eObject, Problem.class);
39 QualifiedName problemQualifiedName = null; 36 var problemQualifiedName = getNameAsQualifiedName(problem);
40 if (problem != null) {
41 String problemName = problem.getName();
42 if (problemName != null && !problemName.isEmpty()) {
43 problemQualifiedName = qualifiedNameConverter.toQualifiedName(problemName);
44 }
45 }
46 QualifiedName qualifiedName = qualifiedNameConverter.toQualifiedName(namedElement.getName());
47 boolean nameExported; 37 boolean nameExported;
48 if (shouldExportSimpleName(namedElement)) { 38 if (shouldExportSimpleName(eObject)) {
49 acceptEObjectDescription(namedElement, problemQualifiedName, qualifiedName, acceptor); 39 acceptEObjectDescription(eObject, problemQualifiedName, qualifiedName, acceptor);
50 nameExported = true; 40 nameExported = true;
51 } else { 41 } else {
52 nameExported = false; 42 nameExported = false;
53 } 43 }
54 EObject parent = namedElement.eContainer(); 44 var parent = eObject.eContainer();
55 while (parent != null && parent != problem) { 45 while (parent != null && parent != problem) {
56 if (parent instanceof NamedElement) { 46 var parentQualifiedName = getNameAsQualifiedName(parent);
57 NamedElement namedParent = (NamedElement) parent; 47 if (parentQualifiedName == null) {
58 String parentName = namedParent.getName(); 48 continue;
59 if (parentName != null || !name.isEmpty()) { 49 }
60 QualifiedName parentQualifiedName = qualifiedNameConverter.toQualifiedName(parentName); 50 qualifiedName = parentQualifiedName.append(qualifiedName);
61 qualifiedName = parentQualifiedName.append(qualifiedName); 51 if (shouldExportSimpleName(parent)) {
62 if (shouldExportSimpleName(namedParent)) { 52 acceptEObjectDescription(eObject, problemQualifiedName, qualifiedName, acceptor);
63 acceptEObjectDescription(namedElement, problemQualifiedName, qualifiedName, acceptor); 53 nameExported = true;
64 nameExported = true; 54 } else {
65 } else { 55 nameExported = false;
66 nameExported = false;
67 }
68 }
69 } 56 }
70 parent = parent.eContainer(); 57 parent = parent.eContainer();
71 } 58 }
72 if (!nameExported) { 59 if (!nameExported) {
73 acceptEObjectDescription(namedElement, problemQualifiedName, qualifiedName, acceptor); 60 acceptEObjectDescription(eObject, problemQualifiedName, qualifiedName, acceptor);
74 } 61 }
75 return true; 62 return true;
76 } 63 }
77 64
65 protected QualifiedName getNameAsQualifiedName(EObject eObject) {
66 if (!(eObject instanceof NamedElement)) {
67 return null;
68 }
69 var namedElement = (NamedElement) eObject;
70 var name = namedElement.getName();
71 if (NamingUtil.isNullOrEmpty(name)) {
72 return null;
73 }
74 return qualifiedNameConverter.toQualifiedName(name);
75 }
76
78 protected boolean shouldExport(EObject eObject) { 77 protected boolean shouldExport(EObject eObject) {
79 if (eObject instanceof Variable) { 78 if (eObject instanceof Variable) {
80 // Variables are always private to the containing predicate definition. 79 // Variables are always private to the containing predicate definition.
81 return false; 80 return false;
82 } 81 }
83 if (eObject instanceof Node) { 82 if (eObject instanceof Node) {
84 Node node = (Node) eObject; 83 var node = (Node) eObject;
85 // Only enum literals and new nodes are visible across problem files. 84 // Only enum literals and new nodes are visible across problem files.
86 return ProblemUtil.isEnumLiteral(node) || ProblemUtil.isNewNode(node); 85 return ProblemUtil.isEnumLiteral(node) || ProblemUtil.isNewNode(node);
87 } 86 }
@@ -97,7 +96,7 @@ public class ProblemResourceDescriptionStrategy extends DefaultResourceDescripti
97 96
98 private void acceptEObjectDescription(EObject eObject, QualifiedName prefix, QualifiedName qualifiedName, 97 private void acceptEObjectDescription(EObject eObject, QualifiedName prefix, QualifiedName qualifiedName,
99 IAcceptor<IEObjectDescription> acceptor) { 98 IAcceptor<IEObjectDescription> acceptor) {
100 QualifiedName qualifiedNameWithPrefix = prefix == null ? qualifiedName : prefix.append(qualifiedName); 99 var qualifiedNameWithPrefix = prefix == null ? qualifiedName : prefix.append(qualifiedName);
101 acceptor.accept(EObjectDescription.create(qualifiedNameWithPrefix, eObject)); 100 acceptor.accept(EObjectDescription.create(qualifiedNameWithPrefix, eObject));
102 } 101 }
103} 102}