diff options
author | Oszkar Semerath <semerath@mit.bme.hu> | 2020-05-07 19:22:16 +0200 |
---|---|---|
committer | Oszkar Semerath <semerath@mit.bme.hu> | 2020-05-07 19:22:16 +0200 |
commit | a2ba6b5addbc82a635af4f90195581c08f9913c0 (patch) | |
tree | 00f60f337c3e3ead27b91e94b57c6958888bea8c /Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend | |
parent | viatra parsing fixes (diff) | |
download | VIATRA-Generator-a2ba6b5addbc82a635af4f90195581c08f9913c0.tar.gz VIATRA-Generator-a2ba6b5addbc82a635af4f90195581c08f9913c0.tar.zst VIATRA-Generator-a2ba6b5addbc82a635af4f90195581c08f9913c0.zip |
multiple object additions fixes
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend')
-rw-r--r-- | Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend index 013da873..b4cb9ec7 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend | |||
@@ -90,7 +90,7 @@ class RefinementRuleProvider { | |||
90 | if(containmentRelation !== null) { | 90 | if(containmentRelation !== null) { |
91 | if(inverseRelation!== null) { | 91 | if(inverseRelation!== null) { |
92 | ruleBuilder.action[match | | 92 | ruleBuilder.action[match | |
93 | //println(name) | 93 | println(name) |
94 | val startTime = System.nanoTime | 94 | val startTime = System.nanoTime |
95 | //val problem = match.get(0) as LogicProblem | 95 | //val problem = match.get(0) as LogicProblem |
96 | val interpretation = match.get(1) as PartialInterpretation | 96 | val interpretation = match.get(1) as PartialInterpretation |
@@ -115,7 +115,7 @@ class RefinementRuleProvider { | |||
115 | ] | 115 | ] |
116 | } else { | 116 | } else { |
117 | ruleBuilder.action[match | | 117 | ruleBuilder.action[match | |
118 | //println(name) | 118 | println(name) |
119 | val startTime = System.nanoTime | 119 | val startTime = System.nanoTime |
120 | //val problem = match.get(0) as LogicProblem | 120 | //val problem = match.get(0) as LogicProblem |
121 | val interpretation = match.get(1) as PartialInterpretation | 121 | val interpretation = match.get(1) as PartialInterpretation |
@@ -139,6 +139,7 @@ class RefinementRuleProvider { | |||
139 | } | 139 | } |
140 | } else { | 140 | } else { |
141 | ruleBuilder.action[match | | 141 | ruleBuilder.action[match | |
142 | println(name) | ||
142 | val startTime = System.nanoTime | 143 | val startTime = System.nanoTime |
143 | //val problem = match.get(0) as LogicProblem | 144 | //val problem = match.get(0) as LogicProblem |
144 | val interpretation = match.get(1) as PartialInterpretation | 145 | val interpretation = match.get(1) as PartialInterpretation |
@@ -210,7 +211,7 @@ class RefinementRuleProvider { | |||
210 | ) | 211 | ) |
211 | } | 212 | } |
212 | } | 213 | } |
213 | } else if(relation.parameters instanceof PrimitiveTypeReference) { | 214 | } else if(relation.parameters.get(1) instanceof PrimitiveTypeReference) { |
214 | val targetTypeInterpretation = getTypeInterpretation(i, relation, 1) | 215 | val targetTypeInterpretation = getTypeInterpretation(i, relation, 1) |
215 | for(var times=0; times<number; times++) { | 216 | for(var times=0; times<number; times++) { |
216 | recursiveObjectCreation.get(sourceTypeInterpretation.interpretationOf) += | 217 | recursiveObjectCreation.get(sourceTypeInterpretation.interpretationOf) += |
@@ -230,10 +231,13 @@ class RefinementRuleProvider { | |||
230 | // Doing the recursion | 231 | // Doing the recursion |
231 | var objectCreations = new LinkedList(recursiveObjectCreation.values.flatten.toList) | 232 | var objectCreations = new LinkedList(recursiveObjectCreation.values.flatten.toList) |
232 | for(objectCreation : objectCreations) { | 233 | for(objectCreation : objectCreations) { |
233 | val newlyCreatedType = (objectCreation.typeInterpretation as PartialComplexTypeInterpretation).interpretationOf | 234 | val newInterpretation = objectCreation.typeInterpretation |
234 | if(recursiveObjectCreation.containsKey(newlyCreatedType)) { | 235 | if(newInterpretation instanceof PartialComplexTypeInterpretation) { |
235 | val actionsWhenTypeCreated = recursiveObjectCreation.get(newlyCreatedType) | 236 | val newlyCreatedType = newInterpretation.interpretationOf |
236 | objectCreation.recursiveConstructors+=actionsWhenTypeCreated | 237 | if(recursiveObjectCreation.containsKey(newlyCreatedType)) { |
238 | val actionsWhenTypeCreated = recursiveObjectCreation.get(newlyCreatedType) | ||
239 | objectCreation.recursiveConstructors+=actionsWhenTypeCreated | ||
240 | } | ||
237 | } | 241 | } |
238 | } | 242 | } |
239 | 243 | ||
@@ -246,7 +250,7 @@ class RefinementRuleProvider { | |||
246 | } else { | 250 | } else { |
247 | reachable = reachable.map[it.recursiveConstructors].flatten.toList | 251 | reachable = reachable.map[it.recursiveConstructors].flatten.toList |
248 | } | 252 | } |
249 | } while(reachable.empty) | 253 | } while(!reachable.empty) |
250 | } | 254 | } |
251 | 255 | ||
252 | return recursiveObjectCreation | 256 | return recursiveObjectCreation |
@@ -413,14 +417,14 @@ class RefinementRuleProvider { | |||
413 | val newLink2 = factory2.createBinaryElementRelationLink => [it.param1 = newElement it.param2 = container] | 417 | val newLink2 = factory2.createBinaryElementRelationLink => [it.param1 = newElement it.param2 = container] |
414 | inverseRelationInterpretation.relationlinks+=newLink2 | 418 | inverseRelationInterpretation.relationlinks+=newLink2 |
415 | 419 | ||
420 | // Scope propagation | ||
421 | scopePropagator.propagateAdditionToType(typeInterpretation) | ||
422 | |||
416 | // Do recursive object creation | 423 | // Do recursive object creation |
417 | for(newConstructor : recursiceObjectCreations) { | 424 | for(newConstructor : recursiceObjectCreations) { |
418 | createObjectAction(nameNewElement,newConstructor,newElement,scopePropagator) | 425 | createObjectAction(nameNewElement,newConstructor,newElement,scopePropagator) |
419 | } | 426 | } |
420 | 427 | ||
421 | // Scope propagation | ||
422 | scopePropagator.propagateAdditionToType(typeInterpretation) | ||
423 | |||
424 | return newElement | 428 | return newElement |
425 | } | 429 | } |
426 | 430 | ||
@@ -451,14 +455,14 @@ class RefinementRuleProvider { | |||
451 | val newLink = factory2.createBinaryElementRelationLink => [it.param1 = container it.param2 = newElement] | 455 | val newLink = factory2.createBinaryElementRelationLink => [it.param1 = container it.param2 = newElement] |
452 | relationInterpretation.relationlinks+=newLink | 456 | relationInterpretation.relationlinks+=newLink |
453 | 457 | ||
458 | // Scope propagation | ||
459 | scopePropagator.propagateAdditionToType(typeInterpretation) | ||
460 | |||
454 | // Do recursive object creation | 461 | // Do recursive object creation |
455 | for(newConstructor : recursiceObjectCreations) { | 462 | for(newConstructor : recursiceObjectCreations) { |
456 | createObjectAction(nameNewElement,newConstructor,newElement,scopePropagator) | 463 | createObjectAction(nameNewElement,newConstructor,newElement,scopePropagator) |
457 | } | 464 | } |
458 | 465 | ||
459 | // Scope propagation | ||
460 | scopePropagator.propagateAdditionToType(typeInterpretation) | ||
461 | |||
462 | return newElement | 466 | return newElement |
463 | } | 467 | } |
464 | 468 | ||
@@ -484,14 +488,14 @@ class RefinementRuleProvider { | |||
484 | typeInterpretation.supertypeInterpretation.forEach[it.elements += newElement] | 488 | typeInterpretation.supertypeInterpretation.forEach[it.elements += newElement] |
485 | } | 489 | } |
486 | 490 | ||
491 | // Scope propagation | ||
492 | scopePropagator.propagateAdditionToType(typeInterpretation) | ||
493 | |||
487 | // Do recursive object creation | 494 | // Do recursive object creation |
488 | for(newConstructor : recursiceObjectCreations) { | 495 | for(newConstructor : recursiceObjectCreations) { |
489 | createObjectAction(nameNewElement,newConstructor,newElement,scopePropagator) | 496 | createObjectAction(nameNewElement,newConstructor,newElement,scopePropagator) |
490 | } | 497 | } |
491 | 498 | ||
492 | // Scope propagation | ||
493 | scopePropagator.propagateAdditionToType(typeInterpretation) | ||
494 | |||
495 | return newElement | 499 | return newElement |
496 | } | 500 | } |
497 | 501 | ||