diff options
Diffstat (limited to 'Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2LogicTypeResult.xtend')
-rw-r--r-- | Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2LogicTypeResult.xtend | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2LogicTypeResult.xtend b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2LogicTypeResult.xtend new file mode 100644 index 00000000..7ba90724 --- /dev/null +++ b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2LogicTypeResult.xtend | |||
@@ -0,0 +1,47 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.viatra2logic | ||
2 | |||
3 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeReference | ||
4 | import java.util.Map | ||
5 | import org.eclipse.viatra.query.runtime.matchers.psystem.PBody | ||
6 | import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable | ||
7 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter | ||
8 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PQuery | ||
9 | import org.eclipse.xtend.lib.annotations.Data | ||
10 | import org.eclipse.xtext.xbase.lib.Functions.Function0 | ||
11 | import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* | ||
12 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.ComplexTypeReference | ||
13 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.LogiclanguageFactory | ||
14 | import org.eclipse.emf.ecore.util.EcoreUtil | ||
15 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.PrimitiveTypeReference | ||
16 | |||
17 | @Data class Viatra2LogicTypeResult{ | ||
18 | Map<Pair<PQuery,PParameter>,Function0<TypeReference>> typesInParameters | ||
19 | Map<Pair<PBody,PVariable>,Function0<TypeReference>> typesInBodies; | ||
20 | |||
21 | def addType(PBody body, PVariable variable, TypeReference typeConstructor) { | ||
22 | typesInBodies.put(body->variable,typeConstructor.createTypeConstructor) | ||
23 | } | ||
24 | def addType(PQuery query, PParameter variable, TypeReference typeConstructor) { | ||
25 | typesInParameters.put(query->variable,typeConstructor.createTypeConstructor) | ||
26 | } | ||
27 | def getType(PBody body, PVariable variable) { | ||
28 | return (body->variable).lookup(typesInBodies).apply | ||
29 | } | ||
30 | def getType(PQuery query, PParameter variable) { | ||
31 | return (query->variable).lookup(typesInParameters).apply | ||
32 | } | ||
33 | |||
34 | def containsSolution(PBody body, PVariable variable) { | ||
35 | return typesInBodies.containsKey(body->variable) | ||
36 | } | ||
37 | def containsSolution(PParameter variable) { | ||
38 | return typesInParameters.containsKey(variable) | ||
39 | } | ||
40 | |||
41 | def dispatch Function0<TypeReference> createTypeConstructor(ComplexTypeReference ref) { | ||
42 | return [LogiclanguageFactory.eINSTANCE.createComplexTypeReference=>[it.referred = ref.referred]] | ||
43 | } | ||
44 | def dispatch Function0<TypeReference> createTypeConstructor(PrimitiveTypeReference ref) { | ||
45 | return [EcoreUtil.copy(ref)] | ||
46 | } | ||
47 | } \ No newline at end of file | ||