diff options
Diffstat (limited to 'Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner')
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 | |||
4 | import "http://www.eclipse.org/viatra/query/patternlanguage/PatternLanguage" as viatra | 4 | import "http://www.eclipse.org/viatra/query/patternlanguage/PatternLanguage" as viatra |
5 | generate applicationConfiguration "http://www.bme.hu/mit/inf/dslreasoner/application/ApplicationConfiguration" | 5 | generate applicationConfiguration "http://www.bme.hu/mit/inf/dslreasoner/application/ApplicationConfiguration" |
6 | 6 | ||
7 | |||
7 | ConfigurationScript: | 8 | ConfigurationScript: |
8 | (imports += Import)* | 9 | (imports += Import)* |
9 | (commands += Command)* | 10 | (commands += Command)* |
10 | ; | 11 | ; |
11 | 12 | ||
12 | Command : | 13 | Command : |
13 | Declaration | 14 | Declaration | Task |
14 | //| Task | ||
15 | ; | ||
16 | Declaration : | ||
17 | // FileDeclaration | | ||
18 | MetamodelDeclaration | ||
19 | // | PartialModelDeclaration | ||
20 | // | GraphPatternDeclaration | ||
21 | // | SolverConfig | ||
22 | ; | 15 | ; |
23 | 16 | ||
17 | QualifiedName returns ecore::EString: | ||
18 | ID (=>'.' ID)*; | ||
19 | |||
24 | /////////////////////////////////////////////////// | 20 | /////////////////////////////////////////////////// |
25 | // Imports | 21 | // Imports |
26 | /////////////////////////////////////////////////// | 22 | /////////////////////////////////////////////////// |
@@ -29,25 +25,37 @@ Import: EPackageImport | ViatraImport; | |||
29 | 25 | ||
30 | EPackageImport: "import" "epackage" importedPackage=[ecore::EPackage|STRING]; | 26 | EPackageImport: "import" "epackage" importedPackage=[ecore::EPackage|STRING]; |
31 | ViatraImport: "import" "viatra" importedViatra=[viatra::PatternModel|STRING]; | 27 | ViatraImport: "import" "viatra" importedViatra=[viatra::PatternModel|STRING]; |
28 | |||
29 | /////////////////////////////////////////////////// | ||
30 | // Declaration | ||
31 | /////////////////////////////////////////////////// | ||
32 | |||
33 | Declaration : | ||
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 | |
37 | FileSpecification: path = STRING; | 46 | FileSpecification: path = STRING; |
38 | FileDeclaration: 'file' name = ID '=' specification = FileSpecification; | 47 | FileDeclaration: 'file' name = ID '=' specification = FileSpecification; |
39 | |||
40 | FileReference: referred = [FileDeclaration]; | 48 | FileReference: referred = [FileDeclaration]; |
41 | File: FileSpecification | FileReference; | 49 | File: FileSpecification | FileReference; |
42 | */ | 50 | |
43 | /////////////////////////////////////////////////// | 51 | /////////////////////////////////////////////////// |
44 | // Metamodel | 52 | // Metamodel |
45 | /////////////////////////////////////////////////// | 53 | /////////////////////////////////////////////////// |
46 | 54 | ||
47 | MetamodelSpecification: '{' (entries += MetamodelEntry) (',' entries += MetamodelEntry)* '}'; | 55 | MetamodelSpecification: '{' (entries += MetamodelEntry) (',' entries += MetamodelEntry)* '}'; |
48 | MetamodelEntry: MetamodelElement | AllPackageEntry; | 56 | MetamodelEntry: MetamodelElement | AllPackageEntry; |
49 | AllPackageEntry: "package" package=[ecore::EPackage] ("excluding" '{'exclusion +=MetamodelElement (',' exclusion +=MetamodelElement)*'}')?; | 57 | AllPackageEntry: "package" package=[ecore::EPackage|QualifiedName] ("excluding" '{'exclusion +=MetamodelElement (',' exclusion +=MetamodelElement)*'}')?; |
50 | MetamodelElement: (package=[ecore::EPackage] '::')? classifier = [ecore::EClassifier] ('.' feature= [ecore::ENamedElement])?; | 58 | MetamodelElement: (package=[ecore::EPackage|QualifiedName] '::')? classifier = [ecore::EClassifier] ('.' feature= [ecore::ENamedElement])?; |
51 | 59 | ||
52 | MetamodelDeclaration: 'metamodel' name = ID specification = MetamodelSpecification; | 60 | MetamodelDeclaration: 'metamodel' name = ID specification = MetamodelSpecification; |
53 | MetamodelReference: referred = [MetamodelDeclaration]; | 61 | MetamodelReference: referred = [MetamodelDeclaration]; |
@@ -56,72 +64,74 @@ Metamodel: MetamodelReference | MetamodelSpecification; | |||
56 | /////////////////////////////////////////////////// | 64 | /////////////////////////////////////////////////// |
57 | // Partial Model | 65 | // Partial Model |
58 | /////////////////////////////////////////////////// | 66 | /////////////////////////////////////////////////// |
59 | /* | 67 | |
60 | PartialModelEntry: path = File; | 68 | PartialModelSpecification: '{' entry += PartialModelEntry (',' entry += PartialModelEntry)? '}'; |
61 | PartialModelSpecification: entry += PartialModelEntry ('+' entry += PartialModelEntry)*; | 69 | PartialModelEntry: ModelEntry | FolderEntry; |
62 | PartialModelDeclaration: 'partial-model' name = ID '=' specification = PartialModelSpecification; | 70 | ModelEntry: path = File; |
71 | FolderEntry: "folder" path = File ("excluding" "{" exclusion += ModelEntry ("," exclusion += ModelEntry)* "}")?; | ||
72 | |||
73 | PartialModelDeclaration: 'models' name = ID specification = PartialModelSpecification; | ||
63 | PartialModelReference : referred = [PartialModelDeclaration]; | 74 | PartialModelReference : referred = [PartialModelDeclaration]; |
64 | PartialModel: PartialModelSpecification | PartialModelReference; | 75 | PartialModel: PartialModelSpecification | PartialModelReference; |
65 | */ | 76 | |
66 | /////////////////////////////////////////////////// | 77 | /////////////////////////////////////////////////// |
67 | // Patterns | 78 | // Patterns |
68 | /////////////////////////////////////////////////// | 79 | /////////////////////////////////////////////////// |
69 | /* | 80 | |
70 | PatternSpecification: '{' entries += PatternEntry (',' entries += PatternEntry)* '}'; | 81 | PatternSpecification: '{' entries += PatternEntry (',' entries += PatternEntry)* '}'; |
71 | PatternEntry: PatternElement | AllPatternEntry; | 82 | PatternEntry: PatternElement | AllPatternEntry; |
72 | AllPatternEntry: package = [viatra::PatternModel] ('excluding' '{' exclusuion += PatternElement (',' exclusuion += PatternElement)* '}')?; | 83 | AllPatternEntry: 'package' package = [viatra::PatternModel|QualifiedName] ('excluding' '{' exclusuion += PatternElement (',' exclusuion += PatternElement)* '}')?; |
73 | PatternElement: pattern = [viatra::Pattern]; | 84 | PatternElement: (package =[viatra::PatternModel|QualifiedName] '::')? pattern = [viatra::Pattern]; |
74 | 85 | ||
75 | GraphPatternDeclaration: 'patterns' name = ID specification = PatternSpecification; | 86 | GraphPatternDeclaration: 'patterns' name = ID specification = PatternSpecification; |
76 | GraphPatternReference: referred = [GraphPatternDeclaration]; | 87 | GraphPatternReference: referred = [GraphPatternDeclaration]; |
77 | GraphPattern: GraphPatternReference|PatternSpecification; | 88 | GraphPattern: GraphPatternReference|PatternSpecification; |
78 | */ | 89 | |
79 | /////////////////////////////////////////////////// | 90 | /////////////////////////////////////////////////// |
80 | // SolverConfig | 91 | // SolverConfig |
81 | /////////////////////////////////////////////////// | 92 | /////////////////////////////////////////////////// |
82 | /* | ||
83 | SolverConfig : SMTSolverConfig | AlloySolverConfig | ViatraSolverConfig; | ||
84 | |||
85 | SMTSolverConfig: | ||
86 | 'smt-solver-config' name = ID '{' | ||
87 | 'solver-path' '=' solverPath = File | ||
88 | '}' | ||
89 | ; | ||
90 | |||
91 | AlloySolverConfig: | ||
92 | 'alloy-solver-config' name = ID '{' | ||
93 | ('symmetry' '=' symmetry=INT)? | ||
94 | '}' | ||
95 | ; | ||
96 | |||
97 | ViatraSolverConfig: | ||
98 | 'viatra-solver-config' name = ID '{' | ||
99 | ('statecoding' '=' statecoding = ViatraStatecoder)? & | ||
100 | ('type-inferencing' '=' typeinferencing = ViatraTypeInferencing)? & | ||
101 | ('backtrack-chance' '=' backtrackChance = INT)? | ||
102 | '}' | ||
103 | ; | ||
104 | enum ViatraStatecoder: neighbourhood | identifier; | ||
105 | enum ViatraTypeInferencing: preliminary | online; | ||
106 | |||
107 | Solver: SMTSolver | AlloySolver | ViatraSolver; | ||
108 | 93 | ||
109 | SMTSolver: 'smt-solver' '(' (config = [SMTSolverConfig]) ')'; | 94 | ConfigSpecification: {ConfigSpecification}'{' |
110 | AlloySolver: 'alloy-solver' {AlloySolver} '(' (config = [AlloySolverConfig]|'default') ')'; | 95 | (entries += ConfigEntry ("," entries += ConfigEntry)*)? |
111 | ViatraSolver: 'viatra-solver' {ViatraSolver} '(' (config= [ViatraSolverConfig]|'default')')'; | 96 | '}'; |
112 | 97 | ConfigDeclaration : | |
113 | Task: GenerationTask; | 98 | 'config' name = ID specification = ConfigSpecification |
114 | 99 | ; | |
115 | GenerationTask: 'generate' '{' | 100 | ConfigEntry: key = STRING "=" value = STRING; |
116 | ('metamodel' '=' metamodel = Metamodel) & | 101 | ConfigReference: config = [ConfigDeclaration]; |
102 | Config: ConfigSpecification | ConfigReference; | ||
103 | |||
104 | enum Solver: SMTSolver | AlloySolver | ViatraSolver; | ||
105 | |||
106 | ScopeSpecification: {ScopeSpecification} '{' | ||
107 | (scopes += TypeScope (',' scopes += TypeScope)*)? | ||
108 | '}'; | ||
109 | TypeScope: ( min = INT ( greather?='<' | greaterOrEqual?= '<='))? '#' type = TypeReference (( less?='<' | lessOrEqual?= '<=') max = INT)?; | ||
110 | TypeReference: ClassReference | ObjectReference | IntegerReference | RealReference | StringReference; | ||
111 | ClassReference: '[' element = MetamodelElement ']'; | ||
112 | ObjectReference: {ObjectReference} 'Object'; | ||
113 | IntegerReference: {IntegerScope} 'int'; | ||
114 | RealReference: {RealScope} 'real'; | ||
115 | StringReference: {StringScope} 'string'; | ||
116 | |||
117 | ScopeDeclaration: 'scope' name = ID specification = ScopeSpecification; | ||
118 | ScopeReference: referred = [ScopeDeclaration]; | ||
119 | Scope: ScopeSpecification | ScopeReference; | ||
120 | |||
121 | Task: GenerationTask /*| MeasurementTask | ValidationTask*/; | ||
122 | |||
123 | GenerationTask: '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 | |||
6 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ViatraImport | 6 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ViatraImport |
7 | import java.util.Collections | 7 | import java.util.Collections |
8 | import java.util.Optional | 8 | import java.util.Optional |
9 | import org.eclipse.emf.common.util.URI | ||
9 | import org.eclipse.emf.ecore.EObject | 10 | import org.eclipse.emf.ecore.EObject |
10 | import org.eclipse.emf.ecore.EReference | 11 | import org.eclipse.emf.ecore.EReference |
11 | import org.eclipse.viatra.query.patternlanguage.emf.scoping.IMetamodelProvider | 12 | import org.eclipse.viatra.query.patternlanguage.emf.scoping.IMetamodelProvider |
@@ -14,6 +15,13 @@ import org.eclipse.xtext.conversion.ValueConverterException | |||
14 | import org.eclipse.xtext.linking.impl.DefaultLinkingService | 15 | import org.eclipse.xtext.linking.impl.DefaultLinkingService |
15 | import org.eclipse.xtext.nodemodel.ILeafNode | 16 | import org.eclipse.xtext.nodemodel.ILeafNode |
16 | import org.eclipse.xtext.nodemodel.INode | 17 | import org.eclipse.xtext.nodemodel.INode |
18 | import org.eclipse.emf.ecore.resource.Resource | ||
19 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.PatternEntry | ||
20 | import org.eclipse.emf.ecore.util.EcoreUtil | ||
21 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigurationScript | ||
22 | import org.eclipse.xtext.EcoreUtil2 | ||
23 | import java.util.List | ||
24 | import org.eclipse.xtext.conversion.impl.QualifiedNameValueConverter | ||
17 | 25 | ||
18 | class ApplicationConfigurationLinkingService extends DefaultLinkingService{ | 26 | class 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 | |||
15 | import org.eclipse.emf.ecore.EEnum | 15 | import org.eclipse.emf.ecore.EEnum |
16 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.MetamodelSpecification | 16 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.MetamodelSpecification |
17 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.AllPackageEntry | 17 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.AllPackageEntry |
18 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.PatternElement | ||
19 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.AllPatternEntry | ||
20 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.PatternSpecification | ||
21 | import 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 | } |