blob: 0d8203b6386fbb59df3fe7b520bf8f8ed57cd111 [file] [log] [blame]
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