aboutsummaryrefslogtreecommitdiffstats
path: root/language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemLocationInFileProvider.java
diff options
context:
space:
mode:
Diffstat (limited to 'language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemLocationInFileProvider.java')
-rw-r--r--language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemLocationInFileProvider.java32
1 files changed, 32 insertions, 0 deletions
diff --git a/language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemLocationInFileProvider.java b/language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemLocationInFileProvider.java
new file mode 100644
index 00000000..94dbdfee
--- /dev/null
+++ b/language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemLocationInFileProvider.java
@@ -0,0 +1,32 @@
1package org.eclipse.viatra.solver.language.resource;
2
3import org.eclipse.emf.ecore.EObject;
4import org.eclipse.viatra.solver.language.ProblemUtil;
5import org.eclipse.viatra.solver.language.model.problem.ImplicitVariable;
6import org.eclipse.viatra.solver.language.model.problem.Node;
7import org.eclipse.xtext.resource.DefaultLocationInFileProvider;
8import org.eclipse.xtext.util.ITextRegion;
9
10public class ProblemLocationInFileProvider extends DefaultLocationInFileProvider {
11 @Override
12 protected ITextRegion doGetTextRegion(EObject obj, RegionDescription query) {
13 if (obj instanceof Node) {
14 return getNodeTextRegion((Node) obj, query);
15 }
16 if (obj instanceof ImplicitVariable) {
17 return ITextRegion.EMPTY_REGION;
18 }
19 return super.doGetTextRegion(obj, query);
20 }
21
22 protected ITextRegion getNodeTextRegion(Node node, RegionDescription query) {
23 if (ProblemUtil.isEnumLiteral(node)) {
24 return super.doGetTextRegion(node, query);
25 }
26 if (ProblemUtil.isNewNode(node)) {
27 EObject container = node.eContainer();
28 return doGetTextRegion(container, query);
29 }
30 return ITextRegion.EMPTY_REGION;
31 }
32}