From 303b2728867cda25da1a20f520943ef86f6d5922 Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Fri, 14 Sep 2018 16:37:19 +0200 Subject: updated support for java types --- .../viatra2logic/Constraint2Logic.xtend | 27 ++++++++++++++++++++++ .../dslreasoner/viatra2logic/Viatra2Logic.xtend | 4 +++- 2 files changed, 30 insertions(+), 1 deletion(-) (limited to 'Framework/hu.bme.mit.inf.dslreasoner.viatra2logic') diff --git a/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Constraint2Logic.xtend b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Constraint2Logic.xtend index 3d2c46a5..3e8b3366 100644 --- a/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Constraint2Logic.xtend +++ b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Constraint2Logic.xtend @@ -29,6 +29,7 @@ import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.Positi import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.TypeFilterConstraint class Constraint2Logic { val extension LogicProblemBuilder builder = new LogicProblemBuilder @@ -209,6 +210,7 @@ class Constraint2Logic { return transformPathConstraint(type,src,trg,ecore2LogicTrace,variable2Variable,viatra2LogicTrace) } else throw new IllegalArgumentException('''unknown tuple: «tuple»''') } + def Term transformTypeConstraint( EClass type, PVariable variable, @@ -242,6 +244,31 @@ class Constraint2Logic { } } + def dispatch Term transformConstraint(TypeFilterConstraint constraint, + TracedOutput ecore2LogicTrace, + Viatra2LogicTrace viatra2LogicTrace, + Map variable2Variable, + Viatra2LogicConfiguration config) + { + val tuple = constraint.variablesTuple + if(tuple.size == 1) { + val typeConstraint = constraint.equivalentJudgement.inputKey + if(typeConstraint instanceof EClassTransitiveInstancesKey) { + val type = typeConstraint.emfKey + val variable = tuple.get(0) as PVariable + return transformTypeConstraint(type,variable,ecore2LogicTrace,variable2Variable,viatra2LogicTrace) + } else if(typeConstraint instanceof EDataTypeInSlotsKey) { + // If the type is a primitive type or EEnum, then instanceof is an unnecessary constraint + return null + } + } else if(tuple.size == 2) { + val type = (constraint.equivalentJudgement.inputKey as EStructuralFeatureInstancesKey).emfKey + val src = tuple.get(0) as PVariable + val trg = tuple.get(1) as PVariable + return transformPathConstraint(type,src,trg,ecore2LogicTrace,variable2Variable,viatra2LogicTrace) + } else throw new IllegalArgumentException('''unknown tuple: «tuple»''') + } + def dispatch Term transformConstraint(PConstraint constraint, TracedOutput ecore2LogicTrace, Viatra2LogicTrace viatra2LogicTrace, diff --git a/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2Logic.xtend b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2Logic.xtend index ce902353..0821db47 100644 --- a/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2Logic.xtend +++ b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2Logic.xtend @@ -151,7 +151,7 @@ class Viatra2Logic { val parameterName = '''parameter «vParam.name»''' val parameterType = getType(vParam,types,ecore2LogicTrace) if(parameterType === null) { - throw new AssertionError('''null type for parameter «vParam.name»''') + throw new AssertionError('''null type for parameter «vParam.name» in pattern «pquery.fullyQualifiedName»''') } val lParam = createVar(parameterName,parameterType) viatra2LogicTrace.parameter2Variable.put(pquery->vParam,lParam) @@ -450,6 +450,8 @@ class Viatra2Logic { return LogicReal } else if(c == Boolean) { return LogicBool + } else if(c == String) { + return LogicString } else if(c.superclass == java.lang.Enum){ val enums = ecore2Logic.allEnumsInScope(ecore2LogicTrace.trace) for(enum : enums) { -- cgit v1.2.3-54-g00ecf