From 7e50434905cbb7f5d03636033b698e17a9075e9d Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Sat, 13 Jan 2018 19:33:26 +0100 Subject: Initial commit of the configuration language and application --- .../ApplicationConfigurationScopeProvider.xtend | 94 ++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/scoping/ApplicationConfigurationScopeProvider.xtend (limited to 'Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/scoping') 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 @@ +/* + * generated by Xtext 2.10.0 + */ +package hu.bme.mit.inf.dslreasoner.application.scoping + +import org.eclipse.emf.ecore.EObject +import org.eclipse.emf.ecore.EReference +import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.MetamodelElement +import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ApplicationConfigurationPackage +import org.eclipse.xtext.EcoreUtil2 +import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigurationScript +import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.EPackageImport +import org.eclipse.xtext.scoping.Scopes +import org.eclipse.emf.ecore.EClass +import org.eclipse.emf.ecore.EEnum +import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.MetamodelSpecification +import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.AllPackageEntry + +/** + * This class contains custom scoping description. + * + * See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#scoping + * on how and when to use it. + */ +class ApplicationConfigurationScopeProvider extends AbstractApplicationConfigurationScopeProvider { + + private val language = ApplicationConfigurationPackage.eINSTANCE + + override getScope(EObject context, EReference reference) { + val document = EcoreUtil2.getContainerOfType(context,ConfigurationScript) + if(context instanceof MetamodelElement) { + context.scopeForMetamodelElement(reference,document) + } else if(context instanceof MetamodelSpecification) { + context.scopeForMetamodelSpecification(reference,document) + } else if(context instanceof AllPackageEntry){ + context.scopeForAllPackageEntry(reference,document) + } else { + return super.getScope(context,reference) + } + } + + private def allEPackages(ConfigurationScript document) { + return document.imports.filter(EPackageImport).map[it.importedPackage].filterNull + } + + private def allEClassifiers(ConfigurationScript document) { + document.allEPackages.map[EClassifiers].flatten + } + + protected def scopeForMetamodelElement(MetamodelElement context, EReference reference, ConfigurationScript document) { + if(reference === language.metamodelEntry_Package) { + if(context.classifier !== null) { + return Scopes.scopeFor(#[context.classifier.EPackage]) + } else { + return Scopes.scopeFor(document.allEPackages) + } + } if(reference === language.metamodelElement_Classifier) { + if(context.package != null) { + return Scopes.scopeFor(context.package.EClassifiers) + } else { + return Scopes.scopeFor(document.allEClassifiers) + } + } if (reference === language.metamodelElement_Feature) { + val referredClassifier = context.classifier + if(referredClassifier instanceof EClass) { + return Scopes.scopeFor(referredClassifier.EAllStructuralFeatures) + } else if(referredClassifier instanceof EEnum) { + return Scopes.scopeFor(referredClassifier.ELiterals) + } else { + super.getScope(context,reference) + } + } + } + + protected def scopeForMetamodelSpecification(MetamodelSpecification context, EReference reference, ConfigurationScript document) { + if(reference === language.metamodelEntry_Package) { + return Scopes.scopeFor(document.allEPackages) + } else if(reference ===language.metamodelElement_Classifier) { + return Scopes.scopeFor(document.allEClassifiers) + } + } + + protected def scopeForAllPackageEntry(AllPackageEntry context, EReference reference, ConfigurationScript document) { + if(reference === language.metamodelEntry_Package) { + return Scopes.scopeFor(document.allEPackages) + } else if(reference === language.metamodelEntry_Package) { + if(context.package === null) { + return Scopes.scopeFor(document.allEClassifiers) + } else { + return Scopes.scopeFor(context.package.EClassifiers) + } + } + } +} -- cgit v1.2.3-70-g09d2