diff options
Diffstat (limited to 'Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/XExpressionExtractor.xtend')
-rw-r--r-- | Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/XExpressionExtractor.xtend | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/XExpressionExtractor.xtend b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/XExpressionExtractor.xtend new file mode 100644 index 00000000..ea8d0b23 --- /dev/null +++ b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/XExpressionExtractor.xtend | |||
@@ -0,0 +1,24 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.viatra2logic | ||
2 | |||
3 | import org.eclipse.viatra.query.patternlanguage.emf.specification.XBaseEvaluator | ||
4 | import org.eclipse.viatra.query.runtime.matchers.psystem.IExpressionEvaluator | ||
5 | import org.eclipse.xtext.xbase.XExpression | ||
6 | |||
7 | class XExpressionExtractor { | ||
8 | def dispatch XExpression extractExpression(XBaseEvaluator evaluator) { evaluator.expression } | ||
9 | def dispatch XExpression extractExpression(IExpressionEvaluator evaluator) { | ||
10 | val clazz = evaluator.class | ||
11 | if(clazz.name == "org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.VariableMappingExpressionEvaluatorWrapper") { | ||
12 | val field = clazz.declaredFields.filter[it.name == "wrapped"].head | ||
13 | if(field === null) { | ||
14 | throw new IllegalArgumentException('''Class «clazz.simpleName» has no field "wrapped"!''') | ||
15 | } else { | ||
16 | field.setAccessible(true); | ||
17 | val wrappedEvaluator = field.get(evaluator) as XBaseEvaluator | ||
18 | return wrappedEvaluator.extractExpression | ||
19 | } | ||
20 | } else { | ||
21 | throw new IllegalArgumentException('''Unsupported expression evaluation form: «clazz.simpleName»!''') | ||
22 | } | ||
23 | } | ||
24 | } \ No newline at end of file | ||