blob: 3524b8b52dd52542218e73a90e1001586679c06f [file] [log] [blame]
import 'Environment.ecore'
import 'Pivot.ecore'
package pivot
context Element
def: parentEnv() : env::Environment =
let parent = oclContainer() in if parent.oclIsKindOf(Element) then parent.oclAsType(Element)._env(self) else null endif
context Class
def : _env(child : Element) : env::Environment =
let superClasses : Set(Class) = self->closure(superClasses) in
parentEnv().nestedEnv()
-- .addElements(self.ownedTemplateSignature.ownedParameter.parameteredElement->selectByKind(Type)) FIXME badOclOperation ???
.addElements(superClasses.ownedProperties->select(not isStatic))
.addElements(superClasses.ownedOperations->select(not isStatic))
.addElements(self.ownedBehavior)
context DataType
def : _env(child : Element) : env::Environment =
-- FIXME need to translate NewPivotLookupVisitor.visitDatatype
parentEnv().nestedEnv()
-- .addElements(self.ownedTemplateSignature.ownedParameter.parameteredElement->selectByKind(Type)) FIXME badOclOperation ???
context Element
def: _env(child : Element) : env::Environment =
parentEnv()
context Enumeration
def : _env(child : Element) : env::Environment =
parentEnv().nestedEnv()
-- .addElements(self.ownedTemplateSignature.ownedParameter.parameteredElement->selectByKind(Type)) FIXME badOclOperation ???
.addElements(self.ownedLiteral)
.addElements(self.ownedProperties->select(not isStatic))
.addElements(self.ownedOperations->select(not isStatic))
.addElements(self.ownedBehavior)
context ExpressionInOCL
def : _env(child : Element) : env::Environment =
parentEnv().nestedEnv()
.addElement(self.contextVariable)
.addElements(self.parameterVariable)
.addElement(self.resultVariable)
context IterateExp
def : _env(child : Element) : env::Environment =
if child = result
then parentEnv().nestedEnv().addElements(self.iterator)
else let index = iterator->indexOf(child) in
if index > 1
then parentEnv().nestedEnv().addElements(self.iterator->subOrderedSet(1, index-1))
else parentEnv().nestedEnv().addElements(self.iterator).addElement(result)
endif
endif
context IteratorExp
def : _env(child : Element) : env::Environment =
let index = iterator->indexOf(child) in
if index > 1
then parentEnv().nestedEnv().addElements(self.iterator->subOrderedSet(1, index-1))
else parentEnv().nestedEnv().addElements(self.iterator)
endif
context LetExp
def : _env(child : Element) : env::Environment =
if child = _'in'
then parentEnv().nestedEnv().addElement(self.variable)
else parentEnv()
endif
context Library
def : _env(child : Element) : env::Environment =
parentEnv().nestedEnv()
.addElements(self.ownedPackages)
.addElements(self.ownedClasses)
.addElements(self.ownedPrecedence)
context Operation
def : _env(child : Element) : env::Environment =
if ownedParameter->includes(child)
then parentEnv().nestedEnv()
-- .addElements(self.ownedTemplateSignature.ownedParameter.parameteredElement->selectByKind(Type)) FIXME badOclOperation ???
else parentEnv().nestedEnv()
.addElements(self.ownedParameter)
-- .addElements(self.ownedTemplateSignature.ownedParameter.parameteredElement->selectByKind(Type)) FIXME badOclOperation ???
endif
context Package
def : _env(child : Element) : env::Environment =
parentEnv().nestedEnv()
.addElements(self.ownedPackages)
.addElements(self.ownedClasses)
context Model
def : _env(child : Element) : env::Environment =
parentEnv()
.addElements(self.imports)
.addElements(self.ownedPackages)
endpackage