aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.viatra.solver.language.parent/org.eclipse.viatra.solver.language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2021-06-26 21:43:55 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2021-06-26 21:43:55 +0200
commite92ebe4a61a106ff9c0e8f5bbbc3632f1dc60009 (patch)
tree29ae119d1e17ace16115a82eef60b5b0bd886aba /org.eclipse.viatra.solver.language.parent/org.eclipse.viatra.solver.language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java
parentAdd initial prototype (diff)
downloadrefinery-e92ebe4a61a106ff9c0e8f5bbbc3632f1dc60009.tar.gz
refinery-e92ebe4a61a106ff9c0e8f5bbbc3632f1dc60009.tar.zst
refinery-e92ebe4a61a106ff9c0e8f5bbbc3632f1dc60009.zip
FIx scoping, extend grammar
Diffstat (limited to 'org.eclipse.viatra.solver.language.parent/org.eclipse.viatra.solver.language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java')
-rw-r--r--org.eclipse.viatra.solver.language.parent/org.eclipse.viatra.solver.language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java79
1 files changed, 62 insertions, 17 deletions
diff --git a/org.eclipse.viatra.solver.language.parent/org.eclipse.viatra.solver.language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java b/org.eclipse.viatra.solver.language.parent/org.eclipse.viatra.solver.language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java
index 7b37ffd6..95a9fe6b 100644
--- a/org.eclipse.viatra.solver.language.parent/org.eclipse.viatra.solver.language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java
+++ b/org.eclipse.viatra.solver.language.parent/org.eclipse.viatra.solver.language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java
@@ -1,39 +1,84 @@
1package org.eclipse.viatra.solver.language.resource; 1package org.eclipse.viatra.solver.language.resource;
2 2
3import org.eclipse.emf.ecore.EObject; 3import org.eclipse.emf.ecore.EObject;
4import org.eclipse.viatra.solver.language.model.problem.ReferenceDeclaration; 4import org.eclipse.viatra.solver.language.model.problem.NamedElement;
5import org.eclipse.viatra.solver.language.model.problem.Problem;
5import org.eclipse.viatra.solver.language.model.problem.Variable; 6import org.eclipse.viatra.solver.language.model.problem.Variable;
7import org.eclipse.xtext.EcoreUtil2;
8import org.eclipse.xtext.naming.IQualifiedNameConverter;
6import org.eclipse.xtext.naming.QualifiedName; 9import org.eclipse.xtext.naming.QualifiedName;
10import org.eclipse.xtext.resource.EObjectDescription;
7import org.eclipse.xtext.resource.IEObjectDescription; 11import org.eclipse.xtext.resource.IEObjectDescription;
8import org.eclipse.xtext.resource.impl.AliasedEObjectDescription;
9import org.eclipse.xtext.resource.impl.DefaultResourceDescriptionStrategy; 12import org.eclipse.xtext.resource.impl.DefaultResourceDescriptionStrategy;
10import org.eclipse.xtext.util.IAcceptor; 13import org.eclipse.xtext.util.IAcceptor;
11 14
15import com.google.inject.Inject;
12import com.google.inject.Singleton; 16import com.google.inject.Singleton;
13 17
14@Singleton 18@Singleton
15public class ProblemResourceDescriptionStrategy extends DefaultResourceDescriptionStrategy { 19public class ProblemResourceDescriptionStrategy extends DefaultResourceDescriptionStrategy {
20 @Inject
21 private IQualifiedNameConverter qualifiedNameConverter;
22
16 @Override 23 @Override
17 public boolean createEObjectDescriptions(EObject eObject, IAcceptor<IEObjectDescription> acceptor) { 24 public boolean createEObjectDescriptions(EObject eObject, IAcceptor<IEObjectDescription> acceptor) {
18 IAcceptor<IEObjectDescription> wrappedAcceptor;
19 if (eObject instanceof Variable) { 25 if (eObject instanceof Variable) {
20 return false; 26 return false;
21 } 27 }
22 if (eObject instanceof ReferenceDeclaration) { 28 if (eObject instanceof NamedElement) {
23 wrappedAcceptor = new IAcceptor<IEObjectDescription>() { 29 NamedElement namedElement = (NamedElement) eObject;
24 public void accept(IEObjectDescription description) { 30 String name = namedElement.getName();
25 acceptor.accept(description); 31 if (name == null || name.isEmpty()) {
26 QualifiedName qualifiedName = description.getQualifiedName(); 32 return true;
27 if (qualifiedName.getSegmentCount() >= 2) { 33 }
28 QualifiedName simpleName = QualifiedName.create(qualifiedName.getLastSegment()); 34 Problem problem = EcoreUtil2.getContainerOfType(namedElement, Problem.class);
29 IEObjectDescription aliasedDescription = new AliasedEObjectDescription(simpleName, description); 35 QualifiedName problemQualifiedName = null;
30 acceptor.accept(aliasedDescription); 36 if (problem != null) {
37 String problemName = problem.getName();
38 if (problemName != null && !problemName.isEmpty()) {
39 problemQualifiedName = qualifiedNameConverter.toQualifiedName(problemName);
40 }
41 }
42 QualifiedName qualifiedName = qualifiedNameConverter.toQualifiedName(namedElement.getName());
43 boolean nameExported;
44 if (shouldExportSimpleName(namedElement)) {
45 acceptEObjectDescription(namedElement, problemQualifiedName, qualifiedName, acceptor);
46 nameExported = true;
47 } else {
48 nameExported = false;
49 }
50 EObject parent = namedElement.eContainer();
51 while (parent != null && parent != problem) {
52 if (parent instanceof NamedElement) {
53 NamedElement namedParent = (NamedElement) parent;
54 String parentName = namedParent.getName();
55 if (parentName != null || !name.isEmpty()) {
56 QualifiedName parentQualifiedName = qualifiedNameConverter.toQualifiedName(parentName);
57 qualifiedName = parentQualifiedName.append(qualifiedName);
58 if (shouldExportSimpleName(parent)) {
59 acceptEObjectDescription(namedElement, problemQualifiedName, qualifiedName, acceptor);
60 nameExported = true;
61 } else {
62 nameExported = false;
63 }
31 } 64 }
32 }; 65 }
33 }; 66 parent = parent.eContainer();
34 } else { 67 }
35 wrappedAcceptor = acceptor; 68 if (!nameExported) {
69 acceptEObjectDescription(namedElement, problemQualifiedName, qualifiedName, acceptor);
70 }
36 } 71 }
37 return super.createEObjectDescriptions(eObject, wrappedAcceptor); 72 return true;
73 }
74
75 protected boolean shouldExportSimpleName(EObject eObject) {
76 return true;
77 }
78
79 private void acceptEObjectDescription(EObject eObject, QualifiedName prefix, QualifiedName qualifiedName,
80 IAcceptor<IEObjectDescription> acceptor) {
81 QualifiedName qualifiedNameWithPrefix = prefix == null ? qualifiedName : prefix.append(qualifiedName);
82 acceptor.accept(EObjectDescription.create(qualifiedNameWithPrefix, eObject));
38 } 83 }
39} 84}