| import '/resource/org.eclipse.ocl.pivot/model/Lookup.ecore' |
| import '/resource/org.eclipse.ocl.pivot/model/Pivot.ecore' |
| import '/resource/org.eclipse.ocl.pivot/model/PivotLookup.ocl' |
| import '/resource/org.eclipse.qvto.examples.pivot.imperativeocl/model/ImperativeOCL.ecore' |
| import '/resource/org.eclipse.qvto.examples.xtext.qvtoperational/model/QVTOperationalCS.ecore' |
| import 'QVTOperational.ecore' |
| |
| package pivot |
| |
| -- Lookup operations |
| |
| context Visitable |
| |
| def : _lookupModelType(env : lookup::LookupEnvironment, path : qvtoperationalcs::PathElement2CS, local : Boolean) : qvtoperational::ModelType[?] = |
| let foundElements = env.namedElements->selectByKind(qvtoperational::ModelType)->select(name = path.name) |
| in if foundElements->isEmpty() and not (env.parentEnv = null) and not local |
| then _lookupModelType(env.parentEnv, path, local) |
| else foundElements->any(true) |
| endif |
| |
| def : _lookupModelType(path : qvtoperationalcs::PathElement2CS, local : Boolean) : qvtoperational::ModelType[?] = |
| let foundElements = _lookupModelType(env(), path, local) |
| in if foundElements->isEmpty() |
| then null |
| else foundElements->any(true) -- LookupVisitor will report ambiguous result |
| endif |
| |
| def : lookupModelType(typedRef : qvtoperationalcs::TypedTypeRef2CS) : qvtoperational::ModelType[?] = |
| let pathSeq = typedRef.ownedPathName.ownedPathElements2 -- FIXME, safe-navigation produce CollectionValues instead of Ecore_Collections |
| in |
| if pathSeq <> null |
| then -- TODO What if there is more than one ? |
| _lookupModelType(pathSeq->last(), false) |
| else null |
| endif |
| |
| endpackage |
| |
| package qvtoperational |
| |
| -- Enviroment configuration operations |
| context Module |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv().nestedEnv() |
| .addElementsOf(self.moduleImport.module) |
| .nestedEnv() |
| .addElements(self.ownedProperties) |
| -- .addElements(self.ownedOperations->excluding(self.ownedOperations->any(oclIsKindOf(EntryOperation)))) -- To discuss, can entry main() operation be called ? |
| .addElements(self.ownedOperations) |
| --.addElements(self.ownedClasses) No Package anymore |
| --.addElements(self.ownedPackages) No Package anymore |
| --.addElements(self.ownedTag) |
| .addElements(self.ownedVariable) |
| |
| context ModuleImport |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| context OperationalTransformation |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| |
| if self.modelParameter->includes(child) then |
| parentEnv().nestedEnv() |
| .addElementsOf(self.moduleImport.module) |
| .nestedEnv() |
| .addElements(self.ownedProperties) |
| -- .addElements(self.ownedOperations->excluding(self.ownedOperations->any(oclIsKindOf(EntryOperation)))) -- To discuss, can entry main() operation be called ? |
| .addElements(self.ownedOperations) |
| --.addElements(self.ownedClasses) No Package anymore |
| --.addElements(self.ownedPackages) No Package anymore |
| --.addElements(self.ownedTag) |
| .addElements(self.ownedVariable) |
| else |
| parentEnv().nestedEnv() |
| .addElementsOf(self.moduleImport.module) |
| .nestedEnv() |
| .addElements(self.ownedProperties) |
| -- .addElements(self.lookup::s->excluding(self.ownedOperations->any(oclIsKindOf(EntryOperation)))) -- To discuss, can entry main() operation be called ? |
| .addElements(self.ownedOperations) |
| --.addElements(self.ownedClasses) No Package anymore |
| --.addElements(self.ownedPackages) No Package anymore |
| --.addElements(self.ownedTag) |
| .addElements(self.ownedVariable) |
| .addElements(self.modelParameter) |
| endif |
| |
| |
| |
| context Library |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv().nestedEnv() |
| .addElementsOf(self.moduleImport.module) |
| .nestedEnv() |
| .addElements(self.ownedProperties) |
| -- .addElements(self.lookup::s->excluding(self.ownedOperations->any(oclIsKindOf(EntryOperation)))) -- To discuss, can entry main() operation be called ? |
| .addElements(self.ownedOperations) |
| --.addElements(self.ownedClasses) No Package anymore |
| --.addElements(self.ownedPackages) No Package anymore |
| --.addElements(self.ownedTag) |
| .addElements(self.ownedVariable) |
| |
| |
| |
| context ModelType |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| if self.additionalCondition->includes(child) then |
| parentEnv().nestedEnv() |
| .addElements(self.metamodel) -- Note this plays the role of the "import package" in OCL/QVTd |
| -- .addElement(ADD SELF VAR FROM WHERE ???? -> OMG fix) |
| else |
| parentEnv().nestedEnv() |
| .addElements(self.metamodel) |
| endif |
| |
| -- Overwritten. This will be autogenerated |
| context VarParameter |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| context ImperativeOperation |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| if (self._body = child) then |
| parentEnv().nestedEnv() |
| .addElement(self._context) |
| .addElements(self.result) |
| .addElements(self.ownedParameters) |
| else -- any other |
| parentEnv() |
| endif |
| |
| -- Overwritten. This will be autogenerated |
| context EntryOperation |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context Helper |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context Constructor |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context ContextualProperty |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| context MappingOperation |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| if (self._body = child) then |
| parentEnv().nestedEnv() |
| .addElement(self._context) |
| .addElements(self.result) |
| .addElements(self.ownedParameters) |
| else if (self.when = child) then |
| parentEnv().nestedEnv() |
| .addElement(self._context) |
| .addElements(self.ownedParameters) |
| else if (self.where = child) then |
| parentEnv().nestedEnv() |
| .addElement(self._context) |
| .addElements(self.ownedParameters) |
| .addElements(self.result) |
| else |
| parentEnv() |
| endif endif endif |
| |
| -- Overwritten. This will be autogenerated |
| context MappingParameter |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| |
| context OperationBody |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| if self.content->includes(child) then |
| parentEnv().nestedEnv() |
| .addElements(self.variable) |
| .addElements(self.content->select(x | self.content->indexOf(x) < self.content->indexOf(child)) |
| ->selectByKind(imperativeocl::VariableInitExp).referredVariable) |
| else |
| parentEnv() |
| endif |
| |
| -- Overwritten. This will be autogenerated |
| context ConstructorBody |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| if self.content->includes(child) then |
| parentEnv().nestedEnv() |
| .addElements(self.variable) |
| .addElements(self.content->select(x | self.content->indexOf(x) < self.content->indexOf(child)) |
| ->selectByKind(imperativeocl::VariableInitExp).referredVariable) |
| else |
| parentEnv() |
| endif |
| |
| context MappingBody |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| if self.content->includes(child) then |
| parentEnv().nestedEnv() |
| .addElements(self.variable) |
| .addElements(self.content->select(x | self.content->indexOf(x) < self.content->indexOf(child)) |
| ->selectByKind(imperativeocl::VariableInitExp).referredVariable) |
| else if self.initSection->includes(child) then |
| parentEnv().nestedEnv() |
| .addElements(self.variable) |
| .addElements(self.content->select(x | self.initSection->indexOf(x) < self.initSection->indexOf(child)) |
| ->selectByKind(imperativeocl::VariableInitExp).referredVariable) |
| else if self.endSection->includes(child) then |
| parentEnv().nestedEnv() |
| .addElements(self.variable) |
| .addElements(self.content->select(x | self.endSection->indexOf(x) < self.endSection->indexOf(child)) |
| ->selectByKind(imperativeocl::VariableInitExp).referredVariable) |
| else |
| parentEnv() |
| endif endif endif |
| |
| |
| -- Overwritten. This will be autogenerated |
| context ImperativeCallExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| |
| -- Overwritten. This will be autogenerated |
| context MappingCallExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| context ResolveExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| if self.condition = child then |
| parentEnv().nestedEnv() |
| .addElement(self.target) |
| else |
| parentEnv() |
| endif |
| |
| -- Overwritten. This will be autogenerated |
| context ResolveInExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context ObjectExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context DummyRelation |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context DummyRelationalTransformation |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context DummyRelationDomain |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context Tag |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context ModelParameter |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| endpackage |