diff options
author | Kristóf Marussy <kristof@marussy.com> | 2021-06-26 21:43:55 +0200 |
---|---|---|
committer | Kristóf Marussy <kristof@marussy.com> | 2021-06-26 21:43:55 +0200 |
commit | e92ebe4a61a106ff9c0e8f5bbbc3632f1dc60009 (patch) | |
tree | 29ae119d1e17ace16115a82eef60b5b0bd886aba /org.eclipse.viatra.solver.language.parent/org.eclipse.viatra.solver.language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java | |
parent | Add initial prototype (diff) | |
download | refinery-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.java | 79 |
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 @@ | |||
1 | package org.eclipse.viatra.solver.language.resource; | 1 | package org.eclipse.viatra.solver.language.resource; |
2 | 2 | ||
3 | import org.eclipse.emf.ecore.EObject; | 3 | import org.eclipse.emf.ecore.EObject; |
4 | import org.eclipse.viatra.solver.language.model.problem.ReferenceDeclaration; | 4 | import org.eclipse.viatra.solver.language.model.problem.NamedElement; |
5 | import org.eclipse.viatra.solver.language.model.problem.Problem; | ||
5 | import org.eclipse.viatra.solver.language.model.problem.Variable; | 6 | import org.eclipse.viatra.solver.language.model.problem.Variable; |
7 | import org.eclipse.xtext.EcoreUtil2; | ||
8 | import org.eclipse.xtext.naming.IQualifiedNameConverter; | ||
6 | import org.eclipse.xtext.naming.QualifiedName; | 9 | import org.eclipse.xtext.naming.QualifiedName; |
10 | import org.eclipse.xtext.resource.EObjectDescription; | ||
7 | import org.eclipse.xtext.resource.IEObjectDescription; | 11 | import org.eclipse.xtext.resource.IEObjectDescription; |
8 | import org.eclipse.xtext.resource.impl.AliasedEObjectDescription; | ||
9 | import org.eclipse.xtext.resource.impl.DefaultResourceDescriptionStrategy; | 12 | import org.eclipse.xtext.resource.impl.DefaultResourceDescriptionStrategy; |
10 | import org.eclipse.xtext.util.IAcceptor; | 13 | import org.eclipse.xtext.util.IAcceptor; |
11 | 14 | ||
15 | import com.google.inject.Inject; | ||
12 | import com.google.inject.Singleton; | 16 | import com.google.inject.Singleton; |
13 | 17 | ||
14 | @Singleton | 18 | @Singleton |
15 | public class ProblemResourceDescriptionStrategy extends DefaultResourceDescriptionStrategy { | 19 | public 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 | } |