aboutsummaryrefslogtreecommitdiffstats
path: root/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/scoping/ApplicationConfigurationScopeProvider.xtend
diff options
context:
space:
mode:
authorLibravatar OszkarSemerath <oszka@SEMERATH-LAPTOP>2018-01-13 19:33:26 +0100
committerLibravatar OszkarSemerath <oszka@SEMERATH-LAPTOP>2018-01-13 19:33:26 +0100
commit7e50434905cbb7f5d03636033b698e17a9075e9d (patch)
tree10e0968c20ac55dae4f5dc6077f39cf9947e3cb9 /Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/scoping/ApplicationConfigurationScopeProvider.xtend
parentTest and measurement runners (diff)
downloadVIATRA-Generator-7e50434905cbb7f5d03636033b698e17a9075e9d.tar.gz
VIATRA-Generator-7e50434905cbb7f5d03636033b698e17a9075e9d.tar.zst
VIATRA-Generator-7e50434905cbb7f5d03636033b698e17a9075e9d.zip
Initial commit of the configuration language and application
Diffstat (limited to 'Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/scoping/ApplicationConfigurationScopeProvider.xtend')
-rw-r--r--Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/scoping/ApplicationConfigurationScopeProvider.xtend94
1 files changed, 94 insertions, 0 deletions
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
new file mode 100644
index 00000000..4eef53d7
--- /dev/null
+++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/scoping/ApplicationConfigurationScopeProvider.xtend
@@ -0,0 +1,94 @@
1/*
2 * generated by Xtext 2.10.0
3 */
4package hu.bme.mit.inf.dslreasoner.application.scoping
5
6import org.eclipse.emf.ecore.EObject
7import org.eclipse.emf.ecore.EReference
8import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.MetamodelElement
9import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ApplicationConfigurationPackage
10import org.eclipse.xtext.EcoreUtil2
11import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigurationScript
12import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.EPackageImport
13import org.eclipse.xtext.scoping.Scopes
14import org.eclipse.emf.ecore.EClass
15import org.eclipse.emf.ecore.EEnum
16import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.MetamodelSpecification
17import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.AllPackageEntry
18
19/**
20 * This class contains custom scoping description.
21 *
22 * See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#scoping
23 * on how and when to use it.
24 */
25class ApplicationConfigurationScopeProvider extends AbstractApplicationConfigurationScopeProvider {
26
27 private val language = ApplicationConfigurationPackage.eINSTANCE
28
29 override getScope(EObject context, EReference reference) {
30 val document = EcoreUtil2.getContainerOfType(context,ConfigurationScript)
31 if(context instanceof MetamodelElement) {
32 context.scopeForMetamodelElement(reference,document)
33 } else if(context instanceof MetamodelSpecification) {
34 context.scopeForMetamodelSpecification(reference,document)
35 } else if(context instanceof AllPackageEntry){
36 context.scopeForAllPackageEntry(reference,document)
37 } else {
38 return super.getScope(context,reference)
39 }
40 }
41
42 private def allEPackages(ConfigurationScript document) {
43 return document.imports.filter(EPackageImport).map[it.importedPackage].filterNull
44 }
45
46 private def allEClassifiers(ConfigurationScript document) {
47 document.allEPackages.map[EClassifiers].flatten
48 }
49
50 protected def scopeForMetamodelElement(MetamodelElement context, EReference reference, ConfigurationScript document) {
51 if(reference === language.metamodelEntry_Package) {
52 if(context.classifier !== null) {
53 return Scopes.scopeFor(#[context.classifier.EPackage])
54 } else {
55 return Scopes.scopeFor(document.allEPackages)
56 }
57 } if(reference === language.metamodelElement_Classifier) {
58 if(context.package != null) {
59 return Scopes.scopeFor(context.package.EClassifiers)
60 } else {
61 return Scopes.scopeFor(document.allEClassifiers)
62 }
63 } if (reference === language.metamodelElement_Feature) {
64 val referredClassifier = context.classifier
65 if(referredClassifier instanceof EClass) {
66 return Scopes.scopeFor(referredClassifier.EAllStructuralFeatures)
67 } else if(referredClassifier instanceof EEnum) {
68 return Scopes.scopeFor(referredClassifier.ELiterals)
69 } else {
70 super.getScope(context,reference)
71 }
72 }
73 }
74
75 protected def scopeForMetamodelSpecification(MetamodelSpecification context, EReference reference, ConfigurationScript document) {
76 if(reference === language.metamodelEntry_Package) {
77 return Scopes.scopeFor(document.allEPackages)
78 } else if(reference ===language.metamodelElement_Classifier) {
79 return Scopes.scopeFor(document.allEClassifiers)
80 }
81 }
82
83 protected def scopeForAllPackageEntry(AllPackageEntry context, EReference reference, ConfigurationScript document) {
84 if(reference === language.metamodelEntry_Package) {
85 return Scopes.scopeFor(document.allEPackages)
86 } else if(reference === language.metamodelEntry_Package) {
87 if(context.package === null) {
88 return Scopes.scopeFor(document.allEClassifiers)
89 } else {
90 return Scopes.scopeFor(context.package.EClassifiers)
91 }
92 }
93 }
94}