aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.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/patterns/PatternGenerator.xtend')
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend25
1 files changed, 19 insertions, 6 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend
index 80bc3844..edf92343 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend
@@ -25,12 +25,13 @@ import java.util.HashMap
25import java.util.Map 25import java.util.Map
26import org.eclipse.emf.ecore.EAttribute 26import org.eclipse.emf.ecore.EAttribute
27import org.eclipse.emf.ecore.EReference 27import org.eclipse.emf.ecore.EReference
28import org.eclipse.viatra.query.runtime.matchers.psystem.PConstraint
28import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PQuery 29import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PQuery
29import org.eclipse.xtend.lib.annotations.Accessors 30import org.eclipse.xtend.lib.annotations.Accessors
31import org.eclipse.xtend.lib.annotations.Data
32import org.eclipse.xtend2.lib.StringConcatenationClient
30 33
31import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* 34import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.*
32import org.eclipse.xtend.lib.annotations.Data
33import org.eclipse.viatra.query.runtime.matchers.psystem.PConstraint
34 35
35@Data class PatternGeneratorResult { 36@Data class PatternGeneratorResult {
36 CharSequence patternText 37 CharSequence patternText
@@ -38,6 +39,14 @@ import org.eclipse.viatra.query.runtime.matchers.psystem.PConstraint
38 HashMap<PConstraint,String> constraint2CurrentPreconditionName 39 HashMap<PConstraint,String> constraint2CurrentPreconditionName
39} 40}
40 41
42interface UnitPropagationPatternGenerator {
43 def Map<Relation, String> getMustPatterns()
44
45 def Map<Relation, String> getMustNotPatterns()
46
47 def StringConcatenationClient getAdditionalPatterns(PatternGenerator generator, Map<String, PQuery> fqn2PQuery)
48}
49
41class PatternGenerator { 50class PatternGenerator {
42 @Accessors(PUBLIC_GETTER) val TypeIndexer typeIndexer // = new TypeIndexer(this) 51 @Accessors(PUBLIC_GETTER) val TypeIndexer typeIndexer // = new TypeIndexer(this)
43 @Accessors(PUBLIC_GETTER) val RelationDeclarationIndexer relationDeclarationIndexer = new RelationDeclarationIndexer( 52 @Accessors(PUBLIC_GETTER) val RelationDeclarationIndexer relationDeclarationIndexer = new RelationDeclarationIndexer(
@@ -157,7 +166,8 @@ class PatternGenerator {
157 Map<String, PQuery> fqn2PQuery, 166 Map<String, PQuery> fqn2PQuery,
158 TypeAnalysisResult typeAnalysisResult, 167 TypeAnalysisResult typeAnalysisResult,
159 RelationConstraints constraints, 168 RelationConstraints constraints,
160 Collection<LinearTypeConstraintHint> hints 169 Collection<LinearTypeConstraintHint> hints,
170 Collection<UnitPropagationPatternGenerator> unitPropagationPatternGenerators
161 ) { 171 ) {
162 val first = 172 val first =
163 ''' 173 '''
@@ -313,7 +323,7 @@ class PatternGenerator {
313 ////////// 323 //////////
314 // 1.2 Relation Declaration Indexers 324 // 1.2 Relation Declaration Indexers
315 ////////// 325 //////////
316 «relationDeclarationIndexer.generateRelationIndexers(problem,problem.relations.filter(RelationDeclaration),fqn2PQuery)» 326 «relationDeclarationIndexer.generateRelationIndexers(problem,problem.relations.filter(RelationDeclaration),unitPropagationPatternGenerators,fqn2PQuery)»
317 327
318 ////////// 328 //////////
319 // 1.3 Relation Definition Indexers 329 // 1.3 Relation Definition Indexers
@@ -359,13 +369,16 @@ class PatternGenerator {
359 ////////// 369 //////////
360 // 4.3 Relation refinement 370 // 4.3 Relation refinement
361 ////////// 371 //////////
362 «relationRefinementGenerator.generateRefineReference(problem)» 372 «relationRefinementGenerator.generateRefineReference(problem, unitPropagationPatternGenerators
363 373
364 ////////// 374 //////////
365 // 5 Hints 375 // 5 Hints
366 ////////// 376 //////////
367 «FOR hint : hints» 377 «FOR hint : hints»
368 «hint.getAdditionalPatterns(this)» 378 «hint.getAdditionalPatterns(this, fqn2PQuery)»
379 «ENDFOR»
380 «FOR generator : unitPropagationPatternGenerators»
381 «generator.getAdditionalPatterns(this, fqn2PQuery)»
369 «ENDFOR» 382 «ENDFOR»
370 383
371 ////////// 384 //////////