diff options
Diffstat (limited to 'org.eclipse.viatra.solver.language.parent/org.eclipse.viatra.solver.language/src/main/java/org/eclipse/viatra/solver/language/scoping/ProblemScopeProvider.java')
-rw-r--r-- | org.eclipse.viatra.solver.language.parent/org.eclipse.viatra.solver.language/src/main/java/org/eclipse/viatra/solver/language/scoping/ProblemScopeProvider.java | 83 |
1 files changed, 0 insertions, 83 deletions
diff --git a/org.eclipse.viatra.solver.language.parent/org.eclipse.viatra.solver.language/src/main/java/org/eclipse/viatra/solver/language/scoping/ProblemScopeProvider.java b/org.eclipse.viatra.solver.language.parent/org.eclipse.viatra.solver.language/src/main/java/org/eclipse/viatra/solver/language/scoping/ProblemScopeProvider.java deleted file mode 100644 index fc4034ae..00000000 --- a/org.eclipse.viatra.solver.language.parent/org.eclipse.viatra.solver.language/src/main/java/org/eclipse/viatra/solver/language/scoping/ProblemScopeProvider.java +++ /dev/null | |||
@@ -1,83 +0,0 @@ | |||
1 | /* | ||
2 | * generated by Xtext 2.25.0 | ||
3 | */ | ||
4 | package org.eclipse.viatra.solver.language.scoping; | ||
5 | |||
6 | import java.util.ArrayList; | ||
7 | import java.util.Collection; | ||
8 | import java.util.List; | ||
9 | |||
10 | import org.eclipse.emf.ecore.EObject; | ||
11 | import org.eclipse.emf.ecore.EReference; | ||
12 | import org.eclipse.viatra.solver.language.ProblemUtil; | ||
13 | import org.eclipse.viatra.solver.language.model.problem.Argument; | ||
14 | import org.eclipse.viatra.solver.language.model.problem.ClassDeclaration; | ||
15 | import org.eclipse.viatra.solver.language.model.problem.ExistentialQuantifier; | ||
16 | import org.eclipse.viatra.solver.language.model.problem.PredicateDefinition; | ||
17 | import org.eclipse.viatra.solver.language.model.problem.ProblemPackage; | ||
18 | import org.eclipse.viatra.solver.language.model.problem.ReferenceDeclaration; | ||
19 | import org.eclipse.viatra.solver.language.model.problem.Relation; | ||
20 | import org.eclipse.viatra.solver.language.model.problem.Variable; | ||
21 | import org.eclipse.xtext.EcoreUtil2; | ||
22 | import org.eclipse.xtext.scoping.IScope; | ||
23 | import org.eclipse.xtext.scoping.Scopes; | ||
24 | |||
25 | /** | ||
26 | * This class contains custom scoping description. | ||
27 | * | ||
28 | * See | ||
29 | * https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#scoping | ||
30 | * on how and when to use it. | ||
31 | */ | ||
32 | public class ProblemScopeProvider extends AbstractProblemScopeProvider { | ||
33 | |||
34 | @Override | ||
35 | public IScope getScope(EObject context, EReference reference) { | ||
36 | IScope scope = super.getScope(context, reference); | ||
37 | if (reference == ProblemPackage.Literals.ARGUMENT__VARIABLE_OR_NODE) { | ||
38 | return getVariableScope(context, scope); | ||
39 | } else if (reference == ProblemPackage.Literals.REFERENCE_DECLARATION__OPPOSITE) { | ||
40 | return getOppositeScope(context, scope); | ||
41 | } | ||
42 | return scope; | ||
43 | } | ||
44 | |||
45 | protected IScope getVariableScope(EObject context, IScope delegateScope) { | ||
46 | List<Variable> variables = new ArrayList<>(); | ||
47 | EObject currentContext = context; | ||
48 | if (context instanceof Argument) { | ||
49 | Argument argument = (Argument) context; | ||
50 | Variable singletonVariable = argument.getSingletonVariable(); | ||
51 | if (singletonVariable != null) { | ||
52 | variables.add(singletonVariable); | ||
53 | } | ||
54 | } | ||
55 | while (currentContext != null && !(currentContext instanceof PredicateDefinition)) { | ||
56 | if (currentContext instanceof ExistentialQuantifier) { | ||
57 | ExistentialQuantifier quantifier = (ExistentialQuantifier) currentContext; | ||
58 | variables.addAll(quantifier.getImplicitVariables()); | ||
59 | } | ||
60 | currentContext = currentContext.eContainer(); | ||
61 | } | ||
62 | if (currentContext instanceof PredicateDefinition) { | ||
63 | PredicateDefinition definition = (PredicateDefinition) currentContext; | ||
64 | variables.addAll(definition.getParameters()); | ||
65 | } | ||
66 | return Scopes.scopeFor(variables, delegateScope); | ||
67 | } | ||
68 | |||
69 | protected IScope getOppositeScope(EObject context, IScope delegateScope) { | ||
70 | ReferenceDeclaration referenceDeclaration = EcoreUtil2.getContainerOfType(context, ReferenceDeclaration.class); | ||
71 | if (referenceDeclaration == null) { | ||
72 | return delegateScope; | ||
73 | } | ||
74 | Relation relation = referenceDeclaration.getReferenceType(); | ||
75 | if (!(relation instanceof ClassDeclaration)) { | ||
76 | return delegateScope; | ||
77 | } | ||
78 | ClassDeclaration classDeclaration = (ClassDeclaration) relation; | ||
79 | Collection<ReferenceDeclaration> referenceDeclarations = ProblemUtil | ||
80 | .getAllReferenceDeclarations(classDeclaration); | ||
81 | return Scopes.scopeFor(referenceDeclarations, delegateScope); | ||
82 | } | ||
83 | } | ||