aboutsummaryrefslogtreecommitdiffstats
path: root/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/XExpressionExtractor.xtend
blob: ea8d0b23cb7ac366e429a36b8ba440478fe67892 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package hu.bme.mit.inf.dslreasoner.viatra2logic

import org.eclipse.viatra.query.patternlanguage.emf.specification.XBaseEvaluator
import org.eclipse.viatra.query.runtime.matchers.psystem.IExpressionEvaluator
import org.eclipse.xtext.xbase.XExpression

class XExpressionExtractor {
	def dispatch XExpression extractExpression(XBaseEvaluator evaluator) { evaluator.expression }
	def dispatch XExpression extractExpression(IExpressionEvaluator evaluator) {
		val clazz = evaluator.class
		if(clazz.name == "org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.VariableMappingExpressionEvaluatorWrapper") {
			val field = clazz.declaredFields.filter[it.name == "wrapped"].head
			if(field === null) {
				throw new IllegalArgumentException('''Class «clazz.simpleName» has no field "wrapped"!''')
			} else {
				field.setAccessible(true);
				val wrappedEvaluator = field.get(evaluator) as XBaseEvaluator
				return wrappedEvaluator.extractExpression
			}
		} else {
			throw new IllegalArgumentException('''Unsupported expression evaluation form: «clazz.simpleName»!''')
		}
	}
}