aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.viatra.solver.language.parent/org.eclipse.viatra.solver.language/src/main/java/org/eclipse/viatra/solver/language/scoping/ProblemScopeProvider.java
diff options
context:
space:
mode:
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.java83
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 */
4package org.eclipse.viatra.solver.language.scoping;
5
6import java.util.ArrayList;
7import java.util.Collection;
8import java.util.List;
9
10import org.eclipse.emf.ecore.EObject;
11import org.eclipse.emf.ecore.EReference;
12import org.eclipse.viatra.solver.language.ProblemUtil;
13import org.eclipse.viatra.solver.language.model.problem.Argument;
14import org.eclipse.viatra.solver.language.model.problem.ClassDeclaration;
15import org.eclipse.viatra.solver.language.model.problem.ExistentialQuantifier;
16import org.eclipse.viatra.solver.language.model.problem.PredicateDefinition;
17import org.eclipse.viatra.solver.language.model.problem.ProblemPackage;
18import org.eclipse.viatra.solver.language.model.problem.ReferenceDeclaration;
19import org.eclipse.viatra.solver.language.model.problem.Relation;
20import org.eclipse.viatra.solver.language.model.problem.Variable;
21import org.eclipse.xtext.EcoreUtil2;
22import org.eclipse.xtext.scoping.IScope;
23import 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 */
32public 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}