aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend
diff options
context:
space:
mode:
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.xtend38
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