diff options
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.java | 67 |
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; | |||
6 | import org.eclipse.viatra.solver.language.model.problem.Node; | 6 | import org.eclipse.viatra.solver.language.model.problem.Node; |
7 | import org.eclipse.viatra.solver.language.model.problem.Problem; | 7 | import org.eclipse.viatra.solver.language.model.problem.Problem; |
8 | import org.eclipse.viatra.solver.language.model.problem.Variable; | 8 | import org.eclipse.viatra.solver.language.model.problem.Variable; |
9 | import org.eclipse.viatra.solver.language.naming.NamingUtil; | ||
9 | import org.eclipse.xtext.EcoreUtil2; | 10 | import org.eclipse.xtext.EcoreUtil2; |
10 | import org.eclipse.xtext.naming.IQualifiedNameConverter; | 11 | import org.eclipse.xtext.naming.IQualifiedNameConverter; |
11 | import org.eclipse.xtext.naming.QualifiedName; | 12 | import 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 | } |