aboutsummaryrefslogtreecommitdiffstats
path: root/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme
diff options
context:
space:
mode:
authorLibravatar OszkarSemerath <oszka@SEMERATH-LAPTOP>2018-01-17 00:54:44 +0100
committerLibravatar OszkarSemerath <oszka@SEMERATH-LAPTOP>2018-01-17 00:54:44 +0100
commit0a31d5448e92d915c7163c3985fa0807f67d3f06 (patch)
tree1a106505c98df6398f2b5fe183771fc315f1e87a /Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme
parentScope patched for metamodel specification (diff)
downloadVIATRA-Generator-0a31d5448e92d915c7163c3985fa0807f67d3f06.tar.gz
VIATRA-Generator-0a31d5448e92d915c7163c3985fa0807f67d3f06.tar.zst
VIATRA-Generator-0a31d5448e92d915c7163c3985fa0807f67d3f06.zip
Scoping and linking of Viatra Packages and Patterns is completed
Diffstat (limited to 'Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme')
-rw-r--r--Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfiguration.xtext140
-rw-r--r--Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/linking/ApplicationConfigurationLinkingService.xtend54
-rw-r--r--Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/scoping/ApplicationConfigurationScopeProvider.xtend63
3 files changed, 187 insertions, 70 deletions
diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfiguration.xtext b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfiguration.xtext
index ed83419f..1e8fd485 100644
--- a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfiguration.xtext
+++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfiguration.xtext
@@ -4,23 +4,19 @@ import "http://www.eclipse.org/emf/2002/Ecore" as ecore
4import "http://www.eclipse.org/viatra/query/patternlanguage/PatternLanguage" as viatra 4import "http://www.eclipse.org/viatra/query/patternlanguage/PatternLanguage" as viatra
5generate applicationConfiguration "http://www.bme.hu/mit/inf/dslreasoner/application/ApplicationConfiguration" 5generate applicationConfiguration "http://www.bme.hu/mit/inf/dslreasoner/application/ApplicationConfiguration"
6 6
7
7ConfigurationScript: 8ConfigurationScript:
8 (imports += Import)* 9 (imports += Import)*
9 (commands += Command)* 10 (commands += Command)*
10; 11;
11 12
12Command : 13Command :
13 Declaration 14 Declaration | Task
14 //| Task
15;
16Declaration :
17// FileDeclaration |
18 MetamodelDeclaration
19// | PartialModelDeclaration
20// | GraphPatternDeclaration
21// | SolverConfig
22; 15;
23 16
17QualifiedName returns ecore::EString:
18 ID (=>'.' ID)*;
19
24/////////////////////////////////////////////////// 20///////////////////////////////////////////////////
25// Imports 21// Imports
26/////////////////////////////////////////////////// 22///////////////////////////////////////////////////
@@ -29,25 +25,37 @@ Import: EPackageImport | ViatraImport;
29 25
30EPackageImport: "import" "epackage" importedPackage=[ecore::EPackage|STRING]; 26EPackageImport: "import" "epackage" importedPackage=[ecore::EPackage|STRING];
31ViatraImport: "import" "viatra" importedViatra=[viatra::PatternModel|STRING]; 27ViatraImport: "import" "viatra" importedViatra=[viatra::PatternModel|STRING];
28
29///////////////////////////////////////////////////
30// Declaration
31///////////////////////////////////////////////////
32
33Declaration :
34 FileDeclaration
35 | MetamodelDeclaration
36 | PartialModelDeclaration
37 | GraphPatternDeclaration
38 | ConfigDeclaration
39 | ScopeDeclaration
40;
32 41
33/////////////////////////////////////////////////// 42///////////////////////////////////////////////////
34// Files and Folders 43// Files and Folders
35/////////////////////////////////////////////////// 44///////////////////////////////////////////////////
36/* 45
37FileSpecification: path = STRING; 46FileSpecification: path = STRING;
38FileDeclaration: 'file' name = ID '=' specification = FileSpecification; 47FileDeclaration: 'file' name = ID '=' specification = FileSpecification;
39
40FileReference: referred = [FileDeclaration]; 48FileReference: referred = [FileDeclaration];
41File: FileSpecification | FileReference; 49File: FileSpecification | FileReference;
42*/ 50
43/////////////////////////////////////////////////// 51///////////////////////////////////////////////////
44// Metamodel 52// Metamodel
45/////////////////////////////////////////////////// 53///////////////////////////////////////////////////
46 54
47MetamodelSpecification: '{' (entries += MetamodelEntry) (',' entries += MetamodelEntry)* '}'; 55MetamodelSpecification: '{' (entries += MetamodelEntry) (',' entries += MetamodelEntry)* '}';
48MetamodelEntry: MetamodelElement | AllPackageEntry; 56MetamodelEntry: MetamodelElement | AllPackageEntry;
49AllPackageEntry: "package" package=[ecore::EPackage] ("excluding" '{'exclusion +=MetamodelElement (',' exclusion +=MetamodelElement)*'}')?; 57AllPackageEntry: "package" package=[ecore::EPackage|QualifiedName] ("excluding" '{'exclusion +=MetamodelElement (',' exclusion +=MetamodelElement)*'}')?;
50MetamodelElement: (package=[ecore::EPackage] '::')? classifier = [ecore::EClassifier] ('.' feature= [ecore::ENamedElement])?; 58MetamodelElement: (package=[ecore::EPackage|QualifiedName] '::')? classifier = [ecore::EClassifier] ('.' feature= [ecore::ENamedElement])?;
51 59
52MetamodelDeclaration: 'metamodel' name = ID specification = MetamodelSpecification; 60MetamodelDeclaration: 'metamodel' name = ID specification = MetamodelSpecification;
53MetamodelReference: referred = [MetamodelDeclaration]; 61MetamodelReference: referred = [MetamodelDeclaration];
@@ -56,72 +64,74 @@ Metamodel: MetamodelReference | MetamodelSpecification;
56/////////////////////////////////////////////////// 64///////////////////////////////////////////////////
57// Partial Model 65// Partial Model
58/////////////////////////////////////////////////// 66///////////////////////////////////////////////////
59/* 67
60PartialModelEntry: path = File; 68PartialModelSpecification: '{' entry += PartialModelEntry (',' entry += PartialModelEntry)? '}';
61PartialModelSpecification: entry += PartialModelEntry ('+' entry += PartialModelEntry)*; 69PartialModelEntry: ModelEntry | FolderEntry;
62PartialModelDeclaration: 'partial-model' name = ID '=' specification = PartialModelSpecification; 70ModelEntry: path = File;
71FolderEntry: "folder" path = File ("excluding" "{" exclusion += ModelEntry ("," exclusion += ModelEntry)* "}")?;
72
73PartialModelDeclaration: 'models' name = ID specification = PartialModelSpecification;
63PartialModelReference : referred = [PartialModelDeclaration]; 74PartialModelReference : referred = [PartialModelDeclaration];
64PartialModel: PartialModelSpecification | PartialModelReference; 75PartialModel: PartialModelSpecification | PartialModelReference;
65*/ 76
66/////////////////////////////////////////////////// 77///////////////////////////////////////////////////
67// Patterns 78// Patterns
68/////////////////////////////////////////////////// 79///////////////////////////////////////////////////
69/* 80
70PatternSpecification: '{' entries += PatternEntry (',' entries += PatternEntry)* '}'; 81PatternSpecification: '{' entries += PatternEntry (',' entries += PatternEntry)* '}';
71PatternEntry: PatternElement | AllPatternEntry; 82PatternEntry: PatternElement | AllPatternEntry;
72AllPatternEntry: package = [viatra::PatternModel] ('excluding' '{' exclusuion += PatternElement (',' exclusuion += PatternElement)* '}')?; 83AllPatternEntry: 'package' package = [viatra::PatternModel|QualifiedName] ('excluding' '{' exclusuion += PatternElement (',' exclusuion += PatternElement)* '}')?;
73PatternElement: pattern = [viatra::Pattern]; 84PatternElement: (package =[viatra::PatternModel|QualifiedName] '::')? pattern = [viatra::Pattern];
74 85
75GraphPatternDeclaration: 'patterns' name = ID specification = PatternSpecification; 86GraphPatternDeclaration: 'patterns' name = ID specification = PatternSpecification;
76GraphPatternReference: referred = [GraphPatternDeclaration]; 87GraphPatternReference: referred = [GraphPatternDeclaration];
77GraphPattern: GraphPatternReference|PatternSpecification; 88GraphPattern: GraphPatternReference|PatternSpecification;
78*/ 89
79/////////////////////////////////////////////////// 90///////////////////////////////////////////////////
80// SolverConfig 91// SolverConfig
81/////////////////////////////////////////////////// 92///////////////////////////////////////////////////
82/*
83SolverConfig : SMTSolverConfig | AlloySolverConfig | ViatraSolverConfig;
84
85SMTSolverConfig:
86 'smt-solver-config' name = ID '{'
87 'solver-path' '=' solverPath = File
88 '}'
89;
90
91AlloySolverConfig:
92 'alloy-solver-config' name = ID '{'
93 ('symmetry' '=' symmetry=INT)?
94 '}'
95;
96
97ViatraSolverConfig:
98 'viatra-solver-config' name = ID '{'
99 ('statecoding' '=' statecoding = ViatraStatecoder)? &
100 ('type-inferencing' '=' typeinferencing = ViatraTypeInferencing)? &
101 ('backtrack-chance' '=' backtrackChance = INT)?
102 '}'
103;
104enum ViatraStatecoder: neighbourhood | identifier;
105enum ViatraTypeInferencing: preliminary | online;
106
107Solver: SMTSolver | AlloySolver | ViatraSolver;
108 93
109SMTSolver: 'smt-solver' '(' (config = [SMTSolverConfig]) ')'; 94ConfigSpecification: {ConfigSpecification}'{'
110AlloySolver: 'alloy-solver' {AlloySolver} '(' (config = [AlloySolverConfig]|'default') ')'; 95 (entries += ConfigEntry ("," entries += ConfigEntry)*)?
111ViatraSolver: 'viatra-solver' {ViatraSolver} '(' (config= [ViatraSolverConfig]|'default')')'; 96 '}';
112 97ConfigDeclaration :
113Task: GenerationTask; 98 'config' name = ID specification = ConfigSpecification
114 99;
115GenerationTask: 'generate' '{' 100ConfigEntry: key = STRING "=" value = STRING;
116 ('metamodel' '=' metamodel = Metamodel) & 101ConfigReference: config = [ConfigDeclaration];
102Config: ConfigSpecification | ConfigReference;
103
104enum Solver: SMTSolver | AlloySolver | ViatraSolver;
105
106ScopeSpecification: {ScopeSpecification} '{'
107 (scopes += TypeScope (',' scopes += TypeScope)*)?
108'}';
109TypeScope: ( min = INT ( greather?='<' | greaterOrEqual?= '<='))? '#' type = TypeReference (( less?='<' | lessOrEqual?= '<=') max = INT)?;
110TypeReference: ClassReference | ObjectReference | IntegerReference | RealReference | StringReference;
111ClassReference: '[' element = MetamodelElement ']';
112ObjectReference: {ObjectReference} 'Object';
113IntegerReference: {IntegerScope} 'int';
114RealReference: {RealScope} 'real';
115StringReference: {StringScope} 'string';
116
117ScopeDeclaration: 'scope' name = ID specification = ScopeSpecification;
118ScopeReference: referred = [ScopeDeclaration];
119Scope: ScopeSpecification | ScopeReference;
120
121Task: GenerationTask /*| MeasurementTask | ValidationTask*/;
122
123GenerationTask: 'generate' {GenerationTask} '{'
124 (('metamodel' '=' metamodel = Metamodel)? &
117 ('partial-model' '=' partialModel = PartialModel)? & 125 ('partial-model' '=' partialModel = PartialModel)? &
118 ('patterns' '=' patterns = GraphPattern)? & 126 ('patterns' '=' patterns = GraphPattern)? &
119 ('new-objects' '=' size = INT) & 127 ('scope' '=' scope = Scope)? &
120 ('number' '=' number= INT)? & 128 ('number' '=' number= INT)? &
121 ('runs' '=' runs = INT)? 129 ('runs' '=' runs = INT)? &
122 'target-folder' '=' tagetFolder = File 130 ('solver' '=' solver = Solver)? &
123 'debug-folder' '=' debugFolder = File 131 ('config' '=' config = Config)? &
124 ('log' '=' targetLogFile = File)? 132 ('output' '=' tagetFolder = File)? &
125 ('statistics' '=' targetStatisticsFile = File)? 133 ('debug' '=' debugFolder = File)? &
134 ('log' '=' targetLogFile = File)? &
135 ('statistics' '=' targetStatisticsFile = File)?)
126 '}' 136 '}'
127;*/ \ No newline at end of file 137; \ No newline at end of file
diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/linking/ApplicationConfigurationLinkingService.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/linking/ApplicationConfigurationLinkingService.xtend
index 15567f88..35d4008b 100644
--- a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/linking/ApplicationConfigurationLinkingService.xtend
+++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/linking/ApplicationConfigurationLinkingService.xtend
@@ -6,6 +6,7 @@ import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.EPackageI
6import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ViatraImport 6import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ViatraImport
7import java.util.Collections 7import java.util.Collections
8import java.util.Optional 8import java.util.Optional
9import org.eclipse.emf.common.util.URI
9import org.eclipse.emf.ecore.EObject 10import org.eclipse.emf.ecore.EObject
10import org.eclipse.emf.ecore.EReference 11import org.eclipse.emf.ecore.EReference
11import org.eclipse.viatra.query.patternlanguage.emf.scoping.IMetamodelProvider 12import org.eclipse.viatra.query.patternlanguage.emf.scoping.IMetamodelProvider
@@ -14,6 +15,13 @@ import org.eclipse.xtext.conversion.ValueConverterException
14import org.eclipse.xtext.linking.impl.DefaultLinkingService 15import org.eclipse.xtext.linking.impl.DefaultLinkingService
15import org.eclipse.xtext.nodemodel.ILeafNode 16import org.eclipse.xtext.nodemodel.ILeafNode
16import org.eclipse.xtext.nodemodel.INode 17import org.eclipse.xtext.nodemodel.INode
18import org.eclipse.emf.ecore.resource.Resource
19import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.PatternEntry
20import org.eclipse.emf.ecore.util.EcoreUtil
21import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigurationScript
22import org.eclipse.xtext.EcoreUtil2
23import java.util.List
24import org.eclipse.xtext.conversion.impl.QualifiedNameValueConverter
17 25
18class ApplicationConfigurationLinkingService extends DefaultLinkingService{ 26class ApplicationConfigurationLinkingService extends DefaultLinkingService{
19 27
@@ -31,20 +39,60 @@ class ApplicationConfigurationLinkingService extends DefaultLinkingService{
31 return getEPackage(context as EPackageImport, node as ILeafNode) 39 return getEPackage(context as EPackageImport, node as ILeafNode)
32 } 40 }
33 } else if(context instanceof ViatraImport) { 41 } else if(context instanceof ViatraImport) {
34 super.getLinkedObjects(context, ref, node) 42 if(ref == viatraImport_ImportedViatra && node instanceof ILeafNode) {
43 return getViatra(context as ViatraImport, node as ILeafNode)
44 }
45 } else if(context instanceof PatternEntry) {
46 if(ref === patternEntry_Package) {
47 return getViatraPackage(context as PatternEntry,node)
48 }
35 } 49 }
36 return super.getLinkedObjects(context, ref, node) 50 return super.getLinkedObjects(context, ref, node)
37 } 51 }
52
53 def getViatraPackage(PatternEntry entry, INode node) {
54 val document = EcoreUtil2.getContainerOfType(entry,ConfigurationScript)
55 val nodeString = valueConverterService.toValue(node.text,
56 linkingHelper.getRuleNameFrom(node.grammarElement), node).toString.replaceAll("\\s","")
57 val patternModels = document.imports.filter(ViatraImport).map[it.importedViatra].filterNull
58 val List<EObject> patternModelsWithSameNamespace = patternModels.filter[nodeString.equals(it.packageName)].filter(EObject).toList
59 return patternModelsWithSameNamespace
60 }
38 61
39 private def getEPackage(EPackageImport packageImport, ILeafNode node) { 62 private def getEPackage(EPackageImport packageImport, ILeafNode node) {
40 getMetamodelNsUri(node).flatMap [ uri | 63 getNSUri(node).flatMap [ uri |
41 Optional.ofNullable(metamodelProvider.loadEPackage(uri, packageImport.eResource.resourceSet)) 64 Optional.ofNullable(metamodelProvider.loadEPackage(uri, packageImport.eResource.resourceSet))
42 ].map [ ePackage | 65 ].map [ ePackage |
43 Collections.singletonList(ePackage as EObject) 66 Collections.singletonList(ePackage as EObject)
44 ].orElse(emptyList) 67 ].orElse(emptyList)
45 } 68 }
69
70 private def getViatra(ViatraImport viatraImport, ILeafNode node) {
71 val uri = getNSUri(node)
72 if(uri.present) {
73 var URI createdURI
74 try{
75 createdURI = URI.createURI(uri.get)
76 }catch(IllegalArgumentException e) {
77 return super.getLinkedObjects(viatraImport, viatraImport_ImportedViatra, node)
78 }
79 var Resource res
80 try{
81 res = viatraImport.eResource.resourceSet.getResource(createdURI,true);
82 } catch(RuntimeException e){
83 return super.getLinkedObjects(viatraImport, viatraImport_ImportedViatra, node)
84 }
85 if(res!==null && !res.contents.empty) {
86 return #[res.contents.head]
87 } else {
88 return super.getLinkedObjects(viatraImport, viatraImport_ImportedViatra, node)
89 }
90 } else {
91 return super.getLinkedObjects(viatraImport, viatraImport_ImportedViatra, node)
92 }
93 }
46 94
47 private def getMetamodelNsUri(ILeafNode node) { 95 private def getNSUri(ILeafNode node) {
48 try { 96 try {
49 val convertedValue = valueConverterService.toValue(node.text, 97 val convertedValue = valueConverterService.toValue(node.text,
50 linkingHelper.getRuleNameFrom(node.grammarElement), node) 98 linkingHelper.getRuleNameFrom(node.grammarElement), node)
diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/scoping/ApplicationConfigurationScopeProvider.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/scoping/ApplicationConfigurationScopeProvider.xtend
index 3aa349f3..97cda4a4 100644
--- a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/scoping/ApplicationConfigurationScopeProvider.xtend
+++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/scoping/ApplicationConfigurationScopeProvider.xtend
@@ -15,6 +15,10 @@ import org.eclipse.emf.ecore.EClass
15import org.eclipse.emf.ecore.EEnum 15import org.eclipse.emf.ecore.EEnum
16import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.MetamodelSpecification 16import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.MetamodelSpecification
17import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.AllPackageEntry 17import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.AllPackageEntry
18import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.PatternElement
19import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.AllPatternEntry
20import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.PatternSpecification
21import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ViatraImport
18 22
19/** 23/**
20 * This class contains custom scoping description. 24 * This class contains custom scoping description.
@@ -34,6 +38,12 @@ class ApplicationConfigurationScopeProvider extends AbstractApplicationConfigura
34 context.scopeForMetamodelSpecification(reference,document) 38 context.scopeForMetamodelSpecification(reference,document)
35 } else if(context instanceof AllPackageEntry){ 39 } else if(context instanceof AllPackageEntry){
36 context.scopeForAllPackageEntry(reference,document) 40 context.scopeForAllPackageEntry(reference,document)
41 } else if(context instanceof PatternElement) {
42 context.scopeForPatternElement(reference,document)
43 } else if(context instanceof PatternSpecification) {
44 context.scopeForPatternSpecification(reference,document)
45 } else if(context instanceof AllPatternEntry) {
46 context.scopeForAllPatternEntry(reference,document)
37 } else { 47 } else {
38 return super.getScope(context,reference) 48 return super.getScope(context,reference)
39 } 49 }
@@ -42,15 +52,24 @@ class ApplicationConfigurationScopeProvider extends AbstractApplicationConfigura
42 private def allEPackages(ConfigurationScript document) { 52 private def allEPackages(ConfigurationScript document) {
43 return document.imports.filter(EPackageImport).map[it.importedPackage].filterNull 53 return document.imports.filter(EPackageImport).map[it.importedPackage].filterNull
44 } 54 }
45 55 private def allViatraPackages(ConfigurationScript document) {
56 val res = document.imports.filter(ViatraImport).map[it.importedViatra].filterNull
57 //println('''All packages: «res.map[packageName].toList»''')
58 return res
59 }
46 private def allEClassifiers(ConfigurationScript document) { 60 private def allEClassifiers(ConfigurationScript document) {
47 document.allEPackages.map[EClassifiers].flatten 61 document.allEPackages.map[EClassifiers].flatten
48 } 62 }
63 private def allPatterns(ConfigurationScript document) {
64 val res = document.allViatraPackages.map[patterns].flatten
65 //println('''All patterns: «res.map[name].toList»''')
66 return res
67 }
49 68
50 protected def scopeForMetamodelElement(MetamodelElement context, EReference reference, ConfigurationScript document) { 69 protected def scopeForMetamodelElement(MetamodelElement context, EReference reference, ConfigurationScript document) {
51 if(reference === language.metamodelEntry_Package) { 70 if(reference === language.metamodelEntry_Package) {
52 return Scopes.scopeFor(document.allEPackages) 71 return Scopes.scopeFor(document.allEPackages)
53 } if(reference === language.metamodelElement_Classifier) { 72 } else if(reference === language.metamodelElement_Classifier) {
54 if(context.package !== null) { 73 if(context.package !== null) {
55 return Scopes.scopeFor(context.package.EClassifiers) 74 return Scopes.scopeFor(context.package.EClassifiers)
56 } else { 75 } else {
@@ -91,4 +110,44 @@ class ApplicationConfigurationScopeProvider extends AbstractApplicationConfigura
91 return super.getScope(context,reference) 110 return super.getScope(context,reference)
92 } 111 }
93 } 112 }
113
114 //////////
115
116 protected def scopeForPatternElement(PatternElement context, EReference reference, ConfigurationScript document) {
117 if(reference === language.patternEntry_Package) {
118 return Scopes.scopeFor(document.allViatraPackages)
119 } else if(reference === language.patternElement_Pattern) {
120 if(context.package !== null) {
121 return Scopes.scopeFor(context.package.patterns)
122 } else {
123 return Scopes.scopeFor(document.allPatterns)
124 }
125 } else {
126 super.getScope(context,reference)
127 }
128 }
129
130 protected def scopeForPatternSpecification(PatternSpecification context, EReference reference, ConfigurationScript document) {
131 if(reference === language.patternEntry_Package) {
132 return Scopes.scopeFor(document.allViatraPackages)
133 } else if(reference ===language.patternElement_Pattern) {
134 return Scopes.scopeFor(document.allPatterns)
135 } else {
136 return super.getScope(context,reference)
137 }
138 }
139
140 protected def scopeForAllPatternEntry(AllPatternEntry context, EReference reference, ConfigurationScript document) {
141 if(reference === language.patternEntry_Package) {
142 return Scopes.scopeFor(document.allViatraPackages)
143 } else if(reference === language.patternElement_Pattern) {
144 if(context.package === null) {
145 return Scopes.scopeFor(document.allPatterns)
146 } else {
147 return Scopes.scopeFor(context.package.patterns)
148 }
149 } else {
150 return super.getScope(context,reference)
151 }
152 }
94} 153}