diff options
Diffstat (limited to 'plugins/uml/alf/org.eclipse.papyrus.uml.alf/model/alf.ecore')
-rw-r--r-- | plugins/uml/alf/org.eclipse.papyrus.uml.alf/model/alf.ecore | 26824 |
1 files changed, 13412 insertions, 13412 deletions
diff --git a/plugins/uml/alf/org.eclipse.papyrus.uml.alf/model/alf.ecore b/plugins/uml/alf/org.eclipse.papyrus.uml.alf/model/alf.ecore index fe5bb1aee7b..18d7afe0f44 100644 --- a/plugins/uml/alf/org.eclipse.papyrus.uml.alf/model/alf.ecore +++ b/plugins/uml/alf/org.eclipse.papyrus.uml.alf/model/alf.ecore @@ -1,13412 +1,13412 @@ -<?xml version="1.0" encoding="UTF-8"?>
-<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="alf" nsURI="http://www.omg.org/spec/ALF/20120827" nsPrefix="alf">
- <eAnnotations source="http://www.eclipse.org/OCL/Import">
- <details key="ecore" value="http://www.eclipse.org/emf/2002/Ecore"/>
- <details key="types" value="http://www.eclipse.org/uml2/5.0.0/Types"/>
- <details key="uml" value="http://www.eclipse.org/uml2/5.0.0/UML"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
- <details key="invocationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
- <details key="settingDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
- <details key="validationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
- </eAnnotations>
- <eClassifiers xsi:type="ecore:EClass" name="AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An assignment of a source element that gives the value of a local name, along with a record of the defined type (if any) and multiplicity of the local name."/>
- </eAnnotations>
- <eOperations name="isNew" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let assignment = assignmentsBefore->select(name = self.name) in
 assignment->isEmpty() or assignment.source->excludes(self.source)"/>
- </eAnnotations>
- <eParameters name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"/>
- </eOperations>
- <eOperations name="update" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="assignments->reject(a | a.name = self.name)->including(self)"/>
- </eAnnotations>
- <eParameters name="assignments" ordered="false" upperBound="-1" eType="#//AssignedSource"/>
- </eOperations>
- <eOperations name="copy" lowerBound="1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="AssignedSource{
 name = self.name,
 source = if newSource = null then self.source else newSource endif,
 upper = self.upper,
 lower = self.lower,
 type = self.type,
 isParallelLocalName = 
 if isParallelLocal = null then self.isParallelLocalName 
 else isParallelLocal endif
 }"/>
- </eAnnotations>
- <eParameters name="newSource" eType="#//SyntaxElement"/>
- <eParameters name="isParallelLocal" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The local name for which this is the assigned source."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="source" lowerBound="1"
- eType="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The syntax element that is to be the source for the assigned value of the given local name."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EIntegerObject">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity upper bound for the local name."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EIntegerObject">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity lower bound for the name."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reference to the element that gives the type for the local name (if any)."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isParallelLocalName" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An indication whether this assignment is for a local name listed in a
@parallel annotation of a for statement."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SyntaxElement" abstract="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A syntax element synthesized in an abstract syntax tree, along with any additional information determined during static semantic analysis."/>
- </eAnnotations>
- <eOperations name="toReference" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return a reference to this element."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="InternalElementReference{element = self}"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="owner" eType="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the owner of this element."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="SyntaxElement_owner()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="SyntaxElement_owner" eType="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let container = self.oclContainer() in
 if container = null or not container.oclIsKindOf(SyntaxElement) then
 self.owner
 else
 container.oclAsType(SyntaxElement)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="currentScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the current scope for this element. By default, this is the current
scope of the owner of this element, if any."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.SyntaxElement_currentScope()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="SyntaxElement_currentScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let owner = self.owner() in
 if owner = null then null
 else owner.currentScope()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="enclosingStatement" eType="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the enclosing statement for this element, if there is one."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let owner = self.owner() in
 if owner = null or owner.oclIsKindOf(MemberDefinition) then null
 else if owner.oclIsKindOf(Statement) then owner.oclAsType(Statement)
 else owner.enclosingStatement()
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="enclosingExpression" eType="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the enclosing expression for this element, if there is one."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let owner = self.owner() in
 if owner = null or owner.oclIsKindOf(MemberDefinition) or
 owner.oclIsKindOf(Statement) then null
 else if owner.oclIsKindOf(Expression) then owner.oclAsType(Expression)
 else owner.enclosingExpression()
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the assignments before this element, as appropriate."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.SyntaxElement_assignmentsBefore()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="SyntaxElement_assignmentsBefore" ordered="false" upperBound="-1"
- eType="#//AssignedSource"/>
- <eOperations name="SyntaxElement_assignmentsBefore_base" ordered="false" upperBound="-1"
- eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let owner = self.owner() in
 if owner = null then Set(AssignedSource){}
 else owner.assignmentsBefore(self)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the assignments before the given subelement of this element,
if any, as appropriate. (By default, by default they are are the
assignments before this element.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.assignmentsBefore()"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
- </eOperations>
- <eOperations name="updateAll" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Update the initial set of assignments with all the assigned sources in
newAssignments."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 newAssignments->iterate(
 assignment, updatedAssignments : Set(AssignedSource) = assignments |
 assignment.update(updatedAssignments)
 )"/>
- </eAnnotations>
- <eParameters name="assignments" ordered="false" upperBound="-1" eType="#//AssignedSource"/>
- <eParameters name="newAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"/>
- </eOperations>
- <eOperations name="commonAncestor" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the effective common ancestor of a set of classifiers."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if classifiers->isEmpty() or classifiers->exists(c | c = null) then null
 else
 let classifierSet = self.removeDuplicateElements(classifiers->asBag()) in
 if classifierSet->size() = 1 then classifierSet->any(true)
 else
 let ancestors = self.commonAncestors(classifierSet) in
 let parents = ancestors.allParents() in
 self.commonAncestor(ancestors->reject(containedIn(parents)))
 endif 
 endif"/>
- </eAnnotations>
- <eParameters name="classifiers" ordered="false" upperBound="-1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="commonAncestors" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let ancestors : Bag(ElementReference) = 
 classifiers.allParents()->union(classifiers) in
 self.removeDuplicateElements(
 ancestors->select(countIn(ancestors) = classifiers->size())
 )"/>
- </eAnnotations>
- <eParameters name="classifiers" ordered="false" upperBound="-1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="removeDuplicateElements" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 elements->iterate(e, bag : Bag(ElementReference) = Bag{} |
 if e.containedIn(bag) then bag
 else bag->including(e)
 endif
 )->asSet()"/>
- </eAnnotations>
- <eParameters name="elements" ordered="false" unique="false" upperBound="-1"
- eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="resolveInLibrary" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let currentScope = self.currentScope() in
 if currentScope = null then Set(ElementReference){}
 else
 let modelScope = currentScope.modelScope() in
 if modelScope = null then Set(ElementReference){}
 else modelScope.resolvePathName('Alf::Library::' + pathName)
 endif
 endif"/>
- </eAnnotations>
- <eParameters name="pathName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="primitiveType" eType="#//ElementReference">
- <eParameters name="typeName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="primitiveType_" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referents = self.resolveInLibrary('PrimitiveTypes::' + typeName)->
 select(isPrimitiveType()) in
 if referents->isEmpty() then null
 else referents->any(true)
 endif"/>
- </eAnnotations>
- <eParameters name="typeName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="booleanType" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.primitiveType('Boolean')"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isBooleanType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="element <> null and element.conformsTo(self.booleanType())"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="integerType" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.primitiveType('Integer')"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isIntegerType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="element <> null and element.conformsTo(self.integerType())"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="stringType" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.primitiveType('String')"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isStringType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="element <> null and element.conformsTo(self.stringType())"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="unlimitedNaturalType" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.primitiveType('UnlimitedNatural')"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isUnlimitedNaturalType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="element <> null and element.conformsTo(self.unlimitedNaturalType())"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="bitStringType" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.primitiveType('BitString')"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isBitStringType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="element <> null and element.conformsTo(self.bitStringType())"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="naturalType" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.primitiveType('Natural')"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isNaturalType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="element <> null and element.conformsTo(self.naturalType())"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="isNumericType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.isIntegerType(element) or 
 self.isUnlimitedNaturalType(element) or 
 self.isNaturalType(element)"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="collectionFunctionAdd" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referents = self.resolveInLibrary('CollectionFunctions::add')->
 select(isBehavior()) in
 if referents->isEmpty() then null
 else referents->any(true)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isCollectionClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let template = element.template() in
 template <> null and
 let collectionClasses = self.resolveInLibrary('CollectionClasses') in
 collectionClasses->notEmpty() and
 collectionClasses->any(true).equals(template.namespace())"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="isIntegerCollectionClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.isCollectionClass(element) and 
 self.isIntegerType(element.collectionArgument())"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="isBitStringCollectionClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.isCollectionClass(element) and 
 self.isBitStringType(element.collectionArgument())"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="owner" eType="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The element to consider the owner of this element, if this element
does not have a composite container."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ElementReference" abstract="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reference to a model element, either directly or via its Alf abstract
syntax representation. (NOTE: The definitions of all the helper operations
of ElementReference are specific to its subclasses.)"/>
- </eAnnotations>
- <eOperations name="isUml" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isAlf" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="asUml" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="null"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="asAlf" eType="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="null"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="asMember" eType="#//Member"/>
- <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="isNamedElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isNamespace" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isNamespaceFor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="isModelNamespace" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isPackage" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isProfile" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isPackageableElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isClassifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isAbstractClassifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isAssociation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isDataType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isActiveClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isSignal" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isEnumeration" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isBehavior" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isActivity" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isMethod" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isPrimitiveType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isReception" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isOperation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isConstructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isDestructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isProperty" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isAssociationEnd" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isTemplate" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isTemplateParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isClassifierTemplateParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isParameteredElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isTemplateBinding" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isStereotype" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isEnumerationLiteral" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isLoopVariable" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isAnnotation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isSequenceExpansionExpression" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isAnyType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isDistinguishableFrom" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let member = self.asMember() in
 let otherMember = other.asMember() in
 if member = null or otherMember = null then true
 else
 member.definition.isDistinguishableFrom(otherMember.definition)
 endif"/>
- </eAnnotations>
- <eParameters name="other" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="isAssignableFrom" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 AssignableElementReference{
 reference = self, owner = element.owner()
 }.isAssignableFrom(element)"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//AssignableElement"/>
- </eOperations>
- <eOperations name="collectionArgument" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
-- let templateActuals = self.templateActuals() in
-- if templateActuals->isEmpty() then null
-- else templateActuals->first()
-- endif;
 let toSequenceOperation = self.resolve('toSequence')->select(
 isOperation() and parameters()->size() = 0 and returnParameter() <> null
 ) in
 if toSequenceOperation->size() <> 1 then null
 else toSequenceOperation->any(true).type()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- <eOperations name="visibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- <eOperations name="ownedMembers" upperBound="-1" eType="#//ElementReference"/>
- <eOperations name="members" upperBound="-1" eType="#//ElementReference"/>
- <eOperations name="visibleMembers" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.members()->select(visibility() = null or visibility() = 'public')->asSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="nestedClassifiers" upperBound="-1" eType="#//ElementReference"/>
- <eOperations name="properties" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.members()->select(isProperty())"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="associationEnds" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.members()->select(isAssociationEnd())"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="opposite" eType="#//ElementReference"/>
- <eOperations name="receptions" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.members()->select(isReception())->asSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="signal" eType="#//ElementReference"/>
- <eOperations name="parameters" upperBound="-1" eType="#//ElementReference"/>
- <eOperations name="returnParameter" eType="#//ElementReference"/>
- <eOperations name="specification" eType="#//ElementReference"/>
- <eOperations name="redefinedOperations" ordered="false" upperBound="-1" eType="#//ElementReference"/>
- <eOperations name="namespace" eType="#//ElementReference"/>
- <eOperations name="template" eType="#//ElementReference"/>
- <eOperations name="templateParameters" upperBound="-1" eType="#//ElementReference"/>
- <eOperations name="parameteredElements" upperBound="-1" eType="#//ElementReference"/>
- <eOperations name="templateActuals" upperBound="-1" eType="#//ElementReference"/>
- <eOperations name="direction" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- <eOperations name="association" eType="#//ElementReference"/>
- <eOperations name="type" eType="#//ElementReference"/>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
- <eOperations name="isOrdered" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isNonunique" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="parents" ordered="false" upperBound="-1" eType="#//ElementReference"/>
- <eOperations name="allParents" ordered="false" upperBound="-1" eType="#//ElementReference"/>
- <eOperations name="classifierBehavior" eType="#//ElementReference"/>
- <eOperations name="context" eType="#//ElementReference"/>
- <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference"/>
- <eOperations name="base" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let template = self.template() in
 if template = null then self
 else template
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="reference" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="templateBinding" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="null"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="bind" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 BoundClassifier{
 name = self.boundElementName(actuals),
 template = self,
 actual = actuals
 }.addToModel().toReference()"/>
- </eAnnotations>
- <eParameters name="actuals" unique="false" upperBound="-1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="boundElementName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 actuals->iterate(
 actual, s : String = '$$' + self.boundPathName() + '__' |
 s + if actual = null then 'any' else actual.boundPathName() endif + '_'
 ) + '_'"/>
- </eAnnotations>
- <eParameters name="actuals" unique="false" upperBound="-1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="boundPathName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isModelNamespace() then ''
 else
 let template = self.template() in
 if template = null then
 let namespace = self.namespace() in
 let name = if self.name() = null then '' else self.name() endif in
 if namespace = null or namespace.isModelNamespace() then name
 else namespace.boundPathName() + '$' + name
 endif
 else
 template.boundElementName(self.templateActuals()->asSequence())
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="qualifiedName" lowerBound="1" eType="#//QualifiedName">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isModelNamespace() then
 QualifiedName{nameBinding = OrderedSet(NameBinding){}}
 else
 let template = self.template() in
 if template = null then
 let namespace = self.namespace() in
 let qualifiedName =
 if namespace = null then null 
 else namespace.qualifiedName() endif in
 let name = self.name() in
 let nameBinding = NameBinding{
 name = if name = null then '' else name endif
 } in
 if qualifiedName = null then
 QualifiedName{nameBinding = OrderedSet{nameBinding}}
 else
 QualifiedName{
 nameBinding = qualifiedName.nameBinding->append(nameBinding)
 }
 endif
 else
 let templateName = template.qualifiedName() in
 let nameBindings = templateName.nameBinding in
 let n = nameBindings->size() in
 if n = 0 then
 templateName
 else
 let templateBinding = PositionalTemplateBinding{
 argumentName = self.templateActuals()->
 collect(templateActual | 
 if templateActual = null then 
 QualifiedName{nameBinding = OrderedSet(NameBinding){}}
 else 
 templateActual.qualifiedName() 
 endif
 )
 } in
 let name = self.name() in
 let nameBinding = NameBinding{
 name = if name = null then '' else name endif,
 binding = templateBinding
 } in
 if n = 1 then
 QualifiedName{nameBinding = OrderedSet{nameBinding}}
 else
 QualifiedName{
 nameBinding =
 nameBindings->subOrderedSet(1,n-1)->append(nameBinding)
 }
 endif
 endif
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="activeClass" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the active class corresponding to an activity, if any.
This is either the activity itself, if it is active, or the class that
has the activity as a classifier behavior."/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isActiveBehavior" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.activeClass() <> null"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="conformsTo" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eParameters name="other" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="equals" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eParameters name="other" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="containedIn" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="references->exists(equals(self))"/>
- </eAnnotations>
- <eParameters name="references" ordered="false" unique="false" upperBound="-1"
- eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="countIn" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="references->select(equals(self))->size()"/>
- </eAnnotations>
- <eParameters name="references" ordered="false" unique="false" upperBound="-1"
- eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="positionIn" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if references->isEmpty() then 0
 else
 let indices = 
 Sequence{1..references->size()}->select(i | self.equals(references->at(i)))
 in
 if indices->isEmpty() then 0
 else indices->first()
 endif
 endif"/>
- </eAnnotations>
- <eParameters name="references" unique="false" upperBound="-1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="copy" lowerBound="1" eType="#//ElementReference"/>
- <eOperations name="modelScope" lowerBound="1" eType="#//ElementReference"/>
- <eOperations name="resolvePathName" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eParameters name="pathName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="resolveInScope" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="resolveStereotype" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eParameters name="stereotypeName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="resolve" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let members = self.resolveInScope(name) in
 let outerScope = self.namespace() in
 if outerScope = null then
 members
 else
 members->union(
 outerScope.resolve(name)->select(m1 | 
 members->forAll(m2 | 
 m1.isDistinguishableFrom(m2)
 )
 )
 )
 endif"/>
- </eAnnotations>
- <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="resolveVisible" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let members = self.resolveInScope(name) in
 -- Note: If this namespace is the same as or a containing scope of the 
 -- given namespace, or if the given namespace is null, then all members 
 -- of this namespace are visible.
 if namespace = null or
 self.equals(namespace) or
 self.containsMember(namespace) then
 members
 else
 members->select(visibility() = 'public' or 
 self.allowPackageOnly() and visibility() = 'package'
 )
 endif"/>
- </eAnnotations>
- <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- <eParameters name="namespace" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="resolveAssociationEnd" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referents = self.members()->
 -- Note: Only association-owned ends are considered as association ends.
 select(isAssociation() and (properties()->size() = 2)).associationEnds()->
 select(associationEnd |
 let opposite = associationEnd.opposite() in
 opposite <> null and
 oppositeEndType.conformsTo(opposite.type()) and
 name = associationEnd.name()
 )->asSet()
 in
 let outerScope = self.namespace() in
 if outerScope = null then referents
 else
 let hiddenNames = referents.name() in
 referents->union(
 outerScope.resolveAssociationEnd(oppositeEndType, name)->
 reject(outerReferent | hiddenNames->includes(outerReferent.name()))
 )
 endif"/>
- </eAnnotations>
- <eParameters name="oppositeEndType" lowerBound="1" eType="#//ElementReference"/>
- <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="containsMember" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 member = null or
 let namespace = member.namespace() in
 namespace <> null and
 (self.equals(namespace) or
 self.containsMember(namespace))"/>
- </eAnnotations>
- <eParameters name="member" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="allowPackageOnly" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="not self.isPackage()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="stub" eType="#//ElementReference"/>
- <eOperations name="stubFor" eType="#//ElementReference">
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="constructorReference" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
				if not self.isConstructor() then null
				else
 let classReferent = self.namespace() in
 if not classReferent.isAbstractClassifier() then
 self
 else
 -- Check for an "Impl" package.
 let namespaceReferent = classReferent.namespace() in
 if namespaceReferent = null then null
 else
 let template = classReferent.template() in
 let className = classReferent.name() in
 let operationName = self.name() in
 let implClassReferent = 
 namespaceReferent.ownedMembers()->
 select(name() = 'Impl' and isPackage()).
 ownedMembers()->
 select(name() = className and isClass())
 in
 let boundClassReferent =
 if classReferent.template() = null or
 implClassReferent->exists(not isTemplate()) then 
 implClassReferent
 else 
 -- TODO: Check that template parameters match.
 implClassReferent.bind(
 classReferent.templateActuals()->asSequence()
 )
 endif
 in
 let implOperationReferent =
 boundClassReferent.ownedMembers()->
 select(name() = operationName and isOperation())
 in
 if implOperationReferent->size() <> 1 then null
 else implOperationReferent->any(true)
 endif
 endif
 endif
				endif"/>
- </eAnnotations>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="InternalElementReference" eSuperTypes="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A direct reference to a UML model element."/>
- </eAnnotations>
- <eOperations name="isAlf" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="true"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="asAlf" eType="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="asMember" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.element.oclIsKindOf(Member) then self.element.oclAsType(Member)
 else if self.element.oclIsKindOf(MemberDefinition) then
 let container = self.element.oclContainer() in
 if container.oclIsKindOf(Member) then container.oclAsType(Member)
 else null
 endif
 else null
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.element.oclIsKindOf(MemberDefinition) and
 self.element.oclAsType(MemberDefinition).isSameKindAs(member)"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="isNamedElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(MemberDefinition)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isNamespace" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(NamespaceDefinition)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isNamespaceFor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.isNamespace() and self.stubFor(unit) <> null"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="isModelNamespace" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(ModelNamespace)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isPackage" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(PackageDefinition)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isProfile" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isPackageableElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.element.oclIsKindOf(Member) and
 not self.element.oclIsKindOf(FormalParameter) and
 not self.element.oclIsKindOf(ClassifierTemplateParameter) and
 not self.isFeature()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isClassifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(ClassifierDefinition)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isAbstractClassifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.isAbstractClassifier()
 else
 self.isClassifier() and 
 self.element.oclAsType(ClassifierDefinition).isAbstract
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isAssociation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.isAssociation()
 else
 self.element.oclIsKindOf(AssociationDefinition)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isDataType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.isDataType()
 else
 self.element.oclIsKindOf(DataTypeDefinition)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.isClass()
 else
 self.element.oclIsKindOf(ClassDefinition)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isActiveClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.isActiveClass()
 else
 self.element.oclIsKindOf(ActiveClassDefinition)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isSignal" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.isSignal()
 else
 self.element.oclIsKindOf(SignalDefinition) or
 self.element.oclIsKindOf(SignalReceptionDefinition)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isEnumeration" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.isEnumeration()
 else
 self.element.oclIsKindOf(EnumerationDefinition)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isBehavior" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.isBehavior()
 else
 self.element.oclIsKindOf(ActivityDefinition)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isActivity" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.isActivity()
 else
 self.element.oclIsKindOf(ActivityDefinition)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isMethod" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.isActivity() and 
 let stub = self.stub() in
 -- The case of the stub being a property covers the case of an
 -- activity used in the default value of an external property.
 stub <> null and (stub.isOperation() or stub.isProperty())"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isPrimitiveType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isReception" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.isReception()
 else
 self.element.oclIsKindOf(ReceptionDefinition) or
 self.element.oclIsKindOf(SignalReceptionDefinition)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isOperation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(OperationDefinition)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isConstructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.isOperation() and
 self.element.oclAsType(OperationDefinition).isConstructor"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isDestructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.isOperation() and
 self.element.oclAsType(OperationDefinition).isDestructor"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.element.oclIsKindOf(MemberDefinition) and 
 self.element.oclAsType(MemberDefinition).isFeature"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isProperty" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.element.oclIsKindOf(PropertyDefinition)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isAssociationEnd" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.isProperty() and
 self.asMember().namespace.oclIsKindOf(AssociationDefinition)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.element.oclIsKindOf(FormalParameter)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isTemplate" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.element.oclIsKindOf(MemberDefinition) and
 self.element.oclAsType(MemberDefinition).isTemplate()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isTemplateParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(ClassifierTemplateParameter)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isClassifierTemplateParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(ClassifierTemplateParameter)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isParameteredElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(ClassifierTemplateParameter)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isTemplateBinding" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(BoundClassifier)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isStereotype" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isEnumerationLiteral" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(EnumerationLiteralName)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isLoopVariable" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(LoopVariableDefinition)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isAnnotation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(Annotation)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isSequenceExpansionExpression" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(SequenceExpansionExpression)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isAnyType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(AnyType)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.isNamedElement() then null
 else self.element.oclAsType(MemberDefinition).actualName()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="visibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let member = self.asMember() in
 if member = null then null
 else member.visibility()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="ownedMembers" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isNamespace() then 
 self.element.oclAsType(NamespaceDefinition).ownedMember.toReference()->
 asOrderedSet()
 else
 OrderedSet(ElementReference){}
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="members" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isNamespace() then 
 self.element.oclAsType(NamespaceDefinition).member.toReference()->
 asOrderedSet()
 else 
 OrderedSet(ElementReference){}
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="nestedClassifiers" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
		if not self.element.oclIsKindOf(ModelNamespace) then OrderedSet(ElementReference){}
		else
			self.element.oclAsType(ModelNamespace).context().nestedClassifiers()
		endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="opposite" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.isProperty() then null
 else
 let member = self.asMember() in
 if member = null then null
 else
 let owner = member.owner() in
 if not owner.oclIsKindOf(AssociationDefinition) then null
 else
 let ends = owner.oclAsType(AssociationDefinition).ownedMember in
 if ends->size() <> 2 then null
 else ends->any(e | e <> member).oclAsType(Member).toReference()
 endif
 endif
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="signal" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let element = self.element in
 if element.oclIsKindOf(ReceptionDefinition) then
 element.oclAsType(ReceptionDefinition).signal
 else if element.oclIsKindOf(SignalReceptionDefinition) then
 element.oclAsType(SignalReceptionDefinition).toReference()
 else
 null
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="parameters" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.parameters()
 else if self.isBehavior() or self.isOperation() then
 self.element.oclAsType(NamespaceDefinition).parameters().toReference()->asOrderedSet()
 else
 OrderedSet(ElementReference){}
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="returnParameter" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.returnParameter()
 else if self.isBehavior() or self.isOperation() then
 let returnParameter = self.element.oclAsType(NamespaceDefinition).returnParameter() in
 if returnParameter = null then
 null
 else
 returnParameter.toReference()
 endif
 else
 null
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="specification" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isOperation() then 
 self
 else if self.isBehavior() then
 self.element.oclAsType(NamespaceDefinition).stub()
 else 
 null
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="redefinedOperaions" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.isOperation() then Set(ElementReference){}
 else self.oclAsType(OperationDefinition).redefinedOperation
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="namespace" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isModelNamespace() then
 	self.element.oclAsType(ModelNamespace).context().namespace()
 else if self.element.oclIsKindOf(MemberDefinition) then
 self.element.oclAsType(MemberDefinition).outerScope()
 else
 null
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="template" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isTemplateBinding() then
 self.element.oclAsType(BoundClassifier).template
 else
 null
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="templateParameters" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isTemplate() then
 self.element.oclAsType(ClassifierDefinition).templateParameters().toReference()->asOrderedSet()
 else
 OrderedSet(ElementReference){}
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="parameteredElements" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.templateParameters()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="templateActuals" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isTemplateBinding() then
 self.element.oclAsType(BoundClassifier).actual->collect (actual |
 if actual.isAnyType() then null else actual endif
 )->asOrderedSet()
 else
 OrderedSet(ElementReference){}
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="direction" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isParameter() then
 self.element.oclAsType(FormalParameter).direction
 else
 null
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="association" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.isAssociationEnd() then null
 else self.namespace()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isProperty() then
 self.element.oclAsType(PropertyDefinition).typePart.type
 else if self.isParameter() then
 self.element.oclAsType(FormalParameter).typePart.type
 else if self.isBehavior() or self.isOperation() then
 let returnParameter = self.returnParameter() in
 if returnParameter = null then null
 else returnParameter.type()
 endif
 else if self.isEnumerationLiteral() then
 self.namespace()
 else
 null
 endif endif endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isProperty() then
 self.element.oclAsType(PropertyDefinition).typePart.lower
 else if self.isParameter() then
 self.element.oclAsType(FormalParameter).typePart.lower
 else
 1
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isProperty() then
 self.element.oclAsType(PropertyDefinition).typePart.upper
 else if self.isParameter() then
 self.element.oclAsType(FormalParameter).typePart.upper
 else
 1
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isOrdered" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isProperty() then
 self.element.oclAsType(PropertyDefinition).typePart.isOrdered()
 else if self.isParameter() then
 self.element.oclAsType(FormalParameter).typePart.isOrdered()
 else
 false
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isNonunique" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isProperty() then
 self.element.oclAsType(PropertyDefinition).typePart.isNonunique()
 else if self.isParameter() then
 self.element.oclAsType(FormalParameter).typePart.isNonunique()
 else
 false
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="parents" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isClassifier() then
 self.element.oclAsType(ClassifierDefinition).specializationReferent->asSet()
 else
 Set(ElementReference){}
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="allParents" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isClassifier() then
 self.element.removeDuplicateElements(
 self->closure(parents())->excluding(self)->asBag()
 )->asSet()
 else
 Set(ElementReference){}
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="classifierBehavior" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.isActiveClass() then null
 else
 let classifierBehavior = 
 self.element.oclAsType(ActiveClassDefinition).classifierBehavior in
 if classifierBehavior = null then null
 else classifierBehavior.toReference()
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.isNamespace() then Set(ElementReference){}
 else self.element.oclAsType(NamespaceDefinition).appliedProfiles()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="activeClass" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.isActivity() then null
 else
 	let stub = self.stub() in
 		-- This will also work is the stub is external.
	 	if stub <> null then stub.activeClass()
	 	else
	 	let namespace = self.namespace() in
			 if namespace = null or 
			 not self.equals(namespace.classifierBehavior()) then null
			 else namespace
			 endif
			 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="context" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
		if not self.isActivity() then null
		else
			let stub = self.stub() in
			let namespace = if stub = null then self.namespace() else stub.namespace() endif in
				if namespace = null or 
					namespace.nestedClassifiers()->exists(name() = self.name()) then null

				-- Note: This can only happen for a namespace that is an
				-- external element reference.
				else if namespace.isBehavior() then namespace.context()

				else namespace
				endif endif
		endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="conformsTo" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 other = null or
 self.isClassifier() and (self.equals(other) or
 self.element.oclAsType(ClassifierDefinition).
 specializationReferent->exists(conformsTo(other)))"/>
- </eAnnotations>
- <eParameters name="other" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="equals" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
		other <> null and (other.asAlf() = self.element or 
			self.isModelNamespace() and other.asUml() = self.element.oclAsType(ModelNamespace).context().asUml())"/>
- </eAnnotations>
- <eParameters name="other" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="copy" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="InternalElementReference{element = self.element}"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="modelScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.isNamespace() then null
 else self.element.oclAsType(NamespaceDefinition).modelScope()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="resolvePathName" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.element.oclIsKindOf(ModelNamespace) then
 Set(ElementReference){}
 else
 self.element.oclAsType(ModelNamespace).resolvePathName(pathName)
 endif"/>
- </eAnnotations>
- <eParameters name="pathName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="resolveInScope" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.resolveInScope(name)
 else if not self.isNamespace() then Set(ElementReference){}
 else 
 self.element.oclAsType(NamespaceDefinition).resolveInScope(name).
 toReference()->asSet()
 endif endif"/>
- </eAnnotations>
- <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="resolveStereotypeName" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="Set(ElementReference){}"/>
- </eAnnotations>
- <eParameters name="stereotypeName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="stub" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.isNamespace() then null
 else self.element.oclAsType(NamespaceDefinition).stub()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="stubFor" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.isNamespace() then null
 else self.element.oclAsType(NamespaceDefinition).stubFor(unit)
 endif"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="element" lowerBound="1"
- eType="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The Alf syntax element that represents the referenced model element."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ExternalElementReference" eSuperTypes="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A direct reference to a UML model element."/>
- </eAnnotations>
- <eOperations name="isUml" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="true"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="asUml" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="asMember" lowerBound="1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.isNamedElement() then null
 else
 Member{
 visibility = self.visibility(), 
 definition = ImportedMember{name = self.name(), referent = self}
 }
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if member.isAlf() then member.isSameKindAs(self)
 else
 let other = member.asUml().oclAsType(uml::Element) in
 self.element.oclIsKindOf(other.oclType()) or
 other.oclIsKindOf(self.element.oclType())
 endif"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="isNamedElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(uml::NamedElement)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isNamespace" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(uml::Namespace)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isNamespaceFor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.isNamespace()"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="isModelNamespace" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isPackage" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(uml::Package)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isProfile" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(uml::Profile)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isPackageableElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(uml::PackageableElement)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isClassifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(uml::Classifier)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isAbstractClassifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.isClassifier() and self.element.oclAsType(uml::Classifier).isAbstract"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isAssociation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(uml::Association)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isDataType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(uml::DataType)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(uml::Class) and not self.element.oclIsKindOf(uml::Behavior)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isActiveClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.isClass() and self.element.oclAsType(uml::Class).isActive"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isSignal" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(uml::Signal)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isEnumeration" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(uml::Enumeration)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isBehavior" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(uml::Behavior)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isActivity" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(uml::Activity)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isMethod" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.isBehavior() and
 self.element.oclAsType(uml::Behavior).specification <> null"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isPrimitiveType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(uml::PrimitiveType)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isReception" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(uml::Reception)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isOperation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(uml::Operation)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isConstructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.isOperation() and 
 self.element.oclAsType(uml::Element).
 getAppliedStereotype('StandardProfile::Create') <> null"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isDestructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.isOperation() and 
 self.element.oclAsType(uml::Element).
 getAppliedStereotype('StandardProfile::Destroy') <> null"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(uml::Feature)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isProperty" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(uml::Property)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isAssociationEnd" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.isProperty() and 
 -- Note: Only association-owned ends are considered as association ends.
 self.element.oclAsType(uml::Property).owningAssociation <> null"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(uml::Parameter)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isTemplate" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.element.oclIsKindOf(uml::TemplateableElement) and
 self.element.oclAsType(uml::TemplateableElement).isTemplate()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isTemplateParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(uml::TemplateParameter)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isClassifierTemplateParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(uml::ClassifierTemplateParameter)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isParameteredElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.element.oclIsKindOf(uml::Classifier) and
 self.element.oclAsType(uml::Classifier).templateParameter <> null"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isTemplateBinding" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.umlTemplateBinding()->notEmpty()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isStereotype" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(uml::Stereotype)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isEnumerationLiteral" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.oclIsKindOf(uml::EnumerationLiteral)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isLoopVariable" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isAnnotation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isSequenceExpansionExpression" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if alias <> null then
 alias
 else if self.element.oclIsKindOf(uml::NamedElement) then 
 self.element.oclAsType(uml::NamedElement).name
 else if self.element.oclIsKindOf(uml::TemplateParameter) then
 let parameteredElement = 
 self.element.oclAsType(uml::TemplateParameter).parameteredElement 
 in
 if parameteredElement.oclIsKindOf(uml::NamedElement) then
 parameteredElement.oclAsType(uml::NamedElement).name
 else
 null
 endif
 else
 null
 endif endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="visibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.element.oclIsKindOf(uml::NamedElement) then ''
 else
 let visibility = self.element.oclAsType(uml::NamedElement).visibility in 
 if visibility = null then null
 else if visibility = uml::VisibilityKind::public then 'public'
 else if visibility = uml::VisibilityKind::protected then 'protected'
 else if visibility = uml::VisibilityKind::private then 'private'
 else ''
 endif endif endif endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="ownedMembers" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.isNamespace() then OrderedSet(ElementReference){}
 else 
 self.element.oclAsType(uml::Namespace).ownedMember->
 collect(m | ExternalElementReference{element = m})->asOrderedSet()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="enumerationMembers" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="EXTERNAL
(Workaround for a seeming OCL bug "unboxing" enumeration literals.)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="members" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.isNamespace() then OrderedSet(ElementReference){}
 else
 let namespace = self.element.oclAsType(uml::Namespace) in
 let members = 
 if self.isEnumeration() then
 self.enumerationMembers()
 else
	 namespace.member-> 
	 collect(m | 
	 let names = namespace.getNamesOfMember(m) in
	 if names->isEmpty() then
	 Bag{ExternalElementReference{element = m}}
	 else
	 names->collect(name | 
	 ExternalElementReference{alias = name, element = m}
	 )
	 endif
	 )
 endif->asOrderedSet() in
 let additionalMembers = self.additionalMembers() in
 additionalMembers->appendAll(members)->
 appendAll(self.templateParameters())
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="additionalMembers" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.isClassifier() then OrderedSet(ElementReference){}
 else
 -- This will collect the inherited members from the effective 
 -- expanded bound elements of each parent that is a template binding. 
 self.parents()->select(isTemplateBinding())->asOrderedSet()->
 collect(binding |
 binding.oclAsType(ExternalElementReference).inherit(
 binding.template().bind(binding.templateActuals()->asSequence()).
 members()->select(visibility() <> 'private')
 )
 )->asOrderedSet()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="inherit" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 -- NOTE: This is used to reject operations that would be inherited
 -- via a template binding, in the case that the template binding itself
 -- has an operation that should hide the inheritable operation.
 -- This is used in the Alf standard library implementation as a
 -- substitute for redefinition of operations from template instantiation. 
 let ownedOperations = self.ownedMembers()->select(isOperation()) in
 inheritableMembers->reject(inheritableMember |
 ownedOperations->exists(not isDistinguishableFrom(inheritableMember))
 )"/>
- </eAnnotations>
- <eParameters name="inheritableMembers" upperBound="-1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="nestedClassifiers" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
		if not self.element.oclIsKindOf(uml::Class) then OrderedSet(ElementReference){}
		else
	 self.element.oclAsType(uml::Class).nestedClassifier->collect(e |
	 ExternalElementReference{element = e}
	 )->asOrderedSet()
	 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="properties" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.isClassifier() then OrderedSet(ElementReference){}
 else if self.isAssociation() then 
 	self.members()->select(isProperty())
 else
 self.element.oclAsType(uml::Classifier).allAttributes()->
 collect(a | ExternalElementReference{element = a})->
 asOrderedSet()
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="associationEnds" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
		if not self.isAssociation() then OrderedSet(ElementReference){}
		else 
			self.element.oclAsType(uml::Association).ownedEnd->
 collect(e | ExternalElementReference{element = e})->
 asOrderedSet()
		endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="opposite" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
-- if not self.isProperty() then null
-- else self.element.oclAsType(uml::Property).opposite()
-- endif;
 if not self.isAssociationEnd() then null
 else
 let property = self.element.oclAsType(uml::Property) in
 let association = property.association in
 let ends = association.memberEnd in
 if ends->size() <> 2 then null
 else ExternalElementReference{element= ends->any(e | e <> property)}
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="signal" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.isReception() then
 null
 else
 ExternalElementReference{
 element = self.element.oclAsType(uml::Reception).signal
 }
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="namespace" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isParameteredElement() then
 ExternalElementReference{
 element = self.element.oclAsType(uml::ParameterableElement).
 templateParameter.signature.template
 }
 else if self.element.oclIsKindOf(uml::NamedElement) then
 let namespace = self.element.oclAsType(uml::NamedElement).namespace in
 if namespace = null then
 null
 else
 ExternalElementReference{element = namespace}
 endif
 else
 null
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="ownedParameters" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
				let ownedParameters = 
	 if self.isBehavior() then
	 self.element.oclAsType(uml::Behavior).ownedParameter
	 else if self.isOperation() then
	 self.element.oclAsType(uml::Operation).ownedParameter
	 else
	 OrderedSet{}
	 endif endif
	 in
	 	ownedParameters->
	 		collect(parameter | ExternalElementReference{element = parameter})->
	 		asOrderedSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="parameters" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.ownedParameters()->reject(direction() = 'return')"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="returnParameter" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let returnParameters = self.ownedParameters()->select(direction() = 'return') 
 in
 if returnParameters->isEmpty() then
 null
 else
 returnParameters->any(true)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="specification" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isOperation() then 
 self
 else if self.isBehavior() then
 let specification = self.element.oclAsType(uml::Behavior).specification in
 if specification = null then null
 else ExternalElementReference{element = specification}
 endif
 else 
 null
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="redefinedOperations" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.isOperation() then Set(ElementReference){}
 else
 self.element.oclAsType(uml::Operation).redefinedOperation->
 collect(op | ExternalElementReference{element = op})->asSet()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="template" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let templateBinding = self.umlTemplateBinding() in
 if templateBinding = null or 
 templateBinding.asUml().oclAsType(uml::TemplateBinding).signature = null then
 null
 else
 ExternalElementReference{
 element = templateBinding.asUml().oclAsType(uml::TemplateBinding).signature.template
 }
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="umlTemplateBinding" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.element.oclIsKindOf(uml::TemplateableElement) then
 let templateBindings = 
 self.element.oclAsType(uml::TemplateableElement).templateBinding 
 in
 if templateBindings->notEmpty() then
 ExternalElementReference{element = templateBindings->any(true)}
 else if self.element.oclIsKindOf(uml::NamedElement) then
 let templateBindings =
 self.element.oclAsType(uml::NamedElement).clientDependency->select(
 oclIsKindOf(uml::Realization) and
 supplier->size() = 1 and
 supplier->forAll(oclIsKindOf(uml::TemplateableElement))
 )->collect(
 supplier.oclAsType(uml::TemplateableElement).templateBinding
 )
 in
 if templateBindings->isEmpty() then
 null
 else
 ExternalElementReference{element = templateBindings->any(true)}
 endif
 else
 null
 endif endif
 else
 null
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="templateParameters" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isTemplate() then
 self.element.oclAsType(uml::TemplateableElement).
 ownedTemplateSignature.parameter->
 collect(p | ExternalElementReference{element = p})->asOrderedSet()
 else
 OrderedSet(ElementReference){}
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="parameteredElements" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isTemplate() then
 self.element.oclAsType(uml::TemplateableElement).
 ownedTemplateSignature.parameter.parameteredElement->
 collect(p | ExternalElementReference{element = p})->asOrderedSet()
 else
 OrderedSet(ElementReference){}
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="templateActuals" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let t = self.umlTemplateBinding() in
 if t = null then
 OrderedSet(ElementReference){}
 else
 let templateBinding = t.asUml().oclAsType(uml::TemplateBinding) in
 let parameterSubstitution = templateBinding.parameterSubstitution in
 templateBinding.signature.parameter->collect(parameter |
 parameterSubstitution->select(formal = parameter).actual
 )->collect(actual |
 ExternalElementReference{element = actual}
 )->asOrderedSet()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="direction" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isParameter() then
 let direction = self.element.oclAsType(uml::Parameter).direction in
 if direction = uml::ParameterDirectionKind::_in then 'in'
 else if direction = uml::ParameterDirectionKind::_in then 'in'
 else if direction = uml::ParameterDirectionKind::out then 'out'
 else if direction = uml::ParameterDirectionKind::inout then 'inout'
 else if direction = uml::ParameterDirectionKind::return then 'return'
 else null
 endif endif endif endif endif
 else
 null
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="association" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.isAssociationEnd() then null
 -- Note: Only owned ends are treated as association ends.
 else ExternalElementReference{element = self.element.oclAsType(uml::Property).owningAssociation}
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isBehavior() then
 let returnParameter = self.returnParameter() in
 if returnParameter = null then null
 else returnParameter.type()
 endif
 else
 let type =
 if self.element.oclIsKindOf(uml::TypedElement) then
 self.element.oclAsType(uml::TypedElement).type
 else if self.isOperation() then
 self.element.oclAsType(uml::Operation).type
 else if self.isEnumerationLiteral() then
 self.element.oclAsType(uml::EnumerationLiteral).enumeration
 else
 null
 endif endif endif
 in
 if type = null then null 
 else ExternalElementReference{element = type} endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.element.oclIsKindOf(uml::MultiplicityElement) then
 self.element.oclAsType(uml::MultiplicityElement).lower
 else
 1
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.element.oclIsKindOf(uml::MultiplicityElement) then
 self.element.oclAsType(uml::MultiplicityElement).upper.oclAsType(Integer)
 else
 1
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isOrdered" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.element.oclIsKindOf(uml::MultiplicityElement) then
 self.element.oclAsType(uml::MultiplicityElement).isOrdered
 else
 false
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isNonunique" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.element.oclIsKindOf(uml::MultiplicityElement) then
 not self.element.oclAsType(uml::MultiplicityElement).isUnique
 else
 false
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="parents" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isClassifier() then
 self.element.oclAsType(uml::Classifier).general->
 collect(g | ExternalElementReference{element = g})->asSet()
 else if self.element.oclIsKindOf(uml::ClassifierTemplateParameter) then
 self.element.oclAsType(uml::ClassifierTemplateParameter).constrainingClassifier->
 collect(c | ExternalElementReference{element = c})->asSet()
 else
 Set(ElementReference){}
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="allParents" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let allParents = 
 if self.isClassifier() then 
 self.element.oclAsType(uml::Classifier).allParents()->asSet()
 else if self.element.oclIsKindOf(uml::ClassifierTemplateParameter) then
 let parents = 
 self.element.oclAsType(uml::ClassifierTemplateParameter).
 constrainingClassifier 
 in
 parents->union(parents.allParents())->asSet()
 else
 Set(uml::Classifier){}
 endif endif
 in
 allParents->collect(p | ExternalElementReference{element = p})->asSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="classifierBehavior" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.element.oclIsKindOf(uml::BehavioredClassifier) then null
 else
 let classifierBehavior = 
 self.element.oclAsType(uml::BehavioredClassifier).classifierBehavior in
 if classifierBehavior = null then null
 else ExternalElementReference{element = classifierBehavior}
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.isNamespace() then Set(ElementReference){}
 else
 self.element.oclAsType(uml::Namespace).getNearestPackage().
 getAllAppliedProfiles()->
 collect(e | ExternalElementReference{element = e})->asSet()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="activeClass" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.isBehavior() then null
 else
 let context = self.element.oclAsType(uml::Behavior).context in
 	if context <> null then ExternalElementReference{element = context}
 	else if self.element.oclAsType(uml::Behavior).isActive then self
 	else null
 	endif endif 
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="context" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
		if not self.isBehavior() then null
		else
			let context = self.element.oclAsType(uml::Behavior).context in
				if context = null then self 
				else ExternalElementReference{element = context} 
				endif
		endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="conformsTo" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 other = null or
 self.isClassifier() and 
 let otherType = other.asUml() in
 otherType <> null and otherType.oclIsKindOf(uml::Type) and
 self.element.oclAsType(uml::Classifier).conformsTo(otherType.oclAsType(uml::Type))"/>
- </eAnnotations>
- <eParameters name="other" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="equals" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 other <> null and 
 	(other.asUml() = self.element and other.name() = self.name() or
 	 other.isModelNamespace() and other.asAlf().oclAsType(ModelNamespace).context().asUml() = self.element)"/>
- </eAnnotations>
- <eParameters name="other" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="copy" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="ExternalElementReference{element = self.element}"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="modelScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isNamespace() then self
 else null
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="resolvePathName" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="ExternalElementReference_resolvePathName(pathName)"/>
- </eAnnotations>
- <eParameters name="pathName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="ExternalElementReference_resolvePathName" ordered="false" upperBound="-1"
- eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="EXTERNAL"/>
- </eAnnotations>
- <eParameters name="pathName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="resolveInScope" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.members()->select(name() = name)->asSet()"/>
- </eAnnotations>
- <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="resolveStereotype" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isProfile() then
 self.element.oclAsType(uml::Package).ownedElement->
 select(oclIsKindOf(uml::Stereotype) and oclAsType(uml::Stereotype).name = stereotypeName)->
 collect(e | ExternalElementReference{element = e})->asSet()
 else
 Set(ElementReference){}
 endif"/>
- </eAnnotations>
- <eParameters name="stereotypeName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="stub" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="null"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="stubFor" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let definition = unit.definition in
 if not definition.oclIsKindOf(ActivityDefinition) then null
 else
 let name = definition.actualName() in
 let referents = self.ownedMembers()->select(
 isOperation() and (name = name() or name.startsWith(name() + '$method$')) or
 isActiveBehavior() and (name = name() or name.startsWith(name() + '$behavior$')) or
 isProperty() and name.startsWith(name() + '$defaultValue$') 
 ) in
 if referents->isEmpty() then null
 else referents->any(true)
 endif
 endif"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="element" lowerBound="1"
- eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referenced model element."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="alias" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The alias for the model element, if this is a reference to an imported
element with multiple names within a namespace."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ExternalEnumerationLiteralReference"
- eSuperTypes="#//ExternalElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Workaround for apparent bug in Eclipse OCL handling of enumeration literals."/>
- </eAnnotations>
- <eOperations name="isNamedEement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="true"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isClassifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isEnumerationLiteral" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="true"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="ExternalEnumerationLiteralReference_visibility" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- <eOperations name="visibility" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="ExternalEnumerationLiteralReference_visibility()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="ExternalEnumerationLiteralReference_type" lowerBound="1" eType="#//ElementReference"/>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="ExternalEnumerationLiteralReference_type()"/>
- </eAnnotations>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="BoundElementReference" eSuperTypes="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reference to an element as bound within a template instantiation."/>
- </eAnnotations>
- <eOperations name="isUml" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isAlf" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="true"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="asUml" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="null"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="asAlf" eType="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.asMember()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="asMember" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 Member{
 visibility = self.visibility(),
 definition = ImportedMember{
 name = self.name(),
 referent = self.referent
 }
 }"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isSameKindAs(member)"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="isNamedElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="true"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isNamespace" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isNamespace()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isNamespaceFor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="isModelNamespace" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isPackage" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isPackage()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isProfile" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isProfile()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isPackageableElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isPackageableElement()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isClassifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isClassifier()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isAbstractClassifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isAbstractClassifier()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isAssociation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isAssociation()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isDataType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isDataType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isClass()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isActiveClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isActiveClass()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isSignal" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isSignal()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isEnumeration" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isEnumeration()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isBehavior" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isBehavior()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isActivity" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isActivity()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isMethod" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isMethod()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isPrimitiveType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isPrimitiveType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isReception" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isReception()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isOperation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isOperation()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isConstructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isConstructor()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isDestructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isDestructor()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isFeature()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isProperty" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isProperty()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isAssociationEnd" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isAssociationEnd()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isParameter()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isTemplate" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isTemplateBinding() then
 self.templateBinding.isTemplate()
 else
 self.referent.isTemplate()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isTemplateParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isClassifierTemplateParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isParameteredElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isStereotype" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isStereotype()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isEnumerationLiteral" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isEnumerationLiteral()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isLoopVariable" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isAnnotation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isSequenceExpansionExpression" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isDistinguishableFrom" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isDistinguishableFrom(other)"/>
- </eAnnotations>
- <eParameters name="other" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.name()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="visibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.visibility()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="ownedMembers" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.boundReferencesTo(
 self.referent.ownedMembers()->reject(isTemplateParameter())
 )->asOrderedSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="members" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.boundReferencesTo(
 self.referent.members()->reject(isTemplateParameter())
 )->asOrderedSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="nestedClassifiers" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.boundReferencesTo(self.referent.nestedClassifiers())->asOrderedSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="properties" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.boundReferencesTo(self.referent.properties())->asOrderedSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="associationEnds" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.boundReferencesTo(self.referent.associationEnds())->asOrderedSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="opposite" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.boundReferenceTo(self.referent.opposite())"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="signal" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.boundReferenceTo(self.referent.signal())"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="parameters" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.boundReferencesTo(self.referent.parameters())->asOrderedSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="returnParameter" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.boundReferenceTo(self.referent.returnParameter())"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="specification" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.boundReferenceTo(self.referent.specification())"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="redefinedOperations" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.redefinedOperations()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="namespace" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.namespace <> null then self.namespace
 else
 let namespace = self.referent.namespace() in
 if self.template() <> null then namespace
 else self.boundReferenceTo(namespace)
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="template" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isTemplateBinding() then self.referent
 else null
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="templateParameters" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="OrderedSet(ElementReference){}"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="parameteredElements" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="OrderedSet(ElementReference){}"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isTemplateBinding" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.templateBinding.template().equals(self.referent)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="templateActuals" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isTemplateBinding() then self.templateBinding.templateActuals()
 else OrderedSet(ElementReference){}
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="direction" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.direction()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="association" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isAssociationEnd() then self.namespace()
 else null
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let type = self.referent.type() in
 -- This handles the special case of a constructor of a template class
 -- that has that class directly as its return type, rather than a
 -- template binding for it.
 if self.isConstructor() and 
 self.templateBinding.template().equals(type) then
 type.bind(self.templateBinding.templateActuals()->asSequence())
 else
 self.boundReferenceTo(type)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.lower()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.upper()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isOrdered" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isOrdered()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isNonunique" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isNonunique()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="parents" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.boundReferencesTo(self.referent.parents()->asOrderedSet())->asSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="allParents" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.boundReferencesTo(self.referent.allParents()->asOrderedSet())->asSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="classifierBehavior" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.classifierBehavior()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.appliedProfiles()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="reference" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="templateBinding" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.templateBinding"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="activeClass" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isActivity() then self
 else null
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="context" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.boundReferenceTo(self.referent.context())"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isActiveBehavior" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.activeClass() <> null"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="conformsTo" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 other = null or
 self.isClassifier() and (self.equals(other) or
 self.parents()->exists(conformsTo(other)))"/>
- </eAnnotations>
- <eParameters name="other" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="equals" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 other <> null and
 other.oclIsKindOf(BoundElementReference) and
 self.templateBinding.equals(other.templateBinding()) and
 self.referent.equals(other.oclAsType(BoundElementReference).referent)"/>
- </eAnnotations>
- <eParameters name="other" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="copy" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 BoundElementReference{
 referent = self.referent,
 namespace = self.namespace,
 templateBinding = self.templateBinding
 }"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="modelScope" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.modelScope()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="resolvePathName" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="Set(ElementReference){}"/>
- </eAnnotations>
- <eParameters name="pathName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="resolveInScope" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.members()->select(name() = name)->asSet()"/>
- </eAnnotations>
- <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="resolveStereotype" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="Set(ElementReference){}"/>
- </eAnnotations>
- <eParameters name="stereotypeName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="stub" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="null"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="stubFor" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="null"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="boundReferenceTo" eType="#//ElementReference">
- <eParameters name="element" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="boundReferenceTo1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if element = null then null
 else if not element.isNamedElement() then element
 else if element.isTemplateBinding() then
 let actuals = self.boundReferencesTo(element.templateActuals()) in
 element.template().bind(actuals)
 else if element.isParameteredElement() then
 let parameters = 
 self.templateBinding.template().parameteredElements()->asSequence() in
 let i = element.positionIn(parameters) in
 if i > 0 then
 self.templateBinding.templateActuals()->at(i)
 else
 element
 endif
 else
 let elementTemplateBinding = element.templateBinding() in
 if elementTemplateBinding = null then 
 if self.referent.equals(element.namespace()) then
 BoundElementReference{
 referent = element,
 namespace = self,
 templateBinding = self.templateBinding
 }
 else if self.templateBinding.template().containsMember(element) then
 BoundElementReference{
 referent = element,
 namespace = null,
 templateBinding = self.templateBinding
 }
 else
 element
 endif endif
 else if not elementTemplateBinding.equals(self.templateBinding) then
 BoundElementReference{
 referent = element.reference(),
 namespace = null,
 templateBinding = 
 self.boundReferenceTo(elementTemplateBinding).templateBinding()
 }
 else
 element
 endif endif
 endif endif endif endif"/>
- </eAnnotations>
- <eParameters name="element" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="boundReferencesTo" unique="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="elements->collect(element | self.boundReferenceTo(element))"/>
- </eAnnotations>
- <eParameters name="elements" upperBound="-1" eType="#//ElementReference"/>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="referent" lowerBound="1"
- eType="#//ElementReference"/>
- <eStructuralFeatures xsi:type="ecore:EReference" name="namespace" eType="#//ElementReference"/>
- <eStructuralFeatures xsi:type="ecore:EReference" name="templateBinding" lowerBound="1"
- eType="#//ElementReference"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="DocumentedElement" abstract="true" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A syntax element that has documentation comments associated with it."/>
- </eAnnotations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="documentation" ordered="false"
- upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The documentation text to be associated with a syntax element. Each string is intended to be mapped to the body of a comment element in the target UML model."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SequenceExpansionExpression" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression used to carry out one of a predefined set of operations over each of the elements in a sequence."/>
- </eAnnotations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.argument <> element then self.assignmentBefore
 else
 self.variableSource.update(self.assignmentsAfterPrimary())
 endif"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
- </eOperations>
- <eOperations name="assignmentsAfterPrimary" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let expression = self.primary.expression in
 if expression = null then self.assignmentBefore
 else expression.assignmentAfter
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isSelectOrReject then
 let expression = self.primary.expression in
 if expression = null then null else expression.type endif
 else if self.isCollectOrIterate then
 if self.argument = null then null else self.argument.type endif
 else if self.isForAllOrExistsOrOne or self.isIsUnique then
 self.booleanType()
 else
 null
 endif endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isSelectOrReject then 0
 else if self.isCollectOrIterate then
 let expression = self.primary.expression in
 if expression = null or self.argument = null then 0
 else expression.lower * self.argument.lower
 endif
 else if self.isForAllOrExistsOrOne or self.isIsUnique then 1
 else 0
 endif endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isSelectOrReject then -1
 else if self.isCollectOrIterate then
 let expression = self.primary.expression in
 if expression = null or self.argument = null then 0
 else 
 let upper1 = expression.upper in
 let upper2 = self.argument.upper in
 if upper1 = -1 or upper2 = -1 then -1 else upper1 * upper2 endif
 endif
 else if self.isForAllOrExistsOrOne or self.isIsUnique then 1
 else 0
 endif endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="sequenceExpansionExpressionVariableSourceDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assigned source for the expansion variable of a sequence expansion
expression is the expression itself. The type for the assignment is the
type of the primary expression of the sequence expansion expression and
the multiplicity lower and upper bounds are 1."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceExpansionExpressionAssignmentsBeforePrimary" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the primary expression of a sequence expansion
expression are the same as the assignments before the sequence expansion
expression.
(See the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceExpansionExpressionAssignmentsBeforeArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the argument expression of a sequence expansion
expression include those after the primary expression plus one for the
expansion variable.
(See the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceExpansionExpressionVariableName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expansion variable name may not conflict with any name already
assigned after the primary expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 not self.assignmentsAfterPrimary()->exists(name = self.variable)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceExpansionExpressionAssignmentsAfterArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after the argument expression of a sequence expansion
expression must be the same as the assignments before the argument
expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.argument <> null implies self.argument.newAssignments()->isEmpty()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="selectOrRejectExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A select or reject expression has the same type as its primary expression.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="selectOrRejectExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A select or reject expression has a multiplicity lower bound of 0.
(See the lower operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="selectOrRejectExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A select or reject expression has a multiplicity upper bound of *.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="selectOrRejectExpressionArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument of a select or reject expression must have type Boolean and
a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 (self.isSelectOrReject and self.argument <> null) implies
 self.isBooleanType(self.argument.type) and
 self.argument.upper = 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="collectOrIterateExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A collect or iterate expression has the same type as its argument
expression.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="collectOrIterateExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A collect or iterate expression has a multiplicity lower bound that is
the product of the bounds of its primary and argument expressions.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="collectOrIterateExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A collect or iterate expression has a multiplicity upper bound that is
the product of the bounds of its primary and argument expressions.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forAllOrExistsOrOneExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A forAll, exists or one expression has the type Boolean.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forAllOrExistsOrOneExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A forAll, exists or one expression has a multiplicity lower bound of 1.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forAllOrExistsOrOneExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A forAll, exists or one expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forAllOrExistsOrOneExpressionArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument of a forAll, exists or one expression must have type Boolean
and a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 (self.isForAllOrExistsOrOne and self.argument <> null) implies
 self.isBooleanType(self.argument.type) and
 self.argument.upper = 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="isUniqueExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An isUnique expression has the type Boolean.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="isUniqueExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An isUnique expression has a multiplicity lower bound of 1.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="isUniqueExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An isUnique expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="isUniqueExpressionExpressionArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument of an isUnique expression must have a multiplicity upper
bound of 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 (self.isIsUnique and self.argument <> null) implies 
 self.argument.upper = 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a sequence expansion expression are the same as
after its primary expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.assignmentsAfterPrimary()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="sequenceExpansionExpressionOperation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.isSelectOrReject or self.isCollectOrIterate or 
 self.isForAllOrExistsOrOne or self.isIsUnique"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="operation" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the operation to be carried out."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="variable" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the expansion variable available as a local name within the
argument expression."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="variableSource" eType="#//AssignedSource"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assigned source for the expansion variable within the argument
expression. The source is actually the sequence expansion expression
itself."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let expression = self.primary.expression in
 AssignedSource{
 name = variable,
 source = self,
 type = if expression = null then null else expression.type endif,
 lower = 1,
 upper = 1
 }"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="argument" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument expression. The exact form required for this expression
depends on which expansion operation is being carried out."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="primary" lowerBound="1"
- eType="#//ExtentOrExpression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The class name or primary expression that evaluates to the sequence to
be acted on."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isSelectOrReject" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operation = 'select' or self.operation = 'reject'"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCollectOrIterate" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operation = 'collect' or self.operation = 'iterate'"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isForAllOrExistsOrOne"
- lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operation = 'forAll' or self.operation = 'exists' or self.operation = 'one'"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isIsUnique" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operation = 'isUnique'"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="AssignableElement" abstract="true" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An element that is or has an assignable value."/>
- </eAnnotations>
- <eOperations name="typeCached" eType="#//ElementReference"/>
- <eOperations name="type" eType="#//ElementReference"/>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
- <eOperations name="isNull" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.type = null and self.lower = 0 and self.upper = 0"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isAssignableFromElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.isAssignableFrom(
 AssignableElementReference{
 reference = element, owner = self.owner()
 }
 )"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="isAssignableFrom" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 source = null or 
 self.isTypeConformantWith(source) and 
 self.isMultiplicityConformantWith(source)"/>
- </eAnnotations>
- <eParameters name="source" lowerBound="1" eType="#//AssignableElement"/>
- </eOperations>
- <eOperations name="isTypeConformantWith" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 -- Null conversion
 source.isNull() or
 
 let sourceType = source.type in
 
 -- Type conformance
 self.isConformantWithType(sourceType) or
 
 -- Collection conversion
 sourceType <> null and self.isCollectionClass(sourceType) and
 source.upper = 1 and (self.upper = -1 or self.upper > 1) and
 self.isConformantWithType(sourceType.collectionArgument())"/>
- </eAnnotations>
- <eParameters name="source" lowerBound="1" eType="#//AssignableElement"/>
- </eOperations>
- <eOperations name="isConformantWithType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let targetType = self.type in
 -- Untyped target is conformant with anything.
 targetType = null or
 
 -- Untyped source is only assignable to untyped target.
 sourceType <> null and (
 
 -- Basic type conformance.
 sourceType.conformsTo(targetType) or
 
 -- Bit string conversion.
 self.isIntegerType(sourceType) and self.isBitStringType(targetType)
 )"/>
- </eAnnotations>
- <eParameters name="sourceType" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="isMultiplicityConformantWith" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let targetUpper = self.upper in
 let sourceUpper = source.upper in
 targetUpper = -1 or targetUpper > 1 or
 sourceUpper <> -1 and sourceUpper <= targetUpper"/>
- </eAnnotations>
- <eParameters name="source" lowerBound="1" eType="#//AssignableElement"/>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="upper" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The statically determined upper bound of the multiplicity of this
element."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.upper()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="lower" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The statically determined lower bound of the multiplicity of this
element."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.lower()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reference to the element that specifies the statically determined
type for this element (if any)."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.typeCached()"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="AssignableElementReference" eSuperTypes="#//AssignableElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A wrapper for treating an element reference as an assignable element.
This is necessary to tie into the ownership hierarchy, so library
type resolution works correctly."/>
- </eAnnotations>
- <eOperations name="type" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.reference.type()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.reference.lower()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.reference.upper()"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="reference" lowerBound="1"
- eType="#//ElementReference"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="Expression" abstract="true" eSuperTypes="#//AssignableElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A model of the common properties derived for any Alf expression.
NOTE: The derivations for all properties of Expression except
AssignmentsAfter are specific to its various subclasses.
"/>
- </eAnnotations>
- <eOperations name="reference" lowerBound="1" eType="#//ExpressionReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="ExpressionReference{expression = self}"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="newAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Get the assigned sources for assignments made within this expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let assignmentsBefore = self.assignmentBefore in
 self.assignmentAfter->select(isNew(assignmentsBefore))"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns the assignments from before this expression updated for any
assignments made in the expression. By default, this is the same set as
the assignments before the expression. This operation is redefined only
in subclasses of Expression for kinds of expressions that make assignments."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.Expression_updateAssignments()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="Expression_updateAssignments" ordered="false" upperBound="-1"
- eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.assignmentBefore"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="updateAssignmentsCached" ordered="false" upperBound="-1" eType="#//AssignedSource"/>
- <eOperations name="resolve" eType="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the assigned source element for the given name before this
expression, if any."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let assignment = self.assignmentBefore->select(a | a.name = name) in
 if assignment->isEmpty() then null
 else assignment->any(true).source
 endif"/>
- </eAnnotations>
- <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="isAddTarget" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return whether the given expression is the first argument of an
invocation of CollectionFunctions::add. This is false by default and
is overidden for relevant invocation expressions."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- <eParameters name="targetExpression" lowerBound="1" eType="#//Expression"/>
- </eOperations>
- <eOperations name="expressionAssignmentAfterDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after an expression are given by the result of the
updateAssignments helper operation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="expressionUniqueAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="No name may be assigned more than once before or after an expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.assignmentBefore->isUnique(name) and self.assignmentAfter->isUnique(name)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentBefore" ordered="false"
- upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assigned sources for local names available lexically before this
expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 self.assignmentsBefore()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentAfter" ordered="false"
- upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assigned sources for local names available lexically after this
expression. This includes not only any assignments made within the
expression, but also any assignments that are unchanged from before the
expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.updateAssignmentsCached()"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ExpressionReference" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Provides a non-composition reference to an expression that is owned elsewhere."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression.type"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression.lower"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression.upper"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isAddTarget" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression.isAddTarget(targetExpression)"/>
- </eAnnotations>
- <eParameters name="targetExpression" lowerBound="1" eType="#//Expression"/>
- </eOperations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression.assignmentBefore"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression.assignmentAfter"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
- eType="#//Expression"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ExtentOrExpression" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The target of a sequence operation, reduction or expansion expression,
which may be either a primary expression or a class name denoting the class
extent."/>
- </eAnnotations>
- <eOperations name="isAddTarget" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.enclosingExpression().isAddTarget(targetExpression)"/>
- </eAnnotations>
- <eParameters name="targetExpression" lowerBound="1" eType="#//Expression"/>
- </eOperations>
- <eOperations name="extentOrExpressionExpressionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The effective expression for the target is the parsed primary expression,
if the target is not a qualified name, a name expression, if the target
is a qualified name other than a class name, or a class extent expression,
if the target is the qualified name of a class."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="extentOrExpressionExtentType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let expression = self.expression in
 expression.oclIsKindOf(ClassExtentExpression) implies
 expression.oclAsType(ClassExtentExpression).validateClassExtentExpressionExtentType()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="extentOrExpressionResolution" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let expression = self.expression in
 expression.oclIsKindOf(NameExpression) implies
 expression.oclAsType(NameExpression).validateNameExpressionResolution()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="name" eType="#//QualifiedName"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the target is a qualified name, then that name, before it is
disambiguated into either a name expression or a class name."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The effective expression for the target."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 if self.nonNameExpression <> null then self.nonNameExpression
 else if self.name.referent->exists(isClass()) then
 ClassExtentExpression{
 className = self.name.copy(),
 owner = self
 }
 else
 NameExpression{
 name = self.name.copy(),
 owner = self
 }
 endif endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="nonNameExpression" eType="#//Expression"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The target primary expression, if it is not a qualified name."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="QualifiedName" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The representation of a qualified name as a sequence of individual simple
names."/>
- </eAnnotations>
- <eOperations name="copy" lowerBound="1" eType="#//QualifiedName">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="QualifiedName{
 nameBinding = self.nameBinding.copy(),
 isAmbiguous = self.isAmbiguous,
 owner = self.owner()
 }"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="addName" lowerBound="1" eType="#//QualifiedName">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let nameBinding = NameBinding{name = name} in
 QualifiedName{
 nameBinding = self.nameBinding.copy()->append(nameBinding),
 isAmbiguous = self.isAmbiguous,
 owner = self.owner()
 }"/>
- </eAnnotations>
- <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="addNameBindings" lowerBound="1" eType="#//QualifiedName">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 QualifiedName{
 nameBinding = self.nameBinding.copy()->includingAll(nameBindings),
 isAmbiguous = self.isAmbiguous,
 owner = self.owner()
 }"/>
- </eAnnotations>
- <eParameters name="nameBindings" upperBound="-1" eType="#//NameBinding"/>
- </eOperations>
- <eOperations name="modelReferents" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="EXTERNAL
Get the referents for this qualified name as a fully qualified name in
model scope."/>
- </eAnnotations>
- </eOperations>
- <eOperations name="qualifiedNameUnqualifiedNameDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The unqualified name of a qualified name is the last name binding.
"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="qualifiedNamePathNameDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The path name for a qualified name consists of the string representation
of each of the name bindings, separated by "::" punctuation. The string
representation of a name binding is its name followed by the
representation of its template binding, if it has one. The string
representation of a positional template binding consists of an ordered
list of the path names of its argument qualified names separated by
commas, all surrounded by the angle brackets "<" and ">".
The string representation of a named template binding consists of an
ordered list of its template parameter substitutions, each consisting of
the formal parameter name followed by "=>" followed by the path name of
the argument qualified name, separated by commas, all surrounded by the
angle brackets "<" and ">"."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="qualifiedNameIsFeatureReferenceDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A qualified name is a feature reference if its disambiguation is not
empty."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="qualifiedNameQualificationDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The qualification of a qualified name is a empty if the qualified name
has only one name binding. Otherwise it is the qualified name consisting
of all the name bindings of the original qualified name except for the
last one. The qualification of a qualified name is considered ambiguous
if the qualified name is ambiguous and has more than two name bindings."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="qualifiedNameDisambiguationDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a qualified name is not ambiguous or it has a qualification that resolves
to a namespace, then it is has no disambiguation. Otherwise, its
disambiguation is a feature reference with a name given by the unqualified
name of the qualified name and a target expression determined by the
disambiguation of the qualification of the qualified name."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="qualifiedNameReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referents of a qualified name are the elements to which the name may
resolve in the current scope, according to the UML rules for namespaces
and named elements."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="qualifiedNameLocalName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a qualified name is a local name, then the reference must be within
the same local scope as the definition of the named element."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="qualifiedNameNonLocalUnqualifiedName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a qualified name is an unqualified, non-local name, then it must be
visible in the current scope of the use of the name."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="qualifiedNameQualifiedResolution" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a qualified name has a qualification, then its unqualified name must
name an element of the namespace named by the qualification, where the
first name in the qualification must name an element of the current scope."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="qualifiedNameTemplateBinding" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the unqualified name of a qualified name has a template binding, then
the template name must resolve to a template. The template binding must
have an argument name for each of the template parameters and each argument
name must resolve to a classifier. If the template parameter has constraining
classifiers, then the referent of the corresponding argument name must conform
to all those constraining classifiers."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.templateName <> null implies
 let templates = self.templateName.referent in 
 templates->size() = 1 and 
 templates->forAll(template | 
 template.isTemplate() and 
 self.unqualifiedName.binding.matches(template)
 )"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="qualifiedNameTemplateNameDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the last name binding in a qualified name has a template binding, then
the template name is a qualified name with the same template bindings as
the original qualified name, but with the template binding removed on the
last name binding."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="disambiguationCached" eType="#//FeatureReference"/>
- <eOperations name="disambiguation" eType="#//FeatureReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.isAmbiguous or self.qualification = null then null
 else if self.qualification.referent->exists(isNamespace()) then null
 else 
 FeatureReference{
 nameBinding = self.unqualifiedName.copy(), 
 expression = 
 if self.qualification.isFeatureReference then 
 PropertyAccessExpression{
 featureReference = self.qualification.disambiguation
 }
 else NameExpression{name = self.qualification}
 endif,
 owner = self.owner()
 }
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="referentCached" ordered="false" upperBound="-1" eType="#//ElementReference"/>
- <eOperations name="referent" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isFeatureReference then
 Set(ElementReference){}
 else if self.templateName = null then
 let n = self.nameBinding->size() in
 let currentScope = self.currentScope() in
 if n = 0 or currentScope = null then
 Set(ElementReference){}
 else if n = 1 then
 -- Resolve as an unqualified name.
 currentScope.resolve(self.unqualifiedName.toName())
 else
 -- Resolve as a qualified name.
 self.qualification.referent->select(isNamespace()).
 resolveVisible(self.unqualifiedName.toName(), currentScope)->
 asSet()
 endif endif
 else
 -- Resolve as a bound element.
 let referents = self.templateName.referent in
 if referents->size() <> 1 then
 Set(ElementReference){}
 else
 let template = referents->any(true) in
 let actuals = self.unqualifiedName.binding.bindTo(template) in
 Set{template.bind(actuals)}
 endif
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAmbiguous" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this qualified name is ambiguous."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="pathName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The complete path name for the qualified name, with individual name
bindings separated by "::" punctuation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 if self.unqualifiedName = null then ''
 else if self.qualification = null then self.unqualifiedName.toString()
 else self.qualification.pathName + '::' + self.unqualifiedName.toString()
 endif endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isFeatureReference" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Indicates whether this qualified name has been disambiguated to a
feature reference."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.disambiguation <> null"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="qualification" eType="#//QualifiedName"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The qualified name corresponding to the qualification part of this
qualified name, if any."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let n = self.nameBinding->size() in 
 if n <= 1 then null
 else QualifiedName{
 nameBinding = self.nameBinding->subOrderedSet(1, n - 1).copy(),
 isAmbiguous = n > 1 and self.isAmbiguous,
 owner = self.owner()
 }
 endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="disambiguation" eType="#//FeatureReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The disambiguation into a feature reference of a syntactic element
initially parsed as a qualified name."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.disambiguationCached()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="nameBinding" upperBound="-1"
- eType="#//NameBinding" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The sequence of individual name bindings in this qualified name."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="referent" ordered="false"
- upperBound="-1" eType="#//ElementReference" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The possible referents to which this qualified name may resolve.
(Note that the UML rules for namespaces in general allow a namespace to
contain elements of different kinds with the same name.) If the qualified
name is for a template instantiation, then the referent is the equivalent
bound element."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.referentCached()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="unqualifiedName" eType="#//NameBinding"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The rightmost individual name binding in the qualified name, without the
qualification."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.nameBinding->last()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="templateName" eType="#//QualifiedName"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If this qualified name is for a template binding, then the name of the
template for which this qualified name is a binding."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 if self.unqualifiedName = null or 
 self.unqualifiedName.binding = null then 
 null
 else if self.nameBinding->size() = 1 then
 QualifiedName{
 nameBinding = Sequence{NameBinding{name = self.unqualifiedName.name}},
 isAmbiguous = false,
 owner = self.owner()
 }
 else
 QualifiedName{
 nameBinding = self.nameBinding->subOrderedSet(1, self.nameBinding->size() - 1).copy()->
 append(NameBinding{name = self.unqualifiedName.name}),
 isAmbiguous = false,
 owner = self.owner()
 }
 endif endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="FeatureReference" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reference to a structural or behavioral feature of the type of its target
expression or a binary association end the opposite end of which is typed
by the type of its target expression."/>
- </eAnnotations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression.assignmentAfter"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="behavioralFeatureReferent" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 -- TODO: Handle overloading resolution.
 let referents = self.referent->select(isOperation() or isReception()) in
 if referents->size() <> 1 then null
 else if referents->forAll(isReception()) then
 referents->any(true).signal()
 else
 referents->any(true)
 endif endif"/>
- </eAnnotations>
- <eParameters name="invocation" lowerBound="1" eType="#//InvocationExpression"/>
- </eOperations>
- <eOperations name="featureReferenceReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The features referenced by a feature reference include the features of
the type of the target expression and the association ends of any binary
associations whose opposite ends are typed by the type of the target
expression."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="featureReferenceTargetType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The target expression of the feature reference may not be untyped, nor
may it have a primitive or enumeration type."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let type = self.expression.type in
 type <> null and not type.isPrimitiveType() and not type.isEnumeration()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="referentCached" ordered="false" upperBound="-1" eType="#//ElementReference"/>
- <eOperations name="referent" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.FeatureReference_referent()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="FeatureReference_referent" ordered="false" upperBound="-1"
- eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let type = self.expression.type in
 let name = self.nameBinding.toName() in
 if type = null then Set(ElementReference){}
 else
 let currentScope = self.currentScope() in
 let features = type.resolveVisible(name, currentScope) in
 if currentScope = null then features
 else features->union(currentScope.resolveAssociationEnd(type, name))
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The target expression."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="referent" ordered="false"
- upperBound="-1" eType="#//ElementReference" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The features referenced by this feature reference."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.referentCached()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="nameBinding" eType="#//NameBinding"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the feature."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="NameBinding" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An unqualified name, optionally with a template binding."/>
- </eAnnotations>
- <eOperations name="toString" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.binding = null then self.toName()
 else self.toName() + self.binding.toString()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="toName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.name = null or self.name = '' or self.name.at(1) <> '\'' then
 name
 else
 let s = self.name.substring(2, name.size() - 1) in
 self.process(s)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="process" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let i = s.indexOf('\\') in
 if i = 0 then
 s
 else 
 if i = 1 then '' else s.substring(1, i-1) endif +
 self.escape(s.at(i+1)) +
 if i+2 > s.size() then '' else self.process(s.substring(i+2, s.size())) endif
 endif"/>
- </eAnnotations>
- <eParameters name="s" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="escape" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if s = 'b' then '\b'
 else if s = 'f' then '\f'
 else if s = 't' then '\t'
 else if s = 'n' then '\n'
 else s endif endif endif endif"/>
- </eAnnotations>
- <eParameters name="s" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="copy" lowerBound="1" eType="#//NameBinding">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="NameBinding{
 name = self.name,
 binding = if self.binding = null then null else self.binding.copy() endif
 }"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="toQualifiedName" lowerBound="1" eType="#//QualifiedName">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 QualifiedName{
 nameBinding = OrderedSet{self.copy()},
 isAmbiguous = false,
 owner = owner
 }"/>
- </eAnnotations>
- <eParameters name="owner" lowerBound="1" eType="#//SyntaxElement"/>
- </eOperations>
- <eOperations name="toQualifiedNameWith" lowerBound="1" eType="#//QualifiedName">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 QualifiedName{
 nameBinding = OrderedSet{self.copy(), other},
 isAmbiguous = false,
 owner = owner
 }"/>
- </eAnnotations>
- <eParameters name="other" lowerBound="1" eType="#//NameBinding"/>
- <eParameters name="owner" lowerBound="1" eType="#//SyntaxElement"/>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="binding" eType="#//TemplateBinding"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The template binding to be used, if the name denotes a template."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An unqualified name. For names that appeared as unrestricted names in the input text, the string value here excludes the surrounding single quote characters and has any escape sequences resolved to the denoted special characters."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="TemplateBinding" abstract="true" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A list of type names used to provide arguments for the parameters of a template."/>
- </eAnnotations>
- <eOperations name="toString" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- <eOperations name="matches" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eParameters name="template" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="copy" lowerBound="1" eType="#//TemplateBinding"/>
- <eOperations name="bindTo" unique="false" upperBound="-1" eType="#//ElementReference">
- <eParameters name="template" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="NamedTemplateBinding" eSuperTypes="#//TemplateBinding">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A template binding in which the arguments are matched to formal template parameters by name."/>
- </eAnnotations>
- <eOperations name="toString" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 '<' + 
 self.substitution->iterate(substitution : TemplateParameterSubstitution; s : String = '' | 
 if s = '' then substitution.toString()
 else s + ',' + substitution.toString()
 endif
 ) + 
 '>'"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="matches" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let parameters = template.templateParameters() in 
 parameters->size() = self.substitution->size() and 
 parameters->forAll(p | self.matchesParameter(p))"/>
- </eAnnotations>
- <eParameters name="template" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="matchesParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.substitution->exists(
 parameterName = parameter.name() and
 referent <> null and
 parameter.parents()->forAll(c | referent.conformsTo(c))
 )"/>
- </eAnnotations>
- <eParameters name="parameter" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="bindTo" unique="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 template.templateParameters()->collect(p |
 let substitutions = self.substitution->select(actualParameterName() = p.name()) 
 in
 if substitutions->size() = 1 then substitutions.referent->asSequence()
 else Sequence(ElementReference){} endif
 )"/>
- </eAnnotations>
- <eParameters name="template" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="copy" lowerBound="1" eType="#//TemplateBinding">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="NamedTemplateBinding{substitution = self.substitution.copy()}"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="substitution" ordered="false"
- lowerBound="1" upperBound="-1" eType="#//TemplateParameterSubstitution" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The substitutions of arguments for template parameters."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="TemplateParameterSubstitution" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A specification of the substitution of an argument type name for a template parameter."/>
- </eAnnotations>
- <eOperations name="actualParameterName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="NameBinding{name = self.parameterName}.toName()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="toString" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.parameterName + '=>' + argumentName.pathName"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="copy" lowerBound="1" eType="#//TemplateParameterSubstitution">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="TemplateParameterSubstitution{
 parameterName = self.parameterName,
 argumentName = if self.argumentName = null then null else self.argumentName.copy() endif
 }"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="parameterName" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the template parameter."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="argumentName" lowerBound="1"
- eType="#//QualifiedName" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the argument type."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="referent" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let referents = argumentName.referent in 
 if referents->size() <> 1 or not referents->forAll(isClassifier()) then null
 else referents->any(true)
 endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="NumericUnaryExpression" eSuperTypes="#//UnaryExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A unary expression with a numeric operator."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.integerType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand.lower"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="numericUnaryExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A numeric unary expression must have type Integer.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="numericUnaryExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A numeric unary expression has the same multiplicity lower bound as its
operand expression.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="numericUnaryExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A numeric unary expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="numericUnaryExpressionOperand" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The operand expression must have type Integer and a multiplicity upper
bound of 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.isIntegerType(self.operand.type) and self.operand.upper = 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="UnaryExpression" abstract="true" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression consisting of an operator acting on a single operand expression."/>
- </eAnnotations>
- <eOperations name="unaryExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the operand of a unary expression are the same as
those before the unary expression."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="By default, the assignments after a unary expression are the same as
those after its operand expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand.assignmentAfter"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The symbol representing the operator."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="operand" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression giving the operand."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ForAllOrExistsOrOneExpression" eSuperTypes="#//SequenceExpansionExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A sequence expansion expression with a forAll, exists or one operation."/>
- </eAnnotations>
- <eOperations name="forAllOrExistsOrOneExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A forAll, exists or one expression has the type Boolean."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forAllOrExistsOrOneExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A forAll, exists or one expression has a multiplicity lower bound of 1."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forAllOrExistsOrOneExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A forAll, exists or one expression has a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forAllOrExistsOrOneExpressionArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument of a forAll, exists or one expression must have type Boolean and a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="IsolationExpression" eSuperTypes="#//UnaryExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression used to evaluate its operand expression in isolation."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand.type"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand.lower"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand.upper"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isolationExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An isolation expression has the type of its operand expression.
(See the type() expression.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="isolationExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An isolation expression has the multiplicity lower bound of its
operand expression.
(see the lower() expression.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="isolationExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An isolation expression has the multiplicity upper bound of its
operand expression.
(See the upper() expression.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="BinaryExpression" abstract="true" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression consisting of an operator acting on two operand expressions."/>
- </eAnnotations>
- <eOperations name="validateAssignments" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="In general the assignments before the operand expressions of a binary
expression are the same as those before the binary expression and, if an
assignment for a name is changed in one operand expression, then the
assignment for that name may not change in the other operand expression.
(This is overridden for conditional logical expressions.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand1.newAssignments().name->excludesAll(self.operand2.newAssignments().name)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="noNullArguments" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="By default, null arguments are not allowed for binary expressions.
(This is overridden for equality expressions.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="true"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="binaryExpressionOperandMultiplicity" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The operands of a binary expression must both have a multiplicity upper
bound no greater than 1. If null arguments are not allowed (as given by
the noNullArguments helper operation), then the upper bounds must be
exactly 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.noNullArguments() then
 self.operand1.upper = 1 and self.operand2.upper = 1
 else
 self.operand1.upper <= 1 and self.operand2.upper <= 2
 endif"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="binaryExpressionOperandAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments in the operand expressions of a binary expression must be
valid (as determined by the validateAssignments helper operation)."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.validateAssignments()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a binary expression include all the assignments
before the expression that are not reassigned in either operand
expression, plus the new assignments from each of the operand expressions."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.updateAll(
 self.assignmentBefore,
 self.operand1.newAssignments()->union(operand2.newAssignments())
 )"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="operand1" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression giving the first operand."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="operand2" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression giving the second operand."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The symbol representing the operator."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="BooleanUnaryExpression" eSuperTypes="#//UnaryExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A unary expression with a Boolean operator."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.booleanType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand.lower"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="booleanUnaryExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A Boolean unary expression has type Boolean.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="booleanUnaryExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A Boolean unary expression has the same multiplicity lower bound
as its operand expression.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="booleanUnaryExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A Boolean unary expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="booleanUnaryExpressionOperand" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The operand expression of a Boolean unary expression must have type
Boolean and a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.isBooleanType(self.operand.type) and self.operand.upper = 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="CastExpression" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression used to filter values by type."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.typeName = null then null
 else
 let referents = self.typeName.referent->
 select(isClassifier() and not isTemplate()) in
 if referents->size() <> 1 then null
 else referents->any(true)
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="0"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand.upper"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="castExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a cast expression is the referent of the given type name (if
there is one).
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="castExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A cast expression has a multiplicity lower bound of 0.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="castExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A cast expression has a multiplicity upper bound that is the same as the
upper bound of its operand expression.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="castExpressionTypeResolution" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the cast expression has a type name, then it must resolve to a
non-template classifier."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.typeName <> null implies self.type <> null"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="castExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the operand of a cast expression are the same as
those before the cast expression."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a cast expression are the same as those after its
operand expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand.assignmentAfter"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="operand" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The operand expression of the cast expression."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" eType="#//QualifiedName"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The named type of the cast expression (if any)"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAny" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the cast expression has an empty type."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="PositionalTuple" eSuperTypes="#//Tuple">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A tuple in which the arguments are matched to parameters in order by position."/>
- </eAnnotations>
- <eOperations name="size" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression->size()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="inputFor" ordered="false" upperBound="-1" eType="#//InputNamedExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if parameters->isEmpty() then Set(InputNamedExpression){}
 else
 Set{1..parameters->size()}->select(i |
 let direction = parameters->at(i).direction() in
 direction = 'in' or direction = 'inout' 
 )->collect(i : Integer | 
 InputNamedExpression{
 name = parameters->at(i).name(),
 expression = 
 if i <= self.size() then
 self.expression->at(i)
 else
 SequenceConstructionExpression{
 hasMultiplicity = true,
 owner = self
 }
 endif,
 owner = self
 }
 )->asSet()
 endif"/>
- </eAnnotations>
- <eParameters name="parameters" upperBound="-1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="outputFor" ordered="false" upperBound="-1" eType="#//OutputNamedExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if parameters->isEmpty() then Set(OutputNamedExpression){}
 else
 Set{1..parameters->size()}->select(i |
 let direction = parameters->at(i).direction() in
 -- NOTE: This allows missing arguments for out parameters.
 direction = 'out' and i <= self.size() or 
 direction = 'inout' 
 )->collect(i : Integer | 
 OutputNamedExpression{
 name = parameters->at(i).name(),
 expression = 
 if i <= self.size() then
 self.expression->at(i)
 else
 -- NOTE: This will cause an error for missing arguments for 
 -- inout parameters.
 SequenceConstructionExpression{
 hasMultiplicity = true,
 owner = self
 }
 endif,
 owner = self
 }
 )->asSet()
 endif"/>
- </eAnnotations>
- <eParameters name="parameters" upperBound="-1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="outputForExpression" eType="#//OutputNamedExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
					if self.expression->excludes(expression) then null
					else
						let i = self.expression->indexOf(expression) in
						let parameter = self.invocation.parameter->at(i) in
							OutputNamedExpression{
								name = parameter.name(),
								expression = expression,
								owner = self
							}
					endif"/>
- </eAnnotations>
- <eParameters name="expression" lowerBound="1" eType="#//Expression"/>
- </eOperations>
- <eOperations name="positionalTupleArguments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A positional tuple must not have more arguments than the invocation it is for has parameters."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.size() <= self.invocation.parameterCount()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" upperBound="-1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument expressions for this tuple, to be matched by position to the invocation parameters."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="Tuple" abstract="true" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A list of expressions used to provide the arguments for an invocation."/>
- </eAnnotations>
- <eOperations name="size" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
- <eOperations name="inputCached" ordered="false" upperBound="-1" eType="#//InputNamedExpression"/>
- <eOperations name="input" ordered="false" upperBound="-1" eType="#//InputNamedExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.inputFor(self.invocation.parameter)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="inputFor" ordered="false" upperBound="-1" eType="#//InputNamedExpression">
- <eParameters name="parameters" upperBound="-1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="outputCached" ordered="false" upperBound="-1" eType="#//OutputNamedExpression"/>
- <eOperations name="output" ordered="false" upperBound="-1" eType="#//OutputNamedExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.outputFor(self.invocation.parameter)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="outputFor" ordered="false" upperBound="-1" eType="#//OutputNamedExpression">
- <eParameters name="parameters" upperBound="-1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="outputForExpression" eType="#//OutputNamedExpression">
- <eParameters name="expression" lowerBound="1" eType="#//Expression"/>
- </eOperations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
-- let assignmentsBefore = self.assignmentsBefore() in
-- if not element.oclIsKindOf(NameExpression) then assignmentsBefore
-- else
-- let output = self.outputForExpression(element.oclAsType(NameExpression)) in
-- if output = null then assignmentsBefore
-- else self.updateFor(assignmentsBefore, output)
-- endif
-- endif;
 self.assignmentsBefore()"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
- </eOperations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let assignments1 = self.updateAll(
 self.assignmentsBefore(),
 self.input.expression->union(self.output.expression).newAssignments()->asSet()
 ) in
 let assignments2 = self.output->iterate(
 output, assignments : Set(AssignedSource) = assignments1 |
 self.updateFor(assignments, output)
 ) in
 self.updateAll(
 assignments2,
 self.output->reject(leftHandSide = null)->
 collect(output : OutputNamedExpression | 
 assignments2->select(name = output.leftHandSide.assignedName())
 )->
 reject(isParallelLocalName).copy(self.invocation, null)->asSet()
 )"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="newAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let assignmentsBefore = self.assignmentsBefore() in
 self.assignmentsAfter()->select(isNew(assignmentsBefore()))"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="updateFor" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let parameter = self.invocation.parameterNamed(output.name) in
 if parameter = null or parameter.direction() <> 'out' then 
 assignments
 else
 let lhs = output.leftHandSide in
 if lhs = null or lhs.localName() = null or lhs.index() <> null or 
 assignments->exists(name = lhs.localName()) then 
 assignments
 else
 AssignedSource{
 name = lhs.localName(),
 source = self,
 type = parameter.type(),
 lower = 0,
 upper = if parameter.upper() = 1 then 1 else -1 endif
 }.update(assignments)
 endif
 endif"/>
- </eAnnotations>
- <eParameters name="assignments" ordered="false" upperBound="-1" eType="#//AssignedSource"/>
- <eParameters name="output" lowerBound="1" eType="#//OutputNamedExpression"/>
- </eOperations>
- <eOperations name="tupleInputDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A tuple has the same number of inputs as its invocation has input
parameters. For each input parameter, the tuple has a corresponding input
with the same name as the parameter and an expression that is the
matching argument from the tuple, or an empty sequence construction
expression if there is no matching argument."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="tupleOutputDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A tuple has the same number of outputs as its invocation has output
parameters. For each output parameter, the tuple has a corresponding
output with the same name as the parameter and an expression that is the
matching argument from the tuple, or an empty sequence construction
expression if there is no matching argument."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="tupleNullInputs" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An input parameter may only have a null argument if it has a multiplicity
lower bound of 0."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.input->forAll(
 expression.isNull() implies 
 self.invocation.parameterNamed(name).lower() = 0
 )"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="tupleOutputs" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An output parameter may only have a null argument if it is an out parameter."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.output->forAll(
 expression.isNull() implies 
 self.invocation.parameterNamed(name).direction() = 'out'
 )"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="tupleAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before each expression in a tuple are the same as the
assignments before the tuple, except in the case of a name expression
that defines a new local name, in which case the assigned source for the
new name is included in the assignments before the name expression. (Note
that the assigned source for a new name is included before the name
expression so that the nameExpressionResolution constraint is not
violated.) The assignments before the tuple are the same as the
assignments after the feature reference of the invocation of the tuple,
if the invocation has one, or otherwise the assignments before the
invocation.

CHANGE: An assignment before is NOT given to a name expression that
that defines a local name. Instead the nameExpressionResolution
constraint has been modified. (This avoids a potential infinite recursion
in InvocationExpression::bindTemplateImplicitArguments().)

(See also the InvocationExpression::assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="tupleAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A name may be assigned in at most one argument expression of a tuple."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.input.expression->union(self.output.expression).
 newAssignments()->isUnique(name)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="input" ordered="false"
- upperBound="-1" eType="#//InputNamedExpression" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument expressions from this tuple, matched to the input parameters
(direction in and inout) of the invocation. An empty sequence construction
expression is included for any input parameter that is not explicitly
matched in the tuple."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.inputCached()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="invocation" lowerBound="1"
- eType="#//InvocationExpression" eOpposite="#//InvocationExpression/tuple">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The invocation expression of which this tuple is a part."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="output" ordered="false"
- upperBound="-1" eType="#//OutputNamedExpression" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument expressions from this tuple, matched to the output parameters
(direction inout and out) of the invocation. An empty sequence construction
expression is included for any output parameter that is not explicitly
matched in the tuple."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.outputCached()"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="NamedExpression" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A pairing of a parameter name and an argument expression in a named tuple."/>
- </eAnnotations>
- <eOperations name="actualName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="NameBinding{name = self.name}.toName()"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The parameter name."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument expression."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="index" eType="#//Expression"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression whose value gives an index into an ordered parameter.
(This is only used in link operation expressions.)"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="InputNamedExpression" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A pairing of an input parameter name and an argument expression."/>
- </eAnnotations>
- <eOperations name="tuple" lowerBound="1" eType="#//Tuple">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.owner().oclAsType(_'Tuple')"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="namedExpressionIsCollectionConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Collection conversion is required if the type of the corresponding
parameter is a collection class and the type of the argument expression
is not."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="namedExpressionIsBitStringConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Bit string conversion is required if the type of the type of the
corresponding parameter is BitString, or a collection class instantiated
with a BitString type, and the type of the argument expression is not
BitString."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The parameter name."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
- eType="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument expression."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="index" eType="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression whose value gives an index into an ordered parameter.
(This is only used in link operation expressions.)"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCollectionConversion"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the argument expression requires collection conversion."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let parameter = self.tuple().invocation.parameterNamed(self.name) in
 	parameter <> null and
 	let parameterType = parameter.type() in
	 parameterType <> null and self.expression.type <> null and
	 self.isCollectionClass(parameterType) and 
	 not self.isCollectionClass(self.expression.type)"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the argument expression requires bit string conversion."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let parameter = self.tuple().invocation.parameterNamed(self.name) in
 	parameter <> null and
 	let parameterType = parameter.type() in
	 parameterType <> null and self.expression <> null and
	 (self.isBitStringType(parameterType) or 
	 self.isBitStringCollectionClass(parameterType)) and 
	 not self.isBitStringType(self.expression.type)"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="InvocationExpression" abstract="true"
- eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression denoting the invocation of a behavior or operation, or the
sending of a signal."/>
- </eAnnotations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let feature = self.feature() in
 if feature <> null and self.tuple = element then feature.assignmentAfter
 else self.assignmentBefore
 endif"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
- </eOperations>
- <eOperations name="feature" eType="#//FeatureReference"/>
- <eOperations name="referent" eType="#//ElementReference"/>
- <eOperations name="referentCached" eType="#//ElementReference"/>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.InvocationExpression_type()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="InvocationExpression_type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referent = self.referent in
 if referent = null then null
 else referent.type()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.InvocationExpression_upper()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="InvocationExpression_upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referent = self.referent in
 if referent = null then 0
 else referent.upper()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.InvocationExpression_lower()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="InvocationExpression_lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referent = self.referent in
 if referent = null then 0
 else referent.lower()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="parameterNamed" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let parameter = self.parameter->select(p | p.name() = name) in
 if parameter->isEmpty() then null
 else parameter->any(true)
 endif"/>
- </eAnnotations>
- <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="parameterCount" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let parameters = self.parameter in
 if parameters->exists(direction() = 'return') then
 parameters->size()-1
 else
 parameters->size()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="parameterIsAssignableFrom" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let parameter = self.parameterNamed(input.name) in
 let direction = parameter.direction() in
 (direction = 'in' or direction = 'inout') and
 parameter.isAssignableFrom(input.expression)"/>
- </eAnnotations>
- <eParameters name="input" lowerBound="1" eType="#//InputNamedExpression"/>
- </eOperations>
- <eOperations name="parameterIsAssignableTo" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let parameter = self.parameterNamed(output.name) in
 let direction = parameter.direction() in
 let lhs = output.leftHandSide in
 direction = 'out' and lhs.referent = null or
 (direction = 'out' or direction = 'inout') and
 output.expression.isAssignableFromElement(parameter)"/>
- </eAnnotations>
- <eParameters name="output" lowerBound="1" eType="#//OutputNamedExpression"/>
- </eOperations>
- <eOperations name="alternativeConstructorIsValid" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referent = self.referent in
 let currentScope = self.currentScope() in
 referent <> null and referent.isConstructor() and currentScope <> null implies
 let operation = currentScope.specification() in
 operation.isConstructor() and
 let statement = self.enclosingStatement() in
 statement <> null and statement.oclIsKindOf(ExpressionStatement) and
 let annotatedStatement = statement.owner() in
 let owner = annotatedStatement.owner() in
 owner <> null implies owner.oclIsKindOf(Block) and
 let block = owner.oclAsType(Block) in
 block.enclosingStatement() = null and
 block.statement->notEmpty() and
 block.statement->at(1) = annotatedStatement and
 -- NOTE: This ensures that the invoked constructor is
 -- from the same class as the containing constructor.
 operation.namespace().equals(referent.namespace()) and
 -- NOTE: An alternative constructor invocation should
 -- only be allowed on "this".
 self.feature().expression.oclIsKindOf(ThisExpression)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="bindTemplateImplicitArguments" eType="#//ElementReference">
- <eParameters name="referent" lowerBound="1" eType="#//ElementReference"/>
- <eParameters name="primary" eType="#//Expression"/>
- </eOperations>
- <eOperations name="bindTemplateImplicitArguments1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let allParameters = referent.parameters() in
 let firstParameter =
 if primary = null or allParameters->isEmpty() then null
 else allParameters->first()
 endif
 in
 let firstParameterType =
 if firstParameter = null then null
 else firstParameter.type()
 endif
 in
 let primaryType =
 if firstParameter = null then null
 else self.effectiveType(firstParameter, primary)
 endif
 in
 let parameters =
 if firstParameter = null then allParameters
 else allParameters->excluding(firstParameter)
 endif
 in
 let templateArguments =
 referent.parameteredElements()->collect(parameteredElement |
 let inputTypes =
 self.tuple.inputFor(parameters)->
 select(input |
 let parameter = parameters->any(name() = input.name) in
 parameteredElement.equals(parameter.type())
 )->
 collect(input | 
 let parameter = parameters->any(name() = input.name) in
 self.effectiveType(parameter, input.expression)
 )->asSet()
 in
 let types =
 if parameteredElement.equals(firstParameterType) then
 inputTypes->including(primaryType)
 else
 inputTypes
 endif
 in
 let commonAncestor = self.commonAncestor(types) in
 if commonAncestor = null then AnyType{}.toReference()
 else commonAncestor
 endif
 )
 in
 referent.bind(templateArguments)"/>
- </eAnnotations>
- <eParameters name="referent" lowerBound="1" eType="#//ElementReference"/>
- <eParameters name="primary" eType="#//Expression"/>
- </eOperations>
- <eOperations name="effectiveType" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If collection conversion would be required, return the toSequence
return type, rather than the expression type."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let type = expression.type in
 let parameterUpper = parameter.upper() in
 if (parameterUpper = -1 or parameterUpper > 1) and
 expression.upper = 1 and
 type <> null and self.isCollectionClass(type) then
 type.collectionArgument()
 else
 type
 endif"/>
- </eAnnotations>
- <eParameters name="parameter" lowerBound="1" eType="#//ElementReference"/>
- <eParameters name="expression" lowerBound="1" eType="#//Expression"/>
- </eOperations>
- <eOperations name="parameterElements" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns references to the elements that act as the parameters of the
referent. If the referent is a behavior or operation, these are the owned
parameters, in order. If the referent is an association end, then the
parameters are the other association ends of the association of the
referent end, which are treated as if they were in parameters. Otherwise
(by default), they are any properties of the referent (e.g., signal
attributes), which are treated as if they were in parameters. (This is
defined as a helper operation, so that it can be overridden by subclasses
of InvocationExpression, if necessary.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="InvocationExpression_parameterElements()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="InvocationExpression_parameterElements" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referent = self.referent in
 if self.isBehavior or self.isOperation then
 referent.parameters()
 else if self.isAssociationEnd then
 let association = referent.association() in
 association.associationEnds()->reject(equals(referent))->
 collect(p | self.parameterFromPropertyWithMultiplicity(p, '1', '1'))->asOrderedSet()
 else if referent <> null then
 referent.properties()->
 collect(p | self.parameterFromProperty(p))->asOrderedSet() 
 else
 OrderedSet(ElementReference){}
 endif endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="parameterFromProperty" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.parameterFromPropertyWithMultiplicity(
 property, 
 property.lower().toString(), 
 let upper = property.upper() in
 if upper = -1 then '*'
 else upper.toString()
 endif
 )"/>
- </eAnnotations>
- <eParameters name="property" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="parameterFromPropertyWithMultiplicity" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 FormalParameter{
 name = property.name(),
 direction = 'in',
 typePart = TypedElementDefinition{
 actualType = property.type(),
 lowerBound = lower,
 upperBound = upper
 },
 owner = property.namespace().asMember()
 }.toReference()"/>
- </eAnnotations>
- <eParameters name="property" lowerBound="1" eType="#//ElementReference"/>
- <eParameters name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- <eParameters name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="invocationExpressionIsBehaviorDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An invocation expression is a behavior invocation if its referent is a
behavior."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="invocationExpressionIsAssociationEndDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An invocation expression is an association end read if its referent is an
association end."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="invocationExpressionIsOperationDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An invocation expression is an operation call if its referent is an
operation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="invocationExpressionIsDestructorDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An invocation expression is a destructor call either implicitly or if it
is an explicit operation call to a destructor operation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="invocationExpressionIsImplicitDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An invocation expression is an implicit object destruction if it has a
feature with the name "destroy" and no explicit referents."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="invocationExpressionIsSignalDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An invocation expression is a signal send if its referent is a signal."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="invocationExpressionParameterDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The parameters of an invocation expression are given by the result of the
parameterElements helper operation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="invocationExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the referent of an invocationExpression is an operation or behavior
with a return parameter, then the type of the expression is that of the
return parameter (if any). If the referent is a classifier, then the type
is the referent. If the referent is a property, then the type is that of
the property. Otherwise the expression has no type.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="invocationExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the referent of an invocationExpression is an operation or behavior
with a return parameter, then the upper bound of the expression is that
of the return parameter. If the referent is a classifier, then the upper
bound is 1. If the referent is a property, then the upper bound is that
of the property. Otherwise the upper bound is 0.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="invocationExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the referent of an invocationExpression is an operation or behavior
with a return parameter, then the lower bound of the expression is that
of the return parameter. If the referent is a classifier, then the lower
bound is 1. If the referent is a property, then the lower bound is that
of the property. Otherwise the lower bound is 0.
(see the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="invocationExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the target expression of the feature reference of
an invocation expression (if any) are the same as the assignments before
the invocation expression.
(See the SyntaxElement::assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after an invocation expression are the same as those
after the tuple of the expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.tuple.assignmentsAfter()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="invocationExpressionTemplateParameters" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="TODO: Add this constraint to the standard.
if the referent is an implicit template binding, then all the template
parameters must be for classifiers and the actuals conform to any
constraining classifiers."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referent = self.referent in
 referent <> null implies
 let template = referent.template() in
 template <> null implies 
 let parameters = template.templateParameters() in
 let actuals = referent.templateActuals() in
 parameters->size() = actuals->size() and
 parameters->size() <> 0 implies
 Sequence{1..parameters->size()}->forAll(i |
 let parameter = parameters->at(i) in
 let actual = actuals->at(i) in
 parameter.isClassifierTemplateParameter() and
 parameter.parents()->forAll(p | actual.conformsTo(p))
 )"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBehavior" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this is a behavior invocation or not."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="OutputNamedExpression"/>
- <details key="unique" value="false"/>
- <details key="upper" value="*"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let referent = self.referent in
 referent <> null and referent.isBehavior()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAssociationEnd" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this is an association read or not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let referent = self.referent in
 referent<> null and referent.isAssociationEnd()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="feature" eType="#//FeatureReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="For an invocation of a feature, the reference to that feature. This
property is set for a feature invocation expression or for an expression
initially parsed as a behavior invocation expression that disambiguates
to a feature invocation expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.feature()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isOperation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this is an operation call or not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let referent = self.referent in
 referent<> null and referent.isOperation()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDestructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If this is an operation call, whether the operation is a destructor."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let referent = self.referent in
 referent<> null and referent.isDestructor()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isImplicit" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this is an implicit object destruction."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let feature = self.feature in
 if feature = null then false
 else
 let nameBinding = feature.nameBinding in
 let referent = self.referent in
 nameBinding <> null and referent = null and
 nameBinding.toName() = 'destroy' and
 nameBinding.binding = null
 endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="referent" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The behavior, operation or signal being invoked. The derivation of this
property is specific to each kind of invocation expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="referentCached()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="parameter" upperBound="-1"
- eType="#//ElementReference" volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Element references to the parameters of the referent, in order."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.parameterElements()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isSignal" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this is a signal send or not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let referent = self.referent in
 referent <> null and referent.isSignal()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="tuple" lowerBound="1" eType="#//Tuple"
- containment="true" eOpposite="#//Tuple/invocation">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The tuple for the invocation expression."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="OutputNamedExpression" eSuperTypes="#//InputNamedExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A named argument expression for an output parameter."/>
- </eAnnotations>
- <eOperations name="outputNamedExpressionLeftHandSideDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The equivalent left-hand side for an output named expression depends on
the kind of expression. If the expression is a name expression with no
disambiguation, then the left-hand side is a name left-hand side with the
name from the name expression. If the expression is a name expression
that disambiguates to a feature reference, then the left-hand side is a
feature left-hand side for that feature reference. If the expression is a
property access expression, then the left-hand side is a feature left-hand
side for the feature reference of the property access expression. If the
expression is a sequence access expression, then the left-hand side is a
name left-hand side or feature left-hand side, as above, depending on
whether the primary expression of the sequence access expression is a
name expression or property access expression, and an index given by the
index expression of the sequence access expression. Otherwise the left-
hand side is empty."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="outputNamedExpressionForm" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument for an output parameter must be either be null, a name
expression, a property access expression, or a sequence access expression
whose primary expression is a name expression or a property access
expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression = null or self.hasLegalExpression()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="hasLegalExpression" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let primary =
 if self.expression.oclIsKindOf(SequenceAccessExpression) then
 self.expression.oclAsType(SequenceAccessExpression).primary
 else
 self.expression
 endif
 in
 primary.oclIsKindOf(NameExpression) or 
 primary.oclIsKindOf(PropertyAccessExpression)"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="leftHandSide" eType="#//LeftHandSide"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument expression considered as an assignment left-hand side."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 if self.expression <> null and self.hasLegalExpression() then
 EffectiveLeftHandSide{
 expression = self.expression,
 owner = self
 }
 else
 null
 endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="LeftHandSide" abstract="true" eSuperTypes="#//AssignableElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The left-hand side of an assignment expression. NOTE: The derivations for
the derived properties of LeftHandSide are specific to its various subclasses.
"/>
- </eAnnotations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.index() <> element then self.assignmentBefore
 else
 let feature = self.feature() in
 if feature = null then self.assignmentBefore
 else feature.assignmentAfter
 endif
 endif"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
- </eOperations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.index() <> null then self.index().assignmentAfter
 else 
 let feature = self.feature() in
 if feature = null then self.assignmentBefore
 else feature.assignmentAfter
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.LeftHandSide_type()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="LeftHandSide_type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referent = self.referent() in
 if referent = null then null else referent.type() endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.LeftHandSide_upper()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="LeftHandSide_upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.index() <> null then 1
 else
 let referent = self.referent() in
 if referent = null then 0 else referent.upper() endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.LeftHandSide_lower()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="LeftHandSide_lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.index() <> null then 1
 else
 let referent = self.referent() in
 if referent = null then 0 else referent.lower() endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="referent" eType="#//ElementReference"/>
- <eOperations name="assignedName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.isDataValueUpdate() then self.localName()
 else
 self.feature().expression.oclAsType(NameExpression).name.unqualifiedName.toName()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="localName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- <eOperations name="feature" lowerBound="1" eType="#//FeatureReference"/>
- <eOperations name="expression" eType="#//Expression"/>
- <eOperations name="isDataValueUpdate" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let feature = self.feature() in
 feature <> null and
 feature.expression.oclIsKindOf(NameExpression) and
 let expression = feature.expression.oclAsType(NameExpression) in
 expression.propertyAccess = null and
 let name = expression.name.unqualifiedName.toName() in
 let assignments = self.assignmentBefore->select(a | a.name = name) in
 assignments->notEmpty() and 
 assignments->forAll(type <> null and type.isDataType())"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="leftHandSideIndexExpression" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a left-hand side has an index, then the index expression must have a
multiplicity upper bound no greater than 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.index() <> null implies self.index().upper <= 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="index" eType="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An optional expression that evaluates to an index into the values of an
ordered sequence.
property index : Expression[?] { composes };"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentBefore" ordered="false"
- upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the left-hand side."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.assignmentsBefore()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentAfter" ordered="false"
- upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after the left-hand side."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.assignmentsAfter()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="referent" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reference to the assignable element denoted by this left-hand side, if
one exists (i.e., the left-hand side is not for the first assignment of a
local name)."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.referent()"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SequenceAccessExpression" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression used to access a specific element of a sequence."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.primary.type"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="0"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.updateAll(
 self.updateAll(
 self.assignmentBefore,
 self.primary.newAssignments()
 ),
 self.index.newAssignments()
 )"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="sequenceAccessExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a sequence access expression is the same as the type of its
primary expression.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceAccessExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity lower bound of a sequence access expression is 0.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceAccessExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity upper bound of a sequence access expression is 1.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceAccessExpressionIndexType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of the index of a sequence access expression must be Integer."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let type = self.index.type in
 type <> null and self.isIntegerType(type)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceAccessExpressionIndexMultiplicity" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity upper bound of the index of a sequence access expression
must be 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.index.upper = 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="primary" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression whose value is the sequence being accessed."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="index" lowerBound="1" eType="#//Expression"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression whose value is the index of the element being accessed in
the sequence."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="StringLiteralExpression" eSuperTypes="#//LiteralExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression that comprises a String literal."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.stringType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="stringLiteralExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a string literal expression is String.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="image" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The textual image of the literal token for this expression, with quote characters removed and escaped sequences resolved to the denoted special character."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="LiteralExpression" abstract="true" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression that comprises a primitive literal."/>
- </eAnnotations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="literalExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity upper bound of a literal expression is always 1.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="literalExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity lower bound of a literal expression is always 1.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SequenceOperationExpression" eSuperTypes="#//InvocationExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression used to invoke a behavior as if it was an operation on a target sequence as a whole."/>
- </eAnnotations>
- <eOperations name="feature" eType="#//FeatureReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="null"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="referent" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referents = self.operation.referent in
 if referents->select(isBehavior())->size() <> 1 then null
 else
 let referent = referents->any(isBehavior()) in
 if referent.isTemplate() then 
 self.bindTemplateImplicitArguments(
 referent, self.primary.expression
 )
 else referent
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isAddTarget" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let collectionFunctionAdd = self.collectionFunctionAdd() in
 if collectionFunctionAdd = null then false
 else
 collectionFunctionAdd.containedIn(self.operation.referent->asBag()) and
 /* Note: This works even if the target expression is the
 * derived name expression of an ExtentOrExpression element.
 */
 targetExpression.owner() = self.primary 
 endif"/>
- </eAnnotations>
- <eParameters name="targetExpression" lowerBound="1" eType="#//Expression"/>
- </eOperations>
- <eOperations name="firstParameter" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referent = self.referent in
 if referent = null then null
 else
 let parameters = referent.parameters() in
 if parameters->isEmpty() then null
 else parameters->first()
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="firstArgument" lowerBound="1" eType="#//OutputNamedExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
				let firstParameter = self.firstParameter() in
					OutputNamedExpression{
						name = if firstParameter = null then null else firstParameter.name() endif,
						expression = self.primary.expression,
						index = null,
						owner = self.tuple
					}"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="sequenceOperationExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referent for a sequence operation expression is the behavior named by
the operation for the expression.
(See the referent() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceOperationExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="There is no feature for a sequence operation expression.
(See the feature() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceOperationExpressionOperationReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="There must be a single behavior that is a resolution of the operation
qualified name of a sequence operation expression with a least one
parameter, whose first parameter has direction in or inout, has
multiplicity [0..*] and to which the target primary expression is
assignable."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let parameter = self.firstParameter() in
 parameter <> null and
 let direction = parameter.direction() in
 let expression = self.primary.expression in
 (direction = 'in' or direction = 'inout') and
 parameter.lower() = 0 and parameter.upper() = -1 and
 expression <> null implies parameter.isAssignableFrom(expression)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceOperationExpressionTargetCompatibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the first parameter of the referent has direction inout, then the
parameter type must have the same type as the primary expression, the
primary expression must have the form of a left-hand side and, if the
equivalent left-hand side is for a local name, that name must already
exist."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let expression = self.primary.expression in
 let parameter = self.firstParameter() in
 expression <> null and parameter <> null and 
 parameter.direction() = 'inout' implies
 let lhs = self.leftHandSide in
 lhs <> null and 
 let assignedName = lhs.assignedName() in
 (assignedName <> null implies 
 self.assignmentBefore->exists(name = assignedName)
 ) and
 let expressionType = self.type in
 let type = parameter.type() in
 type <> null and type.equals(expressionType) or
 type = null and expressionType = null"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceOperationExpressionArgumentCompatibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of an input argument expression of a sequence operation
parameter must be assignable to its corresponding parameter. The type of
an output parameter must be assignable to its corresponding argument
expression. (Note that this implies that the type of an argument
expression for an inout parameter must be the same as the type of that
parameter.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.referent <> null implies
 (self.tuple.input->forAll(input | self.parameterIsAssignableFrom(input)) and
 self.tuple.output->forAll(output | self.parameterIsAssignableTo(output))
 )"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceOperationExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the primary expression of a sequence operation
expression are the same as the assignments before the sequence operation
expression.
(See the InvocationExpression::assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceOperationExpressionIsCollectionConversionDerivation"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Collection conversion is required if the type of the primary expression
of a sequence operation expression is a collection class and the
multiplicity upper bound of the primary expression is 1."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceOperationExpressionIsBitStringConversionDerivation"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="BitString conversion is required if type of the first parameter of the
referent of a sequence operation expression is BitString and either the
type of its primary expression is Integer or collection conversion is
required and the type of its primary expression is a collection class
whose argument type is Integer."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceOperationExpressionAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A local name that is assigned in the primary expression of a sequence
operation expression may not be assigned in any expression in the tuple
of the sequence operation expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let expression = self.primary.expression in
 expression <> null implies
 expression.newAssignments().name->
 excludesAll(self.tuple.newAssignments().name)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceOperationExpressionLeftHandSideDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the operation of a sequence operation expression has a first
parameter whose direction is inout, then the effective left-hand side for
the expression is constructed as follows: If the primary is a name
expression, then the left-hand side is a name left-hand side with the
name from the name expression as its target. If the primary is a property
access expression, then the left-hand side is a feature left hand side
with the feature reference from the property access expression as its
feature. If the primary is a sequence access expression whose primary is
a name expression or a property access expression, then the left-hand
side is constructed from the primary of the sequence access expression as
given previously and the index of the sequence access expression becomes
the index of the left-hand side."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a sequence operation expression include those made
in the primary expression and those made in the tuple and, for an "in
place" operation (one whose first parameter is inout), that made by the
sequence operation expression itself."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let expression = self.primary.expression in
 let firstParameter = self.firstParameter() in
 let assignments1 =
 if expression = null then self.assignmentBefore
 else expression.assignmentAfter
 endif
 in
 let assignments2 =
 self.updateAll(assignments1, self.tuple.assignmentsAfter())
 in
 if firstParameter = null or firstParameter.direction() <> 'inout' then
 assignments2
 else
 let oldAssignment = self.assignmentBefore->
 select(name = self.leftHandSide.assignedName())
 in
 if oldAssignment->isEmpty() or oldAssignment->forAll(isParallelLocalName) then
 assignments2
 else
 oldAssignment->any(true).copy(self, null).update(assignments2)
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="parameterElements" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns the list of parameter elements from the superclass operation,
with the first parameter removed (since the argument for the first
parameter is given by the primary expression of a sequence operation
expression, not in its tuple)."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let parameters = self.InvocationExpression_parameterElements() in
 if parameters->size() < 2 then OrderedSet(ElementReference){}
 else parameters->subOrderedSet(2, parameters->size())
 endif"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="primary" lowerBound="1"
- eType="#//ExtentOrExpression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression or class name whose value is gives the sequence to be
operated on."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="operation" eType="#//QualifiedName"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The qualified name of the behavior being invoked."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCollectionConversion"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the primary expression requires collection conversion."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let expression = self.primary.expression in
 expression <> null and expression.upper = 1 and
 let type = expression.type in
 type <> null and self.isCollectionClass(type)"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether type primary expression requires BitString conversion."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let referent = self.referent in
 let firstParameter = self.firstParameter() in
 let expression = self.primary.expression in
 referent <> null and firstParameter <> null and expression <> null and
 let parameterType = firstParameter.type() in
 let primaryType =
 if self.isCollectionConversion then
 expression.type.collectionArgument()
 else
 expression.type
 endif
 in
 parameterType <> null and self.isBitStringType(parameterType) and
 primaryType <> null and self.isIntegerType(primaryType)"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="leftHandSide" eType="#//LeftHandSide"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The effective left-hand side corresponding to the primary expression, if
the sequence operation is ?in place? (that is, has a first parameter with
direction inout)."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let expression = self.primary.expression in
 let firstParameter = self.firstParameter() in
 if expression = null or firstParameter = null or 
 firstParameter.direction() <> 'inout' then
 null
 else
 EffectiveLeftHandSide{
 expression = expression,
 owner = self
 }
 endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SelectOrRejectExpression" eSuperTypes="#//SequenceExpansionExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A sequence expansion expression with a select or reject operation."/>
- </eAnnotations>
- <eOperations name="selectOrRejectExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A select or reject expression has the same type as its primary expression."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="selectOrRejectExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A select or reject expression has a multiplicity lower bound of 0."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="selectOrRejectExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A select or reject expression has a multiplicity upper bound of *."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="selectOrRejectExpressionArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument of a select or reject expression must have type Boolean and a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ClassExtentExpression" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression used to obtain the objects in the extent of a class."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referents = self.className.referent->select(isClass()) in
 if referents->size() <> 1 then null
 else referents->any(true)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="-1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="0"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="classExtentExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a class extent expression is the given class.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classExtentExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity upper bound of a class expression is *.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classExtentExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity lower bound of a class extent expression is 0.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classExtentExpressionExtentType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The given type name must resolve to a non-template class."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.validateClassExtentExpressionExtentType()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="validateClassExtentExpressionExtentType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.type <> null and not self.type.isTemplate()"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="className" lowerBound="1"
- eType="#//QualifiedName" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the class whose extent is to be obtained."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="PositionalTemplateBinding" eSuperTypes="#//TemplateBinding">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A template binding in which the arguments are matched to formal template parameters in order by position."/>
- </eAnnotations>
- <eOperations name="toString" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 '<' + 
 self.argumentName->iterate(name : QualifiedName; s : String = '' | 
 if s = '' then name.pathName
 else s + ',' + name.pathName
 endif
 ) + 
 '>'"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="matches" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let parameters = template.templateParameters() in 
 parameters->size() = self.argumentName->size() and 
 Sequence{1 .. parameters->size()}->forAll(i | 
 self.matches(parameters->at(i), argumentName->at(i))
 )"/>
- </eAnnotations>
- <eParameters name="template" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="matches" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referents = argumentName.referent in
 referents->size() = 1 and
 referents->forAll(referent |
 referent.isClassifier() and
 parameter.parents()->forAll(c | referent.conformsTo(c))
 )"/>
- </eAnnotations>
- <eParameters name="parameter" lowerBound="1" eType="#//ElementReference"/>
- <eParameters name="argumentName" lowerBound="1" eType="#//QualifiedName"/>
- </eOperations>
- <eOperations name="bindTo" unique="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.argumentName->collect(argumentName |
 let referents = argumentName.referent in
 if referents->size() = 1 then referents->asSequence()
 else Sequence(ElementReference){} endif
 )"/>
- </eAnnotations>
- <eParameters name="template" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="copy" lowerBound="1" eType="#//TemplateBinding">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="PositionalTemplateBinding{argumentName = self.argumentName.copy()}"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="argumentName" lowerBound="1"
- upperBound="-1" eType="#//QualifiedName" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The arguments for this template binding, to be matched by position to the template parameters."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ConditionalLogicalExpression" eSuperTypes="#//BinaryExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A binary expression with a conditional logical expression, for which the
evaluation of the second operand expression is conditioned on the result of
evaluating the first operand expression."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.booleanType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.operand1.lower = 0 or self.operand2.lower = 0 then 0 else 1 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="conditionalLogicalExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A conditional logical expression has type Boolean.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="conditionalLogicalExpressionLower" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A conditional logical expression has a multiplicity lower bound of 0 if
the lower bound if either operand expression is 0 and 1 otherwise.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="conditionalLogicalExpressionUpper" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A conditional logical expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="conditionalLogicalExpressionOperands" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The operands of a conditional logical expression must have type Boolean."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.isBooleanType(self.operand1.type) and self.isBooleanType(self.operand2.type)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="validateAssignments" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the first operand expression of a conditional
logical expression are the same as those before the conditional logical
expression. The assignments before the second operand expression are the
same as those after the first operand expression.
(See the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="true"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.operand2 = element then self.operand1.assignmentAfter
 else self.assignmentBefore
 endif"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a name has the same assigned source after the second operand
expression as before it, then that is its assigned source after the
conditional logical expression. If a name is unassigned before the
second operand expression, then it is considered unassigned after the
conditional logical expression, even if it has an assigned source after
the second operand expression. Otherwise its assigned source after the
conditional logical expression is the conditional logical expression itself."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let namesBefore = self.operand2.assignmentBefore.name->asSet() in
 self.updateAll(
 self.operand2.assignmentBefore,
 self.operand2.newAssignments()->
 reject(namesBefore->excludes(name)).
 copy(self, null)->asSet()
 )"/>
- </eAnnotations>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="LinkOperationExpression" eSuperTypes="#//InvocationExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression used to create or destroy the links of an association."/>
- </eAnnotations>
- <eOperations name="referent" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referents = self.associationName.referent->select(isAssociation()) in
 if referents->size() <> 1 then null
 else referents->any(true)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="feature" eType="#//FeatureReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="null"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="linkOperationExpressionIsCreationDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A link operation expression is for link creation if its operation is
"createLink"."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="linkOperationExpressionIsClearDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A link operation expression is for clearing an association if the
operation is "clearAssoc"."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="linkOperationExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referent for a link operation expression is the named association.
(See the referent() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="linkOperationExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="There is no feature for a link operation expression.
(See the feature() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="linkOperationExpressionAssociationReference" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The qualified name of a link operation expression must resolve to a
single association."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
	self.referent <> null and 
	-- Also check that the association owns all its ends.
	self.referent.properties()->forAll(isAssociationEnd())"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="linkOperationExpressionArgumentCompatibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Each argument expression must be assignable to its corresponding
expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.tuple.size() <= self.parameterCount() and
 self.tuple.input->forAll(input | self.parameterIsAssignableFrom(input))"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="parameterElements" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="For a clear association operation, returns a single, typeless parameter.
Otherwise, returns the ends of the named association."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isClear then
 OrderedSet(ElementReference){
 FormalParameter{
 direction = 'in',
 typePart = TypedElementDefinition{
 lowerBound = '1',
 upperBound = '1'
 }
 }.toReference()
 }
 else
 let referent = self.referent in
 if referent = null then OrderedSet(ElementReference){}
 else
 self.referent.associationEnds()->collect(property | 
 -- NOTE: Arguments for a link operation have multiplicity 1..1.
 parameterFromPropertyWithMultiplicity(property, '1', '1')
 )->asOrderedSet()
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="operation" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the link operation."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCreation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the operation is for link creation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operation = 'createLink'"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isClear" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the operation is clearing the association."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operation = 'clearAssoc'"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="associationName" lowerBound="1"
- eType="#//QualifiedName" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The qualified name of the association whose links are being acted on."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="EqualityExpression" eSuperTypes="#//BinaryExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A binary expression that tests the equality of its operands."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.booleanType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="equalityExpressionIsNegatedDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An equality expression is negated if its operator is "!="."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="equalityExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An equality expression has type Boolean.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="equalityExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An equality expression has a multiplicity lower bound of 1.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="equalityExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An equality expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="noNullArguments" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns false for an equality expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isNegated" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the test is for being not equal."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operator = '!='"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="AssignmentExpression" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression used to assign a value to a local name, parameter or property."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isSimple then self.rightHandSide.type
 else self.leftHandSide.type
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.rightHandSide.upper"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isSimple then self.rightHandSide.lower
 else self.leftHandSide.lower
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if element = self.leftHandSide then self.rightHandSide.assignmentAfter
 else self.assignmentBefore
 endif"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
- </eOperations>
- <eOperations name="assignmentExpressionIsSimpleDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An assignment expression is a simple assignment if the assignment
operator is "="."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionIsArithmeticDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An assignment expression is an arithmetic assignment if its operator is a
compound assignment operator for an arithmetic operation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionIsDefinitionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An assignment expression is a definition if it is a simple assignment and
its left hand side is a local name for which there is no assignment
before the expression."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The left hand side of an assignment expression is a feature if it is a
kind of FeatureLeftHandSide."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionIsIndexedDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The left hand side of an assignment expression is indexed if it has an index."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionIsDataValueUpdateDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An assignment expression is a data value update if its left hand side is
an attribute of a data value held in a local name or parameter."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionAssignmentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The new assigned source for an assignment to a local name is the
assignment expression. If the assignment is a definition, then the type
is given by the right hand side, the multiplicity upper bound is 1 if the
upper bound of the right hand side is 1 and otherwise * and the
multiplicity lower bound is 0. Otherwise, the type is the same as the
left-hand side and the multiplicity is also the same as the left-hand
side, if the left-hand side is not indexed, and is * if it is indexed."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the left-hand side of an assignment expression is a feature, then the
feature of the assignment is the referent of the left-hand side."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionExpressionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="For a compound assignment, the effective expression is the left-hand side
treated as a name expression, property access expression or sequence
access expression, as appropriate for evaluation to obtain the original
value to be updated."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A simple assignment expression has the same type as its right-hand side
expression. A compound assignment expression has the same type as its
left-hand side.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An assignment expression has the same multiplicity upper bound as its
right-hand side expression.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A simple assignment expression has the same multiplicity lower bound as
its right-hand side expression. A compound assignment expression has the
same multiplicity as its left-hand side.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionSimpleAssignmentTypeConformance" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the left-hand side of a simple assignment is not a new local name, and
the right-hand side is not null, then the left-hand side must either be
untyped or have a type that conforms to the type of the right-hand side
expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 (self.isSimple and not self.isDefinition) implies
 self.leftHandSide.isTypeConformantWith(self.rightHandSide)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionSimpleAssignmentMultiplicityConformance"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the left-hand side of a simple assignment is not a new local name and
the multiplicity upper bound of the left-hand side is less than or equal
to 1, then the multiplicity upper bound of the right-hand side cannot be
greater than that of the left-hand side."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 (self.isSimple and not self.isDefinition) implies
 self.leftHandSide.isMultiplicityConformantWith(self.rightHandSide)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionCompoundAssignmentTypeConformance" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="For a compound assignment, if the operator is an arithmetic operator,
then either the left-hand side and the right-hand side both have type
Integer or they both have type String and the operator is +. If the
operator is a logical operator, then either the left-hand side and the
right-hand side both have type Boolean or Bit String or the left-hand
side has type Bit String and the right-hand side has type Integer. If the
operator is a shift operator, then the left-hand side must have type
BitString and the right-hand side must have type Integer."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 not self.isSimple implies
 let lhsType = self.leftHandSide.type in
 let rhsType = self.rightHandSide.type in
 lhsType <> null and rhsType <> null and
 (self.isArithmetic and 
 self.isIntegerType(lhsType) and self.isIntegerType(rhsType) or
 self.isLogical and
 (self.isBooleanType(lhsType) and self.isBooleanType(rhsType) or
 self.isBitStringType(lhsType) and 
 (self.isBitStringType(rhsType) or self.isIntegerType(rhsType))
 ) or
 self.isShift and
 self.isBitStringType(lhsType) and self.isIntegerType(rhsType) or
 self.isConcatenation and
 self.isStringType(lhsType) and self.isStringType(rhsType)
 )"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionCompoundAssignmentMultiplicityConformance"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="For a compound assignment, both the left-hand and right-hand sides must
have a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="(not self.isSimple) implies 
 (self.leftHandSide.upper = 1 and self.rightHandSide.upper = 1)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assigned source of a name before the right-hand side expression of an
assignment expression is the same as the assigned source before the
assignment expression. The assigned source of a name before the left-hand
side is the assigned source after the right-hand side expression.
(See the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionIsCollectionConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An assignment requires collection conversion if the type of the
right-hand side is a collection class and its multiplicity upper bound
is 1, and the type of the left-hand side is not a collection class."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionIsBitStringConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An assignment requires BitString conversion if the type of the left-hand
side is BitString and either the type of the right-hand side is Integer
or collection conversion is required and the type of the right-hand side
is a collection class whose argument type is Integer."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionDataValueUpdateLegality" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If an assignment expression has a feature with a primary expression whose
type is a data type, then the assignment expression must be a data value
update."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let feature = self.leftHandSide.feature() in
 feature <> null implies
 let type = feature.expression.type in
 (type <> null and type.isDataType()) implies
 self.isDataValueUpdate"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after an assignment expression are the assignments after
the left-hand side, updated by the assignment from the assignment
expression, if any."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let assignment = self.assignment in
 if assignment = null then self.leftHandSide.assignmentAfter
 else assignment.update(self.leftHandSide.assignmentAfter)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The image of the assignment operator used in the expression."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="leftHandSide" lowerBound="1"
- eType="#//LeftHandSide" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The left-hand side of the assignment, to which a value is to be assigned."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="rightHandSide" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The right-hand side expression of the assignment, which produces the value being assigned."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="assignment" eType="#//AssignedSource"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the left-hand side is a name, then the new assigned source for that name.
(Note: This also includes assignments to parameters and local names that
are the source of data value updates.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let name = self.leftHandSide.assignedName() in
 if name = null then null
 else if self.isDefinition then
 AssignedSource{
 name = name,
 source = self,
 type = self.rightHandSide.type,
 lower = 0,
 upper = if self.rightHandSide.upper = 1 then 1 else -1 endif
 }
 else
 let assignments = self.assignmentBefore->select(a | a.name = name) in
 if assignments->isEmpty() then null
 else
 let oldAssignment = assignments->any(true) in
 AssignedSource{
 name = name,
 source = self,
 type = oldAssignment.type,
 lower = oldAssignment.lower,
 upper = oldAssignment.upper
 }
 endif
 endif endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="feature" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the left-hand side is a feature, then the referent for that feature."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let feature = self.leftHandSide.feature() in
 if feature = null then null
 else
 let referents = feature.referent in
 if referents->isEmpty() then null
 else referents->any(true)
 endif
 endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isIndexed" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the left-hand side is a feature, whether it has an index or not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.leftHandSide.index() <> null"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isArithmetic" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If this is a compound assignment, whether the compound assignment
operator is arithmetic or not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="Set{'+=', '-=', '*=', '/=', '%='}->includes(self.operator)"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isLogical" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="Set{'&=', '|=', '^='}->includes(self.operator)"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isShift" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="Set{'<<=', '>>=', '>>>='}->includes(self.operator)"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isConcatenation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operator = '+='"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDefinition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this assignment is the definition of a new local name or not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.isSimple and not self.isIndexed and 
 self.leftHandSide.referent = null and self.leftHandSide.localName() <> null"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isSimple" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this is a simple assignment or not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operator = '='"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If this is a compound assignment, then the effective expression used to
obtain the original value of the left-hand side to be updated."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.leftHandSide.expression()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isFeature" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the left-hand side is a feature or not."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDataValueUpdate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this assignment updates an attribute of a data value held in a
local name or parameter."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.leftHandSide.isDataValueUpdate()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCollectionConversion"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether collection conversion is required for this assignment."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let lhsType = self.leftHandSide.type in
 let rhsType = self.rightHandSide.type in
 lhsType <> null and rhsType <> null and
 not self.isCollectionClass(lhsType) and
 self.isCollectionClass(rhsType) and 
 self.rightHandSide.upper = 1"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether BitString conversion is required for this assignment."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let lhsType = self.leftHandSide.type in
 let rhsType = self.type in -- Note: This works for both simple and compound assignments.assignment.
 rhsType <> null and lhsType <> null and self.isBitStringType(lhsType) and
 (self.isIntegerType(rhsType) or
 self.isCollectionConversion and self.isIntegerCollectionClass(rhsType)
 )"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="LogicalExpression" eSuperTypes="#//BinaryExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A binary expression with a logical operator."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isBitWise then self.bitStringType()
 else self.booleanType()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.operand1.lower = 0 or self.operand2.lower = 0 then 0 else 1 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="logicalExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A logical expression has type Boolean if it is not bit-wise and type
BitString if it is bit-wise.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="logicalExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A logical expression has a multiplicity lower bound of 0 if the lower
bound if either operand expression is 0 and 1 otherwise.annotation
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="logicalExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A logical expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="logicalExpressionOperands" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The operands of a logical expression must have type Boolean, Integer or
BitString. However, if one of the operands is Boolean, then the other
must also be Boolean."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let type1 = self.operand1.type in
 let type2 = self.operand2.type in
 self.isBooleanType(type1) and self.isBooleanType(type2) or
 (self.isIntegerType(type1) or self.isBitStringType(type1)) and
 (self.isIntegerType(type2) or self.isBitStringType(type2))"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="logicalExpressionIsBitStringConversion1Derivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="BitString conversion is required if the first operand expression of a
logical expression has type Integer."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="logicalExpressionIsBitStringConversion2Derivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="BitString conversion is required if the second operand expression of a
logical expression has type Integer."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="logicalExpressionIsBitWiseDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A logical expression is bit-wise if the type of its first operand is not
Boolean."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitWise" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this is a bit-wise logical operation on bit strings."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="SequenceConstructionExpression"/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="SequenceConstructionExpression"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="not self.isBooleanType(self.operand1.type)"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the first operand expression requires BitString conversion."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.isIntegerType(self.operand1.type)"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion2"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the second operand expression requires BitString conversion."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="SequenceConstructionExpression"/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="SequenceConstructionExpression"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.isIntegerType(self.operand2.type)"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SequenceConstructionExpression" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression used to construct a sequence of values."/>
- </eAnnotations>
- <eOperations name="collectionType" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If this expression is contained in the element list of a sequence
construction expression with a collection type, then return that type
name. Otherwise return null."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let expression = self.enclosingExpression() in
 if expression = null or 
 not expression.oclIsKindOf(SequenceConstructionExpression) then 
 null
 else
 let sequenceExpression = 
 expression.oclAsType(SequenceConstructionExpression) 
 in
 if sequenceExpression.hasMultiplicity then null
 else sequenceExpression.type
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.typeName <> null then
 let referents = self.typeName.referent->select(isClassifier()) in
 if referents->size() <> 1 then null
 else referents->any(true)
 endif
 else
 let collectionType = self.collectionType() in
 if collectionType = null then null
 else collectionType.collectionArgument()
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="constructorReference" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
				if self.type = null then null
				else
		 let name = self.type.name() in
		 let operationReferents = type.ownedMembers()->select(name() = name and isOperation()) in
		 if operationReferents->size() <> 1 then null
		 else operationReferents->any(true).constructorReference()
		 endif
			 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.hasMultiplicity then 1
 else if self.elements = null then 0 
 else self.elements.upper
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.hasMultiplicity then 1
 else if self.elements = null then 0 
 else self.elements.lower
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="sequenceConstructionExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the type name of a sequence construction expression is not empty,
then the type of the expression is the classifier to which the type name
resolves."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceConstructionExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a sequence construction expression has multiplicity, then its
multiplicity upper bound is given by its elements, if this is not empty,
and zero otherwise. If a sequence construction expression does not have
multiplicity, then its multiplicity upper bound is one."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceConstructionExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a sequence construction expression has multiplicity, then its
multiplicity lower bound is given by its elements, if this is not empty,
and zero otherwise. If a sequence construction expression does not have
multiplicity, then its multiplicity lower bound is one."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceConstructionExpressionType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the type name of a sequence construction expression is not empty, then
it must resolve to a non-template classifier. If the expression does not
have multiplicity, then the type name must not be empty and the
classifier to which it resolves must be the instantiation of a collection
class."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 (self.typeName <> null implies self.type <> null) and
 (not self.hasMultiplicity implies 
 self.type <> null and self.isCollectionClass(self.type)
 )"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceConstructionExpressionElementType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the elements of a sequence construction expression are given by a
sequence range, then the expression must have type Integer. If the
elements are given by a sequence element list, and the sequence
construction expression has a non-empty type, then each expression in the
list must have a type that either conforms to the type of the sequence
construction expression or is convertible to it by bit string conversion."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.elements <> null implies 
 let type =
 if self.hasMultiplicity or self.type = null then self.type
 else self.type.collectionArgument() 
 endif
 in
 self.elements.conformsTo(type)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceConstructionExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the elements of a sequence construction expression are given by a
sequence expression list, then the assignments before the first
expression in the list are the same as the assignments before the
sequence construction expression, and the assignments before each
subsequent expression are the assignments after the previous expression.
If the elements are given by a sequence range, the assignments before
both expressions in the range are the same as the assignments before the
sequence construction expression.
(See the SyntaxElement::assignmentsBefore(element) operation. See also
the SequenceExpressionList::assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the elements of the sequence construction expression are given by a
sequence expression list, then return the assignments after the last
expression in the list (if the list is empty, then return the assignments
before the sequence construction expression). If the elements are given
by a sequence range, then return the union of the assignments after each
of the expressions in the range."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.elements = null then self.assignmentBefore
 else self.elements.assignmentsAfter()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="elements" eType="#//SequenceElements"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The specification of the elements in the sequence."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="hasMultiplicity" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the sequence construction expression has a multiplicity indicator."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" eType="#//QualifiedName"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the type of the elements in the sequence."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAny" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the sequence construction expression has an empty type."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SequenceElements" abstract="true" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A specification of the elements of a sequence."/>
- </eAnnotations>
- <eOperations name="conformsTo" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eParameters name="type" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource"/>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity upper bound of the elements of the sequence. The
derivation for this property is given in the subclasses of SequenceElements."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.upper()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity lower bound of the elements of the sequence. The derivation
for this property is given in the subclasses of SequenceElements."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.lower()"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="CollectOrIterateExpression" eSuperTypes="#//SequenceExpansionExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A sequence expansion expression with a collect or iterate operation."/>
- </eAnnotations>
- <eOperations name="collectOrIterateExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A collect or iterate expression has the same type as its argument expression."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="collectOrIterateExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A collect or iterate expression has a multiplicity lower bound that is the product of the bounds of its primary and argument expressions."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="collectOrIterateExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A collect or iterate expression has a multiplicity upper bound that is the product of the bounds of its primary and argument expressions."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="IsUniqueExpression" eSuperTypes="#//SequenceExpansionExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A sequence expansion expression with a isUnique."/>
- </eAnnotations>
- <eOperations name="isUniqueExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An isUnique expression has the type Boolean."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="isUniqueExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An isUnique expression has a multiplicity lower bound of 1."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="isUniqueExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An isUnique expression has a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="isUniqueExpressionExpressionArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument of an isUnique expression must have a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ArithmeticExpression" eSuperTypes="#//BinaryExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A binary expression with an arithmetic operator."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand1.type"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.operand1.lower = 0 or self.operand2.lower = 0 then 0
 else 1
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="arithmeticExpressionIsConcatenationDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An arithmetic expression is a string concatenation expression if its type
is String."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="arithmeticExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of an arithmetic expression is the same as the type of its operands.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="arithmeticExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An arithmetic expression has a multiplicity lower bound of 0 if the lower
bound if either operand expression is 0 and 1 otherwise.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="arithmeticExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An arithmetic expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="arithmeticExpressionOperandTypes" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The operands of an arithmetic expression must both have type Integer,
unless the operator is +, in which case they may also both have type String."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.isIntegerType(self.operand1.type) and self.isIntegerType(self.operand2.type) or
 self.operator = '+' and self.isStringType(self.operand1.type) and self.isStringType(self.operand2.type)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isConcatenation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this is a string concatenation expression."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="FeatureLeftHandSide"/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="FeatureLeftHandSide"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.isStringType(self.type)"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="FeatureLeftHandSide" eSuperTypes="#//LeftHandSide">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A left-hand side that is a property reference."/>
- </eAnnotations>
- <eOperations name="referent" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referents = self.feature().referent->select(isProperty()) in
 if referents->size() <> 1 then null
 else referents->any(true)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="feature" eType="#//FeatureReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.expression.oclIsKindOf(PropertyAccessExpression) then
 self.expression.oclAsType(PropertyAccessExpression).featureReference
 else if self.expression.oclIsKindOf(SequenceAccessExpression) then
 let primary = self.expression.oclAsType(SequenceAccessExpression).primary in
 if primary.oclIsKindOf(PropertyAccessExpression) then
 primary.oclAsType(PropertyAccessExpression).featureReference
 else
 null
 endif
 else
 null
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="expression" eType="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="index" eType="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.expression.oclIsKindOf(SequenceAccessExpression) then null
 else self.expression.oclAsType(SequenceAccessExpression).index
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="localName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="null"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="featureLeftHandSideAssignmentBeforeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the expression of the feature reference of a
feature left-hand side are the assignments before the feature left-hand
side.
(And the assignments before an index are those after the feature reference.)
(See the LeftHandSide::assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="featureLeftHandSideAssignmentAfterDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a feature left-hand side are the assignments after
the expression of the feature reference or, if there is an index, those
after the index expression.
(See the LeftHandSide::assignmentsAfter() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="featureLeftHandSideFeatureExpression" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression of the feature reference of a feature left-hand side must
have a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let expression = self.feature().expression in
 let type = expression.type in
 expression.upper = 1 and
 -- Note: The following condition ensures that a data value update will
 -- be to an existing assigned name.
 (type <> null and type.isDataType()) implies self.isDataValueUpdate()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="featureLeftHandSideAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a feature left-hand side has an index, then the assignments before the
index expression are the assignments after the expression of the feature
reference.
(See the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="featureLeftHandSideReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referent of a feature left-hand side is the structural feature to
which the feature reference of the left-hand side resolves.
(See the referent() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="featureLeftHandSideTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a feature left-hand side is the type of its referent.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="featureLeftHandSideLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a feature left-hand side is indexed, then its lower bound is 1.
Otherwise, its lower bound is that of its referent.
(see the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="featureLeftHandSideUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a feature left-hand side is indexed, then its upper bound is 1.
Otherwise, its upper bound is that of its referent.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="featureLeftHandSideReferentConstraint" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The feature of a feature-left hand side must have a single referent that
is a structural feature."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent <> null"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="featureLeftHandSideIndexedFeature" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a feature left-hand side has an index, then the referent of the
feature must be ordered and non-unique."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.index() <> null implies
 let referent = self.referent in
 referent <> null and referent.isOrdered() and referent.isNonunique()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The structural feature being assigned.
property feature : FeatureReference { composes };

The actual expression parsed for this feature left-hand side."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ConditionalTestExpression" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression that uses the value of one operand expression to condition
the evaluation of one of two other operand expressions."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.commonAncestor(Set{self.operand2.type, self.operand3.type})"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand2.lower.min(self.operand3.lower)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.operand2.upper = -1 or self.operand2.upper = -1 then -1
 else self.operand2.upper.max(self.operand3.upper)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.operand2 = element or self.operand3 = element then
 self.operand1.assignmentAfter
 else
 self.assignmentBefore
 endif"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
- </eOperations>
- <eOperations name="conditionalTestExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a conditional-test operator expression is the effective
common ancestor (if one exists) of the types of its second and third
operand expressions.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="conditionalTestExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity lower bound of a conditional-test operator expression is
the minimum of the multiplicity lower bounds of its second and third
operand expressions.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="conditionalTestExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity upper bound of a conditional-test operator expression is
the maximum of the multiplicity upper bounds of its second and third
operand expressions.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="conditionalTestExpressionCondition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The first operand expression of a conditional-test expression must be of
type Boolean and have a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.isBooleanType(self.operand1.type) and self.operand1.upper = 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="conditionalTestExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the first operand expression of a conditional-test
expression are the same as those before the conditional-test expression.
The assignments before the second and third operand expressions are the
same as those after the first operand expression.
(See the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="conditionalTestExpressionAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a name is unassigned after the first operand expression and has an
assigned source after one of the other operand expression, then it must
have an assigned source after both of those expressions."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.operand1.assignmentAfter.name->includesAll(
 self.operand2.assignmentAfter.name->asSet()->
 symmetricDifference(self.operand3.assignmentAfter.name->asSet())
 )"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns the assignments after the first operand expression, plus
assignments for any newly defined local names in the second and
third operand expressions. Local names that exist after the first operand
expression but are reassigned in the second or third operand expressions
are adjusted to have the conditional-test expression as their assigned
source. Local names that are newly defined in the second and third
operand expressions have the conditional-text expression as their source
and a type that is the effective common ancestor (if one exists) of the
types from the assignments after each of the second and third operands."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let assignments1 = self.operand1.assignmentAfter in
 let assignments2 = self.operand2.newAssignments() in
 let assignments3 = self.operand3.newAssignments() in
 let reassignments = assignments1->
 select(
 assignments2.name->includes(name) or 
 assignments3.name->includes(name)
 ).copy(self, null)->asSet() in
 let newAssignments = assignments2->
 select(
 assignments1.name->excludes(name) and
 assignments3.name->includes(name)
 )->collect(assignment |
 let otherAssignment = assignments3->any(name = assignment.name) in
 AssignedSource{
 name = assignment.name,
 source = self,
 type = self.commonAncestor(Set{assignment.type, otherAssignment.type}),
 lower = assignment.lower.min(otherAssignment.lower),
 upper = 
 if assignment.upper = -1 or otherAssignment.upper = -1 then -1
 else assignment.upper.max(otherAssignment.upper)
 endif
 }
 )->asSet()
 in
 self.updateAll(assignments1, reassignments->union(newAssignments))"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="operand1" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The first operand expression, which provides the condition to be tested."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="operand2" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The second operand expression, to be evaluated if the condition is true."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="operand3" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The third operand expression, to be evaluated if the condition is false."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="InstanceCreationExpression" eSuperTypes="#//InvocationExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression used to create a new instance of a class or data type."/>
- </eAnnotations>
- <eOperations name="referent" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.constructor = null then null
 else
 let referents = self.constructor.referent in
 let classReferents = referents->select(isClass()) in
 let dataTypeReferents = referents->select(isDataType()) in
 if dataTypeReferents->size() = 1 and classReferents->isEmpty() then
 dataTypeReferents->any(true)
 else if dataTypeReferents->notEmpty() then
 null
 else
 -- TODO: Handle operation overloading.
 let operationReferents =
 if classReferents->size() <> 1 then
 referents->select(isOperation())
 else 
 let name = self.constructor.unqualifiedName.toName() in
 classReferents->any(true).ownedMembers()->
 select(name() = name and isOperation())
 endif
 in
 if operationReferents->size() = 1 and
 operationReferents->forAll(isConstructor()) then
 operationReferents->any(true).constructorReference()
 else if classReferents->size() = 1 then
 classReferents->any(true)
 else
 null
 endif endif
 endif endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="feature" lowerBound="1" eType="#//FeatureReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="null"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referent = self.referent in
 if referent <> null and referent.isClassifier() then referent
 else self.InvocationExpression_type()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referent = self.referent in
 if referent <> null and referent.isClassifier() then 1
 else self.InvocationExpression_lower()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referent = self.referent in
 if referent <> null and referent.isClassifier() then 1
 else self.InvocationExpression_upper()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="instanceCreationExpressionIsObjectCreationDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An instance creation expression is an object creation if its referent is
not a data type."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="instanceCreationExpressionIsConstructorlessDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An instance creation expression is constructorless if its referent is a
class."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="instanceCreationExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referent of an instance creation expression is normally the
constructor operation, class or data type to which the constructor name
resolves. However, if the referent is an operation whose class is
abstract or is a class that is itself abstract, and there is an
associated Impl class constructor, then the referent is the Impl class
constructor."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="instanceCreationExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="There is no feature for an instance creation expression."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="instanceCreationExpressionConstructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The constructor name must resolve to a constructor operation (that is
compatible with the tuple argument expressions), a class or a data type,
but not both a class and a data type."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referent = self.referent in
 referent <> null and
 (referent.isDataType() or referent.isClass() or referent.isOperation())"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="instanceCreationExpressionConstructorlessLegality" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the expression is constructorless, then its tuple must be empty and
the referent class must not have any owned operations that are constructors."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.isConstructorless implies 
 self.tuple.size() = 0 and 
 not self.referent.ownedMembers()->exists(isConstructor())"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="instanceCreationExpressionDataTypeCompatibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If an instance creation expression is a data value creation (not an
object creation), then the tuple argument expressions are matched with
the attributes of the named type."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 -- TODO: Once overloading resolution is implemented, change this to only
 -- be for data value creation.
 self.tuple.size() <= self.parameterCount() and
 self.tuple.input->forAll(input | self.parameterIsAssignableFrom(input)) and
 self.tuple.output->forAll(output | self.parameterIsAssignableTo(output))"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="instanceCreationExpressionReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the referent of an instance creation expression is an operation, then
the class of that operation must not be abstract. Otherwise, the referent
is a class or data type, which must not be abstract."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referent = self.referent in
 let classReferent =
 if referent <> null and referent.isOperation() then 
 referent.namespace()
 else
 referent
 endif
 in
 referent <> null and not referent.isAbstractClassifier()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="parameterElements" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns the parameters of a constructor operation or the attributes of a
data type, or an empty set for a constructorless instance creation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isConstructorless then OrderedSet(ElementReference){}
 else self.InvocationExpression_parameterElements()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isConstructorless" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this is a constructorless object creation expression."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="PropertyAccessExpression"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let referent = self.referent in
 referent <> null and referent.isClass()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isObjectCreation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this is an object creation expression or a data value creation
expression."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="PropertyAccessExpression"/>
- <details key="unique" value="false"/>
- <details key="upper" value="*"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let referent = self.referent in
 referent = null or not referent.isDataType()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="constructor" eType="#//QualifiedName"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the class constructor operation to be invoked or the name of
a class or data type."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="PropertyAccessExpression" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression comprising a reference to a structural feature."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let feature = self.feature in
 if feature = null then null
 else feature.type()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let feature = self.feature in
 if feature = null then 0
 else if feature.upper() = -1 or 
 self.featureReference.expression.upper = -1 then -1
 else feature.upper() * self.featureReference.expression.upper
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let feature = self.feature in
 if feature = null then 0
 else feature.lower() * self.featureReference.expression.lower
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="propertyAccessExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The feature of a property access expression is the structural feature to
which its feature reference resolves."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="propertyAccessExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a property access expression is the type of the referenced
feature.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="propertyAccessExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity upper bound of a property access expression is given by
the product of the multiplicity upper bounds of the referenced feature
and the target expression.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="propertyAccessExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity lower bound of a property access expression is given by
the product of the multiplicity lower bounds of the referenced feature
and the target expression.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="propertyAccessExpressionFeatureResolution" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The feature reference for a property access expression must resolve to a
single structural feature."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.feature <> null"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="propertyAccessExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the expression of the feature reference of a
property access expression are the same as before the property access
expression."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a property access expression are the same as those
after the target expression of its feature reference."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.featureReference.expression.assignmentAfter"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="featureReference" lowerBound="1"
- eType="#//FeatureReference" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reference to a structural feature."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="feature" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referenced structural feature."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let referents = self.featureReference.referent->select(isProperty()) in
 if referents->size() <> 1 then null
 else referents->any(true)
 endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="NameExpression" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression that comprises a name reference."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let assignment = self.assignment in
 if assignment <> null then assignment.type
 else
 let enumerationLiteral = self.enumerationLiteral in
 if enumerationLiteral <> null then enumerationLiteral.type()
 else
 let propertyAccess = self.propertyAccess in
 if propertyAccess <> null then propertyAccess.type
 else null
 endif
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let assignment = self.assignment in
 if assignment <> null then assignment.upper
 else
 let enumerationLiteral = self.enumerationLiteral in
 if enumerationLiteral <> null then 1
 else
 let propertyAccess = self.propertyAccess in
 if propertyAccess <> null then propertyAccess.upper
 else 1 -- Note: This ensures a name defined as an "out" argument is not considered null.
 endif
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let assignment = self.assignment in
 if assignment <> null then assignment.lower
 else
 let enumerationLiteral = self.enumerationLiteral in
 if enumerationLiteral <> null then 1
 else
 let propertyAccess = self.propertyAccess in
 if propertyAccess <> null then propertyAccess.lower
 else 0
 endif
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="parameterReferent" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referents = self.name.referent->select(isParameter()) in
 if referents->size() <> 1 then null
 else referents->any(true)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="assignmentFor" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the source of a local name is a For Statement, it must be a @parallel
local name and it is only legal if this name expression is the target of
a CollectionFunctions::add invocation."/>
- </eAnnotations>
- <eParameters name="localName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="assignmentFor_" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let assignments = self.assignmentBefore->select(name = localName) in
 if assignments->isEmpty() or 
 assignments->forAll(isParallelLocalName) and not self.isAddTargetName()
 then 
 null
 else 
 assignments->any(true)
 endif"/>
- </eAnnotations>
- <eParameters name="localName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="isAddTargetName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let expression = self.enclosingExpression() in
 if expression = null then false
 else expression.isAddTarget(self)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="nameExpressionAssignmentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the name in a name expression is a local or parameter name, then its
assignment is its assigned source before the expression."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameExpressionEnumerationLiteralDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the name in a name expression resolves to an enumeration literal name,
then that is the enumeration literal for the expression."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameExpressionPropertyAccessDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the name in a name expression disambiguates to a feature reference,
then the equivalent property access expression has the disambiguation of
the name as its feature. The assignments before the property access
expression are the same as those before the name expression.
(See also the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a name expression is determined by its name. If the name is a
local name or parameter with an assignment, then the type of the name
expression is the type of that assignment. If the name is an enumeration
literal, then the type of the name expression is the corresponding
enumeration. If the name disambiguates to a feature reference, then the
type of the name expression is the type of the equivalent property access
expression.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity upper bound of a name expression is determined by its
name.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity lower bound of a name expression is determined by its
name.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameExpressionResolution" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the name referenced by this expression is not a disambiguated feature
reference or a local or parameter name, then it must resolve to exactly
one enumeration literal."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.validateNameExpressionResolution()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="validateNameExpressionResolution" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.propertyAccess <> null or 
 self.assignment <> null and self.assignment.source <> null or 
 self.enumerationLiteral <> null or
 -- NOTE: The following allows the name of a name expression that is an
 -- an argument of an out parameter to be unassigned.
 let owner = 
 if self.owner().oclIsKindOf(NamedExpression) then self.owner().owner()
 else self.owner()
 endif
 in
 owner.oclIsKindOf(_'Tuple') and
 owner.oclAsType(_'Tuple').output->exists(
 expression = self and
 owner.oclAsType(_'Tuple').invocation.parameterNamed(name).direction() = 'out'
 )"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If propertyAccess is not empty (i.e., if the referenced name disambiguates
to a feature reference), then return the assignments after the
property access expression. Otherwise, return the result of the superclass
updateAssignments operation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let propertyAccess = self.propertyAccess in
 if propertyAccess <> null then propertyAccess.assignmentAfter
 else self.Expression_updateAssignments()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="enumerationLiteral" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The identified enumeration literal, if the referenced name is for an enumeration literal."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 if self.name.isFeatureReference then null
 else
 let referents = self.name.referent->select(isEnumerationLiteral()) in
 if referents->size() <> 1 then null
 else referents->any(true)
 endif
 endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="assignment" eType="#//AssignedSource"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assigned source for the referenced name, if the name is a local or
parameter name."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 if self.name.isFeatureReference then null
 else
 let localName = self.name.unqualifiedName.toName() in
 if name.qualification = null then
 self.assignmentFor(localName)
 else
 let parameterReferent = self.parameterReferent() in
 if parameterReferent <> null and 
 parameterReferent.namespace().equals(self.currentScope()) then
 self.assignmentFor(localName)
 else
 null
 endif
 endif
 endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="propertyAccess" eType="#//PropertyAccessExpression"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The equivalent property access expression, if the referenced name
disambiguates to a feature reference."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let disambiguation = self.name.disambiguation in
 if disambiguation = null then null
 else
 PropertyAccessExpression{
 featureReference = disambiguation,
 owner = self
 } 
 endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="name" lowerBound="1" eType="#//QualifiedName"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The qualified name referenced in this expression. (For a local name, this
will actually have no qualification.)"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="BitStringUnaryExpression" eSuperTypes="#//UnaryExpression">
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.bitStringType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand.lower"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="bitStringUnaryExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A BitString unary expression has type BitString.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="bitStringUnaryExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A BitString unary expression has the same multiplicity lower bound as its
operand expression.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="bitStringUnaryExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A BitString unary expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="bitStringUnaryExpressionOperand" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The operand expression of a BitString unary expression must have type
BitString or Integer and a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let operandType = self.operand.type in
 (self.isBitStringType(operandType) or self.isIntegerType(operandType)) and
 self.operand.upper = 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="bitStringUnaryExpressionIsBitStringConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="BitString conversion is required if the operand expression of a BitString
unary expression has type Integer."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether BitString conversion is required on the operand expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.isIntegerType(self.operand.type)"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="FeatureInvocationExpression" eSuperTypes="#//InvocationExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An invocation of a feature referenced on a sequence of instances."/>
- </eAnnotations>
- <eOperations name="feature" eType="#//FeatureReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.target <> null then self.target
 else
 let outerScope = self.currentScope().namespace() in
 if outerScope = null or not outerScope.isClass() then null
 else
 FeatureReference{
 expression = ThisExpression{},
 nameBinding = NameBinding{name = outerScope.name()},
 owner = self
 }
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="referent" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let feature = self.feature in
 if feature = null then null
 else feature.behavioralFeatureReferent(self)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="featureInvocationExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a feature invocation expression is an implicit object destruction, it
has no referent. Otherwise, its referent is the operation or signal being
invoked.
(See the referent() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="featureInvocationExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a feature invocation expression has an explicit target, then that is
its feature. Otherwise, it is an alternative constructor call with
its feature determined implicitly.
(See the feature() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="featureInvocationExpressionReferentExists" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a feature invocation expression is not an implicit destructor call,
then it must be possible to determine a single valid referent for it
according to the overloading resolution rules."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.isImplicit or self.referent <> null and
 -- TODO: Remove this check once overloading resolution is implemented.
 self.tuple.size() <= self.parameterCount() and
 self.tuple.input()->forAll(input | self.parameterIsAssignableFrom(input)) and
 self.tuple.output()->forAll(output | self.parameterIsAssignableTo(output))"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="featureInvocationExpressionAlternativeConstructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An alternative constructor invocation may only occur in an expression
statement as the first statement in the definition for the method of a
constructor operation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.alternativeConstructorIsValid()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="featureInvocationExpressionImplicitAlternativeConstructor"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If there is no target feature expression, then the implicit feature with
the same name as the target type must be a constructor."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.target = null implies
 let referent = self.referent in
 referent <> null and referent.isConstructor()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="target" eType="#//FeatureReference"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A feature reference to the target feature to be invoked."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="BehaviorInvocationExpression" eSuperTypes="#//InvocationExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An invocation of a behavior referenced by name."/>
- </eAnnotations>
- <eOperations name="isAddTarget" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.feature <> null then false
 else
 let collectionFunctionAdd = self.collectionFunctionAdd() in
 if collectionFunctionAdd = null then false
 else
 let parameters = collectionFunctionAdd.parameters() in
 if parameters->isEmpty() then false
 else
 collectionFunctionAdd.containedIn(self.target.referent->asBag()) and
 self.tuple.outputFor(parameters)->exists(
 name = parameters->at(1).name() and
 expression = targetExpression
 )
 endif
 endif
 endif"/>
- </eAnnotations>
- <eParameters name="targetExpression" lowerBound="1" eType="#//Expression"/>
- </eOperations>
- <eOperations name="referent" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="referent1()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="referent1" eType="#//ElementReference"/>
- <eOperations name="BehaviorInvocation_referent" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let feature = self.feature() in
 if feature <> null then feature.behavioralFeatureReferent(self)
 else
 let referents = self.target.referent in
 if referents->select(isBehavior())->size() = 1 then
 let referent = referents->any(isBehavior()) in
 if referent.isTemplate() then 
 self.bindTemplateImplicitArguments(referent, null)
 else referent
 endif
 else if referents->select(isAssociationEnd())->size() = 1 then
 referents->any(isAssociationEnd())
 else
 null
 endif endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="feature" eType="#//FeatureReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.target.disambiguation"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="behaviorInvocationExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the target of a behavior invocation expression resolves to a behavior,
then the referent of the expression is that behavior. If the target
disambiguates to a feature reference, then the reference is the operation
or signal being invoked. Otherwise, if the target resolves to a property
that is an association end, then the referent is that property.
(See the referent() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="behaviorInvocationExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the target qualified name disambiguates to a feature reference, then
the feature of a behavior invocation expression is that feature reference.
(See the feature() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="behaviorInvocationExpressionReferentConstraint" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the target qualified name does not disambiguate to a feature reference,
then it must resolve to a behavior or an association end. Otherwise it
must resolve to a single feature referent according to the overloading
resolution rules, unless it is an implicit destructor call (in which case
it has no referent)."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.isImplicit or 
 let referent = self.referent in
 referent <> null and 
 -- NOTE: This check prevents the invocation from disambiguating to an 
 -- illegal constructor invocation.
 not referent.isConstructor() and
 -- Also check that the association owns all its ends.
 referent.isAssociationEnd() implies
 	referent.association().properties()->forAll(isAssociationEnd())"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="behaviorInvocationExpressionArgumentCompatibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the target qualified name does not disambiguate to a feature reference,
then each input argument expression must be assignable to its corresponding
parameter and each output argument expression must be assignable from its
corresponding parameter. (Note that this implies that the type of an
argument expression for an inout parameter must be the same as the type
of that parameter.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 -- TODO: Handle overloading for feature invocations.
 self.tuple.size() <= self.parameterCount() and
 self.tuple.input->forAll(input | self.parameterIsAssignableFrom(input)) and
 self.tuple.output->forAll(output | self.parameterIsAssignableTo(output))"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="behaviorInvocationExpressionAlternativeConstructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referent may only be a constructor (as a result of the target
disambiguating to a feature reference) if this behavior invocation
expression is the expression of an expression statement that is the first
statement in the definition for the method of a constructor operation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.alternativeConstructorIsValid()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="target" lowerBound="1"
- eType="#//QualifiedName" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The qualified name of the behavior to be invoked."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ShiftExpression" eSuperTypes="#//BinaryExpression">
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.bitStringType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.operand1.lower = 0 or self.operand2.lower = 0 then 0
 else 1
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="shiftExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A shift expression has type BitString.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="shiftExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A shift expression has a multiplicity lower bound of 0 if the lower bound
if either operand expression is 0 and 1 otherwise.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="shiftExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A shift expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="shiftExpressionOperands" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The first operand expression of a shift expression must have the type
BitString or Integer. The second operand expression must have the type
Integer."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let type1 = self.operand1.type in
 let type2 = self.operand2.type in
 (self.isBitStringType(type1) or self.isIntegerType(type1)) and self.isIntegerType(type2)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="shiftExpressionIsBitStringConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="BitString conversion is required if the first operand expression of a
shift expression has type Integer."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the first operand expression requires BitString conversion."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.isIntegerType(self.operand1.type)"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="UnboundedLiteralExpression" eSuperTypes="#//LiteralExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression that comprises an unbounded value literal."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.unlimitedNaturalType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="unboundedLiteralExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of an unbounded literal expression is UnlimitedNatural.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ThisExpression" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression comprising the keyword ?this?."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let currentScope = self.currentScope() in
 if currentScope = null then 
 null
 else if currentScope.isOperation() or currentScope.isMethod() then
 currentScope.namespace()
 else if currentScope.isBehavior() then
 let context = currentScope.context() in
 if context = null then currentScope else context endif
 else if currentScope.isClass() then
 currentScope
 else
 null
 endif endif endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="thisExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The static type of a this expression is the statically determined context
classifier for the context in which the this expression occurs.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="thisExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity upper bound of a this expression is always 1.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="thisExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity lower bound of a this expression is always 1.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ClassificationExpression" eSuperTypes="#//UnaryExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression used to test the dynamic type of its operand."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.booleanType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand.lower"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="classificationExpressionIsDirectDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A classification expression is direct if its operator is "hastype"."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classificationExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referent of a classification expression is the classifier to which
the type name resolves."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classificationExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A classification expression has type Boolean.
(see the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classificationExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A classification expression has a multiplicity lower bound that is the
same as the lower bound of its operand expression.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classificationExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A classification expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classificationExpressionTypeName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type name in a classification expression must resolve to a non-template classifier."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent <> null and not self.referent.isTemplate()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classificationExpressionOperand" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The operand expression of a classification expression must have a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand.upper = 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="referent" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The classifier to which the type name of the expression resolves."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let referents = self.typeName.referent->select(isClassifier()) in
 if referents->size() <> 1 then null
 else referents->any(true)
 endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDirect" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the test is for the operand to have the given type directly or to only conform to the given type."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operator = 'hastype'"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" lowerBound="1"
- eType="#//QualifiedName" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the type that the operand is to be tested against."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SuperInvocationExpression" eSuperTypes="#//InvocationExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An invocation expression used to invoke an operation of a superclass."/>
- </eAnnotations>
- <eOperations name="referent" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let context = self.currentScope().namespace() in
 if context = null or not context.isClass() then
 null
 else
 let superclasses =
 if target = null or target.qualification = null then
 context.parents()
 else
 target.qualification.referent->select(isClass())
 endif
 in
 if (target = null or target.qualification <> null) and
 superclasses->size() <> 1 then null
 else
 let name =
 if target = null then superclasses->any(true).name()
 else target.unqualifiedName.toName()
 endif
 in
 let referents = superclasses.base().members()->
 select(isOperation() and name() = name) 
 in
 -- TODO: Handle overloading resolution.
 if referents->size() <> 1 then
 null
 else
 referents->any(true)
 endif
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="feature" eType="#//FeatureReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="null"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="context" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let currentScope = self.currentScope() in
 if currentScope = null then null
 else if currentScope.isClassifier() and not currentScope.isMethod() and
 not currentScope.isActiveBehavior() then
 currentScope
 else if currentScope.isActiveBehavior() then
 currentScope.activeClass()
 else
 let outerScope = currentScope.namespace() in
 if outerScope = null or not outerScope.isClassifier() then null
 else outerScope
 endif
 endif endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="superInvocationExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referent of a super invocation expression is the method behavior of
the operation identified using the overloading resolution rules.
(See the referent() operation. Actually returns the operation, not the
method.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="superInvocationExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="There is no feature for a super invocation.
(See the feature() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="superInvocationExpressionQualification" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the target has a qualification, then this must resolve to one of the
superclasses of the current context class."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.target = null or
 let qualification = self.target.qualification in
 qualification <> null implies
 let superclass = qualification.referent->select(isClass()) in
 let context = self.context() in
 superclass->size() = 1 and context <> null and
 superclass->forAll(containedIn(context.parents()->asBag()))"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="superInvocationExpressionImplicitTarget" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the target is empty, the referent must be the method for a constructor
operation and the context class for the behavior containing the super
invocation expression must have exactly one superclass."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.target = null implies
 let referent = self.referent in
 let context = self.context() in
 referent <> null and referent.isConstructor() and
 context <> null and context.parents()->size() = 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="superInvocationExpressionConstructorCall" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the referent is the method of a constructor operation, the super
invocation expression must occur in an expression statement at the start
of the definition for the method of a constructor operation, such that
any statements preceding it are also super constructor invocations."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referent = self.referent in
 let context = self.context() in
 referent <> null and referent.isConstructor() and context <> null implies
 let operation = self.currentScope().specification() in
 operation.isConstructor() and
 let statement = self.enclosingStatement() in
 statement <> null and statement.oclIsKindOf(ExpressionStatement) and
 let annotatedStatement = statement.owner() in
 let owner = annotatedStatement.owner() in
 owner <> null implies owner.oclIsKindOf(Block) and
 let block = owner.oclAsType(Block) in
 block.enclosingStatement() = null and
 let classReference = referent.namespace() in
 let i = block.statement->indexOf(annotatedStatement) in
 i = 1 or
 block.statement->subOrderedSet(1, i-1).statement->forAll(
 oclIsKindOf(ExpressionStatement) and
 let expression = oclAsType(ExpressionStatement).expression in
 expression.oclIsKindOf(SuperInvocationExpression) and
 -- NOTE: This checks to ensure that no previous
 -- super-constructor invocation is for the same
 -- superclass
 not expression.oclAsType(SuperInvocationExpression).
 referent.namespace().equals(classReference)
 )"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="superInvocationExpressionDestructorCall" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the referent is the method of a destructor operation, the super
invocation expression must occur within the method of a destructor
operation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referent = self.referent in
 referent <> null and referent.isDestructor() implies
 let operation = self.currentScope() in
 operation <> null and operation.isDestructor()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="superInvocationExpressionOperation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="It must be possible to identify a single valid operation denoted by the
target of a super invocation expression that satisfies the overloading
resolution rules."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.referent <> null and
 -- TODO: Remove this check once overloading resolution is implemented.
 self.tuple.size() <= self.parameterCount() and
 self.tuple.input->forAll(input | self.parameterIsAssignableFrom(input)) and
 self.tuple.output->forAll(output | self.parameterIsAssignableTo(output))"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="target" eType="#//QualifiedName"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the operation to be invoked, optionally qualified with the
name of the appropriate superclass."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="IncrementOrDecrementExpression" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A unary expression with either an increment or decrement operator."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.integerType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand.lower"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="incrementOrDecrementExpressionAssignmentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the operand of an increment or decrement expression is a name, then
the assignment for the expression is a new assigned source for the name
with the expression as the source."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="incrementOrDecrementExpressionIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An increment or decrement expression has a feature as its operand if the
operand is a kind of FeatureLeftHandSide."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="incrementOrDecrementExpressionIsIndexedDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An increment or decrement expression is indexed if its operand is indexed."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="incrementOrDecrementExpressionIsDataValueUpdateDerivation"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An increment or decrement expression is a data value update if its
operand is an attribute of a data value held in a local name or parameter."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="incrementOrDecrementExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the operand of an increment or decrement expression is a feature,
then the referent for the operand."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="incrementOrDecrementExpressionExpressionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The effective expression for the operand of an increment or decrement
expression is the operand treated as a name expression, property access
expression or sequence access expression, as appropriate for evaluation
to obtain the original value to be updated."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="incrementOrDecrementExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An increment or decrement expression has type Integer.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="incrementOrDecrementExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An increment or decrement expression has the same multiplicity lower
bound as its operand expression.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="incrementOrDecrementExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An increment or decrement expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="incrementOrDecrementExpressionOperand" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The operand expression must have type Integer and a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.isIntegerType(self.operand.type) and self.operand.upper = 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="incrementOrDecrementExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the operand of an increment or decrement
expression are the same as those before the increment or decrement
expression.
(See the SyntaxElement::assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after an increment and decrement expression include all
those after its operand expression. Further, if the operand expression,
considered as a left hand side, is a local name, then this is reassigned."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let assignment = self.assignment in
 if assignment = null then self.operand.assignmentAfter
 else assignment.update(self.operand.assignmentAfter)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="assignment" eType="#//AssignedSource"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the operand is a name, then the new assigned source for that name."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 if self.isFeature then null
 else
 let assignments = 
 self.assignmentBefore->select(name = self.operand.localName()) in
 if assignments->isEmpty() then null
 else assignments->any(true).copy(self, null)
 endif
 endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="operand" lowerBound="1"
- eType="#//LeftHandSide" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The operand, which must have the form of an assignment left-hand side."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The effective expression used to obtain the original value of the operand
to be updated."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operand.expression()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="feature" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the operand is a feature, then the referent for that feature."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 if not self.isFeature then null
 else self.operand.referent()
 endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isPrefix" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the operator is being used as a prefix or a postfix."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isFeature" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the operand is a feature or not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operand.feature() <> null"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isIndexed" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the operand has an index or not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operand.index() <> null"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDataValueUpdate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this expression updates an attribute of a data value held in a
local name or parameter."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operand.isDataValueUpdate()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The increment ("++") or decrement ("--") operator for this expression."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="BooleanLiteralExpression" eSuperTypes="#//LiteralExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression that comprises a Boolean literal."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.booleanType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="booleanLiteralExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a boolean literal expression is Boolean.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="image" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The textual image of the literal token for this expression."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="NamedTuple"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="NamedTuple" eSuperTypes="#//Tuple">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A tuple in which the arguments are matched to parameters by name."/>
- </eAnnotations>
- <eOperations name="size" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.namedExpression->size()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="inputFor" ordered="false" upperBound="-1" eType="#//InputNamedExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 parameters->select(
 let direction = direction() in
 direction = 'in' or direction = 'inout' 
 )->collect(parameter |
 let parameterName = parameter.name() in
 let arguments = self.namedExpression->select(actualName() = parameterName) in
 if arguments->isEmpty() then
 InputNamedExpression{
 name = parameterName,
 expression = SequenceConstructionExpression{
 hasMultiplicity = true
 },
 owner = self
 }
 else
 let argument : NamedExpression = arguments->any(true) in
 InputNamedExpression{
 name = parameterName,
 expression = argument.expression,
 index = argument.index,
 owner = self
 }
 endif
 )->asSet()"/>
- </eAnnotations>
- <eParameters name="parameters" upperBound="-1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="outputFor" ordered="false" upperBound="-1" eType="#//OutputNamedExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 parameters->select(parameter |
 let direction = parameter.direction() in
 -- NOTE: This allows missing arguments for out parameters.
 direction = 'out' and 
 self.namedExpression->exists(actualName() = parameter.name()) or
 direction = 'inout' 
 )->collect(parameter |
 let parameterName = parameter.name() in
 let arguments = self.namedExpression->select(actualName() = parameterName) in
 if arguments->isEmpty() then
 -- NOTE: This will cause an error for a missing argument for
 -- an inout parameter.
 OutputNamedExpression{
 name = parameterName,
 expression = SequenceConstructionExpression{
 hasMultiplicity = true
 },
 owner = self
 }
 else
 let argument : NamedExpression = arguments->any(true) in
 OutputNamedExpression{
 name = parameterName,
 index = argument.index,
 expression = argument.expression,
 owner = self
 }
 endif
 )->asSet()"/>
- </eAnnotations>
- <eParameters name="parameters" upperBound="-1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="outputForExpression" eType="#//OutputNamedExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
				let arguments = self.namedExpression->select(a | a.expression = expression) in
					if arguments->isEmpty() then null
					else
						let argument = arguments->any(true) in
							OutputNamedExpression{
								name = argument.name,
								index = argument.index,
								expression = expression,
								owner = self
							}
					endif"/>
- </eAnnotations>
- <eParameters name="expression" lowerBound="1" eType="#//Expression"/>
- </eOperations>
- <eOperations name="namedTupleArgumentNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of a named expression of a named tuple must be the name of a
parameter of the invocation the tuple is for. No two named expressions
may have the same name."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let names = self.invocation.parameter.name() in
 self.namedExpression->forAll(names->includes(actualName())) and
 self.namedExpression->isUnique(actualName())"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="namedExpression" lowerBound="1"
- upperBound="-1" eType="#//NamedExpression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument expressions for this tuple paired with the corresponding
parameter names."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="NaturalLiteralExpression" eSuperTypes="#//LiteralExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression that comprises a natural literal."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.naturalType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="naturalLiteralExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a natural literal is the Alf library type Natural. NOTE: If
the context of a natural literal expression unambiguously requires either
an Integer or an UnlimitedNatural value, then the result of the literal
expression is implicitly downcast to the required type. If the context is
ambiguous, however, than an explicit cast to Integer or UnlimitedNatural
must be used.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="image" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The textual image of the literal token for this expression."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="SequenceRange"/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="SequenceRange"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SequenceRange" eSuperTypes="#//SequenceElements">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A specification of the elements of a sequence as a range of integers."/>
- </eAnnotations>
- <eOperations name="conformsTo" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The lower and upper range expressions must have type Integer."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let rangeLowerType = self.rangeLower.type in
 let rangeUpperType = self.rangeUpper.type in
 rangeLowerType <> null and self.isIntegerType(rangeLowerType) and
 rangeUpperType <> null and self.isIntegerType(rangeUpperType)"/>
- </eAnnotations>
- <eParameters name="type" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.updateAll(
 self.updateAll(
 self.assignmentsBefore(),
 self.rangeLower.assignmentAfter
 ),
 self.rangeUpper.assignmentAfter
 )"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="-1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="0"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="sequenceRangeLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity lower bound of a sequence range is 0.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceRangeUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity upper bound of a sequence range is * (since it is not
possible, in general, to statically determine a more constrained upper
bound).
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceRangeExpressionMultiplicity" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Both expressions in a sequence range must have a multiplicity upper bound
of 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.rangeLower.upper = 1 and self.rangeUpper.upper = 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceRangeAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A local name may be defined or reassigned in at most one of the
expressions of a sequence range."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.rangeLower.newAssignments().name->
 excludesAll(self.rangeUpper.newAssignments().name)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="rangeLower" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression whose value gives the lower bound for the range."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="rangeUpper" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression whose value gives the upper bound for the range."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="NameLeftHandSide" eSuperTypes="#//LeftHandSide">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A left-hand side that is a name."/>
- </eAnnotations>
- <eOperations name="target" eType="#//QualifiedName">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.target"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="index" eType="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.index"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="referent" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let feature = self.feature() in
 if feature <> null then
 let referents = feature.referent->select(isProperty()) in
 if referents->size() <> 1 then null
 else referents->any(true)
 endif
 else
 let oldAssignment = self.oldAssignment() in
 if oldAssignment = null then null
 else
 let parameterReferent = self.parameterReferent() in
 if parameterReferent <> null then parameterReferent
 else oldAssignment.source.toReference()
 endif 
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="parameterReferent" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referents = self.target().referent->select(isParameter()) in
 if referents->size() <> 1 then null
 else referents->any(true)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let oldAssignment = self.oldAssignment() in
 if oldAssignment = null then self.LeftHandSide_type()
 else oldAssignment.type
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let oldAssignment = self.oldAssignment() in
 if self.index <> null or oldAssignment = null then 
 self.LeftHandSide_upper()
 else oldAssignment.upper
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let oldAssignment = self.oldAssignment() in
 if self.index <> null or oldAssignment = null then 
 self.LeftHandSide_lower()
 else oldAssignment.lower
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="oldAssignment" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referents = self.assignmentBefore->select(name = self.localName()) in
 if referents->isEmpty() then null
 else referents->any(true)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="feature" eType="#//FeatureReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.target().disambiguation"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="expression" lowerBound="1" eType="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
				let expression = self.primary() in
					if self.index = null then expression
					else
						SequenceAccessExpression{
							primary = expression,
							index = index.reference(),
							owner = self
						}
					endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="primary" lowerBound="1" eType="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
				let feature = self.feature() in
				if feature = null then
					NameExpression{
						name = self.target.copy(),
						owner = self
					}
				else
					PropertyAccessExpression{
						feature = feature,
						owner = self
					}
				endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="localName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.feature() <> null then null
 else self.target().unqualifiedName.toName()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="nameLeftHandSideAssignmentAfterDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a name left-hand side has an index, then the assignments after the
left-hand side are the same as the assignments after the index. If the
left-hand side has no index, but its target disambiguates to a feature
reference, then the assignments after the left-hand side are the
assignments after the feature expression. Otherwise the assignments
after the left-hand side are the same as the assignments before the
left-hand side.
(See the LeftHandSide::assignmentsAfter() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameLeftHandSideTargetAssignment" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The target of a name left hand side may not already have an assigned
source that is a loop variable definition, an annotation, a sequence
expansion expression or a parameter that is an in parameter."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referent = self.referent in
 if referent = null then true
 else if referent.isParameter() then
 referent.direction() <> 'in'
 else if referent.isProperty() then
 let expression = self.feature().expression in
 -- This condition ensures that there will be an assigned name
 -- for an assignment to an attribute of a data type.
 expression.type.isDataType() implies self.isDataValueUpdate()
 else
 not (referent.isLoopVariable() or
 referent.isAnnotation() or
 referent.isSequenceExpansionExpression()
 )
 endif endif endif"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameLeftHandSideAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the target of a name left-hand side disambiguates to a feature
reference, then the assignments before the expression of the feature
reference are the assignments before the left-hand side. If a name
left-hand side has an index, then the target must either disambiguate
to a feature reference or already have an assigned source, and the
assignments before the index expression are the assignments before the
left-hand side or, if the target disambiguates to a feature reference,
the assignments after the expression of the feature reference.
(See also the LeftHandSide::assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.index <> null implies 
 (self.feature() <> null or self.oldAssignment() <> null)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameLeftHandSideReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the target of a name left-hand side disambiguates to a structural
feature, then the referent of the left-hand side is that feature. If the
target resolves to a parameter, then the referent is that parameter. If
the target resolves to a local name, then the referent is the assigned
source for that local name, if it has one.
(See the referent() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameLeftHandSideLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a name left-hand side is indexed, then its lower bound is 1.
Otherwise, if the left-hand side is for a local name with an assignment,
than its lower bound is that of the assignment, else, if it has a
referent, then its lower bound is that of the referent.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameLeftHandSideUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a name left-hand side is indexed, then its upper bound is 1.
Otherwise, if the left-hand side is for a local name with an assignment,
than its upper bound is that of the assignment, else, if it has a
referent, then its upper bound is that of the referent.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameLeftHandSideTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a name left-hand side is for a local name with an assignment, then its
type is that of that assignment. Otherwise, if the left-hand side has a
referent, then its type is the type of that referent.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameLeftHandSideTargetResolution" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the target of a name left-hand side is qualified, then, if it does not
disambiguate to a feature, it must have a referent that is a parameter of
an operation or behavior that is the current scope the left-hand is in,
and, if it does disambiguate to a feature, it must have a single referent
that is a structural feature."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.target().qualification <> null implies
 let referent = self.referent in
 referent <> null and referent.isParameter() or
 let feature = self.feature() in
 feature <> null and 
 -- TODO: This should be a separate constraint.
 feature.expression.upper = 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameLeftHandSideIndexedFeature" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the target of a name left-hand side disambiguates to a feature
reference, and the left-hand side has an index, then the referent of the
feature reference must be ordered and non-unique."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.index() <> null implies
 let referent = self.referent in
 referent <> null and referent.isFeature() implies
 referent.isOrdered() and referent.isNonunique()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameLeftHandSideNontemplateTarget" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The target of a name left-hand side must not have a template binding."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.target.templateName = null"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="target" eType="#//QualifiedName"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name that is the target of the assignment."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="index" eType="#//Expression"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An optional expression that evaluates to an index into the values of an
ordered sequence."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="EffectiveLeftHandSide" eSuperTypes="#//NameLeftHandSide">
- <eOperations name="target" eType="#//QualifiedName">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let expression = self.primary() in
 if expression.oclIsKindOf(NameExpression) then
 expression.oclAsType(NameExpression).name
 else
 null
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="index" eType="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.expression.oclIsKindOf(SequenceAccessExpression) then
 self.expression.oclAsType(SequenceAccessExpression).index
 else
 null
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="feature" eType="#//FeatureReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let primary = self.primary() in
 if expression.oclIsKindOf(NameExpression) then
 expression.oclAsType(NameExpression).name.disambiguation
 else if expression.oclIsKindOf(PropertyAccessExpression) then
 expression.oclAsType(PropertyAccessExpression).featureReference
 else
 null
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="primary" lowerBound="1" eType="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.expression.oclIsKindOf(SequenceAccessExpression) then
 self.expression.oclAsType(SequenceAccessExpression).primary
 else
 expression
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="expression" eType="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
- eType="#//Expression"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SequenceReductionExpression" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression used to reduce a sequence of values effectively by inserting
a binary operation between the values."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.primary.expression.type"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="sequenceReductionExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referent for a sequence reduction expression is the behavior denoted
by the behavior name of the expression."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceReductionExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A sequence reduction expression has the same type as its primary
expression.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceReductionExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A sequence reduction expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceReductionExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A sequence reduction expression has a multiplicity lower bound of 1.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceReductionExpressionBehavior" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The behavior name in a sequence reduction expression must denote a behavior."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let referent = self.referent in
 referent <> null and not referent.isTemplate()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceReductionExpressionBehaviorParameters" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referent behavior must have two in parameters, a return parameter and
no other parameters. The parameters must all have the same type as the
argument expression and multiplicity [1..1]."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 referent <> null implies
 let parameters = referent.parameters() in
 let returnParameter = referent.returnParameter() in
 let type = self.type in
 parameters->size() = 2 and returnParameter <> null and
 parameters->forAll(direction() = 'in') and
 parameters->including(returnParameter)->forAll(
 lower() = 1 and upper() = 1 and
 let parameterType = type() in
 parameterType = null and type = null or
 parameterType <> null and parameterType.equals(type) 
 )"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceReductionExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the target expression of a sequence reduction
expression are the same as the assignments before the sequence reduction
expression.
(See the SyntaxElement::assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a sequence reduction expression are the same as
after its primary expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.primary.expression.assignmentAfter"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="referent" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reference to the behavior to be used as the reducer."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let referents = self.behaviorName.referent->select(isBehavior()) in
 if referents->size() <> 1 then null
 else referents->any(true)
 endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isOrdered" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this is an ordered reduction or not."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="primary" lowerBound="1"
- eType="#//ExtentOrExpression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The target class name or primary expression for the reduction."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="behaviorName" lowerBound="1"
- eType="#//QualifiedName" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the behavior to be used as the reducer."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SequenceExpressionList" eSuperTypes="#//SequenceElements">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A specification of the elements of a sequence using a list of expressions."/>
- </eAnnotations>
- <eOperations name="conformsTo" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Each expression in the list must have a multiplicity upper bound of no
more than 1. The type of each expression in the list must conform to
the given type (with allowance for bit string conversion)."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.element->forAll(element |
 let elementType = element.type in
 element.upper <= 1 and 
 (type = null or elementType <> null and
 (elementType.conformsTo(type) or
 self.isIntegerType(elementType) and self.isBitStringType(type)
 )
 )
 )"/>
- </eAnnotations>
- <eParameters name="type" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.element->includes(element) or 
 self.element->first() = element then
 self.assignmentsBefore()
 else
 let i = self.element->indexOf(element) in
 self.element->at(i-1).assignmentAfter
 endif"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
- </eOperations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element->last().assignmentAfter"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element.lower->sum()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let upperBounds = self.element.upper in
 if upperBounds->includes(-1) then -1
 else upperBounds->sum()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="sequenceExpressionListLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity lower bound of the elements of a sequence expression
list is given by the sum of the lower bounds of each of the expressions
in the list.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceExpressionListUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity upper bound of the elements of a sequence expression
list is given by the sum of the upper bounds of each of the expressions
in the list. If any of the expressions in the list have an unbounded
upper bound, then the sequence expression list also has an unbounded
upper bound.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="element" lowerBound="1"
- upperBound="-1" eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The list of expressions whose values determine the elements of the sequence."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="RelationalExpression" eSuperTypes="#//BinaryExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A binary expression with a relational operator."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.booleanType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.operand1.lower = 0 or self.operand2.lower = 0 then 0
 else 1
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="relationalExpressionIsUnlimitedNaturalDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A relational expression is an UnlimitedNatural comparison if either one
of its operands has type UnlimitedNatural."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="relationalExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a relational expression is Boolean.
(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="relationalExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A relational expression has a multiplicity lower bound of 0 if the lower
bound if either operand expression is 0 and 1 otherwise.
(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="relationalExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A relational expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="relationalExpressionOperandTypes" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The operand expressions for a comparison operator must have type Integer,
UnlimitedNatural or Natural. However, it is not allowed to have one
operand expression be Integer and the other be UnlimitedNatural."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let type1 = self.operand1.type in
 let type2 = self.operand2.type in
 self.isNaturalType(type1) and self.isNumericType(type2) or
 self.isIntegerType(type1) and self.isIntegerType(type2) or
 self.isUnlimitedNaturalType(type1) and self.isUnlimitedNaturalType(type2)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isUnlimitedNatural" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this is an UnlimitedNatural comparison."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
				let type1 = self.operand1.type in
					self.isUnlimitedNaturalType(type1) and not self.isNaturalType(type1) or 
				let type2 = self.operand2.type in
					self.isUnlimitedNaturalType(type2) and not self.isNaturalType(type2)"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="LocalNameDeclarationStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A statement that declares the type of a local name and assigns it an
initial value."/>
- </eAnnotations>
- <eOperations name="actualName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="NameBinding{name = self.name}.toName()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 AssignedSource{
 name = self.actualName(),
 source = self,
 type = self.type,
 lower = 0,
 upper = if self.hasMultiplicity then -1 else 1 endif
 }.update(self.expression.assignmentAfter)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="localNameDeclarationStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the expression of a local name declaration
statement are the same as the assignments before the statement.
(See SyntaxElement::assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="localNameDeclarationStatementType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the type name in a local name declaration statement is not empty, then
it must resolve to a non-template classifier and the expression must be
assignable to that classifier."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.typeName <> null implies 
 self.type <> null and not self.type.isTemplate()
 and AssignableLocalNameDeclaration{localNameDeclaration = self}.
 isAssignableFrom(self.expression)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="localNameDeclarationStatementLocalName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The local name in a local name declaration statement must be unassigned
before the statement and before the expression in the statement.
It must remain unassigned after the expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 not self.expression.assignmentBefore->exists(a | a.name = self.actualName()) and
 not self.expression.assignmentAfter->exists(a | a.name = self.actualName())"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="localNameDeclarationStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a local name declaration statement are the
assignments after the expression of the statement plus a new assignment
for the local name defined by the statement. The assigned source for the
local name is the local name declaration statement. The local name has
the type denoted by the type name if this is not empty and is untyped
otherwise. If the statement has multiplicity, then the multiplicity of
the local name is [0..*], otherwise it is [0..1].
(See assignmentsAfter() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="localNameDeclarationStatementExpressionMultiplicity" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a local name declaration statement does not have multiplicity, then
the multiplicity of upper bound of the assigned expression must not be
greater than 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="(not self.hasMultiplicity) implies self.expression.upper <=1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="localNameDeclarationStatementTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a local name declaration statement with a type name is the
single classifier referent of the type name. Otherwise the type is empty."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="typeCached" eType="#//ElementReference"/>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.typeName = null then null
 else 
 let referent = self.typeName.referent->select(isClassifier()) in
 if referent->size() <> 1 then null
 else self.typeName.referent->any(true)
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The local name being declared."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="AssignableLocalNameDeclaration"/>
- <details key="unique" value="false"/>
- <details key="upper" value="*"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression to be evaluated to provide the initial value to be assigned to the local name."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="hasMultiplicity" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the local name is to have a multiplicity upper bound of * rather than 1."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" eType="#//QualifiedName"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The declared type of the local name."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type declared for the given local name."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.typeCached()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAny" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the local name is being declared with an empty type.
(Added solely to allow proper Xtext re-serialization.)"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="AssignableLocalNameDeclaration" eSuperTypes="#//AssignableElement">
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.localNameDeclaration.type"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="0"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="if self.localNameDeclaration.hasMultiplicity then -1 else 1 endif"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="localNameDeclaration" lowerBound="1"
- eType="#//LocalNameDeclarationStatement"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="Statement" abstract="true" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A model of an Alf statement."/>
- </eAnnotations>
- <eOperations name="enclosingLoopStatement" eType="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the nearest enclosing loop statement, or this statement, if it is
a loop statement. (This operation is overridden for loop statements.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="let enclosingStatement = self.enclosingStatement() in
 if enclosingStatement = null then null
 else enclosingStatement.enclosingLoopStatement()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if the given annotation is allowed for this kind of statement.
By default, only an @isolated annotation is allowed, with no arguments.
This operation is redefined only in subclasses of Statement for kinds of
statements that allow different annotations than this default."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.Statement_annotationAllowed(annotation)"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//Annotation"/>
- </eOperations>
- <eOperations name="Statement_annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="annotation.identifier = 'isolated' and annotation.argument->isEmpty()"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//Annotation"/>
- </eOperations>
- <eOperations name="annotation" ordered="false" upperBound="-1" eType="#//Annotation">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let container = self.oclContainer() in
 if container = null or not container.oclIsKindOf(AnnotatedStatement) then
 Set(Annotation){}
 else
 container.oclAsType(AnnotatedStatement).annotations()->collect(a |
 Annotation{text = a}->asSet()
 )->asSet()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="hasAnnotation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.annotation()->exists(identifier = name)"/>
- </eAnnotations>
- <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="newAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Get the assigned sources for assignments made within this statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let assignmentsBefore = self.assignmentBefore in
 self.assignmentAfter->select(isNew(assignmentsBefore))"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="resolve" eType="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the source of the given local name in the assignments before this
statement, if any."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let assignment = self.assignmentBefore->select(a | a.name = name) in
 if assignment->isEmpty() then null
 else assignment->any(true).source
 endif"/>
- </eAnnotations>
- <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="By default, the assignments after are the same as the assignments
before."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.Statement_assignmentsAfter()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="Statement_assignmentsAfter" ordered="false" upperBound="-1"
- eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.assignmentBefore"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="assignmentsAfterCached" ordered="false" upperBound="-1" eType="#//AssignedSource"/>
- <eOperations name="mergeAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Merge the assignments made in a collection of blocks, such as occur in an
accept or if statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let newAssignments = blocks->collect(b | 
 if b = null then Set(AssignedSource){}
 else b.assignmentAfter->select(isNew(b.assignmentBefore))
 endif
 )->asSet() in
 newAssignments.name->asSet()->collect(n | 
 self.merge(n, newAssignments->select(name = n))
 )->asSet()"/>
- </eAnnotations>
- <eParameters name="blocks" ordered="false" unique="false" upperBound="-1" eType="#//Block"/>
- </eOperations>
- <eOperations name="merge" lowerBound="1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 AssignedSource{
 name = name,
 source = self,
 type = self.commonAncestor(assignments.type->asSet()),
 lower = assignments.lower->min(),
 upper = 
 if assignments.upper->exists(n | n = -1) then -1
 else assignments.upper->max()
 endif
 }"/>
- </eAnnotations>
- <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- <eParameters name="assignments" ordered="false" upperBound="-1" eType="#//AssignedSource"/>
- </eOperations>
- <eOperations name="statementAnnotationsAllowed" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="All the annotations of a statement must be allowed, as given by the annotationAllowed operation for the statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.annotation()->forAll(a | self.annotationAllowed(a))"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="statementUniqueAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="No name may be assigned more than once before or after a statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.assignmentBefore->isUnique(name) and self.assignmentAfter->isUnique(name)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="statementIsIsolatedDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A statement is isolated if it has an @isolated annotation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentBefore" ordered="false"
- upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assigned sources for local names available lexically before this statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.assignmentsBefore()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentAfter" ordered="false"
- upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assigned sources for local names available lexically after this statement.
This includes not only any assignments made within the statement, but also
any assignments that are unchanged from before the statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.assignmentsAfterCached()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="enclosingStatement" eType="#//Statement"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The statement immediately enclosing this statement, if any."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.enclosingStatement()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isIsolated" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this statement should be executed in isolation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.hasAnnotation('isolated')"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="Annotation" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An identified modification to the behavior of an annotated statement."/>
- </eAnnotations>
- <eOperations name="identifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- <eOperations name="arguments" ordered="false" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="text" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The text line for the annotation."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="identifier" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the annotation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.identifier()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="argument" ordered="false"
- upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If permitted by the annotation, an optional list of local names relevant to the annotation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.arguments()->collect(n | NameBinding{name = n}.toName())->asSet()"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="QualifiedNameList" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A group of qualified names."/>
- </eAnnotations>
- <eOperations name="currentScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Handle specially the cases of a specialization list and a redefinition list."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let owner = self.owner() in
 if owner.oclIsKindOf(ClassifierDefinition) then
 owner.oclAsType(ClassifierDefinition).outerScope()
 else if owner.oclIsKindOf(OperationDefinition) then
 owner.oclAsType(OperationDefinition).containingMember().namespace.outerScope()
 else
 self.SyntaxElement_currentScope()
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="name" ordered="false" lowerBound="1"
- upperBound="-1" eType="#//QualifiedName" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The names in the group."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="NonFinalClause" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A clause of an if statement with a conditional expression and a sequence of
statements that may be executed if the condition is true."/>
- </eAnnotations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if element = self.body then self.condition.assignmentAfter
 else self.assignmentsBefore()
 endif"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
- </eOperations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before a non-final clause are the assignments before the
condition of the clause."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.SyntaxElement_assignmentsBefore()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a non-final clause are the assignments after the
block of the clause."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.body.assignmentAfter"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="nonFinalClauseAssignmentsBeforeBody" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the body of a non-final clause are the assignments
after the condition.
(See the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nonFinalClauseConditionLocalNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a name is unassigned before the condition expression of a non-final
clause, then it must be unassigned after that expression (i.e., new local
names may not be defined in the condition)."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.condition.assignmentBefore.name->includesAll(
 self.condition.assignmentAfter.name
 )"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nonFinalClauseConditionType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The condition of a non-final clause must have type Boolean and a
multiplicity upper bound no greater than 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let type = self.condition.type in
 type <> null and self.isBooleanType(type) and 
 condition.upper <= 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="condition" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression that is evaluated to determine whether the clause body may
be executed."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="body" lowerBound="1" eType="#//Block"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The sequence of statements that may be executed if the condition evaluates
to true."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="Block" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A grouped sequence of statements."/>
- </eAnnotations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.statement->includes(element) then Set(AssignedSource){}
 else
 let i = self.statement->indexOf(element) in
 if i = 1 then self.assignmentBefore
 else 
 let statementBefore = self.statement->at(i-1) in
 -- NOTE: Xtext editor will try to semantically validate even
 -- when there are syntax errors.
 if statementBefore.statement = null then
 self.assignmentsBefore(statementBefore)
 else
 statementBefore.statement.assignmentAfter
 endif
 endif
 endif"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
- </eOperations>
- <eOperations name="newAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Get the assigned sources for assignments made within this block."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let assignmentsBefore = self.assignmentBefore in
 self.assignmentAfter->select(isNew(assignmentsBefore))"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="blockAssignmentsBeforeStatements" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before each statement in a block other than the first are
the same as the assignments after the previous statement."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="blockAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the first statement of a block are the same as the
assignments before the block."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="blockAssignmentAfterDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a block is not empty, then the assignments after the block are the same
as the assignments after the last statement of the block. Otherwise they
are the same as the assignments before the block."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="statement" upperBound="-1"
- eType="#//AnnotatedStatement" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The ordered sequence of statements in the block."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentAfter" ordered="false"
- upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assigned sources for local names available lexically after this block.
This includes not only any assignments made within the block, but also
any assignments that are unchanged from before the block."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 if self.statement->isEmpty() then self.assignmentBefore
 else self.statement->last().statement.assignmentAfter
 endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentBefore" ordered="false"
- upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assigned sources for local names available lexically before this block."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.assignmentsBefore()"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="BlockStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A statement that executes a block."/>
- </eAnnotations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.block.assignmentAfter"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="blockStatementParallelAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="In a parallel block statement, any name assigned in one statement of the
block may not be further assigned in any subsequent statement in the same
block."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.isParallel or self.block = null then true
 else self.block.statement.statement.newAssignments()->
 isUnique(name)
 endif"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="blockStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the block of a block statement are the same as the
assignments before the block statement."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="blockStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a block statement are the same as the assignments
after the block of the block statement."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="blockStatementEnclosedStatements" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The enclosing statement for all the statements in the block of a block
statement is the block statement."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="blockStatementIsParallelDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A block statement is parallel if it has a @parallel annotation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="In addition to an @isolated annotation, a block statement may have a
@parallel annotation. It may not have any arguments."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.Statement_annotationAllowed(annotation) or 
 annotation.identifier = 'parallel' and annotation.argument->isEmpty()"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//Annotation"/>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="block" lowerBound="1" eType="#//Block"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The block to be executed."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isParallel" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the statements in the block of this block statement should be
executed concurrently."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="DoStatement"/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="DoStatement"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.hasAnnotation('parallel')"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="DoStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A looping statement for which the continuation condition is first tested
after the first iteration."/>
- </eAnnotations>
- <eOperations name="enclosingLoopStatement" eType="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.condition = element then self.body.assignmentAfter
 else self.assignmentBefore
 endif"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
- </eOperations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let assignmentsBefore = self.assignmentBefore in
 self.condition.assignmentAfter->
 select(isNew(assignmentsBefore)) ->
 iterate(a, assignments : Set(AssignedSource) = assignmentsBefore |
 AssignedSource{
 name = a.name,
 source = self,
 type = a.type,
 lower = a.lower,
 upper = a.upper
 }.update(assignments)
 )"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="doStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the block of a do statement are the same as the
assignments before the do statement. The assignments before the condition
expression of a do statement are the same assignments after the block.
(See assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="doStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the assigned source for a name after the condition expression is
different than before the do statement, then the assigned source of the
name after the do statement is the do statement. Otherwise it is the same
as before the do statement.
(See assignmentsAfter() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="doStatementCondition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The condition expression of a do statement must have type Boolean and a
multiplicity upper bound of 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let type = self.condition.type in
 type <> null and self.isBooleanType(type) and condition.upper = 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="doStatementEnclosedStatements" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The enclosing statement for all statements in the body of a do statement
are the do statement.
(See SyntaxElement::enclosingStatement() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="condition" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression to be evaluated to determine whether to continue looping."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="body" lowerBound="1" eType="#//Block"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The sequence of statements to be iteratively executed."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ConcurrentClauses" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A grouping of non-final conditional clauses to be tested concurrently."/>
- </eAnnotations>
- <eOperations name="concurrentClausesAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before each of the clauses in a set of concurrent clauses
are the same as the assignments before the concurrent clauses.
(See the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="concurrentClausesConditionAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The same name may not be assigned in more than one conditional expression
within the same concurrent set of clauses."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.clause.condition.newAssignments()->isUnique(name)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="clause" ordered="false"
- lowerBound="1" upperBound="-1" eType="#//NonFinalClause" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The conditional clauses in the group."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="BreakStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A statement that causes the termination of execution of an immediately
enclosing block."/>
- </eAnnotations>
- <eOperations name="breakStatementTargetDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The target of a break statement is the innermost switch, while, do or for
statement enclosing the break statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.target <> null"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="breakStatementNonparallelTarget" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The target of a break statement may not have a @parallel annotation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.target <> null implies not self.target.hasAnnotation('parallel')"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A break statement may not have any annotations."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.annotation()->isEmpty()"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//Annotation"/>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="target" eType="#//Statement"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The enclosing statement that is terminated by this break statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.enclosingLoopStatement()"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ExpressionStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A statement that evaluates an expression when executed."/>
- </eAnnotations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.expression = null then Set(AssignedSource){}
 else self.expression.assignmentAfter
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="expressionStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the expression of an expression statement are the same as the assignments before the statement."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="expressionStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after an expression statement are the same as the assignments after its expression."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression to be evaluated."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ClassifyStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A statement that changes the classification of an object."/>
- </eAnnotations>
- <eOperations name="assignmentAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression.assignmentAfter"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="classifyStatementExpression" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression in a classify statement must have a class as its type and
multiplicity upper bound of 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let type = self.expression.type in
 type <> null and type.isClass() and self.expression.upper = 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classifyStatementClassNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="All qualified names listed in the from or to lists of a classify
statement must resolve to classes."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let fromNames = 
 if self.fromList = null then Set(QualifiedName){}
 else self.fromList.name->asSet()
 endif
 in
 let toNames =
 if self.toList = null then Set(QualifiedName){}
 else self.toList.name->asSet()
 endif
 in
 fromNames->union(toNames)->forAll(name |
 let referent = name.referent->select(isClass()) in
 referent->size() = 1 and
 referent->forAll(not isTemplate())
 )"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classifyStatementClasses" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="All the from and to classes of a classify statement must be subclasses of
the type of the target expression and none of them may have a common
superclass that is a subclass of the type of the target expression (that
is, they must be disjoint subclasses)."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let classes = self.fromClass->union(self.toClass) in
 let expressionType = self.expression.type in
 if expressionType = null then true
 else
 classes->
 forAll(not equals(expressionType) and conformsTo(expressionType)) and
 let parents : Bag(ElementReference) = classes.allParents()->
 select(not equals(expressionType) and conformsTo(expressionType)) 
 in
 parents->forAll(countIn(parents) = 1)
 endif"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classifyStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the expression of a classify statement are the
same as the assignments before the statement.
(See the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classifyStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a classify statement are the same as the
assignments after its expression.
(See the assignmentAfter() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classifyStatementFromClassDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The from classes of a classify statement are the class referents of the
qualified names in the from list for the statement."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classifyStatementToClassDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The to classes of a classify statement are the class referents of the
qualified names in the to list for the statement."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression to be evaluated to obtain the object to be reclassified."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="fromList" eType="#//QualifiedNameList"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A list of names of classes to be removed as types of the object."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="toList" eType="#//QualifiedNameList"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A list of names of classes to be added as types of the object."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="fromClass" ordered="false"
- upperBound="-1" eType="#//ElementReference" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The classes denoted by the names in the from list."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 if self.fromList = null then Set(ElementReference){}
 else self.fromList.name.referent->asSet()
 endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="toClass" ordered="false"
- upperBound="-1" eType="#//ElementReference" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The classes denoted by the names in the to list."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 if self.toList = null then Set(ElementReference){}
 else self.toList.name.referent->asSet()
 endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isReclassifyAll" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this classify statement reclassifies all types of the target
object."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ForStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A looping statement that gives successive values to one or more loop variables on each iteration."/>
- </eAnnotations>
- <eOperations name="enclosingLoopStatement" eType="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.body <> element then
 self.assignmentBefore
 else
 let assignments = 
 self.variableDefinition.assignmentAfter->asSet() in
 if not self.isParallel then
 assignments
 else
 let parallelNames = self.parallelNames() in
 self.updateAll(
 assignments,
 assignments->select(a | parallelNames->includes(a.name)).
 copy(self, true)->asSet()
 )

 endif
 endif"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
- </eOperations>
- <eOperations name="assignmentsAfterVariables" ordered="false" upperBound="-1"
- eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.variableDefinition->iterate(
 v, assignments : Set(AssignedSource) = self.assignmentBefore |
 self.updateAll(assignments, v.newAssignments())
 )"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let namesBefore = self.assignmentBefore.name in
 let newAssignments =
 self.body.newAssignments()->
 select(a | namesBefore->includes(a.name)).
 copy(self, null)->asSet()
 in
 let variables = self.variableDefinition.variable in
 let assignmentsAfter = 
 self.updateAll(
 self.variableDefinition.assignmentAfter->asSet(), 
 newAssignments
 )->reject(a | variables->includes(a.name)) in
 let parallelNames = self.parallelNames() in
 let parallelNameAssignments =
 assignmentsAfter->
 select(a | parallelNames->includes(a.name)).
 copy(self, false)->asSet()
 in
 self.updateAll(assignmentsAfter, parallelNameAssignments)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="parallelNames" ordered="false" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.isParallel then
 Set(String){}
 else
 self.annotation()->select(identifier = 'parallel').oclAsType(Annotation).argument->asSet()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="forStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before a loop variable definition in a for statement are
the same as before the for statement. The assignments before the body of
the statement include all the assignments before the statement plus any
new assignments from the loop variable definitions, except that, if the
statement is parallel, the assigned sources of any names given in @parallel
annotations are changed to be the for statement itself.
(See the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The loop variables are unassigned after a for statement. Other than the
loop variables, if the assigned source for a name after the body of a for
statement is the same as after the for variable definitions, then the
assigned source for the name after the for statement is the same as after
the for variable definitions. If a name is unassigned after the for
variable definitions, then it is unassigned after the for statement (even
if it is assigned in the body of the for statement). If, after the loop
variable definitions, a name has an assigned source, and it has a
different assigned source after the body of the for statement, then the
assigned source after the for statement is the for statement itself.
(See the assignmentsAfter() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forStatementParallelAnnotationNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A @parallel annotation of a for statement may include a list of names.
Each such name must be already assigned after the loop variable definitions
of the for statement, with a multiplicity of [0..*]. These names may only
be used within the body of the for statement as the first argument to for
the CollectionFunctions::add behavior.
(Note: Checking that @parallel annotation names are only used with add
behaviors is done in NameExpression, BehaviorInvocationExpression and
SequenceOperationExpression.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let assignments = self.variableDefinition.assignmentAfter in
 self.parallelNames()->forAll(n |
 assignments->exists(name = n and lower = 0 and upper = -1)
 )"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forStatementParallelAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If, after the loop variable definitions of a parallel for statement, a
name has an assigned source, then it must have the same assigned source
after the block of the for statement. Other than for names defined in the
@parallel annotation of the for statement, the assigned source for such
names is the same after the for statement as before it. Any names defined
in the @parallel annotation have the for statement itself as their assigned
source after the for statement. Other than names given in the @parallel
annotation, if a name is unassigned after the loop variable definitions,
then it is considered unassigned after the for statement, even if it is
assigned in the block of the for statement.
(See also the assignmentsAfter() operation.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if not self.isParallel then true
 else
 self.body.newAssignments().name->
 excludesAll(self.variableDefinition.assignmentAfter.name)
 /*
 * The following is guaranteed by assignmentsAfter():
 let parallelNames = self.parallelNames() in
 self.assignmentAfter->forAll(a |
 assignmentsAfterVariables->exists(name = a.name) and
 if parallelNames->includes(a.name) then a.source = self 
 else a.source = assignmentsAfterVariables->any(name = a.name).source 
 endif
 )
 */
 endif"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forStatementVariableDefinitions" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The isFirst attribute of the first loop variable definition for a for
statement is true while the isFirst attribute is false for any other
definitions.
(See derivation of VariableDefinition::isFirst.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forStatementLoopVariables" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assigned sources for loop variables after the body of a for statement
must be the for statement (the same as before the body).
(See the assignmentAfter() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forStatementIsParallelDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A for statement is parallel if it has a @parallel annotation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forStatementEnclosedStatements" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The enclosing statement for all statements in the body of a for statement
are the for statement.
(See the SyntaxElement::enclosingStatement() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="In addition to an @isolated annotation, a for statement may have a
@parallel annotation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.Statement_annotationAllowed(annotation) or
 annotation.identifier = 'parallel'"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//Annotation"/>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="body" lowerBound="1" eType="#//Block"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The sequence of statements to be iteratively executed."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="variableDefinition" lowerBound="1"
- upperBound="-1" eType="#//LoopVariableDefinition" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A list of definitions of one or more loop variables."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isParallel" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the for statement is parallel."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="LoopVariableDefinition"/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="LoopVariableDefinition"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.hasAnnotation('parallel')"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="LoopVariableDefinition" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of a loop variable in a for statement."/>
- </eAnnotations>
- <eOperations name="actualName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="NameBinding{name=self.variable}.toName()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="newAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Get the assignments made within this loop variable definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let assignmentsBefore = self.assignmentBefore in
 self.assignmentAfter->select(isNew(assignmentsBefore))"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="loopVariableDefinitionAssignmentAfterDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a loop variable definition include the assignments
after the expression (or expressions) of the definition plus a new
assigned source for the loop variable itself. The assigned source for the
loop variable is the loop variable definition. The multiplicity upper
bound for the variable is 1. The multiplicity lower bound is 1 if the
loop variable definition is the first in a for statement and 0 otherwise.
If collection conversion is not required, then the variable has the
inferred or declared type from the definition. If collection conversion
is required, then the variable has the argument type of the collection
class."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="loopVariableDefinitionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the expressions of a loop variable definition are
the assignments before the loop variable definition.
(See the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="loopVariableDefinitionRangeExpressions" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a loop variable definition has two expressions, then both expressions
must have type Integer and a multiplicity upper bound of 1, and no name
may be newly assigned or reassigned in more than one of the expressions."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.expression2 = null then true
 else
 let type1 = self.expression1.type in
 let type2 = self.expression2.type in
 type1 <> null and self.isIntegerType(type) and self.expression1.upper = 1 and
 type2 <> null and self.isIntegerType(type) and self.expression2.upper = 1 and
 expression1.newAssignments().name->excludesAll(expression2.newAssignments().name)
 endif"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="loopVariableDefinitionTypeName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a loop variable definition has a type name, then this name must
resolve to a non-template classifier."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.typeName = null then true
 else
 let referents = self.typeName.referent->select(isClassifier()) in
 referents->size() = 1 and not referents->exists(isTemplate())
 endif"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="loopVariableDefinitionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the type of a loop variable is not inferred, then the variable has the
type denoted by the type name, if it is not empty, and is untyped
otherwise. If the type is inferred, them the variable has the same type
as the expression in its definition."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="loopVariableDefinitionDeclaredType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the type of a loop variable definition is not inferred, then the first
expression of the definition must have a type that conforms to the
declared type."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.typeIsInferred then true
 else self.expression1.type.conformsTo(self.type)
 endif"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="loopVariableDefinitionIsCollectionConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Collection conversion is required for a loop variable definition if the
type for the definition is the instantiation of a collection class and
the multiplicity upper bound of the first expression is no greater than 1."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="loopVariableDefinitionVariable" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The variable name given in a loop variable definition must be unassigned
after the expression or expressions in the definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.expression1.assignmentAfter.name->excludes(self.actualName()) and
 self.expression2 <> null implies
 self.expression2.assignmentAfter.name->excludes(self.actualName())"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="variable" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the loop variable."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression1" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If there is only one expression, then this expression is evaluated to produce a sequence of values to be assigned to the loop variable on successive iterations. Otherwise it is evaluated to provide the first value of a range of values to be assigned to the loop variable."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression2" eType="#//Expression"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression to be evaluated to give the second value in a range of values to be assigned to the loop variable."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" eType="#//QualifiedName"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The declared type of the loop variable."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="typeIsInferred" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the type of the variable is inferred or declared explicitly.
NOTE: This flag is necessary to because a variable that is explicitly
declared to have type "any" will have an empty typeName,
just like a variable whose type is to be inferred, but, in the former
case, the type is actually intended to be empty, not inferred."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCollectionConversion"
- lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether collection conversion is required."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let type = self.type in
 type <> null and self.isCollectionClass(type) and
 self.expression1 <> null and self.expression1.upper <= 1"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The declared or inferred type of the loop variable."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 if self.typeIsInferred then expression1.type
 else if self.typeName = null then null
 else self.typeName.referent->any(isClassifier())
 endif endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isFirst" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this definition is the first in the list of definitions in the
enclosing for statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.enclosingStatement().oclAsType(ForStatement).variableDefinition->at(1) = self"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentBefore" ordered="false"
- upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assigned sources for local names available lexically before this loop
variable definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.assignmentsBefore()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentAfter" ordered="false"
- upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assigned sources for local names available lexically after this loop
variable definition. This includes not only any assignments made within
the statement, but also any assignments that are unchanged from before
the statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let assignmentsAfter =
 if self.expression2 = null then 
 self.expression1.assignmentAfter
 else 
 self.updateAll(
 self.expression1.assignmentAfter,
 self.expression2.newAssignments()
 )
 endif
 in
 AssignedSource{
 name = self.variable,
 source = self,
 type = 
 if self.isCollectionConversion then self.type.collectionArgument() 
 else self.type 
 endif,
 lower = if self.isFirst then 1 else 0 endif,
 upper = 1
 }.update(assignmentsAfter)"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAny" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the loop variable has an empty type."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="IfStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A conditional statement that executes (at most) one of a set of clauses based on boolean conditions."/>
- </eAnnotations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let blocks =
 if self.finalClause = null then self.nonFinalClauses.clause.body
 else self.nonFinalClauses.clause.body->including(self.finalClause)
 endif
 in
 self.updateAll(
 self.Statement_assignmentsAfter(), 
 self.mergeAssignments(blocks->asBag())
 )"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="ifStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before all the non-final clauses of an if statement are
the same as the assignments before the if statement. If the statement has
a final clause, then the assignments before that clause are also the same
as the assignments before the if statement.
(See assignmentBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="ifStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If an if statement does not have a final else clause, then any name that
is not an out parameter and is unassigned before the if statement is
unassigned after the if statement. If an if statement does have a final
else clause, then any name that is unassigned before the if statement and
is assigned after any one clause of the if statement must also be assigned
after every other clause. The type of such names after the if statement is
the effective common ancestor of the types of the name in each clause with
a multiplicity lower bound that is the minimum of the lower bound for the
name in each clause and a multiplicity upper bound that is the maximum for
the name in each clause. For a name that has an assigned source after any
clause of an if statement that is different than before that clause, then
the assigned source after the if statement is the if statement. Otherwise,
the assigned source of a name after the if statement is the same as before
the if statement.
(See assignmentsAfter() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="ifStatementEnclosedStatements" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The enclosing statement of all the statements in the bodies of all
non-final clauses and in the final clause (if any) of an if statement is
the if statement.
(See SyntaxElement::enclosingStatement() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="ifStatementIsAssuredDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An if statement is assured if it has an @assured annotation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="ifStatementIsDeterminateDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An if statement is determinate if it has an @determinate annotation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="In addition to an @isolated annotation, an if statement may have @assured
and @determinate annotations. They may not have arguments."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.Statement_annotationAllowed(annotation) or
 (annotation.identifier = 'assured' or annotation.identifier = 'determinate') and 
 annotation.argument->isEmpty()"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//Annotation"/>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="nonFinalClauses" lowerBound="1"
- upperBound="-1" eType="#//ConcurrentClauses" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A list of groupings of concurrent clauses that are to be checked
sequentially for a successful condition."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="finalClause" eType="#//Block"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A sequence of statements to be executed if no other clause has a
successful condition."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAssured" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether at least one condition in the if statement is assured to evaluate
to true."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="SwitchStatement"/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="SwitchStatement"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.hasAnnotation('assured')"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDeterminate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether at most one condition in the if statement will ever to evaluate
to true."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.hasAnnotation('determinate')"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SwitchStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A statement that executes (at most) one of a set of statement sequences
based on matching a switch value to a set of test cases."/>
- </eAnnotations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.nonDefaultClause->includes(element) or 
 self.defaultClause = element then
 self.expression.assignmentAfter
 else
 self.assignmentBefore
 endif"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
- </eOperations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let blocks =
 if self.defaultClause = null then
 self.nonDefaultClause.block
 else
 self.nonDefaultClause.block->including(self.defaultClause)
 endif
 in
 self.updateAll(
 self.Statement_assignmentsAfter(),
 self.mergeAssignments(blocks)
 )"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="switchStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before all clauses of a switch statement are the same as
the assignments after the expression of the switch statement.
(See assignmentBefore(element) expression.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="switchStatementCaseAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The same local name may not be assigned in more than one case expression
in a switch statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.nonDefaultClause.case.newAssignments()->isUnique(name)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="switchStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a name has an assigned source after any clause of a switch statement
that is different than before that clause (including newly defined names),
the assigned source after the switch statement is the switch statement.
Otherwise, the assigned source of a name after the switch statement is
the same as before the switch statement.
(See assignmentsAfter() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="switchStatementAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a switch statement does not have a final default clause, then any name
that is not an out parameter and is unassigned before the switch statement
is unassigned after the switch statement. If a switch statement does have
a final default clause, then any name that is unassigned before the switch
statement and is assigned after any one clause of the switch statement
must also be assigned after every other clause. The type of such names
after the switch statement is the effective common ancestor of the types
of the name in each clause with a multiplicity lower bound that is the
minimum of the lower bound for the name in each clause and a multiplicity
upper bound that is the maximum for the name in each clause.
(See also assignmentsAfter() operation.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let newNames = self.assignmentAfter.name->excludingAll(self.assignmentBefore.name) in
	 if self.defaultClause = null then
	 newNames->isEmpty()
	 else
	 self.nonDefaultClause.block->including(self.defaultClause)->forAll(
	 	assignmentAfter.name->includesAll(newNames)
	 )
	 endif"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="switchStatementExpression" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A switch statement expression must have a multiplicity no greater than 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression.upper <= 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="switchStatementEnclosedStatements" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A switch statement is the enclosing statement for the statements in all
of its switch clauses.
(See SyntaxElement::enclosingStatement() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="switchStatementIsDeterminateDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A switch statement is determinate if it has a @determinate annotation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="switchStatementIsAssuredDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A switch statement is assured if it has an @assured annotation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="In addition to an @isolated annotation, a switch statement may have
@assured and @determinate annotations. They may not have arguments."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.Statement_annotationAllowed(annotation) or
 (annotation.identifier = 'assured' or annotation.identifier = 'determinate') and 
 annotation.argument->isEmpty()"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//Annotation"/>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="nonDefaultClause" ordered="false"
- upperBound="-1" eType="#//SwitchClause" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The set of switch clauses whose cases are to be tested against the switch
value."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression to be evaluated to provide the switch value."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="defaultClause" eType="#//Block"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A sequence of statements to be executed if no switch clause case matches
the switch value."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAssured" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether at least one case in the switch statement is assured to match."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.hasAnnotation('assured')"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDeterminate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether at most one case in the if statement will ever to match."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.hasAnnotation('determinate')"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SwitchClause" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A clause in a switch statement with a set of cases and a sequence of
statements that may be executed if one of the cases matches the switch value."/>
- </eAnnotations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.block <> element then 
 self.assignmentsBefore()
 else
 self.updateAll(
 self.assignmentsBefore(),
 self.case.newAssignments()->asSet()
 )
 endif"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
- </eOperations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before a switch clause are the assignments before any
case expression of the clause."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.SyntaxElement_assignmentsBefore()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a switch clause are the assignments after the block
of the switch clause."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.block.assignmentAfter"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="switchClauseAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before any case expression of a switch clause are the
same as the assignments before the clause. The assignments before the
block of a switch clause are the assignments after all case expressions.
(See assignmentsBefore(element) operation.)
"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="switchClauseCaseLocalNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a name is unassigned before a switch clause, then it must be
unassigned after all case expressions of the clause (i.e., new local
names may not be defined in case expressions)."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.assignmentsBefore().name->includesAll(self.case.assignmentAfter.name)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="switchClauseCases" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="All the case expressions of a switch clause must have a multiplicity
no greater than 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.case->forAll(upper <= 1)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="case" ordered="false" lowerBound="1"
- upperBound="-1" eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expressions to be evaluated to provide values to test against the switch value."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="block" lowerBound="1" eType="#//Block"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The sequence of statements that may be executed if one of the cases matches the switch value."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="WhileStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A looping statement for which the continuation condition is first tested
before the first iteration."/>
- </eAnnotations>
- <eOperations name="enclosingLoopStatement" eType="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.body <> element then self.assignmentBefore
 else self.condition.assignmentAfter 
 endif"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
- </eOperations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let assignmentsBeforeBlock = self.body.assignmentBefore in
 self.body.newAssignments()->
 reject(a | assignmentsBeforeBlock.name->excludes(a.name))->
 iterate(a, assignments : Set(AssignedSource) = assignmentsBeforeBlock |
 AssignedSource{
 name = a.name,
 source = self,
 type = a.type,
 lower = a.lower,
 upper = a.upper
 }.update(assignments)
 )"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="whileStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the condition expression of a while statement
are the same as the assignments before the while statement. The
assignments before the block of the while statement are the same as the
assignments after the condition expression.
(See assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="whileStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a name is assigned before the block, but the assigned source for the
name after the block is different than before the block, then the assigned
source of the name after the while statement is the while statement.
Otherwise it is the same as before the block. If a name is unassigned
before the block of a while statement, then it is unassigned after the
while statement, even if it is assigned after the block.
(See assignmentsAfter() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="whileStatementCondition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The condition expression of a while statement must have type Boolean and
a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let type = self.condition.type in
 type <> null and self.isBooleanType(type) and self.condition.upper = 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="whileStatementEnclosedStatements" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The enclosing statement for all statements in the body of a while
statement are the while statement.
(See the SyntaxElement::enclosingStatement() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="body" lowerBound="1" eType="#//Block"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The sequence of statements to be iteratively executed."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="condition" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression to be evaluated to determine whether to continue looping."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ReturnStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A statement that provides a value for the return parameter of an activity."/>
- </eAnnotations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.expression = null then self.assignmentBefore
 else self.expression.assignmentAfter
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="returnStatementContext" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the behavior containing the return statement has a return parameter,
then the return statement must have an expression, and the expression
must be assignable to that return parameter.
(And, if the behavior does not have a return parameter, then the return
statement must not have an expression.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let behavior = self.behavior in
 if behavior = null then false
 else
 let returnParameter = behavior.returnParameter() in
 self.expression = null and returnParameter = null or
 self.expression <> null and returnParameter <> null and
 returnParameter.isAssignableFrom(self.expression)
 endif"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="returnStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the expression of a return statement are the same
as the assignments before the statement.
(See the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="returnStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a return statement are the same as the assignments
after the expression of the return statement.
(Or, if the statement has no expression, the same as the assignments
before the statement.)
(See the assignmentsAfter() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression to be evaluated to provide the returned value."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="behavior" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reference to the enclosing behavior for this return statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.currentScope()"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="InLineStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A statement that executes code in a language other than Alf."/>
- </eAnnotations>
- <eOperations name="inLineStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after an in-line statement are the same as the assignments
before the statement."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="language" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the language in which the code is written."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="AcceptStatement"/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="AcceptStatement"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="code" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The in-line code to be executed."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="AcceptStatement"/>
- <details key="unique" value="false"/>
- <details key="upper" value="*"/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="AcceptStatement"/>
- <details key="unique" value="false"/>
- <details key="upper" value="*"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="AcceptStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A statement used to accept the receipt of instances of one or more signals."/>
- </eAnnotations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="let assignmentsAfter = self.Statement_assignmentsAfter() in
 if self.isSimple then
 let acceptBlock : AcceptBlock = self.acceptBlock->any(true) in
 let name = acceptBlock.actualName() in
 if (name = null) then assignmentsAfter
 else 
 AssignedSource{
 name = name,
 source = self,
 type = self.commonAncestor(acceptBlock.signal),
 lower = 1,
 upper = 1
 }.update(assignmentsAfter)
 endif
 else
 self.mergeAssignments(self.acceptBlock.block)->
 iterate(
 assignment : AssignedSource; 
 assignments : Set(AssignedSource) = assignmentsAfter |
 if self.acceptBlock.actualName()->includes(assignment.name) then 
 assignments
 else 
 assignment.update(assignments)
 endif
 )
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="effectiveBehavior" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the behavior for this accept statement is a subunit, then return the
corresponding stub. Note that, if the original behavior is an Alf
activity definition, the "stub" may be an external operation or activity."/>
- </eAnnotations>
- </eOperations>
- <eOperations name="effectiveBehavior_" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let behavior = self.behavior in
 if behavior = null then null
 else
 let stub = behavior.stub() in
 if stub = null then behavior
 else stub
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="acceptStatementContext" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An accept statement can only be used within the definition of an active
behavior or the classifier behavior of an active class."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let behavior = self.effectiveBehavior() in
 behavior <> null and behavior.isActiveBehavior()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="acceptStatementSignals" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The containing behavior of an accept statement must have receptions for
all signals from all accept blocks of the accept statement. No signal may
be referenced in more than one accept block of an accept statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let signals : Bag(ElementReference) = self.acceptBlock.signal in
 let behavior = self.effectiveBehavior() in
 let activeClass = 
 if behavior = null then null 
 else behavior.activeClass() 
 endif 
 in
 signals->forAll(s | signals->select(equals(s))->size() = 1) and
 (activeClass = null or -- Let the acceptStatementContext constraint catch a null active class.
 signals->forAll(containedIn(self.receivedSignals(activeClass))))"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="receivedSignals" ordered="false" unique="false" upperBound="-1"
- eType="#//ElementReference">
- <eParameters name="activeClass" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="receivedSignals_" ordered="false" unique="false" upperBound="-1"
- eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="activeClass.receptions().signal()"/>
- </eAnnotations>
- <eParameters name="activeClass" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="acceptStatementNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Any name defined in an accept block of an accept statement must be
unassigned before the accept statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let namesBefore = self.assignmentBefore.name in
 self.acceptBlock.actualName()->excludesAll(namesBefore)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="acceptStatementSimpleAcceptLocalName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A local name specified in the accept block of a simple accept statement
has the accept statement as its assigned source after the accept statement.
The type of the local name is the effective common ancestor of the specified
signals, if one exists, and it is untyped otherwise."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="acceptStatementCompoundAcceptLocalName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="For a compound accept statement, a local name defined in an accept block
has the accept block as its assigned source before the block associated
with the accept block. The type of the local name is the effective common
ancestor of the specified signals for that accept clause, if one exists,
and it is untyped otherwise. However, the local name is considered
unassigned after the accept statement."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="acceptStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before any block of an accept statement are the assignments
before the accept statement."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="acceptStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a name is assigned in any block of an accept statement, then the
assigned source of the name after the accept statement is the accept
statement itself."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="acceptStatementNewAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a name is unassigned before an accept statement and assigned in any
block of an accept statement, then it must be assigned in every block."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.acceptBlock->size() = 1 then true
 else
 let namesBefore = self.assignmentBefore.name in
 let newNames : Bag(String) = 
 self.acceptBlock.block.newAssignments().name in
 newNames->forAll(name | 
 namesBefore->excludes(name) implies 
 newNames->count(name) = self.acceptBlock->size()
 )
 endif"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="acceptStatementIsSimpleDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An accept statement is simple if it has exactly one accept block and that
accept block does not have a block."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="acceptStatementEnclosedStatements" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The enclosing statement for all statements in the blocks of all accept
blocks of an accept statement is the accept statement."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="acceptBlock" ordered="false"
- lowerBound="1" upperBound="-1" eType="#//AcceptBlock" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="One or more blocks for accepting alternate groups of signals."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="behavior" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The behavior containing the accept statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.currentScope()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isSimple" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the accept statement is simple or not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="let acceptBlocks = self.acceptBlock in
 acceptBlocks->size() = 1 and acceptBlocks->forAll(block = null)"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="AcceptBlock" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A block of an accept statement that accepts one or more signals."/>
- </eAnnotations>
- <eOperations name="actualName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="NameBinding{name = self.name}.toName()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="For a compound accept statement, a local name defined in an accept block
has the accept block as its assigned source before the block associated
with the accept block. The type of the local name is the effective common
ancestor of the specified signals for that accept clause, if one exists,
and it is untyped otherwise.

Otherwise, the assignments before any block of an accept statement are the
assignments before the accept statement.
"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let name = self.actualName() in
 if name = null or element <> self.block then
 self.assignmentsBefore()
 else
 AssignedSource{
 name = name,
 source = self,
 type = self.commonAncestor(self.signal),
 lower = 1,
 upper = 1
 }.update(self.assignmentsBefore())
 endif"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
- </eOperations>
- <eOperations name="acceptBlockSignalDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The signals of an accept block are the referents of the signal names of the accept block."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="acceptBlockSignalNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="All signal names in an accept block must resolve to signals."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.signalNames.name->forAll(
 referent->select(isSignal())->size() = 1
 )"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The local name to which an accepted signal instance will be assigned."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="block" eType="#//Block"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The body of the accept block, executed if one of the named signals is received."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="signalNames" lowerBound="1"
- eType="#//QualifiedNameList" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A list of names of the signals accepted by this accept block."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="signal" ordered="false"
- upperBound="-1" eType="#//ElementReference" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The signals denoted by the signal names of the accept block."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 self.signalNames.name.referent->select(isSignal())->asSet()"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="EmptyStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A statement that has no affect when executed."/>
- </eAnnotations>
- <eOperations name="emptyStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after and empty statement are the same as the assignments before the statement."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ModelNamespace" eSuperTypes="#//PackageDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A namespace to represent model scope."/>
- </eAnnotations>
- <eOperations name="context" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="EXTERNAL"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="outerScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="null"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="modelScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.toReference()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="qualifiedName" eType="#//QualifiedName">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="QualifiedName{nameBinding = OrderedSet(NameBinding){}}"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="resolveInScope" ordered="false" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.resolveInRoot(name)"/>
- </eAnnotations>
- <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="resolveInRoot" ordered="false" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="EXTERNAL"/>
- </eAnnotations>
- <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="resolvePathName" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="EXTERNAL"/>
- </eAnnotations>
- <eParameters name="pathName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="resolveAssociationEnd" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="Set(ElementReference){}"/>
- </eAnnotations>
- <eParameters name="oppositeEndType" lowerBound="1" eType="#//ElementReference"/>
- <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="ModelNamespace_appliedProfiles()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="stubFor" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.context().stubFor(unit)"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="ModelNamespace_appliedProfiles" ordered="false" upperBound="-1"
- eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="EXTERNAL"/>
- </eAnnotations>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="NamespaceDefinition" eSuperTypes="#//MemberDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A model of the common properties of the definition of a namespace in Alf."/>
- </eAnnotations>
- <eOperations name="currentScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A namespace definition is its own current scope."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.toReference()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="outerScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The outer scope of a namespace definition is either the namespace
definition that owns it as a member or the declared namespace of the
unit that owns it or, if it has neither of these, then model scope."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.NamespaceDefinition_outerScope()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="NamespaceDefinition_outerScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let outerScope = self.MemberDefinition_outerScope() in
 if outerScope <> null then
 outerScope
 else if self.unit = null then
 null
 else if unit.namespace = null then
 self.modelNamespace().toReference()
 else
 unit.namespace
 endif endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="modelNamespace" lowerBound="1" eType="#//NamespaceDefinition"/>
- <eOperations name="modelScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let outerScope = self.outerScope() in
 if outerScope = null then
 self.modelNamespace().toReference()
 else
 outerScope.modelScope()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="resolveInScope" ordered="false" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.member->select(m | m.definition.actualName() = name)->asSet()"/>
- </eAnnotations>
- <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.NamespaceDefinition_appliedProfiles()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="NamespaceDefinition_appliedProfiles" ordered="false" upperBound="-1"
- eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let outerScope = self.outerScope() in
 if outerScope = null then null
 else outerScope.appliedProfiles()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="parameters" upperBound="-1" eType="#//FormalParameter">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns any owned members that are formal parameters, excluding return parameters."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.ownedMember.definition->
 select(oclIsKindOf(FormalParameter)).oclAsType(FormalParameter)->
 reject(direction = 'return')->asOrderedSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="returnParameter" eType="#//FormalParameter">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns an owned member that is a return parameter, if any."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.NamespaceDefinition_returnParameter()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="NamespaceDefinition_returnParameter" eType="#//FormalParameter">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let returnParameters = self.ownedMember.definition->
 select(oclIsKindOf(FormalParameter)).oclAsType(FormalParameter)->
 select(direction = 'return') 
 in
 if returnParameters->isEmpty() then null
 else returnParameters->any(true)
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="subunitOwnedMembers" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let subunit = self.subunit in
 if subunit = null or subunit.definition = null then self.ownedMember
 else subunit.definition.ownedMember
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if the annotation is @external."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="NamespaceDefinition_annotationAllowed(annotation)"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
- </eOperations>
- <eOperations name="NamespaceDefinition_annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.annotation().stereotypeName.pathName = 'external' or

 /* TODO: Allow real stereotype application. */
 self.annotation().stereotypeName.pathName = 'ModelLibrary'"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
- </eOperations>
- <eOperations name="templateParameters" upperBound="-1" eType="#//ClassifierTemplateParameter">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns the members of this namespace definition that are template parameters."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.ownedMember.definition->select(oclIsKindOf(ClassifierTemplateParameter)).
 oclAsType(ClassifierTemplateParameter)->asOrderedSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="membersCached" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return all the members of this namespace (at least all the owned and imported members)."/>
- </eAnnotations>
- </eOperations>
- <eOperations name="members" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.NamespaceDefinition_members()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="NamespaceDefinition_members" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.ownedMember->includingAll(self.importedMembers())->asOrderedSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="importedMembers" ordered="false" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns the members imported into this namespace."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.unit = null then 
 Set(Member){}
 else 
 self.importMembers(self.unit.imports().importedMembers()->asSet())
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="importMembers" ordered="false" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the subset of the given imported members that are actually imported into the namespace.
This excludes hidden ones, i.e., those that have names that conflict with names of owned members,
and also excludes elements that would have the same name when imported."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.includeDistinguishableCaching(self.excludeCollisions(importedMembers))"/>
- </eAnnotations>
- <eParameters name="importedMembers" ordered="false" upperBound="-1" eType="#//Member"/>
- </eOperations>
- <eOperations name="excludeCollisions" ordered="false" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the subset of the given imported members that excludes any that would not be
distinguishable from each other in this namespace."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let remainingMembers = self.removeDuplicates(importedMembers) in
 remainingMembers->reject(imp1 | 
 remainingMembers->exists(imp2 | imp1 <> imp2 and 
 not imp1.definition.isDistinguishableFrom(imp2.definition)
 )
 )"/>
- </eAnnotations>
- <eParameters name="importedMembers" ordered="false" upperBound="-1" eType="#//Member"/>
- </eOperations>
- <eOperations name="removeDuplicates" ordered="false" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Remove duplicate imported members that have the same referent
(but leave one of them)."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 importedMembers->iterate(m1; result : Set(Member) = Set(Member){} | 
 if result->exists(m2 | m1.toReference().equals(m2.toReference())) then
 result
 else
 result->including(m1)
 endif
 )"/>
- </eAnnotations>
- <eParameters name="importedMembers" ordered="false" upperBound="-1" eType="#//Member"/>
- </eOperations>
- <eOperations name="includeDistinguishableCaching" ordered="false" upperBound="-1"
- eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Cache an intermediate value for member before caling includingDistinguishable,
in order to avoid an infinite loop."/>
- </eAnnotations>
- <eParameters name="importedMembers" ordered="false" upperBound="-1" eType="#//Member"/>
- </eOperations>
- <eOperations name="includeDistinguishable" ordered="false" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the subset of the given imported members that would be distinguishable
from all owned members of this namespace."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 importedMembers->select(imp | self.ownedMember->forAll(m | 
 imp.definition.isDistinguishableFrom(m.definition)
 ))"/>
- </eAnnotations>
- <eParameters name="importedMembers" ordered="false" upperBound="-1" eType="#//Member"/>
- </eOperations>
- <eOperations name="stub" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the stub member the subunit for which has this namespace
definition as its definition, if any. Note that, for an activity
definition, the "stub" may be an external operation or activity."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let unit = self.unit in
 if unit = null then null
 else
 let namespace = self.outerScope() in
 if namespace = null then null
 else namespace.stubFor(unit)
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="stubFor" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if unit = null or unit.definition = null then null
 else
 let members = self.ownedMember.definition->select(m |
 m.actualName() = unit.definition.actualName() and 
 m.isStub and m.matchForStub(unit)
 ) in
 if members->isEmpty() then null
 else members->any(true).oclAsType(Member).toReference()
 endif
 endif"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="namespaceDefinitionMemberDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The members of a namespace definition include references to all owned members.
Also, if the namespace definition has a unit with imports, then the members
include imported members with referents to all imported elements.
The imported elements and their visibility are determined as given in the
UML Superstructure. The name of an imported member is the name of the
imported element or its alias, if one has been given for it.
Elements that would be indistinguishable from each other or from an owned
member (as determined by the Member::isDistinguishableFrom operation) are not imported. .
"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="namespaceDefinitionMemberDistinguishability" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The members of a namespace must be distinguishable as determined by the Member::isDistinguishableFrom operation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.member->forAll(m1 | 
 self.member->forAll(m2 | 
 m1 = m2 or m1.definition.isDistinguishableFrom(m2.definition)
 )
 )"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="ownedMember" upperBound="-1"
- eType="#//Member" containment="true" eOpposite="#//Member/namespace">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definitions of owned members of the namespace."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="unit" eType="#//UnitDefinition"
- eOpposite="#//UnitDefinition/definition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The unit for which this namespace is a definition, if any."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="member" upperBound="-1"
- eType="#//Member" volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The owned and imported members of a namespace definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.membersCached()"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="MemberDefinition" abstract="true" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A model of the common properties of the definition of a member of a namespace in Alf."/>
- </eAnnotations>
- <eOperations name="annotation" ordered="false" upperBound="-1" eType="#//StereotypeAnnotation">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let container = self.oclContainer() in 
 if container.oclIsKindOf(Member) then 
 container.oclAsType(Member).annotation
 else if container.oclIsKindOf(UnitDefinition) then 
 container.oclAsType(UnitDefinition).annotation
 else if container.oclIsKindOf(MemberDefinition) then
 container.oclAsType(MemberDefinition).annotation()
 else 
 Set{}
 endif endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="actualName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 NameBinding{name = self.name}.toName()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="outerScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.MemberDefinition_outerScope()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="MemberDefinition_outerScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let container = self.containingMember() in
 if container <> null then
 let namespace = container.namespace in
 if namespace = null then null else namespace.toReference() endif
 else
 null
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="qualifiedName" eType="#//QualifiedName">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.name = null then
 null
 else
 let nameBinding = NameBinding{name = self.name} in
 let outerScope = self.outerScope() in
 if outerScope = null then
 QualifiedName{nameBinding = nameBinding}
 else
 let qualificationName = outerScope.qualifiedName() in
 if qualificationName = null then
 null
 else
 QualifiedName{
 nameBinding = qualificationName.nameBinding->append(nameBinding)
 }
 endif
 endif
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="namespaceReference" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let container = self.oclContainer() in
 if container.oclIsKindOf(Member) then
 let namespace = container.oclAsType(Member).namespace in
 if namespace = null then null
 else namespace.toReference()
 endif
 else if container.oclIsKindOf(NamespaceDefinition) then
 container.oclAsType(NamespaceDefinition).toReference()
 else if container.oclIsKindOf(UnitDefinition) then
 container.oclAsType(UnitDefinition).namespace
 else if container.oclIsKindOf(MemberDefinition) then
 -- NOTE: This is a workaround to handle an Xtext
 -- editor bug in which the syntax tree is built wrong.
 container.oclAsType(MemberDefinition).namespaceReference()
 else
 null
 endif endif endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="addToModel" lowerBound="1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="EXTERNAL"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true of the given stereotype annotation is allowed for this kind
of element."/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
- </eOperations>
- <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true of the given unit definition is a legal match for this
member as a stub. By default, always returns false."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="isDistinguishableFrom" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if this member is distinguishable from the given member. Two
members are distinguishable if their names are different or the they are of
different kinds (as determined by the isSameKindAs operation). However, in
any case that the UML Superstructure considers two names to be distinguishable
if they are different, an Alf implementation may instead impose the stronger
requirement that the names not be conflicting."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="MemberDefinition_isDistinguishableFrom(member)"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//MemberDefinition"/>
- </eOperations>
- <eOperations name="MemberDefinition_isDistinguishableFrom" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.actualName() <> member.actualName() or not self.isSameKindAs(member.toReference())"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//MemberDefinition"/>
- </eOperations>
- <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if this member is of the same kind as the given member."/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="templateParameters" upperBound="-1" eType="#//ClassifierTemplateParameter">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The template parameters associated with this member. (Only a namespace
definition can actually have template parameters.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="OrderedSet{}"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isTemplate" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if this member is a template."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.templateParameters()->notEmpty()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if this member is a feature. By default is is not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="memberAnnotations" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="All stereotype annotations for a member must be allowed, as determined using the stereotypeAllowed operation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.annotation()->forAll(a | self.annotationAllowed(a))"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="memberIsPrimitiveDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A member is primitive if it has a @primitive annotation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="memberIsExternalDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A member is external if it has an @external derivation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="memberExternal" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a member is external then it must be a stub."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.isExternal implies self.isStub"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="memberStub" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a member is a stub and is not external, then there must be a single subunit with the same qualified name as the stub that matches the stub, as determined by the matchForStub operation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="memberSubunitDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the member is a stub and is not external, then its corresponding subunit is a unit definition with the same fully qualified name as the stub."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="memberStubStereotypes" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a member is a stub, then the it must not have any stereotype annotations that are the same as its subunit. Two stereotype annotations are the same if they are for the same stereotype."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="memberPrimitive" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a member is primitive, then it may not be a stub and it may not have any owned members that are template parameters."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.isPrimitive implies not self.isStub and not self.isTemplate()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="containingMember" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="This is a workaround for an Xtext editor problem in which a reparsed
subtree may be put in the wrong container."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let container = self.oclContainer() in
 if container = null then null
 else if container.oclIsKindOf(Member) then 
 container.oclAsType(Member)
 else if container.oclIsKindOf(MemberDefinition) then 
 container.oclAsType(MemberDefinition).containingMember()
 else 
 null
 endif endif endif"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the member."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="StereotypeAnnotation"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isStub" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this member definition is a stub for a subunit."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="StereotypeAnnotation"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isFeature" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this member is a feature of a classifier."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="StereotypeAnnotation"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.isFeature()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isPrimitive" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this member is a primitive or not."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="StereotypeAnnotation"/>
- <details key="unique" value="false"/>
- <details key="upper" value="*"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.annotation().stereotypeName->exists(pathName = 'primitive')"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isExternal" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this member is external or not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.annotation().stereotypeName->exists(pathName = 'external')"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="subunit" eType="#//UnitDefinition"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The subunit corresponding to the member, if the member is a stub."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="null"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="StereotypeAnnotation" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An annotation of a member definition indicating the application of a stereotype (or one of a small number of special-case annotations)."/>
- </eAnnotations>
- <eOperations name="stereotypeAnnotationStereotypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Unless the stereotype name is "apply", "primitive" or "external" then the stereotype for a stereotype annotation is the stereotype denoted by the stereotype name."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="stereotypeAnnotationStereotypeName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The stereotype name of a stereotype annotation must either be one of "apply",
"primitive" or "external", or it must denote a single stereotype from a profile
applied to an enclosing package. The stereotype name does not need to be qualified
if there is only one applied profile with a stereotype of that name or if the
there is a standard UML profile with the name."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let name = self.stereotypeName.pathName in 
 name = 'apply' or name = 'primitive' or name = 'external' or
 self.stereotype <> null"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="stereotypeAnnotationApply" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the stereotype name of a stereotype annotation is "apply", then it must have a name list and all of the names in the list must resolve to profiles."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.stereotypeName.pathName = 'apply' implies names->notEmpty()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="stereotypeAnnotationPrimitive" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the stereotype name of a stereotype annotation is "primitive", then it may not have tagged values or names."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.stereotypeName.pathName = 'primitive' implies
 (self.taggedValues = null and self.names = null)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="stereotypeAnnotationExternal" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the stereotype name of a stereotype annotation is "external", then it may optionally have a single tagged value with the name "file" and no operator."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.stereotypeName.pathName = 'external' implies
 (self.names = null and 
 (self.taggedValues = null or 
 self.taggedValues.taggedValue->size() = 1 and 
 self.taggedValues.taggedValue->exists(
 name = 'file' and operator = null
 )
 )
 )"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="stereotypeAnnotationTaggedValues" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a stereotype annotation has a stereotype and tagged values, then the each tagged value must have the name of an attribute of the stereotype and a value that is legally interpretable for the type of that attribute."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="stereotypeAnnotationNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a stereotype annotation has a stereotype and a list of names, then all the names in the list must resolve to visible model elements and the stereotype must have a single attribute with a (metaclass) type and multiplicity that are consistent with the types and number of the elements denoted by the given names."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let owner = self.owner() in
 if owner.oclIsKindOf(UnitDefinition) then
 owner.oclAsType(UnitDefinition).appliedProfile
 else
 self.currentScope().appliedProfiles()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="taggedValues" eType="#//TaggedValueList"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A set of tagged values for the applied stereotype."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="names" eType="#//QualifiedNameList"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A set of references to model elements required for the stereotype being applied."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="stereotypeName" lowerBound="1"
- eType="#//QualifiedName" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the stereotype being applied."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="stereotype" lowerBound="1"
- eType="#//ElementReference" volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The stereotype denoted by the stereotype name."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let profiles = self.appliedProfiles() in
 let qualification = self.stereotypeName.qualification in
 let name = self.stereotypeName.unqualifiedName.toName() in
 if self.stereotypeName.qualification = null then
 let standardProfile = profiles->select(name() = 'StandardProfile') in
 let standardStereotype = standardProfile.resolveStereotype(name) in
 if standardStereotype->size() = 1 then
 standardStereotype->any(true)
 else
 let stereotype = profiles.resolveStereotype(name) in
 if stereotype->size() = 1 then
 stereotype->any(true)
 else
 null
 endif
 endif
 else
 let profile = profiles->select(qualifiedName() = qualification.pathName) in
 if profile->size() = 1 then
 let stereotype = profile.resolveStereotype(name) in
 if stereotype->size() = 1 then
 stereotype->any(true)
 else
 null
 endif
 else
 null
 endif
 endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="TaggedValueList" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A set of tagged values for a stereotype application."/>
- </eAnnotations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="taggedValue" ordered="false"
- lowerBound="1" upperBound="-1" eType="#//TaggedValue" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The tagged values in the set."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="TaggedValue" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An assignment of a value to an attribute of an applied stereotype."/>
- </eAnnotations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the stereotype attribute to be assigned a value."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="UnitDefinition"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The string image of a literal value to be assigned to the stereotype attribute."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="For a numeric value, an optional unary plus or minus operator."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="UnitDefinition" eSuperTypes="#//DocumentedElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of a namespace as an Alf unit."/>
- </eAnnotations>
- <eOperations name="imports" ordered="false" upperBound="-1" eType="#//ImportReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isModelLibrary then
 self.import
 else
 self.import->union(self.implicitImports())
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="implicitImports" ordered="false" upperBound="-1" eType="#//ImportReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 Set{'PrimitiveTypes', 'PrimitiveBehaviors', 'BasicInputOutput', 
 'CollectionFunctions', 'CollectionClasses'}->
 collect(name | self.implicitImportFor(name))->asSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="implicitImportFor" lowerBound="1" eType="#//ImportReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 PackageImportReference {
 referentName = QualifiedName{
 nameBinding = Sequence{
 NameBinding{name = 'Alf'},
 NameBinding{name = 'Library'},
 NameBinding{name = name}
 }
 }
 }"/>
- </eAnnotations>
- <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="unitDefinitionNamespaceDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a unit definition has a declared namespace name, then the containing
namespace for the unit is the referent for that name."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="unitDefinitionNamespace" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The declared namespace name for a unit definition, if any, must resolve
to a UML namespace or an Alf unit definition. If it is an Alf unit
definition, then it must have a stub for this unit definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.namespaceName <> null implies
 let namespace = self.namespace in
 namespace <> null and namespace.isNamespaceFor(self)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="unitDefinitionIsModelLibraryDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A unit definition is for a model library if its associated namespace
definition has a stereotype annotation for the UML standard stereotype
ModelLibrary."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="unitDefinitionImplicitImports" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Unless the unit definition is a model library, it has private package
import references for all the sub-packages of the Alf::Library package."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="unitDefinitionAppliedProfileDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The profiles applied to a unit definition include any profiles applied
to the containing namespace of the unit definition. If the unit
definition is for a package, then the applied profiles for the unit
definition also include the applied profiles for its associated package
definition."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="namespaceName" eType="#//QualifiedName"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A declaration of the name of the namespace that contains this unit as a
subunit."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="definition" lowerBound="1"
- eType="#//NamespaceDefinition" containment="true" eOpposite="#//NamespaceDefinition/unit">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of the unit as a namespace."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="import" ordered="false"
- upperBound="-1" eType="#//ImportReference" containment="true" eOpposite="#//ImportReference/unit">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The set of references to imported elements or packages."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="namespace" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reference to the namespace denoted by the declared namespace name for
the unit, if any."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 if self.namespaceName = null then
 null
 else
 let referents = self.namespaceName.modelReferents() in
 if referents->size() = 1 then
 referents->any(true)
 else
 null
 endif
 endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isModelLibrary" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this unit definition is for a model library or not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="

 /* TODO: Allow real stereotype application. */
 self.annotation->exists(stereotypeName.pathName = 'ModelLibrary')"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="appliedProfile" ordered="false"
- upperBound="-1" eType="#//ElementReference" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The profiles applied to this unit."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.definition.appliedProfiles()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="annotation" ordered="false"
- upperBound="-1" eType="#//StereotypeAnnotation" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The stereotype annotations on this unit definition."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ImportReference" abstract="true" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reference to an element or package to be imported into a unit."/>
- </eAnnotations>
- <eOperations name="importedMembers" ordered="false" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the set of all imported members."/>
- </eAnnotations>
- </eOperations>
- <eOperations name="importReferenceReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referent of an import reference is the element denoted by the
referent name."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="importReferenceReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referent name of an import reference must resolve to a single element
with public or empty visibility."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.referent <> null and
 let visibility = self.referent.visibility() in 
 visibility = null or visibility = 'public'"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="visibility" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An indication of the visibility of the import."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="ImportedMember"/>
- <details key="unique" value="false"/>
- <details key="upper" value="*"/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="ImportedMember"/>
- <details key="unique" value="false"/>
- <details key="upper" value="*"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="referentName" lowerBound="1"
- eType="#//QualifiedName" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the element or package to be imported."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="referent" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reference to the imported element denoted by the given qualified name."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let referents = self.referentName.modelReferents() in 
 if referents->size() = 1 then referents->any(true)
 else null
 endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="unit" lowerBound="1" eType="#//UnitDefinition"
- eOpposite="#//UnitDefinition/import">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The unit that is making this import reference."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ImportedMember" eSuperTypes="#//MemberDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value=""/>
- </eAnnotations>
- <eOperations name="actualName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.name"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="toReference" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns false. (Imported members do not have annotations.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
- </eOperations>
- <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the given member is not an imported member, then return the result of
checking whether the given member is the same kind as this member. Else,
if the element of the referent for this member is an Alf member, then
return the result of checking whether that element is the same kind as the
given member. Else, if the element of the referent for the given member is
an Alf member, then return the result of checking whether that element is
the same kind as this member. Else, the referents for both this and the
given member are UML elements, so return the result of checking their
distinguishability according to the rules of the UML superstructure."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isSameKindAs(member)"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if the referent of this imported member is a feature."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isFeature()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="importedMemberNotStub" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An imported element is not a stub."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="not self.isStub"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="importedMemberIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An imported element is a feature if its referent is a feature."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="referent" lowerBound="1"
- eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value=""/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="EnumerationLiteralName" eSuperTypes="#//MemberDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of an enumeration literal, as a member of an enumeration definition."/>
- </eAnnotations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns false. (Enumeration literal name cannot have annotations.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="OperationDefinition" eSuperTypes="#//NamespaceDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of an operation, with any formal parameters defined as owned members."/>
- </eAnnotations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the body of an operation definition include an
assigned source for each parameter of the activity definition. The
source for out parameters is actually null, however, to indicate that it
has not been assigned yet (but that the name should not otherwise be used
as a local name)."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.body <> element then Set(AssignedSource){}
 else
 self.parameters()->collect(parameter |
 AssignedSource{
 name = parameter.actualName(),
 source = if parameter.direction = 'out' then null else parameter endif,
 type = parameter.typePart.type,
 upper = parameter.typePart.upper,
 lower = parameter.typePart.lower
 }
 )->asSet()
 endif"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if the annotation is for a stereotype that has a metaclass consistent with Operation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 /* TODO: Allow operation stereotype annotations. */
 annotation.stereotypeName.pathName = 'Create' or
 annotation.stereotypeName.pathName = 'Destroy' or
 self.NamespaceDefinition_annotationAllowed(annotation)"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
- </eOperations>
- <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The namespace definition associated with the given unit definition must be
an activity definition with no template parameters. In addition, the subunit
definition must have formal parameters that match each of the formal parameters
of the stub definition, in order. Two formal parameters match if they have
the same direction, name, multiplicity bounds, ordering, uniqueness and type
reference. If this operation definition is a constructor, then it is considered
to have an implicit return parameter, following any other formal parameters,
with the same type as the class of the operation definition and a multiplicity of 1..1.
"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let definition = unit.definition in
 definition.oclIsKindOf(ActivityDefinition) and
 definition.templateParameters()->isEmpty() and
 let operationParameters = self.parameters() in
 let activityParameters = definition.parameters() in
 operationParameters->size() = activityParameters->size() and 
 Sequence{1 .. operationParameters->size()}->forAll(i | 
 operationParameters->at(i).matches(activityParameters->at(i))
 ) and
 let operationReturnParameter = self.returnParameter() in
 let activityReturnParameter = definition.returnParameter() in
 operationReturnParameter = null and activityReturnParameter = null or
 operationReturnParameter <> null and 
 operationReturnParameter.matches(activityReturnParameter)"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return true if the given member is either an OperationDefinition or an
imported member whose referent is an OperationDefinition or an Operation,
and the formal parameters of this operation definition match, in order,
the parameters of the other operation definition or operation. In this
context, matching means the same name and type (per UML Superstructure,
Subclause 7.3.5). A constructor operation without an explicit return parameter
is considered to implicitly have a return parameter, following any other
formal parameters, of the same type as the owner of the constructor operation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 member.isOperation() and self.parametersMatchNameType(member)"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="parametersMatch" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns whether the parameters of this operation definition match the parameters of another operation
in direction, name, multiplicity bounds, ordering, uniqueness and type."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let parameters = self.parameters() in
 let otherParameters = other.parameters() in
 parameters->size() = otherParameters->size() and
 Sequence{1..parameters->size()}->forAll(i |
 parameters->at(i).matchesElement(otherParameters->at(i))
 ) and
 let returnParameter = self.returnParameter() in
 let otherReturnParameter = other.returnParameter() in
 returnParameter = null and otherReturnParameter = null or
 returnParameter <> null and returnParameter.matchesElement(otherReturnParameter)"/>
- </eAnnotations>
- <eParameters name="other" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="parametersMatchNameType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns whether the parameters of this operation definition match the parameters of another operation
in name and type only."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let parameters = self.parameters() in
 let otherParameters = other.parameters() in
 parameters->size() = otherParameters->size() and
 Sequence{1..parameters->size()}->forAll(i |
 parameters->at(i).matchesNameType(otherParameters->at(i))
 ) and
 let returnParameter = self.returnParameter() in
 let otherReturnParameter = other.returnParameter() in
 returnParameter = null and otherReturnParameter = null or
 returnParameter <> null and returnParameter.matchesType(otherReturnParameter)"/>
- </eAnnotations>
- <eParameters name="other" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="returnParameter" eType="#//FormalParameter">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns the return parameter for this operation. If the operation is a constructor, a
formal parameter is created to represent its implicit return parameter."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isConstructor then 
 let namespace = self.containingMember().namespace.toReference() in
 let returnType =
 if not namespace.isTemplate() then namespace
 else
 namespace.bind(
 namespace.parameteredElements()->asSequence()
 )
 endif
 in
 FormalParameter{
 direction = 'return', 
 name = '', 
 typePart = TypedElementDefinition{
 actualType = returnType
 }
 }
 else
 self.NamespaceDefinition_returnParameter()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="specializationReferents" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns the specialization referents for the owning class definition of this operation definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let namespace = self.containingMember().namespace in 
 if namespace.oclIsKindOf(ClassDefinition) then 
 namespace.oclAsType(ClassDefinition).specializationReferent->asSet()
 else 
 Set{}
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="operationDefinitionNamespace" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The namespace for an operation definition must be a class definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.containingMember().namespace.oclIsKindOf(ClassDefinition)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="operationDefinitionRedefinedOperationDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If an operation definition has a redefinition list, its redefined operations
are the referent operations of the names in the redefinition list for the
operation definition. Otherwise, the redefined operations are any operations
that would otherwise be indistinguishable from the operation being defined
in this operation definition."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="operationDefinitionRedefinition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Each name in the redefinition list of an operation definition must have a
single referent that is an operation. This operation must be a non-private
operation that is a member of a specialization referent of the class
definition of the operation definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.redefinition = null or
 self.redefinition.name->forAll(
 referent->size() = 1 and 
 referent->forAll(
 visibility() <> 'private' and 
 containedIn(self.specializationReferents().members()) and 
 isOperation()
 )
 )"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="operationDefinitionRedefinedOperations" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The redefined operations of an operation definition must have formal parameters
that match each of the formal parameters of this operation definition, in order.
Two formal parameters match if they have the same direction, name, multiplicity
bounds, ordering, uniqueness and type reference."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.redefinedOperation->forAll(op | self.parametersMatch(op))"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="operationDefinitionIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An operation definition is a feature."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="operationDefinitionIsConstructorDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An operation definition is a constructor if it has a @Create annotation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="operationDefinitionIsDestructorDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An operation definition is a destructor if it has a @Destroy annotation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="operationDefinitionConstructorDestructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An operation definition cannot be both a constructor and a destructor."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 not (self.isConstructor and self.isDestructor)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="operationDefinitionConstructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If an operation definition is a constructor, any redefined operation for it must also be a constructor.
The body of a constructor may contain an alternative constructor invocation for another constructor
in the same class or super constructor invocations for constructors in immediate superclasses."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.isConstructor implies
 ( self.redefinedOperation->forAll(isConstructor)) and
 -- NOTE: The following condition is added.
 -- A constructor may not have an explicit return type.
 not self.ownedMember.definition->exists(
 oclIsKindOf(FormalParameter) and 
 oclAsType(FormalParameter).direction = 'return'
 )"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="operationDefinitionDestructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If an operation definition is a destructor, any redefined operation for it must also be a destructor."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.isDestructor implies
 self.redefinedOperation->forAll(isDestructor)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="redefinition" eType="#//QualifiedNameList"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The names of other operations that are redefined by the operation being defined."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAbstract" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the operation being defined is abstract."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="body" eType="#//Block"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The sequence of statements that defines the behavior of the operation (empty for a stub)."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="redefinedOperation" ordered="false"
- upperBound="-1" eType="#//ElementReference" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value=""/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 if self.redefinition <> null then 
 -- NOTE: The current scope for the redefinition qualifed name list is
 -- defined to be the outer scope of the class of the operation. This
 -- prevents an infinite loop in resolving the members of the class,
 -- relying on the fact that redefined operations can not be members of
 -- the class with the redefinition.
 self.redefinition.name.referent->asSet()
 else
 let owner = self.containingMember().namespace.oclAsType(ClassDefinition) in 
 owner.specializationReferent.members()->
 select(m | m.visibility() <> 'private' and not self.isDistinguishableFrom(m.asMember().definition))->
 asSet()
 endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isConstructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this operation definition is for a constructor."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.annotation()->exists(stereotypeName.pathName = 'Create')"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDestructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this operation definition is for a destructor."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.annotation()->exists(stereotypeName.pathName = 'Destroy')"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="AssociationDefinition" eSuperTypes="#//ClassifierDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of an association, whose members must all be properties."/>
- </eAnnotations>
- <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if the given unit definition matches this association definition
considered as a classifier definition and the subunit is for an association definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.ClassifierDefinition_matchForStub(unit) and
 unit.definition.oclIsKindOf(AssociationDefinition)"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="In addition to the annotations allowed for classifiers in general, an association
definition allows an annotation for any stereotype whose metaclass is consistent with Association."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 /* TODO: Handle association stereotype annotations. */
 self.ClassifierDefinition_annotationAllowed(annotation)"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
- </eOperations>
- <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return true if the given member is either an AssociationDefinition or an
imported member whose referent is an AssociationDefinition or an Association."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="member.isAssociation()"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="associationDefinitionSpecializationReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The specialization referents of an association definition must all be associations."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.specializationReferent->forAll(isAssociation())"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ClassifierDefinition" abstract="true"
- eSuperTypes="#//NamespaceDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of a classifier."/>
- </eAnnotations>
- <eOperations name="ClassifierDefinition_annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="NamespaceDefinition_annotationAllowed(annotation)"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
- </eOperations>
- <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The namespace definition associated with the given unit definition must
be a classifier definition. The subunit classifier definition may be abstract
if and only if the subunit classifier definition is abstract. The subunit
classifier definition must have the same specialization referents as the
stub classifier definition. (Note that it is the referents that must match,
not the exact names or the ordering of those names in the specialization list.)
The subunit classifier definition must also have a matching classifier
template parameter for each classifier template parameter of the stub classifier
definition. Two template parameters match if they have same names and the same
specialization referents."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="ClassifierDefinition_matchForStub(unit)"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="ClassifierDefinition_matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 unit.definition.oclIsKindOf(ClassifierDefinition) and
 let classifier = unit.definition.oclAsType(ClassifierDefinition) in
 classifier.isAbstract = self.isAbstract and
 classifier.specializationReferent->size() = self.specializationReferent->size() and
 classifier.specializationReferent->forAll(containedIn(self.specializationReferent->asBag())) and
 classifier.templateParameters()->size() = self.templateParameters()->size() and
 Sequence{1..classifier.templateParameters()->size()}->forAll(i |
 classifier.templateParameters()->at(i).matches(self.templateParameters()->at(i))
 )"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="members" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns the members of a classifier definition including its inherited members."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.NamespaceDefinition_members()->
 includingAll(self.inheritedMembers())->asOrderedSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="inheritedMembers" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns all of the inherited members of this classifier definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.inherit(
 self.specializationReferent.members()->select(visibility() <> 'private').
 asMember()->asOrderedSet()
 )"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="inherit" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Define how to inherit a set of members. Here the operation is defined to inherit them all.
It is intended to be redefined in circumstances where inheritance is affected by redefinition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="members"/>
- </eAnnotations>
- <eParameters name="members" upperBound="-1" eType="#//Member"/>
- </eOperations>
- <eOperations name="classifierDefinitionSpecialization" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Each name listed in the specialization list for a classifier definition must
have a single classifier referent. None of these referents may be templates."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.specialization = null or
 self.specialization.name->forAll(
 referent->size() = 1 and
 referent->forAll(isClassifier() and not isTemplate())
 )"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classifierDefinitionSpecializationReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The specialization referents of a classifier definition are the classifiers denoted by the
names in the specialization list for the classifier definition."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classifierDefinitionInheritedMembers" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The members of a classifier definition include non-private members inherited from the classifiers it specializes.
The visibility of inherited members is as specified in the UML Superstructure, Subclause 7.3.8."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAbstract" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the classifier is abstract or not."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="specialization" eType="#//QualifiedNameList"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The names of classifiers specialized by the classifier being defined."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="specializationReferent"
- upperBound="-1" eType="#//ElementReference" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="References to the classifiers to which the names in the specialization list resolve."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 if self.specialization = null then OrderedSet{}
 else self.specialization.name.referent->asOrderedSet()
 endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ClassDefinition" eSuperTypes="#//ClassifierDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of a class, whose members may be properties, operations, signals or signal receptions."/>
- </eAnnotations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="In addition to the annotations allowed for classifiers in general, a class definition allows an
annotation for any stereotype whose metaclass is consistent with Class."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 /* TODO: Allow class stereotype annotations. */
 self.ClassifierDefinition_annotationAllowed(annotation)"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
- </eOperations>
- <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if the given unit definition matches this class definition considered as a
classifier definition and the subunit is for a class definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.ClassifierDefinition_matchForStub(unit) and
 /* NOTE: Cannot be an ActiveClassDefinition. */
 unit.definition.oclIsTypeOf(ClassDefinition)"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return true if the given member is either a ClassDefinition or an imported member whose referent is a ClassDefinition or a Class."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="member.isClass()"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="needsDefaultConstructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Checks whether this class needs to have a default constructor added."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 not self.ownedMember.definition->exists(
 oclIsKindOf(OperationDefinition) and 
 oclAsType(OperationDefinition).isConstructor
 )"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="needsDefaultDestructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Checks whether this class needs to have a default destructor added."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 not self.ownedMember.definition->exists(
 oclIsKindOf(OperationDefinition) and 
 oclAsType(OperationDefinition).isDestructor
 )"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="inherit" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.inheritCached(inheritableMembers)"/>
- </eAnnotations>
- <eParameters name="inheritableMembers" upperBound="-1" eType="#//Member"/>
- </eOperations>
- <eOperations name="inheritCached" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="EXTERNAL: Caches intermediate members computation to avoid infinite loops."/>
- </eAnnotations>
- <eParameters name="inheritableMembers" upperBound="-1" eType="#//Member"/>
- </eOperations>
- <eOperations name="ClassDefinition_inherit" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let ownedOperations = self.subunitOwnedMembers().definition->
 select(oclIsKindOf(OperationDefinition)).oclAsType(OperationDefinition)
 in
 inheritableMembers->reject(inheritableMember |
 ownedOperations->exists(operation |
 inheritableMember.toReference().
 containedIn(operation.redefinedOperation->asBag()) or
 not operation.isDistinguishableFrom(inheritableMember.definition)
 )
 )"/>
- </eAnnotations>
- <eParameters name="inheritableMembers" upperBound="-1" eType="#//Member"/>
- </eOperations>
- <eOperations name="classDefinitionSpecializationReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The specialization referents of a class definition must all be classes.
A class definition may not have any referents that are active classes unless
this is an active class definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.specializationReferent->forAll(isClass()) and
 (self.specializationReferent->exists(isActiveClass())
 implies self.oclIsKindOf(ActiveClassDefinition)
 )"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classDefinitionAbstractMember" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a class definition is not abstract, then no member operations (owned or inherited)
of the class definition may be abstract."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isAbstract then true
 else 
 self.member.definition->select(oclIsKindOf(OperationDefinition)).
 oclAsType(OperationDefinition)->forAll(not isAbstract)
 endif"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="TypedElementDefinition" eSuperTypes="#//AssignableElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The common properties of the definitions of typed elements."/>
- </eAnnotations>
- <eOperations name="isOrdered" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.isOrdered or self.isSequence"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isNonunique" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.isNonunique or self.isSequence"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="typedElementDefinitionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the lower bound string image of a typed element definition is not empty,
then the integer lower bound is the integer value of the lower bound string.
Otherwise the lower bound is equal to the upper bound, unless the upper bound
is unbounded, in which case the lower bound is 0."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="typedElementDefinitionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The unlimited natural upper bound value is the unlimited natural value of
the upper bound string (with "*" representing the unbounded value)."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="typedElementDefinitionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a typed element definition is the single classifier referent
of the type name."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="typedElementDefinitionTypeName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type name of a typed element definition must have a single classifier
referent. This referent may not be a template."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.typeName = null or self.type <> null and not self.type.isTemplate()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.actualType <> null then
 self.actualType
 else if self.typeName = null then
 null
 else
 let types = self.typeName.referent->select(isClassifier()) in 
 if types->size() <> 1 then
 null
 else
 types->any(true)
 endif
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.lowerBound <> null then
 self.lowerBound.toInteger()
 else if self.isMultiplicity or self.upperBound = '*' then
 0
 else
 self.upper
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.isMultiplicity or self.upperBound = '*' then
 -1
 else 
 self.upperBound.toInteger()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="lowerBound" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The string image of the literal given to specify the lower bound of the
multiplicity of the element being defined."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="upperBound" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" defaultValueLiteral="1">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The string image of the literal given to specify the upper bound of the
multiplicity of the element being defined."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isOrdered" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the element being defined is ordered."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isNonunique" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the element being defined is non-unique."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isSequence" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the element being defined is a sequence (and hence both ordered
and non-unique)."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" eType="#//QualifiedName"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the type of the element being defined."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="actualType" eType="#//ElementReference"/>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAny" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the element being defined has an empty type."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isMultiplicity" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the element being defined has multiplicity specified as 0..*
using the shortand multiplicity indicator "[]"."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="DataTypeDefinition" eSuperTypes="#//ClassifierDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of a data type, whose members must all be properties."/>
- </eAnnotations>
- <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if the given unit definition matches this data type definition
considered as a classifier definition and the subunit is for a data type
definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.ClassifierDefinition_matchForStub(unit) and
 unit.definition.oclIsKindOf(DataTypeDefinition)"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="In addition to the annotations allowed for classifiers in general, a data type
definition allows @primitive annotations plus any stereotype whose metaclass is consistent with DataType."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 /* TODO: Allow data type stereotype annotations. */
 self.ClassifierDefinition_annotationAllowed(annotation) or
 annotation.stereotypeName.pathName = 'primitive'"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
- </eOperations>
- <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return true if the given member is either a DataTypeDefinition or an imported member
whose referent is a DataTypeDefinition or a DataType."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="member.isDataType()"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="dataTypeDefinitionPrimitive" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a data type is primitive, then it may not have any owned members."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.isPrimitive implies self.ownedMember->isEmpty()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="dataTypeDefinitionSpecializationReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The specialization referents of a data type definition must all be data types."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.specializationReferent->forAll(isDataType())"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="PackageDefinition" eSuperTypes="#//NamespaceDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of a package, all of whose members must be packageable elements."/>
- </eAnnotations>
- <eOperations name="allowPackageOnly" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="In addition to the annotations allowed on any namespace definition, a package definition
allows @apply annotations plus any stereotype whose metaclass is consistent with Package."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 /* TODO: Allow package stereotype annotations. */
 self.NamespaceDefinition_annotationAllowed(annotation) or
 annotation.stereotypeName.pathName = 'apply' or
 annotation.stereotypeName.pathName = 'ModelLibrary'"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
- </eOperations>
- <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true of the namespace definition associated with the given unit definition is a package definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="unit.definition.oclIsKindOf(PackageDefinition)"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return true if the given member is either a PackageDefinition or an imported member whose referent is a PackageDefinition or a Package."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="member.isPackage()"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="packageDefinitionAppliedProfileDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The applied profiles of a package definition are the profiles listed in any @apply annotations on the package."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return all profiles applied in this package, any containing package or in the model scope."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.appliedProfile->union(self.NamespaceDefinition_appliedProfiles())"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="appliedProfile" ordered="false"
- upperBound="-1" eType="#//ElementReference" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The profiles applied (directly) to this package."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let applications : Set(StereotypeAnnotation) = 
 self.annotation()->select(stereotypeName.pathName = 'apply') 
 in
 applications.names.name.referent->select(isProfile())->asSet()"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="PropertyDefinition" eSuperTypes="#//MemberDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A typed element definition for a property (attribute or association end)."/>
- </eAnnotations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="Set(AssignedSource){}"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if the annotation is for a stereotype that has a metaclass
consistent with Property."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 /* TODO: Allow property stereotype annotations. */
 false"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
- </eOperations>
- <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return true if the given member is either a PropertyDefinition or an
imported member whose referent is a PropertyDefinition or a Property."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="member.isProperty()"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="true"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="propertyDefinitionInitializer" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a property definition has an initializer, then the initializer expression
must be assignable to the property definition. There are no assignments before
an initializer expression.
(See also assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.initializer <> null implies 
 self.typePart.isAssignableFrom(self.initializer)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="propertyDefinitionIsCollectionConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A property definition requires collection conversion if its initializer has
a collection class as its type and the property definition does not."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="propertyDefinitionIsBitStringConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A property definition requires BitString conversion if its type is BitString and
the type of its initializer is Integer or a collection class whose argument type is Integer."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="propertyDefinitionIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A property definition is a feature."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isComposite" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the property being defined has composite aggregation."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="initializer" eType="#//Expression"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression to be evaluated to initialize the property."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCollectionConversion"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether collection conversion is required for the initialization of this property."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 self.initializer <> null and 
 self.initializer.type <> null and
 self.isCollectionClass(self.initializer.type) and
 (self.typePart.type = null or 
 not self.isCollectionClass(self.typePart.type)
 )"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether BitString conversion is required for the initialization of this property."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 self.typePart.type <> null and
 self.isIntegerType(self.typePart.type) and
 self.initializer.type <> null and
 (self.isIntegerType(self.initializer.type) or
 self.isIntegerCollectionClass(self.initializer.type)
 )"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="typePart" eType="#//TypedElementDefinition"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value=""/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SignalDefinition" eSuperTypes="#//ClassifierDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of a signal, whose members must all be properties."/>
- </eAnnotations>
- <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if the given unit definition matches this signal definition considered
as a classifier definition and the subunit is for a signal definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.ClassifierDefinition_matchForStub(unit) and
 unit.definition.oclIsKindOf(SignalDefinition)"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="In addition to the annotations allowed for classifiers in general, a signal definition
allows an annotation for any stereotype whose metaclass is consistent with Signal."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 /* TODO: Allow signal stereotype annotations */
 self.ClassifierDefinition_annotationAllowed(annotation)"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
- </eOperations>
- <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return true if the given member is either a SignalDefinition or an imported member
whose referent is a SignalDefinition or a Signal (where signal reception definitions are
considered to be kinds of signal definitions)."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="member.isSignal()"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="signalDefinitionSpecializationReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The specialization referents of a signal definition must all be signals."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.specializationReferent->forAll(isSignal())"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ActiveClassDefinition" eSuperTypes="#//ClassDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of an active class."/>
- </eAnnotations>
- <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if the given unit definition matches this active class definition
considered as a class definition and the subunit is for an active class definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 /* NOTE: ClassDefinition::matchForStub would not allow an ActiveClassDefinition. */
 self.ClassifierDefinition_matchForStub(unit) and
 unit.definition.oclIsKindOf(ActiveClassDefinition)"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="activeClassDefinitionClassifierBehavior" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If an active class definition is not abstract, then it must have a classifier behavior."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 not self.isAbstract implies self.classifierBehavior <> null"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="classifierBehavior" eType="#//ActivityDefinition"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of an activity (which may be a stub) to act as the classifier behavior of the active class."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ActivityDefinition" eSuperTypes="#//ClassifierDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of an activity, with any formal parameters defined as owned members."/>
- </eAnnotations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the body of an activity definition include an
assigned source for each parameter of the activity definition. The
source for out parameters is actually null, however, to indicate that it
has not been assigned yet (but that the name should not otherwise be used
as a local name)."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.body <> element then Set(AssignedSource){}
 else
 self.parameters()->collect(parameter |
 AssignedSource{
 name = parameter.actualName(),
 source = if parameter.direction = 'out' then null else parameter endif,
 type = parameter.typePart.type,
 upper = parameter.typePart.upper,
 lower = parameter.typePart.lower
 }
 )->asSet()
 endif"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
- </eOperations>
- <eOperations name="outerScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="This is necessary because, for Xtext parsing, ActiveClassDefinition::classifierBehavior is
composite and the classifierBehavior is not also added as a member of its active class."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 let owner = self.oclContainer() in
 if owner.oclIsKindOf(ActiveClassDefinition) and 
 owner.oclAsType(ActiveClassDefinition).classifierBehavior = self then
 owner.oclAsType(ActiveClassDefinition).toReference()
 else
 self.NamespaceDefinition_outerScope()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="In addition to the annotations allowed for classifiers in general, an activity definition allows
@primitive annotations and any stereotype whose metaclass is consistent with Activity."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 /* TODO: Allow activity stereotype annotations. */
 self.ClassifierDefinition_annotationAllowed(annotation) or
 annotation.stereotypeName.pathName = 'primitive'"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
- </eOperations>
- <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if the given unit definition matches this activity definition considered
as a classifier definition and the subunit is for an activity definition. In addition,
the subunit definition must have formal parameters that match each of the formal parameters
of the stub definition, in order. Two formal parameters match if they have the same
direction, name, multiplicity bounds, ordering, uniqueness and type reference."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.ClassifierDefinition_matchForStub(unit) and
 let definition = unit.definition in
 definition.oclIsKindOf(ActivityDefinition) and
 let parameters = self.parameters() in
 let otherParameters = definition.parameters() in
 parameters->size() = otherParameters->size() and 
 Sequence{1 .. parameters->size()}->forAll(i | 
 parameters->at(i).matches(otherParameters->at(i))
 ) and
 let returnParameter = self.returnParameter() in
 let otherReturnParameter = definition.returnParameter() in
 returnParameter = null and otherReturnParameter = null or
 returnParameter <> null and returnParameter.matches(otherReturnParameter)"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return true if the given member is either an ActivityDefinition or an
imported member whose referent is an ActivityDefinition or an Activity."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="member.isActivity()"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="activityDefinitionSpecialization" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An activity definition may not have a specialization list."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.specialization = null"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="activityDefinitionPrimitive" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If an activity definition is primitive, then it must have a body that is empty."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.isPrimitive implies self.body = null"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="body" eType="#//Block"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The sequence of statements that defines the behavior of the activity (empty for a stub)."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ElementImportReference" eSuperTypes="#//ImportReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An import reference to a single element to be imported into a unit."/>
- </eAnnotations>
- <eOperations name="importedMembers" ordered="false" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the set of all imported members."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.referent = null then
 Set(Member){}
 else
 Set{Member{
 visibility = self.visibility,
 definition = ImportedMember{
 name = if self.alias = null then self.referent.name() else self.alias endif,
 referent = self.referent
 }
 }}
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="elementImportReferenceReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referent of an element import reference must be a packageable element."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.referent <>null and self.referent.isPackageableElement()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="alias" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The alias to be used as the name for the imported element in the importing unit?s namespace."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SignalReceptionDefinition" eSuperTypes="#//SignalDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of both a signal and a reception of that signal as a feature of the containing active class."/>
- </eAnnotations>
- <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="true"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="signalReceptionDefinitionIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A signal reception definition is a feature."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="EnumerationDefinition" eSuperTypes="#//ClassifierDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of an enumeration, whose members must all be enumeration literal names."/>
- </eAnnotations>
- <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if the given unit definition matches this enumeration definition considered
as a classifier definition and the subunit is for an enumeration definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.ClassifierDefinition_matchForStub(unit) and
 unit.definition.oclIsKindOf(EnumerationDefinition)"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="In addition to the annotations allowed for classifiers in general, an enumeration definition
allows an annotation for any stereotype whose metaclass is consistent with Enumeration."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 /* TODO: Allow enumeration stereotype annotations. */
 self.ClassifierDefinition_annotationAllowed(annotation)"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
- </eOperations>
- <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return true if the given member is either an EnumerationDefinition or an imported member
whose referent is an EnumerationDefinition or an Enumeration."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="member.isEnumeration()"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="enumerationDefinitionSpecializationReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The specialization referents of an enumeration definition must all be enumerations."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.specializationReferent->forAll(isEnumeration())"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="PackageImportReference" eSuperTypes="#//ImportReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An import reference to a package all of whose public members are to be imported."/>
- </eAnnotations>
- <eOperations name="importedMembers" ordered="false" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the visible members of the referent package."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.referent = null then Set(Member){}
 else self.referent.visibleMembers()->collect(m | 
 Member{
 visibility = self.visibility,
 definition = ImportedMember{name = m.name(), referent = m}
 }
 )->asSet()
 endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="packageImportReferenceReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referent of a package import must be a package."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.referent <> null and self.referent.isPackage()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ClassifierTemplateParameter" eSuperTypes="#//ClassifierDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of a classifier template parameter, which acts as a classifier within the definition of the template."/>
- </eAnnotations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Annotations are not allowed on classifier template parameters."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
- </eOperations>
- <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns false. (Classifier template parameters cannot be stubs.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="not self.isStub"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return true if the given member is a classifier template parameter."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="member.isClassifierTemplateParameter()"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="matches" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Two template parameters match if they have same names and the same
specialization referents."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.actualName() = other.actualName() and
 self.specializationReferent->size() = other.specializationReferent->size() and
 self.specializationReferent->forAll(containedIn(other.specializationReferent->asBag()))"/>
- </eAnnotations>
- <eParameters name="other" lowerBound="1" eType="#//ClassifierTemplateParameter"/>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="FormalParameter" eSuperTypes="#//MemberDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A typed element definition for the formal parameter of an activity or operation."/>
- </eAnnotations>
- <eOperations name="currentScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The current scope for a formal parameter is the outer scope
of the namespace definition that owns it."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.oclContainer().oclContainer().oclAsType(NamespaceDefinition).toReference()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if the annotation is for a stereotype that has a metaclass consistent with Parameter."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 /* TODO: Allow formal parameter stereoype annotations. */
 false"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
- </eOperations>
- <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return true if the given member is a FormalParameter."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="member.isParameter()"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="matches" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Two formal parameters match if they have the same direction, name,
multiplicity bounds, ordering, uniqueness and type reference."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 other <> null and
 self.direction = other.direction and 
 self.actualName() = other.actualName() and 
 self.typePart.lower = other.typePart.lower and 
 self.typePart.upper = other.typePart.upper and
 self.typePart.isOrdered() = other.typePart.isOrdered() and
 self.typePart.isNonunique() = other.typePart.isNonunique() and 
 let type = self.typePart.type in
 let otherType = other.typePart.type in
 type = null and otherType = null or 
 type <> null and type.equals(otherType)"/>
- </eAnnotations>
- <eParameters name="other" eType="#//FormalParameter"/>
- </eOperations>
- <eOperations name="matchesElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.matchesNameType(other) and
 self.direction = other.direction() and 
 self.typePart.lower = other.lower() and 
 self.typePart.upper = other.upper() and
 self.typePart.isOrdered() = other.isOrdered() and
 self.typePart.isNonunique() = other.isNonunique()"/>
- </eAnnotations>
- <eParameters name="other" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="matchesNameType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.matchesType(other) and
 self.actualName() = other.name()"/>
- </eAnnotations>
- <eParameters name="other" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="matchesType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 other <> null and
 let type = self.typePart.type in
 let otherType = other.type() in
 type = null and otherType = null or
 type <> null and type.equals(otherType)"/>
- </eAnnotations>
- <eParameters name="other" eType="#//ElementReference"/>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="direction" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" defaultValueLiteral="return">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An indication of the direction of the parameter being defined."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="ReceptionDefinition"/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="ReceptionDefinition"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="typePart" eType="#//TypedElementDefinition"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value=""/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ReceptionDefinition" eSuperTypes="#//MemberDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The declaration of the ability of an active class to receive a signal."/>
- </eAnnotations>
- <eOperations name="actualName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.signalName.unqualifiedName.toName()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if the annotation is for a stereotype that has a metaclass consistent with Reception."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 /* TODO: Allow reception stereoype annotations. */
 false"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
- </eOperations>
- <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return true if the given member is either a ReceptionDefinition, a SignalReceptionDefinition or an
imported member whose referent is a ReceptionDefinition, a SignalReceptionDefinition or a Reception."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="member.isReception()"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="true"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="receptionDefinitionSignalName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The signal name for a reception definition must have a single referent that is a signal. This referent must not be a template."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.signal <> null and not self.signal.isTemplate()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="receptionDefinitionSignalDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The signal for a reception definition is the signal referent of the signal name for the reception definition."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="receptionDefinitionIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reception definition is a feature."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="signalName" lowerBound="1"
- eType="#//QualifiedName" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the signal to be received."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="signal" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value=""/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="
 let referents = self.signalName.referent->select(isSignal()) in
 if referents->size() = 1 then
 referents->any(true)
 else
 null
 endif"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="Member" eSuperTypes="#//DocumentedElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value=""/>
- </eAnnotations>
- <eOperations name="toReference" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 self.definition.toReference()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="visibility" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 if self.visibility <> null then self.visibility
 else if definition.oclIsKindOf(EnumerationLiteralName) then 'public'
 else 'package'
 endif endif"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="definition" lowerBound="1"
- eType="#//MemberDefinition" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value=""/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="visibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An indication of the visibility of the member outside of its namespace."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="AnnotatedStatement"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="namespace" eType="#//NamespaceDefinition"
- eOpposite="#//NamespaceDefinition/ownedMember">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The namespace definition within which this member definition is nested, if any.
(The namespace definitions for units are not physically nested within another
Alf namespace definition.)"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="annotation" ordered="false"
- upperBound="-1" eType="#//StereotypeAnnotation" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The stereotype annotations on this member definition."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="AnnotatedStatement" eSuperTypes="#//DocumentedElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value=""/>
- </eAnnotations>
- <eOperations name="annotations" ordered="false" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="External"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="annotation" ordered="false"
- upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The annotations applied to this statement."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="BoundClassifier"/>
- <details key="unique" value="false"/>
- <details key="upper" value="*"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="statement" lowerBound="1"
- eType="#//Statement" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value=""/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="BoundClassifier" eSuperTypes="#//ClassifierDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A classifier resulting from the binding of a template to its actual
parameters."/>
- </eAnnotations>
- <eOperations name="toReference" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="
 BoundElementReference{
 referent = self.template,
 namespace = self.template.namespace(),
 templateBinding = InternalElementReference{element = self}
 }"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="template" lowerBound="1"
- eType="#//ElementReference"/>
- <eStructuralFeatures xsi:type="ecore:EReference" name="actual" unique="false"
- upperBound="-1" eType="#//ElementReference"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ReturnParameter" eSuperTypes="#//FormalParameter">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A formal parameter representing a return parameter."/>
- </eAnnotations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="NonReturnParameter" eSuperTypes="#//FormalParameter">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A formal parameter representing a parameter that is not a return parameter."/>
- </eAnnotations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="AnyType" eSuperTypes="#//ClassifierDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A classifier representing the null "any" type in a list of
template paraemter actuals."/>
- </eAnnotations>
- <eOperations name="actualName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="'any'"/>
- </eAnnotations>
- </eOperations>
- </eClassifiers>
-</ecore:EPackage>
+<?xml version="1.0" encoding="UTF-8"?> +<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="alf" nsURI="http://www.omg.org/spec/ALF/20120827" nsPrefix="alf"> + <eAnnotations source="http://www.eclipse.org/OCL/Import"> + <details key="ecore" value="http://www.eclipse.org/emf/2002/Ecore"/> + <details key="types" value="http://www.eclipse.org/uml2/5.0.0/Types"/> + <details key="uml" value="http://www.eclipse.org/uml2/5.0.0/UML"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"> + <details key="invocationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/> + <details key="settingDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/> + <details key="validationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/> + </eAnnotations> + <eClassifiers xsi:type="ecore:EClass" name="AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An assignment of a source element that gives the value of a local name, along with a record of the defined type (if any) and multiplicity of the local name."/> + </eAnnotations> + <eOperations name="isNew" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let assignment = assignmentsBefore->select(name = self.name) in
 assignment->isEmpty() or assignment.source->excludes(self.source)"/> + </eAnnotations> + <eParameters name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"/> + </eOperations> + <eOperations name="update" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="assignments->reject(a | a.name = self.name)->including(self)"/> + </eAnnotations> + <eParameters name="assignments" ordered="false" upperBound="-1" eType="#//AssignedSource"/> + </eOperations> + <eOperations name="copy" lowerBound="1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="AssignedSource{
 name = self.name,
 source = if newSource = null then self.source else newSource endif,
 upper = self.upper,
 lower = self.lower,
 type = self.type,
 isParallelLocalName = 
 if isParallelLocal = null then self.isParallelLocalName 
 else isParallelLocal endif
 }"/> + </eAnnotations> + <eParameters name="newSource" eType="#//SyntaxElement"/> + <eParameters name="isParallelLocal" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The local name for which this is the assigned source."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="source" lowerBound="1" + eType="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The syntax element that is to be the source for the assigned value of the given local name."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EIntegerObject"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The multiplicity upper bound for the local name."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EIntegerObject"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The multiplicity lower bound for the name."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A reference to the element that gives the type for the local name (if any)."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isParallelLocalName" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An indication whether this assignment is for a local name listed in a
@parallel annotation of a for statement."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="SyntaxElement" abstract="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A syntax element synthesized in an abstract syntax tree, along with any additional information determined during static semantic analysis."/> + </eAnnotations> + <eOperations name="toReference" lowerBound="1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return a reference to this element."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="InternalElementReference{element = self}"/> + </eAnnotations> + </eOperations> + <eOperations name="owner" eType="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return the owner of this element."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="SyntaxElement_owner()"/> + </eAnnotations> + </eOperations> + <eOperations name="SyntaxElement_owner" eType="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let container = self.oclContainer() in
 if container = null or not container.oclIsKindOf(SyntaxElement) then
 self.owner
 else
 container.oclAsType(SyntaxElement)
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="currentScope" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return the current scope for this element. By default, this is the current
scope of the owner of this element, if any."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.SyntaxElement_currentScope()"/> + </eAnnotations> + </eOperations> + <eOperations name="SyntaxElement_currentScope" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let owner = self.owner() in
 if owner = null then null
 else owner.currentScope()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="enclosingStatement" eType="#//Statement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return the enclosing statement for this element, if there is one."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let owner = self.owner() in
 if owner = null or owner.oclIsKindOf(MemberDefinition) then null
 else if owner.oclIsKindOf(Statement) then owner.oclAsType(Statement)
 else owner.enclosingStatement()
 endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="enclosingExpression" eType="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return the enclosing expression for this element, if there is one."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let owner = self.owner() in
 if owner = null or owner.oclIsKindOf(MemberDefinition) or
 owner.oclIsKindOf(Statement) then null
 else if owner.oclIsKindOf(Expression) then owner.oclAsType(Expression)
 else owner.enclosingExpression()
 endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return the assignments before this element, as appropriate."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.SyntaxElement_assignmentsBefore()"/> + </eAnnotations> + </eOperations> + <eOperations name="SyntaxElement_assignmentsBefore" ordered="false" upperBound="-1" + eType="#//AssignedSource"/> + <eOperations name="SyntaxElement_assignmentsBefore_base" ordered="false" upperBound="-1" + eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let owner = self.owner() in
 if owner = null then Set(AssignedSource){}
 else owner.assignmentsBefore(self)
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return the assignments before the given subelement of this element,
if any, as appropriate. (By default, by default they are are the
assignments before this element.)"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.assignmentsBefore()"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/> + </eOperations> + <eOperations name="updateAll" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Update the initial set of assignments with all the assigned sources in
newAssignments."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 newAssignments->iterate(
 assignment, updatedAssignments : Set(AssignedSource) = assignments |
 assignment.update(updatedAssignments)
 )"/> + </eAnnotations> + <eParameters name="assignments" ordered="false" upperBound="-1" eType="#//AssignedSource"/> + <eParameters name="newAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"/> + </eOperations> + <eOperations name="commonAncestor" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return the effective common ancestor of a set of classifiers."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if classifiers->isEmpty() or classifiers->exists(c | c = null) then null
 else
 let classifierSet = self.removeDuplicateElements(classifiers->asBag()) in
 if classifierSet->size() = 1 then classifierSet->any(true)
 else
 let ancestors = self.commonAncestors(classifierSet) in
 let parents = ancestors.allParents() in
 self.commonAncestor(ancestors->reject(containedIn(parents)))
 endif 
 endif"/> + </eAnnotations> + <eParameters name="classifiers" ordered="false" upperBound="-1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="commonAncestors" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let ancestors : Bag(ElementReference) = 
 classifiers.allParents()->union(classifiers) in
 self.removeDuplicateElements(
 ancestors->select(countIn(ancestors) = classifiers->size())
 )"/> + </eAnnotations> + <eParameters name="classifiers" ordered="false" upperBound="-1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="removeDuplicateElements" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 elements->iterate(e, bag : Bag(ElementReference) = Bag{} |
 if e.containedIn(bag) then bag
 else bag->including(e)
 endif
 )->asSet()"/> + </eAnnotations> + <eParameters name="elements" ordered="false" unique="false" upperBound="-1" + eType="#//ElementReference"/> + </eOperations> + <eOperations name="resolveInLibrary" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let currentScope = self.currentScope() in
 if currentScope = null then Set(ElementReference){}
 else
 let modelScope = currentScope.modelScope() in
 if modelScope = null then Set(ElementReference){}
 else modelScope.resolvePathName('Alf::Library::' + pathName)
 endif
 endif"/> + </eAnnotations> + <eParameters name="pathName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="primitiveType" eType="#//ElementReference"> + <eParameters name="typeName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="primitiveType_" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referents = self.resolveInLibrary('PrimitiveTypes::' + typeName)->
 select(isPrimitiveType()) in
 if referents->isEmpty() then null
 else referents->any(true)
 endif"/> + </eAnnotations> + <eParameters name="typeName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="booleanType" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.primitiveType('Boolean')"/> + </eAnnotations> + </eOperations> + <eOperations name="isBooleanType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="element <> null and element.conformsTo(self.booleanType())"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="integerType" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.primitiveType('Integer')"/> + </eAnnotations> + </eOperations> + <eOperations name="isIntegerType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="element <> null and element.conformsTo(self.integerType())"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="stringType" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.primitiveType('String')"/> + </eAnnotations> + </eOperations> + <eOperations name="isStringType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="element <> null and element.conformsTo(self.stringType())"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="unlimitedNaturalType" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.primitiveType('UnlimitedNatural')"/> + </eAnnotations> + </eOperations> + <eOperations name="isUnlimitedNaturalType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="element <> null and element.conformsTo(self.unlimitedNaturalType())"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="bitStringType" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.primitiveType('BitString')"/> + </eAnnotations> + </eOperations> + <eOperations name="isBitStringType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="element <> null and element.conformsTo(self.bitStringType())"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="naturalType" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.primitiveType('Natural')"/> + </eAnnotations> + </eOperations> + <eOperations name="isNaturalType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="element <> null and element.conformsTo(self.naturalType())"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="isNumericType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.isIntegerType(element) or 
 self.isUnlimitedNaturalType(element) or 
 self.isNaturalType(element)"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="collectionFunctionAdd" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referents = self.resolveInLibrary('CollectionFunctions::add')->
 select(isBehavior()) in
 if referents->isEmpty() then null
 else referents->any(true)
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="isCollectionClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let template = element.template() in
 template <> null and
 let collectionClasses = self.resolveInLibrary('CollectionClasses') in
 collectionClasses->notEmpty() and
 collectionClasses->any(true).equals(template.namespace())"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="isIntegerCollectionClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.isCollectionClass(element) and 
 self.isIntegerType(element.collectionArgument())"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="isBitStringCollectionClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.isCollectionClass(element) and 
 self.isBitStringType(element.collectionArgument())"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="owner" eType="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The element to consider the owner of this element, if this element
does not have a composite container."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ElementReference" abstract="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A reference to a model element, either directly or via its Alf abstract
syntax representation. (NOTE: The definitions of all the helper operations
of ElementReference are specific to its subclasses.)"/> + </eAnnotations> + <eOperations name="isUml" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + </eOperations> + <eOperations name="isAlf" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + </eOperations> + <eOperations name="asUml" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="null"/> + </eAnnotations> + </eOperations> + <eOperations name="asAlf" eType="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="null"/> + </eAnnotations> + </eOperations> + <eOperations name="asMember" eType="#//Member"/> + <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eParameters name="member" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="isNamedElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isNamespace" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isNamespaceFor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/> + </eOperations> + <eOperations name="isModelNamespace" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isPackage" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isProfile" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isPackageableElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isClassifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isAbstractClassifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isAssociation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isDataType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isActiveClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isSignal" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isEnumeration" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isBehavior" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isActivity" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isMethod" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isPrimitiveType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isReception" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isOperation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isConstructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isDestructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isProperty" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isAssociationEnd" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isTemplate" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isTemplateParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isClassifierTemplateParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isParameteredElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isTemplateBinding" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isStereotype" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isEnumerationLiteral" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isLoopVariable" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isAnnotation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isSequenceExpansionExpression" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isAnyType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + </eOperations> + <eOperations name="isDistinguishableFrom" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let member = self.asMember() in
 let otherMember = other.asMember() in
 if member = null or otherMember = null then true
 else
 member.definition.isDistinguishableFrom(otherMember.definition)
 endif"/> + </eAnnotations> + <eParameters name="other" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="isAssignableFrom" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 AssignableElementReference{
 reference = self, owner = element.owner()
 }.isAssignableFrom(element)"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//AssignableElement"/> + </eOperations> + <eOperations name="collectionArgument" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
-- let templateActuals = self.templateActuals() in
-- if templateActuals->isEmpty() then null
-- else templateActuals->first()
-- endif;
 let toSequenceOperation = self.resolve('toSequence')->select(
 isOperation() and parameters()->size() = 0 and returnParameter() <> null
 ) in
 if toSequenceOperation->size() <> 1 then null
 else toSequenceOperation->any(true).type()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + <eOperations name="visibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + <eOperations name="ownedMembers" upperBound="-1" eType="#//ElementReference"/> + <eOperations name="members" upperBound="-1" eType="#//ElementReference"/> + <eOperations name="visibleMembers" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.members()->select(visibility() = null or visibility() = 'public')->asSet()"/> + </eAnnotations> + </eOperations> + <eOperations name="nestedClassifiers" upperBound="-1" eType="#//ElementReference"/> + <eOperations name="properties" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.members()->select(isProperty())"/> + </eAnnotations> + </eOperations> + <eOperations name="associationEnds" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.members()->select(isAssociationEnd())"/> + </eAnnotations> + </eOperations> + <eOperations name="opposite" eType="#//ElementReference"/> + <eOperations name="receptions" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.members()->select(isReception())->asSet()"/> + </eAnnotations> + </eOperations> + <eOperations name="signal" eType="#//ElementReference"/> + <eOperations name="parameters" upperBound="-1" eType="#//ElementReference"/> + <eOperations name="returnParameter" eType="#//ElementReference"/> + <eOperations name="specification" eType="#//ElementReference"/> + <eOperations name="redefinedOperations" ordered="false" upperBound="-1" eType="#//ElementReference"/> + <eOperations name="namespace" eType="#//ElementReference"/> + <eOperations name="template" eType="#//ElementReference"/> + <eOperations name="templateParameters" upperBound="-1" eType="#//ElementReference"/> + <eOperations name="parameteredElements" upperBound="-1" eType="#//ElementReference"/> + <eOperations name="templateActuals" upperBound="-1" eType="#//ElementReference"/> + <eOperations name="direction" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + <eOperations name="association" eType="#//ElementReference"/> + <eOperations name="type" eType="#//ElementReference"/> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> + <eOperations name="isOrdered" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="isNonunique" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> + <eOperations name="parents" ordered="false" upperBound="-1" eType="#//ElementReference"/> + <eOperations name="allParents" ordered="false" upperBound="-1" eType="#//ElementReference"/> + <eOperations name="classifierBehavior" eType="#//ElementReference"/> + <eOperations name="context" eType="#//ElementReference"/> + <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference"/> + <eOperations name="base" lowerBound="1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let template = self.template() in
 if template = null then self
 else template
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="reference" lowerBound="1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self"/> + </eAnnotations> + </eOperations> + <eOperations name="templateBinding" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="null"/> + </eAnnotations> + </eOperations> + <eOperations name="bind" lowerBound="1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 BoundClassifier{
 name = self.boundElementName(actuals),
 template = self,
 actual = actuals
 }.addToModel().toReference()"/> + </eAnnotations> + <eParameters name="actuals" unique="false" upperBound="-1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="boundElementName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 actuals->iterate(
 actual, s : String = '$$' + self.boundPathName() + '__' |
 s + if actual = null then 'any' else actual.boundPathName() endif + '_'
 ) + '_'"/> + </eAnnotations> + <eParameters name="actuals" unique="false" upperBound="-1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="boundPathName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isModelNamespace() then ''
 else
 let template = self.template() in
 if template = null then
 let namespace = self.namespace() in
 let name = if self.name() = null then '' else self.name() endif in
 if namespace = null or namespace.isModelNamespace() then name
 else namespace.boundPathName() + '$' + name
 endif
 else
 template.boundElementName(self.templateActuals()->asSequence())
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="qualifiedName" lowerBound="1" eType="#//QualifiedName"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isModelNamespace() then
 QualifiedName{nameBinding = OrderedSet(NameBinding){}}
 else
 let template = self.template() in
 if template = null then
 let namespace = self.namespace() in
 let qualifiedName =
 if namespace = null then null 
 else namespace.qualifiedName() endif in
 let name = self.name() in
 let nameBinding = NameBinding{
 name = if name = null then '' else name endif
 } in
 if qualifiedName = null then
 QualifiedName{nameBinding = OrderedSet{nameBinding}}
 else
 QualifiedName{
 nameBinding = qualifiedName.nameBinding->append(nameBinding)
 }
 endif
 else
 let templateName = template.qualifiedName() in
 let nameBindings = templateName.nameBinding in
 let n = nameBindings->size() in
 if n = 0 then
 templateName
 else
 let templateBinding = PositionalTemplateBinding{
 argumentName = self.templateActuals()->
 collect(templateActual | 
 if templateActual = null then 
 QualifiedName{nameBinding = OrderedSet(NameBinding){}}
 else 
 templateActual.qualifiedName() 
 endif
 )
 } in
 let name = self.name() in
 let nameBinding = NameBinding{
 name = if name = null then '' else name endif,
 binding = templateBinding
 } in
 if n = 1 then
 QualifiedName{nameBinding = OrderedSet{nameBinding}}
 else
 QualifiedName{
 nameBinding =
 nameBindings->subOrderedSet(1,n-1)->append(nameBinding)
 }
 endif
 endif
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="activeClass" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return the active class corresponding to an activity, if any.
This is either the activity itself, if it is active, or the class that
has the activity as a classifier behavior."/> + </eAnnotations> + </eOperations> + <eOperations name="isActiveBehavior" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.activeClass() <> null"/> + </eAnnotations> + </eOperations> + <eOperations name="conformsTo" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eParameters name="other" eType="#//ElementReference"/> + </eOperations> + <eOperations name="equals" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eParameters name="other" eType="#//ElementReference"/> + </eOperations> + <eOperations name="containedIn" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="references->exists(equals(self))"/> + </eAnnotations> + <eParameters name="references" ordered="false" unique="false" upperBound="-1" + eType="#//ElementReference"/> + </eOperations> + <eOperations name="countIn" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="references->select(equals(self))->size()"/> + </eAnnotations> + <eParameters name="references" ordered="false" unique="false" upperBound="-1" + eType="#//ElementReference"/> + </eOperations> + <eOperations name="positionIn" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if references->isEmpty() then 0
 else
 let indices = 
 Sequence{1..references->size()}->select(i | self.equals(references->at(i)))
 in
 if indices->isEmpty() then 0
 else indices->first()
 endif
 endif"/> + </eAnnotations> + <eParameters name="references" unique="false" upperBound="-1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="copy" lowerBound="1" eType="#//ElementReference"/> + <eOperations name="modelScope" lowerBound="1" eType="#//ElementReference"/> + <eOperations name="resolvePathName" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eParameters name="pathName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="resolveInScope" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="resolveStereotype" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eParameters name="stereotypeName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="resolve" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let members = self.resolveInScope(name) in
 let outerScope = self.namespace() in
 if outerScope = null then
 members
 else
 members->union(
 outerScope.resolve(name)->select(m1 | 
 members->forAll(m2 | 
 m1.isDistinguishableFrom(m2)
 )
 )
 )
 endif"/> + </eAnnotations> + <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="resolveVisible" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let members = self.resolveInScope(name) in
 -- Note: If this namespace is the same as or a containing scope of the 
 -- given namespace, or if the given namespace is null, then all members 
 -- of this namespace are visible.
 if namespace = null or
 self.equals(namespace) or
 self.containsMember(namespace) then
 members
 else
 members->select(visibility() = 'public' or 
 self.allowPackageOnly() and visibility() = 'package'
 )
 endif"/> + </eAnnotations> + <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + <eParameters name="namespace" eType="#//ElementReference"/> + </eOperations> + <eOperations name="resolveAssociationEnd" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referents = self.members()->
 -- Note: Only association-owned ends are considered as association ends.
 select(isAssociation() and (properties()->size() = 2)).associationEnds()->
 select(associationEnd |
 let opposite = associationEnd.opposite() in
 opposite <> null and
 oppositeEndType.conformsTo(opposite.type()) and
 name = associationEnd.name()
 )->asSet()
 in
 let outerScope = self.namespace() in
 if outerScope = null then referents
 else
 let hiddenNames = referents.name() in
 referents->union(
 outerScope.resolveAssociationEnd(oppositeEndType, name)->
 reject(outerReferent | hiddenNames->includes(outerReferent.name()))
 )
 endif"/> + </eAnnotations> + <eParameters name="oppositeEndType" lowerBound="1" eType="#//ElementReference"/> + <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="containsMember" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 member = null or
 let namespace = member.namespace() in
 namespace <> null and
 (self.equals(namespace) or
 self.containsMember(namespace))"/> + </eAnnotations> + <eParameters name="member" eType="#//ElementReference"/> + </eOperations> + <eOperations name="allowPackageOnly" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="not self.isPackage()"/> + </eAnnotations> + </eOperations> + <eOperations name="stub" eType="#//ElementReference"/> + <eOperations name="stubFor" eType="#//ElementReference"> + <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/> + </eOperations> + <eOperations name="constructorReference" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
				if not self.isConstructor() then null
				else
 let classReferent = self.namespace() in
 if not classReferent.isAbstractClassifier() then
 self
 else
 -- Check for an "Impl" package.
 let namespaceReferent = classReferent.namespace() in
 if namespaceReferent = null then null
 else
 let template = classReferent.template() in
 let className = classReferent.name() in
 let operationName = self.name() in
 let implClassReferent = 
 namespaceReferent.ownedMembers()->
 select(name() = 'Impl' and isPackage()).
 ownedMembers()->
 select(name() = className and isClass())
 in
 let boundClassReferent =
 if classReferent.template() = null or
 implClassReferent->exists(not isTemplate()) then 
 implClassReferent
 else 
 -- TODO: Check that template parameters match.
 implClassReferent.bind(
 classReferent.templateActuals()->asSequence()
 )
 endif
 in
 let implOperationReferent =
 boundClassReferent.ownedMembers()->
 select(name() = operationName and isOperation())
 in
 if implOperationReferent->size() <> 1 then null
 else implOperationReferent->any(true)
 endif
 endif
 endif
				endif"/> + </eAnnotations> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="InternalElementReference" eSuperTypes="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A direct reference to a UML model element."/> + </eAnnotations> + <eOperations name="isAlf" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="true"/> + </eAnnotations> + </eOperations> + <eOperations name="asAlf" eType="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element"/> + </eAnnotations> + </eOperations> + <eOperations name="asMember" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.element.oclIsKindOf(Member) then self.element.oclAsType(Member)
 else if self.element.oclIsKindOf(MemberDefinition) then
 let container = self.element.oclContainer() in
 if container.oclIsKindOf(Member) then container.oclAsType(Member)
 else null
 endif
 else null
 endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.element.oclIsKindOf(MemberDefinition) and
 self.element.oclAsType(MemberDefinition).isSameKindAs(member)"/> + </eAnnotations> + <eParameters name="member" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="isNamedElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(MemberDefinition)"/> + </eAnnotations> + </eOperations> + <eOperations name="isNamespace" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(NamespaceDefinition)"/> + </eAnnotations> + </eOperations> + <eOperations name="isNamespaceFor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.isNamespace() and self.stubFor(unit) <> null"/> + </eAnnotations> + <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/> + </eOperations> + <eOperations name="isModelNamespace" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(ModelNamespace)"/> + </eAnnotations> + </eOperations> + <eOperations name="isPackage" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(PackageDefinition)"/> + </eAnnotations> + </eOperations> + <eOperations name="isProfile" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + </eOperations> + <eOperations name="isPackageableElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.element.oclIsKindOf(Member) and
 not self.element.oclIsKindOf(FormalParameter) and
 not self.element.oclIsKindOf(ClassifierTemplateParameter) and
 not self.isFeature()"/> + </eAnnotations> + </eOperations> + <eOperations name="isClassifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(ClassifierDefinition)"/> + </eAnnotations> + </eOperations> + <eOperations name="isAbstractClassifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.isAbstractClassifier()
 else
 self.isClassifier() and 
 self.element.oclAsType(ClassifierDefinition).isAbstract
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="isAssociation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.isAssociation()
 else
 self.element.oclIsKindOf(AssociationDefinition)
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="isDataType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.isDataType()
 else
 self.element.oclIsKindOf(DataTypeDefinition)
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="isClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.isClass()
 else
 self.element.oclIsKindOf(ClassDefinition)
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="isActiveClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.isActiveClass()
 else
 self.element.oclIsKindOf(ActiveClassDefinition)
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="isSignal" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.isSignal()
 else
 self.element.oclIsKindOf(SignalDefinition) or
 self.element.oclIsKindOf(SignalReceptionDefinition)
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="isEnumeration" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.isEnumeration()
 else
 self.element.oclIsKindOf(EnumerationDefinition)
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="isBehavior" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.isBehavior()
 else
 self.element.oclIsKindOf(ActivityDefinition)
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="isActivity" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.isActivity()
 else
 self.element.oclIsKindOf(ActivityDefinition)
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="isMethod" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.isActivity() and 
 let stub = self.stub() in
 -- The case of the stub being a property covers the case of an
 -- activity used in the default value of an external property.
 stub <> null and (stub.isOperation() or stub.isProperty())"/> + </eAnnotations> + </eOperations> + <eOperations name="isPrimitiveType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + </eOperations> + <eOperations name="isReception" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.isReception()
 else
 self.element.oclIsKindOf(ReceptionDefinition) or
 self.element.oclIsKindOf(SignalReceptionDefinition)
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="isOperation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(OperationDefinition)"/> + </eAnnotations> + </eOperations> + <eOperations name="isConstructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.isOperation() and
 self.element.oclAsType(OperationDefinition).isConstructor"/> + </eAnnotations> + </eOperations> + <eOperations name="isDestructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.isOperation() and
 self.element.oclAsType(OperationDefinition).isDestructor"/> + </eAnnotations> + </eOperations> + <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.element.oclIsKindOf(MemberDefinition) and 
 self.element.oclAsType(MemberDefinition).isFeature"/> + </eAnnotations> + </eOperations> + <eOperations name="isProperty" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.element.oclIsKindOf(PropertyDefinition)"/> + </eAnnotations> + </eOperations> + <eOperations name="isAssociationEnd" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.isProperty() and
 self.asMember().namespace.oclIsKindOf(AssociationDefinition)"/> + </eAnnotations> + </eOperations> + <eOperations name="isParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.element.oclIsKindOf(FormalParameter)"/> + </eAnnotations> + </eOperations> + <eOperations name="isTemplate" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.element.oclIsKindOf(MemberDefinition) and
 self.element.oclAsType(MemberDefinition).isTemplate()"/> + </eAnnotations> + </eOperations> + <eOperations name="isTemplateParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(ClassifierTemplateParameter)"/> + </eAnnotations> + </eOperations> + <eOperations name="isClassifierTemplateParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(ClassifierTemplateParameter)"/> + </eAnnotations> + </eOperations> + <eOperations name="isParameteredElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(ClassifierTemplateParameter)"/> + </eAnnotations> + </eOperations> + <eOperations name="isTemplateBinding" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(BoundClassifier)"/> + </eAnnotations> + </eOperations> + <eOperations name="isStereotype" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + </eOperations> + <eOperations name="isEnumerationLiteral" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(EnumerationLiteralName)"/> + </eAnnotations> + </eOperations> + <eOperations name="isLoopVariable" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(LoopVariableDefinition)"/> + </eAnnotations> + </eOperations> + <eOperations name="isAnnotation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(Annotation)"/> + </eAnnotations> + </eOperations> + <eOperations name="isSequenceExpansionExpression" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(SequenceExpansionExpression)"/> + </eAnnotations> + </eOperations> + <eOperations name="isAnyType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(AnyType)"/> + </eAnnotations> + </eOperations> + <eOperations name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.isNamedElement() then null
 else self.element.oclAsType(MemberDefinition).actualName()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="visibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let member = self.asMember() in
 if member = null then null
 else member.visibility()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="ownedMembers" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isNamespace() then 
 self.element.oclAsType(NamespaceDefinition).ownedMember.toReference()->
 asOrderedSet()
 else
 OrderedSet(ElementReference){}
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="members" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isNamespace() then 
 self.element.oclAsType(NamespaceDefinition).member.toReference()->
 asOrderedSet()
 else 
 OrderedSet(ElementReference){}
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="nestedClassifiers" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
		if not self.element.oclIsKindOf(ModelNamespace) then OrderedSet(ElementReference){}
		else
			self.element.oclAsType(ModelNamespace).context().nestedClassifiers()
		endif"/> + </eAnnotations> + </eOperations> + <eOperations name="opposite" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.isProperty() then null
 else
 let member = self.asMember() in
 if member = null then null
 else
 let owner = member.owner() in
 if not owner.oclIsKindOf(AssociationDefinition) then null
 else
 let ends = owner.oclAsType(AssociationDefinition).ownedMember in
 if ends->size() <> 2 then null
 else ends->any(e | e <> member).oclAsType(Member).toReference()
 endif
 endif
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="signal" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let element = self.element in
 if element.oclIsKindOf(ReceptionDefinition) then
 element.oclAsType(ReceptionDefinition).signal
 else if element.oclIsKindOf(SignalReceptionDefinition) then
 element.oclAsType(SignalReceptionDefinition).toReference()
 else
 null
 endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="parameters" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.parameters()
 else if self.isBehavior() or self.isOperation() then
 self.element.oclAsType(NamespaceDefinition).parameters().toReference()->asOrderedSet()
 else
 OrderedSet(ElementReference){}
 endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="returnParameter" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.returnParameter()
 else if self.isBehavior() or self.isOperation() then
 let returnParameter = self.element.oclAsType(NamespaceDefinition).returnParameter() in
 if returnParameter = null then
 null
 else
 returnParameter.toReference()
 endif
 else
 null
 endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="specification" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isOperation() then 
 self
 else if self.isBehavior() then
 self.element.oclAsType(NamespaceDefinition).stub()
 else 
 null
 endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="redefinedOperaions" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.isOperation() then Set(ElementReference){}
 else self.oclAsType(OperationDefinition).redefinedOperation
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="namespace" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isModelNamespace() then
 	self.element.oclAsType(ModelNamespace).context().namespace()
 else if self.element.oclIsKindOf(MemberDefinition) then
 self.element.oclAsType(MemberDefinition).outerScope()
 else
 null
 endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="template" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isTemplateBinding() then
 self.element.oclAsType(BoundClassifier).template
 else
 null
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="templateParameters" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isTemplate() then
 self.element.oclAsType(ClassifierDefinition).templateParameters().toReference()->asOrderedSet()
 else
 OrderedSet(ElementReference){}
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="parameteredElements" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.templateParameters()"/> + </eAnnotations> + </eOperations> + <eOperations name="templateActuals" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isTemplateBinding() then
 self.element.oclAsType(BoundClassifier).actual->collect (actual |
 if actual.isAnyType() then null else actual endif
 )->asOrderedSet()
 else
 OrderedSet(ElementReference){}
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="direction" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isParameter() then
 self.element.oclAsType(FormalParameter).direction
 else
 null
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="association" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.isAssociationEnd() then null
 else self.namespace()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isProperty() then
 self.element.oclAsType(PropertyDefinition).typePart.type
 else if self.isParameter() then
 self.element.oclAsType(FormalParameter).typePart.type
 else if self.isBehavior() or self.isOperation() then
 let returnParameter = self.returnParameter() in
 if returnParameter = null then null
 else returnParameter.type()
 endif
 else if self.isEnumerationLiteral() then
 self.namespace()
 else
 null
 endif endif endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isProperty() then
 self.element.oclAsType(PropertyDefinition).typePart.lower
 else if self.isParameter() then
 self.element.oclAsType(FormalParameter).typePart.lower
 else
 1
 endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isProperty() then
 self.element.oclAsType(PropertyDefinition).typePart.upper
 else if self.isParameter() then
 self.element.oclAsType(FormalParameter).typePart.upper
 else
 1
 endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="isOrdered" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isProperty() then
 self.element.oclAsType(PropertyDefinition).typePart.isOrdered()
 else if self.isParameter() then
 self.element.oclAsType(FormalParameter).typePart.isOrdered()
 else
 false
 endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="isNonunique" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isProperty() then
 self.element.oclAsType(PropertyDefinition).typePart.isNonunique()
 else if self.isParameter() then
 self.element.oclAsType(FormalParameter).typePart.isNonunique()
 else
 false
 endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="parents" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isClassifier() then
 self.element.oclAsType(ClassifierDefinition).specializationReferent->asSet()
 else
 Set(ElementReference){}
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="allParents" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isClassifier() then
 self.element.removeDuplicateElements(
 self->closure(parents())->excluding(self)->asBag()
 )->asSet()
 else
 Set(ElementReference){}
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="classifierBehavior" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.isActiveClass() then null
 else
 let classifierBehavior = 
 self.element.oclAsType(ActiveClassDefinition).classifierBehavior in
 if classifierBehavior = null then null
 else classifierBehavior.toReference()
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.isNamespace() then Set(ElementReference){}
 else self.element.oclAsType(NamespaceDefinition).appliedProfiles()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="activeClass" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.isActivity() then null
 else
 	let stub = self.stub() in
 		-- This will also work is the stub is external.
	 	if stub <> null then stub.activeClass()
	 	else
	 	let namespace = self.namespace() in
			 if namespace = null or 
			 not self.equals(namespace.classifierBehavior()) then null
			 else namespace
			 endif
			 endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="context" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
		if not self.isActivity() then null
		else
			let stub = self.stub() in
			let namespace = if stub = null then self.namespace() else stub.namespace() endif in
				if namespace = null or 
					namespace.nestedClassifiers()->exists(name() = self.name()) then null

				-- Note: This can only happen for a namespace that is an
				-- external element reference.
				else if namespace.isBehavior() then namespace.context()

				else namespace
				endif endif
		endif"/> + </eAnnotations> + </eOperations> + <eOperations name="conformsTo" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 other = null or
 self.isClassifier() and (self.equals(other) or
 self.element.oclAsType(ClassifierDefinition).
 specializationReferent->exists(conformsTo(other)))"/> + </eAnnotations> + <eParameters name="other" eType="#//ElementReference"/> + </eOperations> + <eOperations name="equals" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
		other <> null and (other.asAlf() = self.element or 
			self.isModelNamespace() and other.asUml() = self.element.oclAsType(ModelNamespace).context().asUml())"/> + </eAnnotations> + <eParameters name="other" eType="#//ElementReference"/> + </eOperations> + <eOperations name="copy" lowerBound="1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="InternalElementReference{element = self.element}"/> + </eAnnotations> + </eOperations> + <eOperations name="modelScope" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.isNamespace() then null
 else self.element.oclAsType(NamespaceDefinition).modelScope()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="resolvePathName" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.element.oclIsKindOf(ModelNamespace) then
 Set(ElementReference){}
 else
 self.element.oclAsType(ModelNamespace).resolvePathName(pathName)
 endif"/> + </eAnnotations> + <eParameters name="pathName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="resolveInScope" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let template = self.template() in
 if template <> null then
 template.resolveInScope(name)
 else if not self.isNamespace() then Set(ElementReference){}
 else 
 self.element.oclAsType(NamespaceDefinition).resolveInScope(name).
 toReference()->asSet()
 endif endif"/> + </eAnnotations> + <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="resolveStereotypeName" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="Set(ElementReference){}"/> + </eAnnotations> + <eParameters name="stereotypeName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="stub" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.isNamespace() then null
 else self.element.oclAsType(NamespaceDefinition).stub()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="stubFor" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.isNamespace() then null
 else self.element.oclAsType(NamespaceDefinition).stubFor(unit)
 endif"/> + </eAnnotations> + <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="element" lowerBound="1" + eType="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The Alf syntax element that represents the referenced model element."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ExternalElementReference" eSuperTypes="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A direct reference to a UML model element."/> + </eAnnotations> + <eOperations name="isUml" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="true"/> + </eAnnotations> + </eOperations> + <eOperations name="asUml" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element"/> + </eAnnotations> + </eOperations> + <eOperations name="asMember" lowerBound="1" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.isNamedElement() then null
 else
 Member{
 visibility = self.visibility(), 
 definition = ImportedMember{name = self.name(), referent = self}
 }
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if member.isAlf() then member.isSameKindAs(self)
 else
 let other = member.asUml().oclAsType(uml::Element) in
 self.element.oclIsKindOf(other.oclType()) or
 other.oclIsKindOf(self.element.oclType())
 endif"/> + </eAnnotations> + <eParameters name="member" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="isNamedElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(uml::NamedElement)"/> + </eAnnotations> + </eOperations> + <eOperations name="isNamespace" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(uml::Namespace)"/> + </eAnnotations> + </eOperations> + <eOperations name="isNamespaceFor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.isNamespace()"/> + </eAnnotations> + <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/> + </eOperations> + <eOperations name="isModelNamespace" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + </eOperations> + <eOperations name="isPackage" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(uml::Package)"/> + </eAnnotations> + </eOperations> + <eOperations name="isProfile" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(uml::Profile)"/> + </eAnnotations> + </eOperations> + <eOperations name="isPackageableElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(uml::PackageableElement)"/> + </eAnnotations> + </eOperations> + <eOperations name="isClassifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(uml::Classifier)"/> + </eAnnotations> + </eOperations> + <eOperations name="isAbstractClassifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.isClassifier() and self.element.oclAsType(uml::Classifier).isAbstract"/> + </eAnnotations> + </eOperations> + <eOperations name="isAssociation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(uml::Association)"/> + </eAnnotations> + </eOperations> + <eOperations name="isDataType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(uml::DataType)"/> + </eAnnotations> + </eOperations> + <eOperations name="isClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(uml::Class) and not self.element.oclIsKindOf(uml::Behavior)"/> + </eAnnotations> + </eOperations> + <eOperations name="isActiveClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.isClass() and self.element.oclAsType(uml::Class).isActive"/> + </eAnnotations> + </eOperations> + <eOperations name="isSignal" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(uml::Signal)"/> + </eAnnotations> + </eOperations> + <eOperations name="isEnumeration" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(uml::Enumeration)"/> + </eAnnotations> + </eOperations> + <eOperations name="isBehavior" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(uml::Behavior)"/> + </eAnnotations> + </eOperations> + <eOperations name="isActivity" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(uml::Activity)"/> + </eAnnotations> + </eOperations> + <eOperations name="isMethod" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.isBehavior() and
 self.element.oclAsType(uml::Behavior).specification <> null"/> + </eAnnotations> + </eOperations> + <eOperations name="isPrimitiveType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(uml::PrimitiveType)"/> + </eAnnotations> + </eOperations> + <eOperations name="isReception" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(uml::Reception)"/> + </eAnnotations> + </eOperations> + <eOperations name="isOperation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(uml::Operation)"/> + </eAnnotations> + </eOperations> + <eOperations name="isConstructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.isOperation() and 
 self.element.oclAsType(uml::Element).
 getAppliedStereotype('StandardProfile::Create') <> null"/> + </eAnnotations> + </eOperations> + <eOperations name="isDestructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.isOperation() and 
 self.element.oclAsType(uml::Element).
 getAppliedStereotype('StandardProfile::Destroy') <> null"/> + </eAnnotations> + </eOperations> + <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(uml::Feature)"/> + </eAnnotations> + </eOperations> + <eOperations name="isProperty" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(uml::Property)"/> + </eAnnotations> + </eOperations> + <eOperations name="isAssociationEnd" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.isProperty() and 
 -- Note: Only association-owned ends are considered as association ends.
 self.element.oclAsType(uml::Property).owningAssociation <> null"/> + </eAnnotations> + </eOperations> + <eOperations name="isParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(uml::Parameter)"/> + </eAnnotations> + </eOperations> + <eOperations name="isTemplate" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.element.oclIsKindOf(uml::TemplateableElement) and
 self.element.oclAsType(uml::TemplateableElement).isTemplate()"/> + </eAnnotations> + </eOperations> + <eOperations name="isTemplateParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(uml::TemplateParameter)"/> + </eAnnotations> + </eOperations> + <eOperations name="isClassifierTemplateParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(uml::ClassifierTemplateParameter)"/> + </eAnnotations> + </eOperations> + <eOperations name="isParameteredElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.element.oclIsKindOf(uml::Classifier) and
 self.element.oclAsType(uml::Classifier).templateParameter <> null"/> + </eAnnotations> + </eOperations> + <eOperations name="isTemplateBinding" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.umlTemplateBinding()->notEmpty()"/> + </eAnnotations> + </eOperations> + <eOperations name="isStereotype" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(uml::Stereotype)"/> + </eAnnotations> + </eOperations> + <eOperations name="isEnumerationLiteral" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.oclIsKindOf(uml::EnumerationLiteral)"/> + </eAnnotations> + </eOperations> + <eOperations name="isLoopVariable" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + </eOperations> + <eOperations name="isAnnotation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + </eOperations> + <eOperations name="isSequenceExpansionExpression" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + </eOperations> + <eOperations name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if alias <> null then
 alias
 else if self.element.oclIsKindOf(uml::NamedElement) then 
 self.element.oclAsType(uml::NamedElement).name
 else if self.element.oclIsKindOf(uml::TemplateParameter) then
 let parameteredElement = 
 self.element.oclAsType(uml::TemplateParameter).parameteredElement 
 in
 if parameteredElement.oclIsKindOf(uml::NamedElement) then
 parameteredElement.oclAsType(uml::NamedElement).name
 else
 null
 endif
 else
 null
 endif endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="visibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.element.oclIsKindOf(uml::NamedElement) then ''
 else
 let visibility = self.element.oclAsType(uml::NamedElement).visibility in 
 if visibility = null then null
 else if visibility = uml::VisibilityKind::public then 'public'
 else if visibility = uml::VisibilityKind::protected then 'protected'
 else if visibility = uml::VisibilityKind::private then 'private'
 else ''
 endif endif endif endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="ownedMembers" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.isNamespace() then OrderedSet(ElementReference){}
 else 
 self.element.oclAsType(uml::Namespace).ownedMember->
 collect(m | ExternalElementReference{element = m})->asOrderedSet()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="enumerationMembers" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="EXTERNAL
(Workaround for a seeming OCL bug "unboxing" enumeration literals.)"/> + </eAnnotations> + </eOperations> + <eOperations name="members" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.isNamespace() then OrderedSet(ElementReference){}
 else
 let namespace = self.element.oclAsType(uml::Namespace) in
 let members = 
 if self.isEnumeration() then
 self.enumerationMembers()
 else
	 namespace.member-> 
	 collect(m | 
	 let names = namespace.getNamesOfMember(m) in
	 if names->isEmpty() then
	 Bag{ExternalElementReference{element = m}}
	 else
	 names->collect(name | 
	 ExternalElementReference{alias = name, element = m}
	 )
	 endif
	 )
 endif->asOrderedSet() in
 let additionalMembers = self.additionalMembers() in
 additionalMembers->appendAll(members)->
 appendAll(self.templateParameters())
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="additionalMembers" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.isClassifier() then OrderedSet(ElementReference){}
 else
 -- This will collect the inherited members from the effective 
 -- expanded bound elements of each parent that is a template binding. 
 self.parents()->select(isTemplateBinding())->asOrderedSet()->
 collect(binding |
 binding.oclAsType(ExternalElementReference).inherit(
 binding.template().bind(binding.templateActuals()->asSequence()).
 members()->select(visibility() <> 'private')
 )
 )->asOrderedSet()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="inherit" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 -- NOTE: This is used to reject operations that would be inherited
 -- via a template binding, in the case that the template binding itself
 -- has an operation that should hide the inheritable operation.
 -- This is used in the Alf standard library implementation as a
 -- substitute for redefinition of operations from template instantiation. 
 let ownedOperations = self.ownedMembers()->select(isOperation()) in
 inheritableMembers->reject(inheritableMember |
 ownedOperations->exists(not isDistinguishableFrom(inheritableMember))
 )"/> + </eAnnotations> + <eParameters name="inheritableMembers" upperBound="-1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="nestedClassifiers" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
		if not self.element.oclIsKindOf(uml::Class) then OrderedSet(ElementReference){}
		else
	 self.element.oclAsType(uml::Class).nestedClassifier->collect(e |
	 ExternalElementReference{element = e}
	 )->asOrderedSet()
	 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="properties" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.isClassifier() then OrderedSet(ElementReference){}
 else if self.isAssociation() then 
 	self.members()->select(isProperty())
 else
 self.element.oclAsType(uml::Classifier).allAttributes()->
 collect(a | ExternalElementReference{element = a})->
 asOrderedSet()
 endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="associationEnds" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
		if not self.isAssociation() then OrderedSet(ElementReference){}
		else 
			self.element.oclAsType(uml::Association).ownedEnd->
 collect(e | ExternalElementReference{element = e})->
 asOrderedSet()
		endif"/> + </eAnnotations> + </eOperations> + <eOperations name="opposite" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
-- if not self.isProperty() then null
-- else self.element.oclAsType(uml::Property).opposite()
-- endif;
 if not self.isAssociationEnd() then null
 else
 let property = self.element.oclAsType(uml::Property) in
 let association = property.association in
 let ends = association.memberEnd in
 if ends->size() <> 2 then null
 else ExternalElementReference{element= ends->any(e | e <> property)}
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="signal" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.isReception() then
 null
 else
 ExternalElementReference{
 element = self.element.oclAsType(uml::Reception).signal
 }
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="namespace" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isParameteredElement() then
 ExternalElementReference{
 element = self.element.oclAsType(uml::ParameterableElement).
 templateParameter.signature.template
 }
 else if self.element.oclIsKindOf(uml::NamedElement) then
 let namespace = self.element.oclAsType(uml::NamedElement).namespace in
 if namespace = null then
 null
 else
 ExternalElementReference{element = namespace}
 endif
 else
 null
 endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="ownedParameters" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
				let ownedParameters = 
	 if self.isBehavior() then
	 self.element.oclAsType(uml::Behavior).ownedParameter
	 else if self.isOperation() then
	 self.element.oclAsType(uml::Operation).ownedParameter
	 else
	 OrderedSet{}
	 endif endif
	 in
	 	ownedParameters->
	 		collect(parameter | ExternalElementReference{element = parameter})->
	 		asOrderedSet()"/> + </eAnnotations> + </eOperations> + <eOperations name="parameters" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.ownedParameters()->reject(direction() = 'return')"/> + </eAnnotations> + </eOperations> + <eOperations name="returnParameter" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let returnParameters = self.ownedParameters()->select(direction() = 'return') 
 in
 if returnParameters->isEmpty() then
 null
 else
 returnParameters->any(true)
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="specification" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isOperation() then 
 self
 else if self.isBehavior() then
 let specification = self.element.oclAsType(uml::Behavior).specification in
 if specification = null then null
 else ExternalElementReference{element = specification}
 endif
 else 
 null
 endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="redefinedOperations" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.isOperation() then Set(ElementReference){}
 else
 self.element.oclAsType(uml::Operation).redefinedOperation->
 collect(op | ExternalElementReference{element = op})->asSet()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="template" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let templateBinding = self.umlTemplateBinding() in
 if templateBinding = null or 
 templateBinding.asUml().oclAsType(uml::TemplateBinding).signature = null then
 null
 else
 ExternalElementReference{
 element = templateBinding.asUml().oclAsType(uml::TemplateBinding).signature.template
 }
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="umlTemplateBinding" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.element.oclIsKindOf(uml::TemplateableElement) then
 let templateBindings = 
 self.element.oclAsType(uml::TemplateableElement).templateBinding 
 in
 if templateBindings->notEmpty() then
 ExternalElementReference{element = templateBindings->any(true)}
 else if self.element.oclIsKindOf(uml::NamedElement) then
 let templateBindings =
 self.element.oclAsType(uml::NamedElement).clientDependency->select(
 oclIsKindOf(uml::Realization) and
 supplier->size() = 1 and
 supplier->forAll(oclIsKindOf(uml::TemplateableElement))
 )->collect(
 supplier.oclAsType(uml::TemplateableElement).templateBinding
 )
 in
 if templateBindings->isEmpty() then
 null
 else
 ExternalElementReference{element = templateBindings->any(true)}
 endif
 else
 null
 endif endif
 else
 null
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="templateParameters" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isTemplate() then
 self.element.oclAsType(uml::TemplateableElement).
 ownedTemplateSignature.parameter->
 collect(p | ExternalElementReference{element = p})->asOrderedSet()
 else
 OrderedSet(ElementReference){}
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="parameteredElements" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isTemplate() then
 self.element.oclAsType(uml::TemplateableElement).
 ownedTemplateSignature.parameter.parameteredElement->
 collect(p | ExternalElementReference{element = p})->asOrderedSet()
 else
 OrderedSet(ElementReference){}
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="templateActuals" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let t = self.umlTemplateBinding() in
 if t = null then
 OrderedSet(ElementReference){}
 else
 let templateBinding = t.asUml().oclAsType(uml::TemplateBinding) in
 let parameterSubstitution = templateBinding.parameterSubstitution in
 templateBinding.signature.parameter->collect(parameter |
 parameterSubstitution->select(formal = parameter).actual
 )->collect(actual |
 ExternalElementReference{element = actual}
 )->asOrderedSet()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="direction" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isParameter() then
 let direction = self.element.oclAsType(uml::Parameter).direction in
 if direction = uml::ParameterDirectionKind::_in then 'in'
 else if direction = uml::ParameterDirectionKind::_in then 'in'
 else if direction = uml::ParameterDirectionKind::out then 'out'
 else if direction = uml::ParameterDirectionKind::inout then 'inout'
 else if direction = uml::ParameterDirectionKind::return then 'return'
 else null
 endif endif endif endif endif
 else
 null
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="association" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.isAssociationEnd() then null
 -- Note: Only owned ends are treated as association ends.
 else ExternalElementReference{element = self.element.oclAsType(uml::Property).owningAssociation}
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isBehavior() then
 let returnParameter = self.returnParameter() in
 if returnParameter = null then null
 else returnParameter.type()
 endif
 else
 let type =
 if self.element.oclIsKindOf(uml::TypedElement) then
 self.element.oclAsType(uml::TypedElement).type
 else if self.isOperation() then
 self.element.oclAsType(uml::Operation).type
 else if self.isEnumerationLiteral() then
 self.element.oclAsType(uml::EnumerationLiteral).enumeration
 else
 null
 endif endif endif
 in
 if type = null then null 
 else ExternalElementReference{element = type} endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.element.oclIsKindOf(uml::MultiplicityElement) then
 self.element.oclAsType(uml::MultiplicityElement).lower
 else
 1
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.element.oclIsKindOf(uml::MultiplicityElement) then
 self.element.oclAsType(uml::MultiplicityElement).upper.oclAsType(Integer)
 else
 1
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="isOrdered" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.element.oclIsKindOf(uml::MultiplicityElement) then
 self.element.oclAsType(uml::MultiplicityElement).isOrdered
 else
 false
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="isNonunique" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.element.oclIsKindOf(uml::MultiplicityElement) then
 not self.element.oclAsType(uml::MultiplicityElement).isUnique
 else
 false
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="parents" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isClassifier() then
 self.element.oclAsType(uml::Classifier).general->
 collect(g | ExternalElementReference{element = g})->asSet()
 else if self.element.oclIsKindOf(uml::ClassifierTemplateParameter) then
 self.element.oclAsType(uml::ClassifierTemplateParameter).constrainingClassifier->
 collect(c | ExternalElementReference{element = c})->asSet()
 else
 Set(ElementReference){}
 endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="allParents" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let allParents = 
 if self.isClassifier() then 
 self.element.oclAsType(uml::Classifier).allParents()->asSet()
 else if self.element.oclIsKindOf(uml::ClassifierTemplateParameter) then
 let parents = 
 self.element.oclAsType(uml::ClassifierTemplateParameter).
 constrainingClassifier 
 in
 parents->union(parents.allParents())->asSet()
 else
 Set(uml::Classifier){}
 endif endif
 in
 allParents->collect(p | ExternalElementReference{element = p})->asSet()"/> + </eAnnotations> + </eOperations> + <eOperations name="classifierBehavior" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.element.oclIsKindOf(uml::BehavioredClassifier) then null
 else
 let classifierBehavior = 
 self.element.oclAsType(uml::BehavioredClassifier).classifierBehavior in
 if classifierBehavior = null then null
 else ExternalElementReference{element = classifierBehavior}
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.isNamespace() then Set(ElementReference){}
 else
 self.element.oclAsType(uml::Namespace).getNearestPackage().
 getAllAppliedProfiles()->
 collect(e | ExternalElementReference{element = e})->asSet()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="activeClass" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.isBehavior() then null
 else
 let context = self.element.oclAsType(uml::Behavior).context in
 	if context <> null then ExternalElementReference{element = context}
 	else if self.element.oclAsType(uml::Behavior).isActive then self
 	else null
 	endif endif 
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="context" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
		if not self.isBehavior() then null
		else
			let context = self.element.oclAsType(uml::Behavior).context in
				if context = null then self 
				else ExternalElementReference{element = context} 
				endif
		endif"/> + </eAnnotations> + </eOperations> + <eOperations name="conformsTo" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 other = null or
 self.isClassifier() and 
 let otherType = other.asUml() in
 otherType <> null and otherType.oclIsKindOf(uml::Type) and
 self.element.oclAsType(uml::Classifier).conformsTo(otherType.oclAsType(uml::Type))"/> + </eAnnotations> + <eParameters name="other" eType="#//ElementReference"/> + </eOperations> + <eOperations name="equals" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 other <> null and 
 	(other.asUml() = self.element and other.name() = self.name() or
 	 other.isModelNamespace() and other.asAlf().oclAsType(ModelNamespace).context().asUml() = self.element)"/> + </eAnnotations> + <eParameters name="other" eType="#//ElementReference"/> + </eOperations> + <eOperations name="copy" lowerBound="1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="ExternalElementReference{element = self.element}"/> + </eAnnotations> + </eOperations> + <eOperations name="modelScope" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isNamespace() then self
 else null
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="resolvePathName" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="ExternalElementReference_resolvePathName(pathName)"/> + </eAnnotations> + <eParameters name="pathName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="ExternalElementReference_resolvePathName" ordered="false" upperBound="-1" + eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="EXTERNAL"/> + </eAnnotations> + <eParameters name="pathName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="resolveInScope" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.members()->select(name() = name)->asSet()"/> + </eAnnotations> + <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="resolveStereotype" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isProfile() then
 self.element.oclAsType(uml::Package).ownedElement->
 select(oclIsKindOf(uml::Stereotype) and oclAsType(uml::Stereotype).name = stereotypeName)->
 collect(e | ExternalElementReference{element = e})->asSet()
 else
 Set(ElementReference){}
 endif"/> + </eAnnotations> + <eParameters name="stereotypeName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="stub" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="null"/> + </eAnnotations> + </eOperations> + <eOperations name="stubFor" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let definition = unit.definition in
 if not definition.oclIsKindOf(ActivityDefinition) then null
 else
 let name = definition.actualName() in
 let referents = self.ownedMembers()->select(
 isOperation() and (name = name() or name.startsWith(name() + '$method$')) or
 isActiveBehavior() and (name = name() or name.startsWith(name() + '$behavior$')) or
 isProperty() and name.startsWith(name() + '$defaultValue$') 
 ) in
 if referents->isEmpty() then null
 else referents->any(true)
 endif
 endif"/> + </eAnnotations> + <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="element" lowerBound="1" + eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The referenced model element."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="alias" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The alias for the model element, if this is a reference to an imported
element with multiple names within a namespace."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ExternalEnumerationLiteralReference" + eSuperTypes="#//ExternalElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Workaround for apparent bug in Eclipse OCL handling of enumeration literals."/> + </eAnnotations> + <eOperations name="isNamedEement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="true"/> + </eAnnotations> + </eOperations> + <eOperations name="isClassifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + </eOperations> + <eOperations name="isParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + </eOperations> + <eOperations name="isEnumerationLiteral" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="true"/> + </eAnnotations> + </eOperations> + <eOperations name="ExternalEnumerationLiteralReference_visibility" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + <eOperations name="visibility" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="ExternalEnumerationLiteralReference_visibility()"/> + </eAnnotations> + </eOperations> + <eOperations name="ExternalEnumerationLiteralReference_type" lowerBound="1" eType="#//ElementReference"/> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="ExternalEnumerationLiteralReference_type()"/> + </eAnnotations> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="BoundElementReference" eSuperTypes="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A reference to an element as bound within a template instantiation."/> + </eAnnotations> + <eOperations name="isUml" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + </eOperations> + <eOperations name="isAlf" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="true"/> + </eAnnotations> + </eOperations> + <eOperations name="asUml" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="null"/> + </eAnnotations> + </eOperations> + <eOperations name="asAlf" eType="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.asMember()"/> + </eAnnotations> + </eOperations> + <eOperations name="asMember" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 Member{
 visibility = self.visibility(),
 definition = ImportedMember{
 name = self.name(),
 referent = self.referent
 }
 }"/> + </eAnnotations> + </eOperations> + <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isSameKindAs(member)"/> + </eAnnotations> + <eParameters name="member" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="isNamedElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="true"/> + </eAnnotations> + </eOperations> + <eOperations name="isNamespace" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isNamespace()"/> + </eAnnotations> + </eOperations> + <eOperations name="isNamespaceFor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/> + </eOperations> + <eOperations name="isModelNamespace" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + </eOperations> + <eOperations name="isPackage" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isPackage()"/> + </eAnnotations> + </eOperations> + <eOperations name="isProfile" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isProfile()"/> + </eAnnotations> + </eOperations> + <eOperations name="isPackageableElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isPackageableElement()"/> + </eAnnotations> + </eOperations> + <eOperations name="isClassifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isClassifier()"/> + </eAnnotations> + </eOperations> + <eOperations name="isAbstractClassifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isAbstractClassifier()"/> + </eAnnotations> + </eOperations> + <eOperations name="isAssociation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isAssociation()"/> + </eAnnotations> + </eOperations> + <eOperations name="isDataType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isDataType()"/> + </eAnnotations> + </eOperations> + <eOperations name="isClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isClass()"/> + </eAnnotations> + </eOperations> + <eOperations name="isActiveClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isActiveClass()"/> + </eAnnotations> + </eOperations> + <eOperations name="isSignal" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isSignal()"/> + </eAnnotations> + </eOperations> + <eOperations name="isEnumeration" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isEnumeration()"/> + </eAnnotations> + </eOperations> + <eOperations name="isBehavior" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isBehavior()"/> + </eAnnotations> + </eOperations> + <eOperations name="isActivity" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isActivity()"/> + </eAnnotations> + </eOperations> + <eOperations name="isMethod" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isMethod()"/> + </eAnnotations> + </eOperations> + <eOperations name="isPrimitiveType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isPrimitiveType()"/> + </eAnnotations> + </eOperations> + <eOperations name="isReception" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isReception()"/> + </eAnnotations> + </eOperations> + <eOperations name="isOperation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isOperation()"/> + </eAnnotations> + </eOperations> + <eOperations name="isConstructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isConstructor()"/> + </eAnnotations> + </eOperations> + <eOperations name="isDestructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isDestructor()"/> + </eAnnotations> + </eOperations> + <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isFeature()"/> + </eAnnotations> + </eOperations> + <eOperations name="isProperty" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isProperty()"/> + </eAnnotations> + </eOperations> + <eOperations name="isAssociationEnd" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isAssociationEnd()"/> + </eAnnotations> + </eOperations> + <eOperations name="isParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isParameter()"/> + </eAnnotations> + </eOperations> + <eOperations name="isTemplate" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isTemplateBinding() then
 self.templateBinding.isTemplate()
 else
 self.referent.isTemplate()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="isTemplateParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + </eOperations> + <eOperations name="isClassifierTemplateParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + </eOperations> + <eOperations name="isParameteredElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + </eOperations> + <eOperations name="isStereotype" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isStereotype()"/> + </eAnnotations> + </eOperations> + <eOperations name="isEnumerationLiteral" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isEnumerationLiteral()"/> + </eAnnotations> + </eOperations> + <eOperations name="isLoopVariable" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + </eOperations> + <eOperations name="isAnnotation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + </eOperations> + <eOperations name="isSequenceExpansionExpression" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + </eOperations> + <eOperations name="isDistinguishableFrom" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isDistinguishableFrom(other)"/> + </eAnnotations> + <eParameters name="other" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.name()"/> + </eAnnotations> + </eOperations> + <eOperations name="visibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.visibility()"/> + </eAnnotations> + </eOperations> + <eOperations name="ownedMembers" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.boundReferencesTo(
 self.referent.ownedMembers()->reject(isTemplateParameter())
 )->asOrderedSet()"/> + </eAnnotations> + </eOperations> + <eOperations name="members" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.boundReferencesTo(
 self.referent.members()->reject(isTemplateParameter())
 )->asOrderedSet()"/> + </eAnnotations> + </eOperations> + <eOperations name="nestedClassifiers" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.boundReferencesTo(self.referent.nestedClassifiers())->asOrderedSet()"/> + </eAnnotations> + </eOperations> + <eOperations name="properties" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.boundReferencesTo(self.referent.properties())->asOrderedSet()"/> + </eAnnotations> + </eOperations> + <eOperations name="associationEnds" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.boundReferencesTo(self.referent.associationEnds())->asOrderedSet()"/> + </eAnnotations> + </eOperations> + <eOperations name="opposite" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.boundReferenceTo(self.referent.opposite())"/> + </eAnnotations> + </eOperations> + <eOperations name="signal" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.boundReferenceTo(self.referent.signal())"/> + </eAnnotations> + </eOperations> + <eOperations name="parameters" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.boundReferencesTo(self.referent.parameters())->asOrderedSet()"/> + </eAnnotations> + </eOperations> + <eOperations name="returnParameter" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.boundReferenceTo(self.referent.returnParameter())"/> + </eAnnotations> + </eOperations> + <eOperations name="specification" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.boundReferenceTo(self.referent.specification())"/> + </eAnnotations> + </eOperations> + <eOperations name="redefinedOperations" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.redefinedOperations()"/> + </eAnnotations> + </eOperations> + <eOperations name="namespace" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.namespace <> null then self.namespace
 else
 let namespace = self.referent.namespace() in
 if self.template() <> null then namespace
 else self.boundReferenceTo(namespace)
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="template" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isTemplateBinding() then self.referent
 else null
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="templateParameters" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="OrderedSet(ElementReference){}"/> + </eAnnotations> + </eOperations> + <eOperations name="parameteredElements" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="OrderedSet(ElementReference){}"/> + </eAnnotations> + </eOperations> + <eOperations name="isTemplateBinding" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.templateBinding.template().equals(self.referent)"/> + </eAnnotations> + </eOperations> + <eOperations name="templateActuals" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isTemplateBinding() then self.templateBinding.templateActuals()
 else OrderedSet(ElementReference){}
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="direction" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.direction()"/> + </eAnnotations> + </eOperations> + <eOperations name="association" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isAssociationEnd() then self.namespace()
 else null
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let type = self.referent.type() in
 -- This handles the special case of a constructor of a template class
 -- that has that class directly as its return type, rather than a
 -- template binding for it.
 if self.isConstructor() and 
 self.templateBinding.template().equals(type) then
 type.bind(self.templateBinding.templateActuals()->asSequence())
 else
 self.boundReferenceTo(type)
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.lower()"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.upper()"/> + </eAnnotations> + </eOperations> + <eOperations name="isOrdered" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isOrdered()"/> + </eAnnotations> + </eOperations> + <eOperations name="isNonunique" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isNonunique()"/> + </eAnnotations> + </eOperations> + <eOperations name="parents" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.boundReferencesTo(self.referent.parents()->asOrderedSet())->asSet()"/> + </eAnnotations> + </eOperations> + <eOperations name="allParents" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.boundReferencesTo(self.referent.allParents()->asOrderedSet())->asSet()"/> + </eAnnotations> + </eOperations> + <eOperations name="classifierBehavior" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.classifierBehavior()"/> + </eAnnotations> + </eOperations> + <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.appliedProfiles()"/> + </eAnnotations> + </eOperations> + <eOperations name="reference" lowerBound="1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent"/> + </eAnnotations> + </eOperations> + <eOperations name="templateBinding" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.templateBinding"/> + </eAnnotations> + </eOperations> + <eOperations name="activeClass" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isActivity() then self
 else null
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="context" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.boundReferenceTo(self.referent.context())"/> + </eAnnotations> + </eOperations> + <eOperations name="isActiveBehavior" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.activeClass() <> null"/> + </eAnnotations> + </eOperations> + <eOperations name="conformsTo" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 other = null or
 self.isClassifier() and (self.equals(other) or
 self.parents()->exists(conformsTo(other)))"/> + </eAnnotations> + <eParameters name="other" eType="#//ElementReference"/> + </eOperations> + <eOperations name="equals" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 other <> null and
 other.oclIsKindOf(BoundElementReference) and
 self.templateBinding.equals(other.templateBinding()) and
 self.referent.equals(other.oclAsType(BoundElementReference).referent)"/> + </eAnnotations> + <eParameters name="other" eType="#//ElementReference"/> + </eOperations> + <eOperations name="copy" lowerBound="1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 BoundElementReference{
 referent = self.referent,
 namespace = self.namespace,
 templateBinding = self.templateBinding
 }"/> + </eAnnotations> + </eOperations> + <eOperations name="modelScope" lowerBound="1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.modelScope()"/> + </eAnnotations> + </eOperations> + <eOperations name="resolvePathName" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="Set(ElementReference){}"/> + </eAnnotations> + <eParameters name="pathName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="resolveInScope" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.members()->select(name() = name)->asSet()"/> + </eAnnotations> + <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="resolveStereotype" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="Set(ElementReference){}"/> + </eAnnotations> + <eParameters name="stereotypeName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="stub" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="null"/> + </eAnnotations> + </eOperations> + <eOperations name="stubFor" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="null"/> + </eAnnotations> + <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/> + </eOperations> + <eOperations name="boundReferenceTo" eType="#//ElementReference"> + <eParameters name="element" eType="#//ElementReference"/> + </eOperations> + <eOperations name="boundReferenceTo1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if element = null then null
 else if not element.isNamedElement() then element
 else if element.isTemplateBinding() then
 let actuals = self.boundReferencesTo(element.templateActuals()) in
 element.template().bind(actuals)
 else if element.isParameteredElement() then
 let parameters = 
 self.templateBinding.template().parameteredElements()->asSequence() in
 let i = element.positionIn(parameters) in
 if i > 0 then
 self.templateBinding.templateActuals()->at(i)
 else
 element
 endif
 else
 let elementTemplateBinding = element.templateBinding() in
 if elementTemplateBinding = null then 
 if self.referent.equals(element.namespace()) then
 BoundElementReference{
 referent = element,
 namespace = self,
 templateBinding = self.templateBinding
 }
 else if self.templateBinding.template().containsMember(element) then
 BoundElementReference{
 referent = element,
 namespace = null,
 templateBinding = self.templateBinding
 }
 else
 element
 endif endif
 else if not elementTemplateBinding.equals(self.templateBinding) then
 BoundElementReference{
 referent = element.reference(),
 namespace = null,
 templateBinding = 
 self.boundReferenceTo(elementTemplateBinding).templateBinding()
 }
 else
 element
 endif endif
 endif endif endif endif"/> + </eAnnotations> + <eParameters name="element" eType="#//ElementReference"/> + </eOperations> + <eOperations name="boundReferencesTo" unique="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="elements->collect(element | self.boundReferenceTo(element))"/> + </eAnnotations> + <eParameters name="elements" upperBound="-1" eType="#//ElementReference"/> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="referent" lowerBound="1" + eType="#//ElementReference"/> + <eStructuralFeatures xsi:type="ecore:EReference" name="namespace" eType="#//ElementReference"/> + <eStructuralFeatures xsi:type="ecore:EReference" name="templateBinding" lowerBound="1" + eType="#//ElementReference"/> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="DocumentedElement" abstract="true" eSuperTypes="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A syntax element that has documentation comments associated with it."/> + </eAnnotations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="documentation" ordered="false" + upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The documentation text to be associated with a syntax element. Each string is intended to be mapped to the body of a comment element in the target UML model."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="SequenceExpansionExpression" eSuperTypes="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression used to carry out one of a predefined set of operations over each of the elements in a sequence."/> + </eAnnotations> + <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.argument <> element then self.assignmentBefore
 else
 self.variableSource.update(self.assignmentsAfterPrimary())
 endif"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/> + </eOperations> + <eOperations name="assignmentsAfterPrimary" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let expression = self.primary.expression in
 if expression = null then self.assignmentBefore
 else expression.assignmentAfter
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isSelectOrReject then
 let expression = self.primary.expression in
 if expression = null then null else expression.type endif
 else if self.isCollectOrIterate then
 if self.argument = null then null else self.argument.type endif
 else if self.isForAllOrExistsOrOne or self.isIsUnique then
 self.booleanType()
 else
 null
 endif endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isSelectOrReject then 0
 else if self.isCollectOrIterate then
 let expression = self.primary.expression in
 if expression = null or self.argument = null then 0
 else expression.lower * self.argument.lower
 endif
 else if self.isForAllOrExistsOrOne or self.isIsUnique then 1
 else 0
 endif endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isSelectOrReject then -1
 else if self.isCollectOrIterate then
 let expression = self.primary.expression in
 if expression = null or self.argument = null then 0
 else 
 let upper1 = expression.upper in
 let upper2 = self.argument.upper in
 if upper1 = -1 or upper2 = -1 then -1 else upper1 * upper2 endif
 endif
 else if self.isForAllOrExistsOrOne or self.isIsUnique then 1
 else 0
 endif endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="sequenceExpansionExpressionVariableSourceDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assigned source for the expansion variable of a sequence expansion
expression is the expression itself. The type for the assignment is the
type of the primary expression of the sequence expansion expression and
the multiplicity lower and upper bounds are 1."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceExpansionExpressionAssignmentsBeforePrimary" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before the primary expression of a sequence expansion
expression are the same as the assignments before the sequence expansion
expression.
(See the assignmentsBefore(element) operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceExpansionExpressionAssignmentsBeforeArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before the argument expression of a sequence expansion
expression include those after the primary expression plus one for the
expansion variable.
(See the assignmentsBefore(element) operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceExpansionExpressionVariableName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The expansion variable name may not conflict with any name already
assigned after the primary expression."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 not self.assignmentsAfterPrimary()->exists(name = self.variable)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceExpansionExpressionAssignmentsAfterArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments after the argument expression of a sequence expansion
expression must be the same as the assignments before the argument
expression."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.argument <> null implies self.argument.newAssignments()->isEmpty()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="selectOrRejectExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A select or reject expression has the same type as its primary expression.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="selectOrRejectExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A select or reject expression has a multiplicity lower bound of 0.
(See the lower operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="selectOrRejectExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A select or reject expression has a multiplicity upper bound of *.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="selectOrRejectExpressionArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The argument of a select or reject expression must have type Boolean and
a multiplicity upper bound of 1."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 (self.isSelectOrReject and self.argument <> null) implies
 self.isBooleanType(self.argument.type) and
 self.argument.upper = 1"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="collectOrIterateExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A collect or iterate expression has the same type as its argument
expression.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="collectOrIterateExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A collect or iterate expression has a multiplicity lower bound that is
the product of the bounds of its primary and argument expressions.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="collectOrIterateExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A collect or iterate expression has a multiplicity upper bound that is
the product of the bounds of its primary and argument expressions.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="forAllOrExistsOrOneExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A forAll, exists or one expression has the type Boolean.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="forAllOrExistsOrOneExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A forAll, exists or one expression has a multiplicity lower bound of 1.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="forAllOrExistsOrOneExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A forAll, exists or one expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="forAllOrExistsOrOneExpressionArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The argument of a forAll, exists or one expression must have type Boolean
and a multiplicity upper bound of 1."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 (self.isForAllOrExistsOrOne and self.argument <> null) implies
 self.isBooleanType(self.argument.type) and
 self.argument.upper = 1"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="isUniqueExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An isUnique expression has the type Boolean.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="isUniqueExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An isUnique expression has a multiplicity lower bound of 1.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="isUniqueExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An isUnique expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="isUniqueExpressionExpressionArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The argument of an isUnique expression must have a multiplicity upper
bound of 1."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 (self.isIsUnique and self.argument <> null) implies 
 self.argument.upper = 1"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments after a sequence expansion expression are the same as
after its primary expression."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.assignmentsAfterPrimary()"/> + </eAnnotations> + </eOperations> + <eOperations name="sequenceExpansionExpressionOperation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.isSelectOrReject or self.isCollectOrIterate or 
 self.isForAllOrExistsOrOne or self.isIsUnique"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="operation" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The name of the operation to be carried out."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="variable" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The name of the expansion variable available as a local name within the
argument expression."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="variableSource" eType="#//AssignedSource" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assigned source for the expansion variable within the argument
expression. The source is actually the sequence expansion expression
itself."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let expression = self.primary.expression in
 AssignedSource{
 name = variable,
 source = self,
 type = if expression = null then null else expression.type endif,
 lower = 1,
 upper = 1
 }"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="argument" lowerBound="1" + eType="#//Expression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The argument expression. The exact form required for this expression
depends on which expansion operation is being carried out."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="primary" lowerBound="1" + eType="#//ExtentOrExpression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The class name or primary expression that evaluates to the sequence to
be acted on."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isSelectOrReject" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true" + transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.operation = 'select' or self.operation = 'reject'"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCollectOrIterate" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true" + transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.operation = 'collect' or self.operation = 'iterate'"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isForAllOrExistsOrOne" + lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.operation = 'forAll' or self.operation = 'exists' or self.operation = 'one'"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isIsUnique" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true" + transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.operation = 'isUnique'"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="AssignableElement" abstract="true" eSuperTypes="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An element that is or has an assignable value."/> + </eAnnotations> + <eOperations name="typeCached" eType="#//ElementReference"/> + <eOperations name="type" eType="#//ElementReference"/> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> + <eOperations name="isNull" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.type = null and self.lower = 0 and self.upper = 0"/> + </eAnnotations> + </eOperations> + <eOperations name="isAssignableFromElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.isAssignableFrom(
 AssignableElementReference{
 reference = element, owner = self.owner()
 }
 )"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="isAssignableFrom" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 source = null or 
 self.isTypeConformantWith(source) and 
 self.isMultiplicityConformantWith(source)"/> + </eAnnotations> + <eParameters name="source" lowerBound="1" eType="#//AssignableElement"/> + </eOperations> + <eOperations name="isTypeConformantWith" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 -- Null conversion
 source.isNull() or
 
 let sourceType = source.type in
 
 -- Type conformance
 self.isConformantWithType(sourceType) or
 
 -- Collection conversion
 sourceType <> null and self.isCollectionClass(sourceType) and
 source.upper = 1 and (self.upper = -1 or self.upper > 1) and
 self.isConformantWithType(sourceType.collectionArgument())"/> + </eAnnotations> + <eParameters name="source" lowerBound="1" eType="#//AssignableElement"/> + </eOperations> + <eOperations name="isConformantWithType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let targetType = self.type in
 -- Untyped target is conformant with anything.
 targetType = null or
 
 -- Untyped source is only assignable to untyped target.
 sourceType <> null and (
 
 -- Basic type conformance.
 sourceType.conformsTo(targetType) or
 
 -- Bit string conversion.
 self.isIntegerType(sourceType) and self.isBitStringType(targetType)
 )"/> + </eAnnotations> + <eParameters name="sourceType" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="isMultiplicityConformantWith" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let targetUpper = self.upper in
 let sourceUpper = source.upper in
 targetUpper = -1 or targetUpper > 1 or
 sourceUpper <> -1 and sourceUpper <= targetUpper"/> + </eAnnotations> + <eParameters name="source" lowerBound="1" eType="#//AssignableElement"/> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="upper" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The statically determined upper bound of the multiplicity of this
element."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.upper()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="lower" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The statically determined lower bound of the multiplicity of this
element."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.lower()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//ElementReference" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A reference to the element that specifies the statically determined
type for this element (if any)."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.typeCached()"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="AssignableElementReference" eSuperTypes="#//AssignableElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A wrapper for treating an element reference as an assignable element.
This is necessary to tie into the ownership hierarchy, so library
type resolution works correctly."/> + </eAnnotations> + <eOperations name="type" lowerBound="1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.reference.type()"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.reference.lower()"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.reference.upper()"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="reference" lowerBound="1" + eType="#//ElementReference"/> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="Expression" abstract="true" eSuperTypes="#//AssignableElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A model of the common properties derived for any Alf expression.
NOTE: The derivations for all properties of Expression except
AssignmentsAfter are specific to its various subclasses.
"/> + </eAnnotations> + <eOperations name="reference" lowerBound="1" eType="#//ExpressionReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="ExpressionReference{expression = self}"/> + </eAnnotations> + </eOperations> + <eOperations name="newAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Get the assigned sources for assignments made within this expression."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let assignmentsBefore = self.assignmentBefore in
 self.assignmentAfter->select(isNew(assignmentsBefore))"/> + </eAnnotations> + </eOperations> + <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns the assignments from before this expression updated for any
assignments made in the expression. By default, this is the same set as
the assignments before the expression. This operation is redefined only
in subclasses of Expression for kinds of expressions that make assignments."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.Expression_updateAssignments()"/> + </eAnnotations> + </eOperations> + <eOperations name="Expression_updateAssignments" ordered="false" upperBound="-1" + eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.assignmentBefore"/> + </eAnnotations> + </eOperations> + <eOperations name="updateAssignmentsCached" ordered="false" upperBound="-1" eType="#//AssignedSource"/> + <eOperations name="resolve" eType="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return the assigned source element for the given name before this
expression, if any."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let assignment = self.assignmentBefore->select(a | a.name = name) in
 if assignment->isEmpty() then null
 else assignment->any(true).source
 endif"/> + </eAnnotations> + <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="isAddTarget" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return whether the given expression is the first argument of an
invocation of CollectionFunctions::add. This is false by default and
is overidden for relevant invocation expressions."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + <eParameters name="targetExpression" lowerBound="1" eType="#//Expression"/> + </eOperations> + <eOperations name="expressionAssignmentAfterDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments after an expression are given by the result of the
updateAssignments helper operation."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="expressionUniqueAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="No name may be assigned more than once before or after an expression."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.assignmentBefore->isUnique(name) and self.assignmentAfter->isUnique(name)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentBefore" ordered="false" + upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true" + derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assigned sources for local names available lexically before this
expression."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 self.assignmentsBefore()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentAfter" ordered="false" + upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true" + derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assigned sources for local names available lexically after this
expression. This includes not only any assignments made within the
expression, but also any assignments that are unchanged from before the
expression."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.updateAssignmentsCached()"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ExpressionReference" eSuperTypes="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Provides a non-composition reference to an expression that is owned elsewhere."/> + </eAnnotations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.expression.type"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.expression.lower"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.expression.upper"/> + </eAnnotations> + </eOperations> + <eOperations name="isAddTarget" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.expression.isAddTarget(targetExpression)"/> + </eAnnotations> + <eParameters name="targetExpression" lowerBound="1" eType="#//Expression"/> + </eOperations> + <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.expression.assignmentBefore"/> + </eAnnotations> + </eOperations> + <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.expression.assignmentAfter"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1" + eType="#//Expression"/> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ExtentOrExpression" eSuperTypes="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The target of a sequence operation, reduction or expansion expression,
which may be either a primary expression or a class name denoting the class
extent."/> + </eAnnotations> + <eOperations name="isAddTarget" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.enclosingExpression().isAddTarget(targetExpression)"/> + </eAnnotations> + <eParameters name="targetExpression" lowerBound="1" eType="#//Expression"/> + </eOperations> + <eOperations name="extentOrExpressionExpressionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The effective expression for the target is the parsed primary expression,
if the target is not a qualified name, a name expression, if the target
is a qualified name other than a class name, or a class extent expression,
if the target is the qualified name of a class."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="extentOrExpressionExtentType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let expression = self.expression in
 expression.oclIsKindOf(ClassExtentExpression) implies
 expression.oclAsType(ClassExtentExpression).validateClassExtentExpressionExtentType()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="extentOrExpressionResolution" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let expression = self.expression in
 expression.oclIsKindOf(NameExpression) implies
 expression.oclAsType(NameExpression).validateNameExpressionResolution()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="name" eType="#//QualifiedName" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the target is a qualified name, then that name, before it is
disambiguated into either a name expression or a class name."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The effective expression for the target."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 if self.nonNameExpression <> null then self.nonNameExpression
 else if self.name.referent->exists(isClass()) then
 ClassExtentExpression{
 className = self.name.copy(),
 owner = self
 }
 else
 NameExpression{
 name = self.name.copy(),
 owner = self
 }
 endif endif"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="nonNameExpression" eType="#//Expression" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The target primary expression, if it is not a qualified name."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="QualifiedName" eSuperTypes="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The representation of a qualified name as a sequence of individual simple
names."/> + </eAnnotations> + <eOperations name="copy" lowerBound="1" eType="#//QualifiedName"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="QualifiedName{
 nameBinding = self.nameBinding.copy(),
 isAmbiguous = self.isAmbiguous,
 owner = self.owner()
 }"/> + </eAnnotations> + </eOperations> + <eOperations name="addName" lowerBound="1" eType="#//QualifiedName"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let nameBinding = NameBinding{name = name} in
 QualifiedName{
 nameBinding = self.nameBinding.copy()->append(nameBinding),
 isAmbiguous = self.isAmbiguous,
 owner = self.owner()
 }"/> + </eAnnotations> + <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="addNameBindings" lowerBound="1" eType="#//QualifiedName"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 QualifiedName{
 nameBinding = self.nameBinding.copy()->includingAll(nameBindings),
 isAmbiguous = self.isAmbiguous,
 owner = self.owner()
 }"/> + </eAnnotations> + <eParameters name="nameBindings" upperBound="-1" eType="#//NameBinding"/> + </eOperations> + <eOperations name="modelReferents" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="EXTERNAL
Get the referents for this qualified name as a fully qualified name in
model scope."/> + </eAnnotations> + </eOperations> + <eOperations name="qualifiedNameUnqualifiedNameDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The unqualified name of a qualified name is the last name binding.
"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="qualifiedNamePathNameDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The path name for a qualified name consists of the string representation
of each of the name bindings, separated by "::" punctuation. The string
representation of a name binding is its name followed by the
representation of its template binding, if it has one. The string
representation of a positional template binding consists of an ordered
list of the path names of its argument qualified names separated by
commas, all surrounded by the angle brackets "<" and ">".
The string representation of a named template binding consists of an
ordered list of its template parameter substitutions, each consisting of
the formal parameter name followed by "=>" followed by the path name of
the argument qualified name, separated by commas, all surrounded by the
angle brackets "<" and ">"."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="qualifiedNameIsFeatureReferenceDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A qualified name is a feature reference if its disambiguation is not
empty."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="qualifiedNameQualificationDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The qualification of a qualified name is a empty if the qualified name
has only one name binding. Otherwise it is the qualified name consisting
of all the name bindings of the original qualified name except for the
last one. The qualification of a qualified name is considered ambiguous
if the qualified name is ambiguous and has more than two name bindings."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="qualifiedNameDisambiguationDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a qualified name is not ambiguous or it has a qualification that resolves
to a namespace, then it is has no disambiguation. Otherwise, its
disambiguation is a feature reference with a name given by the unqualified
name of the qualified name and a target expression determined by the
disambiguation of the qualification of the qualified name."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="qualifiedNameReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The referents of a qualified name are the elements to which the name may
resolve in the current scope, according to the UML rules for namespaces
and named elements."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="qualifiedNameLocalName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a qualified name is a local name, then the reference must be within
the same local scope as the definition of the named element."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="qualifiedNameNonLocalUnqualifiedName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a qualified name is an unqualified, non-local name, then it must be
visible in the current scope of the use of the name."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="qualifiedNameQualifiedResolution" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a qualified name has a qualification, then its unqualified name must
name an element of the namespace named by the qualification, where the
first name in the qualification must name an element of the current scope."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="qualifiedNameTemplateBinding" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the unqualified name of a qualified name has a template binding, then
the template name must resolve to a template. The template binding must
have an argument name for each of the template parameters and each argument
name must resolve to a classifier. If the template parameter has constraining
classifiers, then the referent of the corresponding argument name must conform
to all those constraining classifiers."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.templateName <> null implies
 let templates = self.templateName.referent in 
 templates->size() = 1 and 
 templates->forAll(template | 
 template.isTemplate() and 
 self.unqualifiedName.binding.matches(template)
 )"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="qualifiedNameTemplateNameDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the last name binding in a qualified name has a template binding, then
the template name is a qualified name with the same template bindings as
the original qualified name, but with the template binding removed on the
last name binding."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="disambiguationCached" eType="#//FeatureReference"/> + <eOperations name="disambiguation" eType="#//FeatureReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.isAmbiguous or self.qualification = null then null
 else if self.qualification.referent->exists(isNamespace()) then null
 else 
 FeatureReference{
 nameBinding = self.unqualifiedName.copy(), 
 expression = 
 if self.qualification.isFeatureReference then 
 PropertyAccessExpression{
 featureReference = self.qualification.disambiguation
 }
 else NameExpression{name = self.qualification}
 endif,
 owner = self.owner()
 }
 endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="referentCached" ordered="false" upperBound="-1" eType="#//ElementReference"/> + <eOperations name="referent" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isFeatureReference then
 Set(ElementReference){}
 else if self.templateName = null then
 let n = self.nameBinding->size() in
 let currentScope = self.currentScope() in
 if n = 0 or currentScope = null then
 Set(ElementReference){}
 else if n = 1 then
 -- Resolve as an unqualified name.
 currentScope.resolve(self.unqualifiedName.toName())
 else
 -- Resolve as a qualified name.
 self.qualification.referent->select(isNamespace()).
 resolveVisible(self.unqualifiedName.toName(), currentScope)->
 asSet()
 endif endif
 else
 -- Resolve as a bound element.
 let referents = self.templateName.referent in
 if referents->size() <> 1 then
 Set(ElementReference){}
 else
 let template = referents->any(true) in
 let actuals = self.unqualifiedName.binding.bindTo(template) in
 Set{template.bind(actuals)}
 endif
 endif endif"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAmbiguous" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this qualified name is ambiguous."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="pathName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The complete path name for the qualified name, with individual name
bindings separated by "::" punctuation."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 if self.unqualifiedName = null then ''
 else if self.qualification = null then self.unqualifiedName.toString()
 else self.qualification.pathName + '::' + self.unqualifiedName.toString()
 endif endif"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isFeatureReference" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Indicates whether this qualified name has been disambiguated to a
feature reference."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.disambiguation <> null"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="qualification" eType="#//QualifiedName" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The qualified name corresponding to the qualification part of this
qualified name, if any."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let n = self.nameBinding->size() in 
 if n <= 1 then null
 else QualifiedName{
 nameBinding = self.nameBinding->subOrderedSet(1, n - 1).copy(),
 isAmbiguous = n > 1 and self.isAmbiguous,
 owner = self.owner()
 }
 endif"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="disambiguation" eType="#//FeatureReference" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The disambiguation into a feature reference of a syntactic element
initially parsed as a qualified name."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.disambiguationCached()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="nameBinding" upperBound="-1" + eType="#//NameBinding" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The sequence of individual name bindings in this qualified name."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="referent" ordered="false" + upperBound="-1" eType="#//ElementReference" volatile="true" transient="true" + derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The possible referents to which this qualified name may resolve.
(Note that the UML rules for namespaces in general allow a namespace to
contain elements of different kinds with the same name.) If the qualified
name is for a template instantiation, then the referent is the equivalent
bound element."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.referentCached()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="unqualifiedName" eType="#//NameBinding" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The rightmost individual name binding in the qualified name, without the
qualification."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.nameBinding->last()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="templateName" eType="#//QualifiedName" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If this qualified name is for a template binding, then the name of the
template for which this qualified name is a binding."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 if self.unqualifiedName = null or 
 self.unqualifiedName.binding = null then 
 null
 else if self.nameBinding->size() = 1 then
 QualifiedName{
 nameBinding = Sequence{NameBinding{name = self.unqualifiedName.name}},
 isAmbiguous = false,
 owner = self.owner()
 }
 else
 QualifiedName{
 nameBinding = self.nameBinding->subOrderedSet(1, self.nameBinding->size() - 1).copy()->
 append(NameBinding{name = self.unqualifiedName.name}),
 isAmbiguous = false,
 owner = self.owner()
 }
 endif endif"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="FeatureReference" eSuperTypes="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A reference to a structural or behavioral feature of the type of its target
expression or a binary association end the opposite end of which is typed
by the type of its target expression."/> + </eAnnotations> + <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.expression.assignmentAfter"/> + </eAnnotations> + </eOperations> + <eOperations name="behavioralFeatureReferent" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 -- TODO: Handle overloading resolution.
 let referents = self.referent->select(isOperation() or isReception()) in
 if referents->size() <> 1 then null
 else if referents->forAll(isReception()) then
 referents->any(true).signal()
 else
 referents->any(true)
 endif endif"/> + </eAnnotations> + <eParameters name="invocation" lowerBound="1" eType="#//InvocationExpression"/> + </eOperations> + <eOperations name="featureReferenceReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The features referenced by a feature reference include the features of
the type of the target expression and the association ends of any binary
associations whose opposite ends are typed by the type of the target
expression."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="featureReferenceTargetType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The target expression of the feature reference may not be untyped, nor
may it have a primitive or enumeration type."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let type = self.expression.type in
 type <> null and not type.isPrimitiveType() and not type.isEnumeration()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="referentCached" ordered="false" upperBound="-1" eType="#//ElementReference"/> + <eOperations name="referent" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.FeatureReference_referent()"/> + </eAnnotations> + </eOperations> + <eOperations name="FeatureReference_referent" ordered="false" upperBound="-1" + eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let type = self.expression.type in
 let name = self.nameBinding.toName() in
 if type = null then Set(ElementReference){}
 else
 let currentScope = self.currentScope() in
 let features = type.resolveVisible(name, currentScope) in
 if currentScope = null then features
 else features->union(currentScope.resolveAssociationEnd(type, name))
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1" + eType="#//Expression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The target expression."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="referent" ordered="false" + upperBound="-1" eType="#//ElementReference" volatile="true" transient="true" + derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The features referenced by this feature reference."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.referentCached()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="nameBinding" eType="#//NameBinding" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The name of the feature."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="NameBinding" eSuperTypes="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An unqualified name, optionally with a template binding."/> + </eAnnotations> + <eOperations name="toString" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.binding = null then self.toName()
 else self.toName() + self.binding.toString()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="toName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.name = null or self.name = '' or self.name.at(1) <> '\'' then
 name
 else
 let s = self.name.substring(2, name.size() - 1) in
 self.process(s)
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="process" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let i = s.indexOf('\\') in
 if i = 0 then
 s
 else 
 if i = 1 then '' else s.substring(1, i-1) endif +
 self.escape(s.at(i+1)) +
 if i+2 > s.size() then '' else self.process(s.substring(i+2, s.size())) endif
 endif"/> + </eAnnotations> + <eParameters name="s" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="escape" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if s = 'b' then '\b'
 else if s = 'f' then '\f'
 else if s = 't' then '\t'
 else if s = 'n' then '\n'
 else s endif endif endif endif"/> + </eAnnotations> + <eParameters name="s" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="copy" lowerBound="1" eType="#//NameBinding"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="NameBinding{
 name = self.name,
 binding = if self.binding = null then null else self.binding.copy() endif
 }"/> + </eAnnotations> + </eOperations> + <eOperations name="toQualifiedName" lowerBound="1" eType="#//QualifiedName"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 QualifiedName{
 nameBinding = OrderedSet{self.copy()},
 isAmbiguous = false,
 owner = owner
 }"/> + </eAnnotations> + <eParameters name="owner" lowerBound="1" eType="#//SyntaxElement"/> + </eOperations> + <eOperations name="toQualifiedNameWith" lowerBound="1" eType="#//QualifiedName"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 QualifiedName{
 nameBinding = OrderedSet{self.copy(), other},
 isAmbiguous = false,
 owner = owner
 }"/> + </eAnnotations> + <eParameters name="other" lowerBound="1" eType="#//NameBinding"/> + <eParameters name="owner" lowerBound="1" eType="#//SyntaxElement"/> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="binding" eType="#//TemplateBinding" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The template binding to be used, if the name denotes a template."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An unqualified name. For names that appeared as unrestricted names in the input text, the string value here excludes the surrounding single quote characters and has any escape sequences resolved to the denoted special characters."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="TemplateBinding" abstract="true" eSuperTypes="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A list of type names used to provide arguments for the parameters of a template."/> + </eAnnotations> + <eOperations name="toString" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + <eOperations name="matches" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eParameters name="template" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="copy" lowerBound="1" eType="#//TemplateBinding"/> + <eOperations name="bindTo" unique="false" upperBound="-1" eType="#//ElementReference"> + <eParameters name="template" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="NamedTemplateBinding" eSuperTypes="#//TemplateBinding"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A template binding in which the arguments are matched to formal template parameters by name."/> + </eAnnotations> + <eOperations name="toString" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 '<' + 
 self.substitution->iterate(substitution : TemplateParameterSubstitution; s : String = '' | 
 if s = '' then substitution.toString()
 else s + ',' + substitution.toString()
 endif
 ) + 
 '>'"/> + </eAnnotations> + </eOperations> + <eOperations name="matches" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let parameters = template.templateParameters() in 
 parameters->size() = self.substitution->size() and 
 parameters->forAll(p | self.matchesParameter(p))"/> + </eAnnotations> + <eParameters name="template" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="matchesParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.substitution->exists(
 parameterName = parameter.name() and
 referent <> null and
 parameter.parents()->forAll(c | referent.conformsTo(c))
 )"/> + </eAnnotations> + <eParameters name="parameter" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="bindTo" unique="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 template.templateParameters()->collect(p |
 let substitutions = self.substitution->select(actualParameterName() = p.name()) 
 in
 if substitutions->size() = 1 then substitutions.referent->asSequence()
 else Sequence(ElementReference){} endif
 )"/> + </eAnnotations> + <eParameters name="template" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="copy" lowerBound="1" eType="#//TemplateBinding"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="NamedTemplateBinding{substitution = self.substitution.copy()}"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="substitution" ordered="false" + lowerBound="1" upperBound="-1" eType="#//TemplateParameterSubstitution" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The substitutions of arguments for template parameters."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="TemplateParameterSubstitution" eSuperTypes="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A specification of the substitution of an argument type name for a template parameter."/> + </eAnnotations> + <eOperations name="actualParameterName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="NameBinding{name = self.parameterName}.toName()"/> + </eAnnotations> + </eOperations> + <eOperations name="toString" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.parameterName + '=>' + argumentName.pathName"/> + </eAnnotations> + </eOperations> + <eOperations name="copy" lowerBound="1" eType="#//TemplateParameterSubstitution"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="TemplateParameterSubstitution{
 parameterName = self.parameterName,
 argumentName = if self.argumentName = null then null else self.argumentName.copy() endif
 }"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="parameterName" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The name of the template parameter."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="argumentName" lowerBound="1" + eType="#//QualifiedName" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The name of the argument type."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="referent" eType="#//ElementReference" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let referents = argumentName.referent in 
 if referents->size() <> 1 or not referents->forAll(isClassifier()) then null
 else referents->any(true)
 endif"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="NumericUnaryExpression" eSuperTypes="#//UnaryExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A unary expression with a numeric operator."/> + </eAnnotations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.integerType()"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.operand.lower"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="1"/> + </eAnnotations> + </eOperations> + <eOperations name="numericUnaryExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A numeric unary expression must have type Integer.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="numericUnaryExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A numeric unary expression has the same multiplicity lower bound as its
operand expression.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="numericUnaryExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A numeric unary expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="numericUnaryExpressionOperand" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The operand expression must have type Integer and a multiplicity upper
bound of 1."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.isIntegerType(self.operand.type) and self.operand.upper = 1"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="UnaryExpression" abstract="true" eSuperTypes="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression consisting of an operator acting on a single operand expression."/> + </eAnnotations> + <eOperations name="unaryExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before the operand of a unary expression are the same as
those before the unary expression."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="By default, the assignments after a unary expression are the same as
those after its operand expression."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.operand.assignmentAfter"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The symbol representing the operator."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="operand" lowerBound="1" + eType="#//Expression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The expression giving the operand."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ForAllOrExistsOrOneExpression" eSuperTypes="#//SequenceExpansionExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A sequence expansion expression with a forAll, exists or one operation."/> + </eAnnotations> + <eOperations name="forAllOrExistsOrOneExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A forAll, exists or one expression has the type Boolean."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="forAllOrExistsOrOneExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A forAll, exists or one expression has a multiplicity lower bound of 1."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="forAllOrExistsOrOneExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A forAll, exists or one expression has a multiplicity upper bound of 1."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="forAllOrExistsOrOneExpressionArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The argument of a forAll, exists or one expression must have type Boolean and a multiplicity upper bound of 1."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="IsolationExpression" eSuperTypes="#//UnaryExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression used to evaluate its operand expression in isolation."/> + </eAnnotations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.operand.type"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.operand.lower"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.operand.upper"/> + </eAnnotations> + </eOperations> + <eOperations name="isolationExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An isolation expression has the type of its operand expression.
(See the type() expression.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="isolationExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An isolation expression has the multiplicity lower bound of its
operand expression.
(see the lower() expression.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="isolationExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An isolation expression has the multiplicity upper bound of its
operand expression.
(See the upper() expression.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="BinaryExpression" abstract="true" eSuperTypes="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression consisting of an operator acting on two operand expressions."/> + </eAnnotations> + <eOperations name="validateAssignments" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="In general the assignments before the operand expressions of a binary
expression are the same as those before the binary expression and, if an
assignment for a name is changed in one operand expression, then the
assignment for that name may not change in the other operand expression.
(This is overridden for conditional logical expressions.)"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.operand1.newAssignments().name->excludesAll(self.operand2.newAssignments().name)"/> + </eAnnotations> + </eOperations> + <eOperations name="noNullArguments" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="By default, null arguments are not allowed for binary expressions.
(This is overridden for equality expressions.)"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="true"/> + </eAnnotations> + </eOperations> + <eOperations name="binaryExpressionOperandMultiplicity" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The operands of a binary expression must both have a multiplicity upper
bound no greater than 1. If null arguments are not allowed (as given by
the noNullArguments helper operation), then the upper bounds must be
exactly 1."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.noNullArguments() then
 self.operand1.upper = 1 and self.operand2.upper = 1
 else
 self.operand1.upper <= 1 and self.operand2.upper <= 2
 endif"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="binaryExpressionOperandAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments in the operand expressions of a binary expression must be
valid (as determined by the validateAssignments helper operation)."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.validateAssignments()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments after a binary expression include all the assignments
before the expression that are not reassigned in either operand
expression, plus the new assignments from each of the operand expressions."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.updateAll(
 self.assignmentBefore,
 self.operand1.newAssignments()->union(operand2.newAssignments())
 )"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="operand1" lowerBound="1" + eType="#//Expression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The expression giving the first operand."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="operand2" lowerBound="1" + eType="#//Expression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The expression giving the second operand."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The symbol representing the operator."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="BooleanUnaryExpression" eSuperTypes="#//UnaryExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A unary expression with a Boolean operator."/> + </eAnnotations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.booleanType()"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.operand.lower"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="1"/> + </eAnnotations> + </eOperations> + <eOperations name="booleanUnaryExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A Boolean unary expression has type Boolean.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="booleanUnaryExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A Boolean unary expression has the same multiplicity lower bound
as its operand expression.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="booleanUnaryExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A Boolean unary expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="booleanUnaryExpressionOperand" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The operand expression of a Boolean unary expression must have type
Boolean and a multiplicity upper bound of 1."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.isBooleanType(self.operand.type) and self.operand.upper = 1"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="CastExpression" eSuperTypes="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression used to filter values by type."/> + </eAnnotations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.typeName = null then null
 else
 let referents = self.typeName.referent->
 select(isClassifier() and not isTemplate()) in
 if referents->size() <> 1 then null
 else referents->any(true)
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="0"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.operand.upper"/> + </eAnnotations> + </eOperations> + <eOperations name="castExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The type of a cast expression is the referent of the given type name (if
there is one).
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="castExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A cast expression has a multiplicity lower bound of 0.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="castExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A cast expression has a multiplicity upper bound that is the same as the
upper bound of its operand expression.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="castExpressionTypeResolution" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the cast expression has a type name, then it must resolve to a
non-template classifier."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.typeName <> null implies self.type <> null"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="castExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before the operand of a cast expression are the same as
those before the cast expression."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments after a cast expression are the same as those after its
operand expression."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.operand.assignmentAfter"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="operand" lowerBound="1" + eType="#//Expression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The operand expression of the cast expression."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" eType="#//QualifiedName" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The named type of the cast expression (if any)"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAny" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the cast expression has an empty type."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="PositionalTuple" eSuperTypes="#//Tuple"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A tuple in which the arguments are matched to parameters in order by position."/> + </eAnnotations> + <eOperations name="size" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.expression->size()"/> + </eAnnotations> + </eOperations> + <eOperations name="inputFor" ordered="false" upperBound="-1" eType="#//InputNamedExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if parameters->isEmpty() then Set(InputNamedExpression){}
 else
 Set{1..parameters->size()}->select(i |
 let direction = parameters->at(i).direction() in
 direction = 'in' or direction = 'inout' 
 )->collect(i : Integer | 
 InputNamedExpression{
 name = parameters->at(i).name(),
 expression = 
 if i <= self.size() then
 self.expression->at(i)
 else
 SequenceConstructionExpression{
 hasMultiplicity = true,
 owner = self
 }
 endif,
 owner = self
 }
 )->asSet()
 endif"/> + </eAnnotations> + <eParameters name="parameters" upperBound="-1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="outputFor" ordered="false" upperBound="-1" eType="#//OutputNamedExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if parameters->isEmpty() then Set(OutputNamedExpression){}
 else
 Set{1..parameters->size()}->select(i |
 let direction = parameters->at(i).direction() in
 -- NOTE: This allows missing arguments for out parameters.
 direction = 'out' and i <= self.size() or 
 direction = 'inout' 
 )->collect(i : Integer | 
 OutputNamedExpression{
 name = parameters->at(i).name(),
 expression = 
 if i <= self.size() then
 self.expression->at(i)
 else
 -- NOTE: This will cause an error for missing arguments for 
 -- inout parameters.
 SequenceConstructionExpression{
 hasMultiplicity = true,
 owner = self
 }
 endif,
 owner = self
 }
 )->asSet()
 endif"/> + </eAnnotations> + <eParameters name="parameters" upperBound="-1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="outputForExpression" eType="#//OutputNamedExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
					if self.expression->excludes(expression) then null
					else
						let i = self.expression->indexOf(expression) in
						let parameter = self.invocation.parameter->at(i) in
							OutputNamedExpression{
								name = parameter.name(),
								expression = expression,
								owner = self
							}
					endif"/> + </eAnnotations> + <eParameters name="expression" lowerBound="1" eType="#//Expression"/> + </eOperations> + <eOperations name="positionalTupleArguments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A positional tuple must not have more arguments than the invocation it is for has parameters."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.size() <= self.invocation.parameterCount()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="expression" upperBound="-1" + eType="#//Expression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The argument expressions for this tuple, to be matched by position to the invocation parameters."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="Tuple" abstract="true" eSuperTypes="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A list of expressions used to provide the arguments for an invocation."/> + </eAnnotations> + <eOperations name="size" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> + <eOperations name="inputCached" ordered="false" upperBound="-1" eType="#//InputNamedExpression"/> + <eOperations name="input" ordered="false" upperBound="-1" eType="#//InputNamedExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.inputFor(self.invocation.parameter)"/> + </eAnnotations> + </eOperations> + <eOperations name="inputFor" ordered="false" upperBound="-1" eType="#//InputNamedExpression"> + <eParameters name="parameters" upperBound="-1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="outputCached" ordered="false" upperBound="-1" eType="#//OutputNamedExpression"/> + <eOperations name="output" ordered="false" upperBound="-1" eType="#//OutputNamedExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.outputFor(self.invocation.parameter)"/> + </eAnnotations> + </eOperations> + <eOperations name="outputFor" ordered="false" upperBound="-1" eType="#//OutputNamedExpression"> + <eParameters name="parameters" upperBound="-1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="outputForExpression" eType="#//OutputNamedExpression"> + <eParameters name="expression" lowerBound="1" eType="#//Expression"/> + </eOperations> + <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
-- let assignmentsBefore = self.assignmentsBefore() in
-- if not element.oclIsKindOf(NameExpression) then assignmentsBefore
-- else
-- let output = self.outputForExpression(element.oclAsType(NameExpression)) in
-- if output = null then assignmentsBefore
-- else self.updateFor(assignmentsBefore, output)
-- endif
-- endif;
 self.assignmentsBefore()"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/> + </eOperations> + <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let assignments1 = self.updateAll(
 self.assignmentsBefore(),
 self.input.expression->union(self.output.expression).newAssignments()->asSet()
 ) in
 let assignments2 = self.output->iterate(
 output, assignments : Set(AssignedSource) = assignments1 |
 self.updateFor(assignments, output)
 ) in
 self.updateAll(
 assignments2,
 self.output->reject(leftHandSide = null)->
 collect(output : OutputNamedExpression | 
 assignments2->select(name = output.leftHandSide.assignedName())
 )->
 reject(isParallelLocalName).copy(self.invocation, null)->asSet()
 )"/> + </eAnnotations> + </eOperations> + <eOperations name="newAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let assignmentsBefore = self.assignmentsBefore() in
 self.assignmentsAfter()->select(isNew(assignmentsBefore()))"/> + </eAnnotations> + </eOperations> + <eOperations name="updateFor" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let parameter = self.invocation.parameterNamed(output.name) in
 if parameter = null or parameter.direction() <> 'out' then 
 assignments
 else
 let lhs = output.leftHandSide in
 if lhs = null or lhs.localName() = null or lhs.index() <> null or 
 assignments->exists(name = lhs.localName()) then 
 assignments
 else
 AssignedSource{
 name = lhs.localName(),
 source = self,
 type = parameter.type(),
 lower = 0,
 upper = if parameter.upper() = 1 then 1 else -1 endif
 }.update(assignments)
 endif
 endif"/> + </eAnnotations> + <eParameters name="assignments" ordered="false" upperBound="-1" eType="#//AssignedSource"/> + <eParameters name="output" lowerBound="1" eType="#//OutputNamedExpression"/> + </eOperations> + <eOperations name="tupleInputDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A tuple has the same number of inputs as its invocation has input
parameters. For each input parameter, the tuple has a corresponding input
with the same name as the parameter and an expression that is the
matching argument from the tuple, or an empty sequence construction
expression if there is no matching argument."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="tupleOutputDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A tuple has the same number of outputs as its invocation has output
parameters. For each output parameter, the tuple has a corresponding
output with the same name as the parameter and an expression that is the
matching argument from the tuple, or an empty sequence construction
expression if there is no matching argument."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="tupleNullInputs" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An input parameter may only have a null argument if it has a multiplicity
lower bound of 0."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.input->forAll(
 expression.isNull() implies 
 self.invocation.parameterNamed(name).lower() = 0
 )"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="tupleOutputs" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An output parameter may only have a null argument if it is an out parameter."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.output->forAll(
 expression.isNull() implies 
 self.invocation.parameterNamed(name).direction() = 'out'
 )"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="tupleAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before each expression in a tuple are the same as the
assignments before the tuple, except in the case of a name expression
that defines a new local name, in which case the assigned source for the
new name is included in the assignments before the name expression. (Note
that the assigned source for a new name is included before the name
expression so that the nameExpressionResolution constraint is not
violated.) The assignments before the tuple are the same as the
assignments after the feature reference of the invocation of the tuple,
if the invocation has one, or otherwise the assignments before the
invocation.

CHANGE: An assignment before is NOT given to a name expression that
that defines a local name. Instead the nameExpressionResolution
constraint has been modified. (This avoids a potential infinite recursion
in InvocationExpression::bindTemplateImplicitArguments().)

(See also the InvocationExpression::assignmentsBefore(element) operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="tupleAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A name may be assigned in at most one argument expression of a tuple."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.input.expression->union(self.output.expression).
 newAssignments()->isUnique(name)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="input" ordered="false" + upperBound="-1" eType="#//InputNamedExpression" volatile="true" transient="true" + derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The argument expressions from this tuple, matched to the input parameters
(direction in and inout) of the invocation. An empty sequence construction
expression is included for any input parameter that is not explicitly
matched in the tuple."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.inputCached()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="invocation" lowerBound="1" + eType="#//InvocationExpression" eOpposite="#//InvocationExpression/tuple"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The invocation expression of which this tuple is a part."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="output" ordered="false" + upperBound="-1" eType="#//OutputNamedExpression" volatile="true" transient="true" + derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The argument expressions from this tuple, matched to the output parameters
(direction inout and out) of the invocation. An empty sequence construction
expression is included for any output parameter that is not explicitly
matched in the tuple."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.outputCached()"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="NamedExpression" eSuperTypes="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A pairing of a parameter name and an argument expression in a named tuple."/> + </eAnnotations> + <eOperations name="actualName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="NameBinding{name = self.name}.toName()"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The parameter name."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1" + eType="#//Expression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The argument expression."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="index" eType="#//Expression" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression whose value gives an index into an ordered parameter.
(This is only used in link operation expressions.)"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="InputNamedExpression" eSuperTypes="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A pairing of an input parameter name and an argument expression."/> + </eAnnotations> + <eOperations name="tuple" lowerBound="1" eType="#//Tuple"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.owner().oclAsType(_'Tuple')"/> + </eAnnotations> + </eOperations> + <eOperations name="namedExpressionIsCollectionConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Collection conversion is required if the type of the corresponding
parameter is a collection class and the type of the argument expression
is not."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="namedExpressionIsBitStringConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Bit string conversion is required if the type of the type of the
corresponding parameter is BitString, or a collection class instantiated
with a BitString type, and the type of the argument expression is not
BitString."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The parameter name."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1" + eType="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The argument expression."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="index" eType="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression whose value gives an index into an ordered parameter.
(This is only used in link operation expressions.)"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCollectionConversion" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true" + transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the argument expression requires collection conversion."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let parameter = self.tuple().invocation.parameterNamed(self.name) in
 	parameter <> null and
 	let parameterType = parameter.type() in
	 parameterType <> null and self.expression.type <> null and
	 self.isCollectionClass(parameterType) and 
	 not self.isCollectionClass(self.expression.type)"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true" + transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the argument expression requires bit string conversion."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let parameter = self.tuple().invocation.parameterNamed(self.name) in
 	parameter <> null and
 	let parameterType = parameter.type() in
	 parameterType <> null and self.expression <> null and
	 (self.isBitStringType(parameterType) or 
	 self.isBitStringCollectionClass(parameterType)) and 
	 not self.isBitStringType(self.expression.type)"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="InvocationExpression" abstract="true" + eSuperTypes="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression denoting the invocation of a behavior or operation, or the
sending of a signal."/> + </eAnnotations> + <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let feature = self.feature() in
 if feature <> null and self.tuple = element then feature.assignmentAfter
 else self.assignmentBefore
 endif"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/> + </eOperations> + <eOperations name="feature" eType="#//FeatureReference"/> + <eOperations name="referent" eType="#//ElementReference"/> + <eOperations name="referentCached" eType="#//ElementReference"/> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.InvocationExpression_type()"/> + </eAnnotations> + </eOperations> + <eOperations name="InvocationExpression_type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referent = self.referent in
 if referent = null then null
 else referent.type()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.InvocationExpression_upper()"/> + </eAnnotations> + </eOperations> + <eOperations name="InvocationExpression_upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referent = self.referent in
 if referent = null then 0
 else referent.upper()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.InvocationExpression_lower()"/> + </eAnnotations> + </eOperations> + <eOperations name="InvocationExpression_lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referent = self.referent in
 if referent = null then 0
 else referent.lower()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="parameterNamed" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let parameter = self.parameter->select(p | p.name() = name) in
 if parameter->isEmpty() then null
 else parameter->any(true)
 endif"/> + </eAnnotations> + <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="parameterCount" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let parameters = self.parameter in
 if parameters->exists(direction() = 'return') then
 parameters->size()-1
 else
 parameters->size()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="parameterIsAssignableFrom" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let parameter = self.parameterNamed(input.name) in
 let direction = parameter.direction() in
 (direction = 'in' or direction = 'inout') and
 parameter.isAssignableFrom(input.expression)"/> + </eAnnotations> + <eParameters name="input" lowerBound="1" eType="#//InputNamedExpression"/> + </eOperations> + <eOperations name="parameterIsAssignableTo" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let parameter = self.parameterNamed(output.name) in
 let direction = parameter.direction() in
 let lhs = output.leftHandSide in
 direction = 'out' and lhs.referent = null or
 (direction = 'out' or direction = 'inout') and
 output.expression.isAssignableFromElement(parameter)"/> + </eAnnotations> + <eParameters name="output" lowerBound="1" eType="#//OutputNamedExpression"/> + </eOperations> + <eOperations name="alternativeConstructorIsValid" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referent = self.referent in
 let currentScope = self.currentScope() in
 referent <> null and referent.isConstructor() and currentScope <> null implies
 let operation = currentScope.specification() in
 operation.isConstructor() and
 let statement = self.enclosingStatement() in
 statement <> null and statement.oclIsKindOf(ExpressionStatement) and
 let annotatedStatement = statement.owner() in
 let owner = annotatedStatement.owner() in
 owner <> null implies owner.oclIsKindOf(Block) and
 let block = owner.oclAsType(Block) in
 block.enclosingStatement() = null and
 block.statement->notEmpty() and
 block.statement->at(1) = annotatedStatement and
 -- NOTE: This ensures that the invoked constructor is
 -- from the same class as the containing constructor.
 operation.namespace().equals(referent.namespace()) and
 -- NOTE: An alternative constructor invocation should
 -- only be allowed on "this".
 self.feature().expression.oclIsKindOf(ThisExpression)"/> + </eAnnotations> + </eOperations> + <eOperations name="bindTemplateImplicitArguments" eType="#//ElementReference"> + <eParameters name="referent" lowerBound="1" eType="#//ElementReference"/> + <eParameters name="primary" eType="#//Expression"/> + </eOperations> + <eOperations name="bindTemplateImplicitArguments1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let allParameters = referent.parameters() in
 let firstParameter =
 if primary = null or allParameters->isEmpty() then null
 else allParameters->first()
 endif
 in
 let firstParameterType =
 if firstParameter = null then null
 else firstParameter.type()
 endif
 in
 let primaryType =
 if firstParameter = null then null
 else self.effectiveType(firstParameter, primary)
 endif
 in
 let parameters =
 if firstParameter = null then allParameters
 else allParameters->excluding(firstParameter)
 endif
 in
 let templateArguments =
 referent.parameteredElements()->collect(parameteredElement |
 let inputTypes =
 self.tuple.inputFor(parameters)->
 select(input |
 let parameter = parameters->any(name() = input.name) in
 parameteredElement.equals(parameter.type())
 )->
 collect(input | 
 let parameter = parameters->any(name() = input.name) in
 self.effectiveType(parameter, input.expression)
 )->asSet()
 in
 let types =
 if parameteredElement.equals(firstParameterType) then
 inputTypes->including(primaryType)
 else
 inputTypes
 endif
 in
 let commonAncestor = self.commonAncestor(types) in
 if commonAncestor = null then AnyType{}.toReference()
 else commonAncestor
 endif
 )
 in
 referent.bind(templateArguments)"/> + </eAnnotations> + <eParameters name="referent" lowerBound="1" eType="#//ElementReference"/> + <eParameters name="primary" eType="#//Expression"/> + </eOperations> + <eOperations name="effectiveType" lowerBound="1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If collection conversion would be required, return the toSequence
return type, rather than the expression type."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let type = expression.type in
 let parameterUpper = parameter.upper() in
 if (parameterUpper = -1 or parameterUpper > 1) and
 expression.upper = 1 and
 type <> null and self.isCollectionClass(type) then
 type.collectionArgument()
 else
 type
 endif"/> + </eAnnotations> + <eParameters name="parameter" lowerBound="1" eType="#//ElementReference"/> + <eParameters name="expression" lowerBound="1" eType="#//Expression"/> + </eOperations> + <eOperations name="parameterElements" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns references to the elements that act as the parameters of the
referent. If the referent is a behavior or operation, these are the owned
parameters, in order. If the referent is an association end, then the
parameters are the other association ends of the association of the
referent end, which are treated as if they were in parameters. Otherwise
(by default), they are any properties of the referent (e.g., signal
attributes), which are treated as if they were in parameters. (This is
defined as a helper operation, so that it can be overridden by subclasses
of InvocationExpression, if necessary.)"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="InvocationExpression_parameterElements()"/> + </eAnnotations> + </eOperations> + <eOperations name="InvocationExpression_parameterElements" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referent = self.referent in
 if self.isBehavior or self.isOperation then
 referent.parameters()
 else if self.isAssociationEnd then
 let association = referent.association() in
 association.associationEnds()->reject(equals(referent))->
 collect(p | self.parameterFromPropertyWithMultiplicity(p, '1', '1'))->asOrderedSet()
 else if referent <> null then
 referent.properties()->
 collect(p | self.parameterFromProperty(p))->asOrderedSet() 
 else
 OrderedSet(ElementReference){}
 endif endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="parameterFromProperty" lowerBound="1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.parameterFromPropertyWithMultiplicity(
 property, 
 property.lower().toString(), 
 let upper = property.upper() in
 if upper = -1 then '*'
 else upper.toString()
 endif
 )"/> + </eAnnotations> + <eParameters name="property" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="parameterFromPropertyWithMultiplicity" lowerBound="1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 FormalParameter{
 name = property.name(),
 direction = 'in',
 typePart = TypedElementDefinition{
 actualType = property.type(),
 lowerBound = lower,
 upperBound = upper
 },
 owner = property.namespace().asMember()
 }.toReference()"/> + </eAnnotations> + <eParameters name="property" lowerBound="1" eType="#//ElementReference"/> + <eParameters name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + <eParameters name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="invocationExpressionIsBehaviorDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An invocation expression is a behavior invocation if its referent is a
behavior."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="invocationExpressionIsAssociationEndDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An invocation expression is an association end read if its referent is an
association end."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="invocationExpressionIsOperationDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An invocation expression is an operation call if its referent is an
operation."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="invocationExpressionIsDestructorDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An invocation expression is a destructor call either implicitly or if it
is an explicit operation call to a destructor operation."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="invocationExpressionIsImplicitDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An invocation expression is an implicit object destruction if it has a
feature with the name "destroy" and no explicit referents."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="invocationExpressionIsSignalDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An invocation expression is a signal send if its referent is a signal."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="invocationExpressionParameterDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The parameters of an invocation expression are given by the result of the
parameterElements helper operation."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="invocationExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the referent of an invocationExpression is an operation or behavior
with a return parameter, then the type of the expression is that of the
return parameter (if any). If the referent is a classifier, then the type
is the referent. If the referent is a property, then the type is that of
the property. Otherwise the expression has no type.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="invocationExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the referent of an invocationExpression is an operation or behavior
with a return parameter, then the upper bound of the expression is that
of the return parameter. If the referent is a classifier, then the upper
bound is 1. If the referent is a property, then the upper bound is that
of the property. Otherwise the upper bound is 0.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="invocationExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the referent of an invocationExpression is an operation or behavior
with a return parameter, then the lower bound of the expression is that
of the return parameter. If the referent is a classifier, then the lower
bound is 1. If the referent is a property, then the lower bound is that
of the property. Otherwise the lower bound is 0.
(see the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="invocationExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before the target expression of the feature reference of
an invocation expression (if any) are the same as the assignments before
the invocation expression.
(See the SyntaxElement::assignmentsBefore(element) operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments after an invocation expression are the same as those
after the tuple of the expression."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.tuple.assignmentsAfter()"/> + </eAnnotations> + </eOperations> + <eOperations name="invocationExpressionTemplateParameters" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="TODO: Add this constraint to the standard.
if the referent is an implicit template binding, then all the template
parameters must be for classifiers and the actuals conform to any
constraining classifiers."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referent = self.referent in
 referent <> null implies
 let template = referent.template() in
 template <> null implies 
 let parameters = template.templateParameters() in
 let actuals = referent.templateActuals() in
 parameters->size() = actuals->size() and
 parameters->size() <> 0 implies
 Sequence{1..parameters->size()}->forAll(i |
 let parameter = parameters->at(i) in
 let actual = actuals->at(i) in
 parameter.isClassifierTemplateParameter() and
 parameter.parents()->forAll(p | actual.conformsTo(p))
 )"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBehavior" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this is a behavior invocation or not."/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="OutputNamedExpression"/> + <details key="unique" value="false"/> + <details key="upper" value="*"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let referent = self.referent in
 referent <> null and referent.isBehavior()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAssociationEnd" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this is an association read or not."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let referent = self.referent in
 referent<> null and referent.isAssociationEnd()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="feature" eType="#//FeatureReference" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="For an invocation of a feature, the reference to that feature. This
property is set for a feature invocation expression or for an expression
initially parsed as a behavior invocation expression that disambiguates
to a feature invocation expression."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.feature()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isOperation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this is an operation call or not."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let referent = self.referent in
 referent<> null and referent.isOperation()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDestructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If this is an operation call, whether the operation is a destructor."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let referent = self.referent in
 referent<> null and referent.isDestructor()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isImplicit" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this is an implicit object destruction."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let feature = self.feature in
 if feature = null then false
 else
 let nameBinding = feature.nameBinding in
 let referent = self.referent in
 nameBinding <> null and referent = null and
 nameBinding.toName() = 'destroy' and
 nameBinding.binding = null
 endif"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="referent" eType="#//ElementReference" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The behavior, operation or signal being invoked. The derivation of this
property is specific to each kind of invocation expression."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="referentCached()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="parameter" upperBound="-1" + eType="#//ElementReference" volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Element references to the parameters of the referent, in order."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.parameterElements()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isSignal" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this is a signal send or not."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let referent = self.referent in
 referent <> null and referent.isSignal()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="tuple" lowerBound="1" eType="#//Tuple" + containment="true" eOpposite="#//Tuple/invocation"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The tuple for the invocation expression."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="OutputNamedExpression" eSuperTypes="#//InputNamedExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A named argument expression for an output parameter."/> + </eAnnotations> + <eOperations name="outputNamedExpressionLeftHandSideDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The equivalent left-hand side for an output named expression depends on
the kind of expression. If the expression is a name expression with no
disambiguation, then the left-hand side is a name left-hand side with the
name from the name expression. If the expression is a name expression
that disambiguates to a feature reference, then the left-hand side is a
feature left-hand side for that feature reference. If the expression is a
property access expression, then the left-hand side is a feature left-hand
side for the feature reference of the property access expression. If the
expression is a sequence access expression, then the left-hand side is a
name left-hand side or feature left-hand side, as above, depending on
whether the primary expression of the sequence access expression is a
name expression or property access expression, and an index given by the
index expression of the sequence access expression. Otherwise the left-
hand side is empty."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="outputNamedExpressionForm" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The argument for an output parameter must be either be null, a name
expression, a property access expression, or a sequence access expression
whose primary expression is a name expression or a property access
expression."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.expression = null or self.hasLegalExpression()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="hasLegalExpression" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let primary =
 if self.expression.oclIsKindOf(SequenceAccessExpression) then
 self.expression.oclAsType(SequenceAccessExpression).primary
 else
 self.expression
 endif
 in
 primary.oclIsKindOf(NameExpression) or 
 primary.oclIsKindOf(PropertyAccessExpression)"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="leftHandSide" eType="#//LeftHandSide" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The argument expression considered as an assignment left-hand side."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 if self.expression <> null and self.hasLegalExpression() then
 EffectiveLeftHandSide{
 expression = self.expression,
 owner = self
 }
 else
 null
 endif"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="LeftHandSide" abstract="true" eSuperTypes="#//AssignableElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The left-hand side of an assignment expression. NOTE: The derivations for
the derived properties of LeftHandSide are specific to its various subclasses.
"/> + </eAnnotations> + <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.index() <> element then self.assignmentBefore
 else
 let feature = self.feature() in
 if feature = null then self.assignmentBefore
 else feature.assignmentAfter
 endif
 endif"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/> + </eOperations> + <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.index() <> null then self.index().assignmentAfter
 else 
 let feature = self.feature() in
 if feature = null then self.assignmentBefore
 else feature.assignmentAfter
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.LeftHandSide_type()"/> + </eAnnotations> + </eOperations> + <eOperations name="LeftHandSide_type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referent = self.referent() in
 if referent = null then null else referent.type() endif"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.LeftHandSide_upper()"/> + </eAnnotations> + </eOperations> + <eOperations name="LeftHandSide_upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.index() <> null then 1
 else
 let referent = self.referent() in
 if referent = null then 0 else referent.upper() endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.LeftHandSide_lower()"/> + </eAnnotations> + </eOperations> + <eOperations name="LeftHandSide_lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.index() <> null then 1
 else
 let referent = self.referent() in
 if referent = null then 0 else referent.lower() endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="referent" eType="#//ElementReference"/> + <eOperations name="assignedName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.isDataValueUpdate() then self.localName()
 else
 self.feature().expression.oclAsType(NameExpression).name.unqualifiedName.toName()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="localName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + <eOperations name="feature" lowerBound="1" eType="#//FeatureReference"/> + <eOperations name="expression" eType="#//Expression"/> + <eOperations name="isDataValueUpdate" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let feature = self.feature() in
 feature <> null and
 feature.expression.oclIsKindOf(NameExpression) and
 let expression = feature.expression.oclAsType(NameExpression) in
 expression.propertyAccess = null and
 let name = expression.name.unqualifiedName.toName() in
 let assignments = self.assignmentBefore->select(a | a.name = name) in
 assignments->notEmpty() and 
 assignments->forAll(type <> null and type.isDataType())"/> + </eAnnotations> + </eOperations> + <eOperations name="leftHandSideIndexExpression" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a left-hand side has an index, then the index expression must have a
multiplicity upper bound no greater than 1."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.index() <> null implies self.index().upper <= 1"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="index" eType="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An optional expression that evaluates to an index into the values of an
ordered sequence.
property index : Expression[?] { composes };"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentBefore" ordered="false" + upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true" + derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before the left-hand side."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.assignmentsBefore()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentAfter" ordered="false" + upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true" + derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments after the left-hand side."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.assignmentsAfter()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="referent" eType="#//ElementReference" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A reference to the assignable element denoted by this left-hand side, if
one exists (i.e., the left-hand side is not for the first assignment of a
local name)."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.referent()"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="SequenceAccessExpression" eSuperTypes="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression used to access a specific element of a sequence."/> + </eAnnotations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.primary.type"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="0"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="1"/> + </eAnnotations> + </eOperations> + <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.updateAll(
 self.updateAll(
 self.assignmentBefore,
 self.primary.newAssignments()
 ),
 self.index.newAssignments()
 )"/> + </eAnnotations> + </eOperations> + <eOperations name="sequenceAccessExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The type of a sequence access expression is the same as the type of its
primary expression.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceAccessExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The multiplicity lower bound of a sequence access expression is 0.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceAccessExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The multiplicity upper bound of a sequence access expression is 1.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceAccessExpressionIndexType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The type of the index of a sequence access expression must be Integer."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let type = self.index.type in
 type <> null and self.isIntegerType(type)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceAccessExpressionIndexMultiplicity" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The multiplicity upper bound of the index of a sequence access expression
must be 1."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.index.upper = 1"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="primary" lowerBound="1" + eType="#//Expression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The expression whose value is the sequence being accessed."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="index" lowerBound="1" eType="#//Expression" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The expression whose value is the index of the element being accessed in
the sequence."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="StringLiteralExpression" eSuperTypes="#//LiteralExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression that comprises a String literal."/> + </eAnnotations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.stringType()"/> + </eAnnotations> + </eOperations> + <eOperations name="stringLiteralExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The type of a string literal expression is String.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="image" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The textual image of the literal token for this expression, with quote characters removed and escaped sequences resolved to the denoted special character."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="LiteralExpression" abstract="true" eSuperTypes="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression that comprises a primitive literal."/> + </eAnnotations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="1"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="1"/> + </eAnnotations> + </eOperations> + <eOperations name="literalExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The multiplicity upper bound of a literal expression is always 1.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="literalExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The multiplicity lower bound of a literal expression is always 1.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="SequenceOperationExpression" eSuperTypes="#//InvocationExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression used to invoke a behavior as if it was an operation on a target sequence as a whole."/> + </eAnnotations> + <eOperations name="feature" eType="#//FeatureReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="null"/> + </eAnnotations> + </eOperations> + <eOperations name="referent" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referents = self.operation.referent in
 if referents->select(isBehavior())->size() <> 1 then null
 else
 let referent = referents->any(isBehavior()) in
 if referent.isTemplate() then 
 self.bindTemplateImplicitArguments(
 referent, self.primary.expression
 )
 else referent
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="isAddTarget" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let collectionFunctionAdd = self.collectionFunctionAdd() in
 if collectionFunctionAdd = null then false
 else
 collectionFunctionAdd.containedIn(self.operation.referent->asBag()) and
 /* Note: This works even if the target expression is the
 * derived name expression of an ExtentOrExpression element.
 */
 targetExpression.owner() = self.primary 
 endif"/> + </eAnnotations> + <eParameters name="targetExpression" lowerBound="1" eType="#//Expression"/> + </eOperations> + <eOperations name="firstParameter" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referent = self.referent in
 if referent = null then null
 else
 let parameters = referent.parameters() in
 if parameters->isEmpty() then null
 else parameters->first()
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="firstArgument" lowerBound="1" eType="#//OutputNamedExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
				let firstParameter = self.firstParameter() in
					OutputNamedExpression{
						name = if firstParameter = null then null else firstParameter.name() endif,
						expression = self.primary.expression,
						index = null,
						owner = self.tuple
					}"/> + </eAnnotations> + </eOperations> + <eOperations name="sequenceOperationExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The referent for a sequence operation expression is the behavior named by
the operation for the expression.
(See the referent() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceOperationExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="There is no feature for a sequence operation expression.
(See the feature() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceOperationExpressionOperationReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="There must be a single behavior that is a resolution of the operation
qualified name of a sequence operation expression with a least one
parameter, whose first parameter has direction in or inout, has
multiplicity [0..*] and to which the target primary expression is
assignable."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let parameter = self.firstParameter() in
 parameter <> null and
 let direction = parameter.direction() in
 let expression = self.primary.expression in
 (direction = 'in' or direction = 'inout') and
 parameter.lower() = 0 and parameter.upper() = -1 and
 expression <> null implies parameter.isAssignableFrom(expression)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceOperationExpressionTargetCompatibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the first parameter of the referent has direction inout, then the
parameter type must have the same type as the primary expression, the
primary expression must have the form of a left-hand side and, if the
equivalent left-hand side is for a local name, that name must already
exist."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let expression = self.primary.expression in
 let parameter = self.firstParameter() in
 expression <> null and parameter <> null and 
 parameter.direction() = 'inout' implies
 let lhs = self.leftHandSide in
 lhs <> null and 
 let assignedName = lhs.assignedName() in
 (assignedName <> null implies 
 self.assignmentBefore->exists(name = assignedName)
 ) and
 let expressionType = self.type in
 let type = parameter.type() in
 type <> null and type.equals(expressionType) or
 type = null and expressionType = null"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceOperationExpressionArgumentCompatibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The type of an input argument expression of a sequence operation
parameter must be assignable to its corresponding parameter. The type of
an output parameter must be assignable to its corresponding argument
expression. (Note that this implies that the type of an argument
expression for an inout parameter must be the same as the type of that
parameter.)"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.referent <> null implies
 (self.tuple.input->forAll(input | self.parameterIsAssignableFrom(input)) and
 self.tuple.output->forAll(output | self.parameterIsAssignableTo(output))
 )"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceOperationExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before the primary expression of a sequence operation
expression are the same as the assignments before the sequence operation
expression.
(See the InvocationExpression::assignmentsBefore(element) operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceOperationExpressionIsCollectionConversionDerivation" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Collection conversion is required if the type of the primary expression
of a sequence operation expression is a collection class and the
multiplicity upper bound of the primary expression is 1."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceOperationExpressionIsBitStringConversionDerivation" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="BitString conversion is required if type of the first parameter of the
referent of a sequence operation expression is BitString and either the
type of its primary expression is Integer or collection conversion is
required and the type of its primary expression is a collection class
whose argument type is Integer."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceOperationExpressionAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A local name that is assigned in the primary expression of a sequence
operation expression may not be assigned in any expression in the tuple
of the sequence operation expression."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let expression = self.primary.expression in
 expression <> null implies
 expression.newAssignments().name->
 excludesAll(self.tuple.newAssignments().name)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceOperationExpressionLeftHandSideDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the operation of a sequence operation expression has a first
parameter whose direction is inout, then the effective left-hand side for
the expression is constructed as follows: If the primary is a name
expression, then the left-hand side is a name left-hand side with the
name from the name expression as its target. If the primary is a property
access expression, then the left-hand side is a feature left hand side
with the feature reference from the property access expression as its
feature. If the primary is a sequence access expression whose primary is
a name expression or a property access expression, then the left-hand
side is constructed from the primary of the sequence access expression as
given previously and the index of the sequence access expression becomes
the index of the left-hand side."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments after a sequence operation expression include those made
in the primary expression and those made in the tuple and, for an "in
place" operation (one whose first parameter is inout), that made by the
sequence operation expression itself."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let expression = self.primary.expression in
 let firstParameter = self.firstParameter() in
 let assignments1 =
 if expression = null then self.assignmentBefore
 else expression.assignmentAfter
 endif
 in
 let assignments2 =
 self.updateAll(assignments1, self.tuple.assignmentsAfter())
 in
 if firstParameter = null or firstParameter.direction() <> 'inout' then
 assignments2
 else
 let oldAssignment = self.assignmentBefore->
 select(name = self.leftHandSide.assignedName())
 in
 if oldAssignment->isEmpty() or oldAssignment->forAll(isParallelLocalName) then
 assignments2
 else
 oldAssignment->any(true).copy(self, null).update(assignments2)
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="parameterElements" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns the list of parameter elements from the superclass operation,
with the first parameter removed (since the argument for the first
parameter is given by the primary expression of a sequence operation
expression, not in its tuple)."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let parameters = self.InvocationExpression_parameterElements() in
 if parameters->size() < 2 then OrderedSet(ElementReference){}
 else parameters->subOrderedSet(2, parameters->size())
 endif"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="primary" lowerBound="1" + eType="#//ExtentOrExpression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The expression or class name whose value is gives the sequence to be
operated on."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="operation" eType="#//QualifiedName" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The qualified name of the behavior being invoked."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCollectionConversion" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true" + transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the primary expression requires collection conversion."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let expression = self.primary.expression in
 expression <> null and expression.upper = 1 and
 let type = expression.type in
 type <> null and self.isCollectionClass(type)"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true" + transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether type primary expression requires BitString conversion."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let referent = self.referent in
 let firstParameter = self.firstParameter() in
 let expression = self.primary.expression in
 referent <> null and firstParameter <> null and expression <> null and
 let parameterType = firstParameter.type() in
 let primaryType =
 if self.isCollectionConversion then
 expression.type.collectionArgument()
 else
 expression.type
 endif
 in
 parameterType <> null and self.isBitStringType(parameterType) and
 primaryType <> null and self.isIntegerType(primaryType)"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="leftHandSide" eType="#//LeftHandSide" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The effective left-hand side corresponding to the primary expression, if
the sequence operation is ?in place? (that is, has a first parameter with
direction inout)."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let expression = self.primary.expression in
 let firstParameter = self.firstParameter() in
 if expression = null or firstParameter = null or 
 firstParameter.direction() <> 'inout' then
 null
 else
 EffectiveLeftHandSide{
 expression = expression,
 owner = self
 }
 endif"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="SelectOrRejectExpression" eSuperTypes="#//SequenceExpansionExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A sequence expansion expression with a select or reject operation."/> + </eAnnotations> + <eOperations name="selectOrRejectExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A select or reject expression has the same type as its primary expression."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="selectOrRejectExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A select or reject expression has a multiplicity lower bound of 0."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="selectOrRejectExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A select or reject expression has a multiplicity upper bound of *."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="selectOrRejectExpressionArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The argument of a select or reject expression must have type Boolean and a multiplicity upper bound of 1."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ClassExtentExpression" eSuperTypes="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression used to obtain the objects in the extent of a class."/> + </eAnnotations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referents = self.className.referent->select(isClass()) in
 if referents->size() <> 1 then null
 else referents->any(true)
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="-1"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="0"/> + </eAnnotations> + </eOperations> + <eOperations name="classExtentExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The type of a class extent expression is the given class.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="classExtentExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The multiplicity upper bound of a class expression is *.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="classExtentExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The multiplicity lower bound of a class extent expression is 0.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="classExtentExpressionExtentType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The given type name must resolve to a non-template class."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.validateClassExtentExpressionExtentType()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="validateClassExtentExpressionExtentType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.type <> null and not self.type.isTemplate()"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="className" lowerBound="1" + eType="#//QualifiedName" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The name of the class whose extent is to be obtained."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="PositionalTemplateBinding" eSuperTypes="#//TemplateBinding"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A template binding in which the arguments are matched to formal template parameters in order by position."/> + </eAnnotations> + <eOperations name="toString" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 '<' + 
 self.argumentName->iterate(name : QualifiedName; s : String = '' | 
 if s = '' then name.pathName
 else s + ',' + name.pathName
 endif
 ) + 
 '>'"/> + </eAnnotations> + </eOperations> + <eOperations name="matches" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let parameters = template.templateParameters() in 
 parameters->size() = self.argumentName->size() and 
 Sequence{1 .. parameters->size()}->forAll(i | 
 self.matches(parameters->at(i), argumentName->at(i))
 )"/> + </eAnnotations> + <eParameters name="template" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="matches" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referents = argumentName.referent in
 referents->size() = 1 and
 referents->forAll(referent |
 referent.isClassifier() and
 parameter.parents()->forAll(c | referent.conformsTo(c))
 )"/> + </eAnnotations> + <eParameters name="parameter" lowerBound="1" eType="#//ElementReference"/> + <eParameters name="argumentName" lowerBound="1" eType="#//QualifiedName"/> + </eOperations> + <eOperations name="bindTo" unique="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.argumentName->collect(argumentName |
 let referents = argumentName.referent in
 if referents->size() = 1 then referents->asSequence()
 else Sequence(ElementReference){} endif
 )"/> + </eAnnotations> + <eParameters name="template" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="copy" lowerBound="1" eType="#//TemplateBinding"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="PositionalTemplateBinding{argumentName = self.argumentName.copy()}"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="argumentName" lowerBound="1" + upperBound="-1" eType="#//QualifiedName" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The arguments for this template binding, to be matched by position to the template parameters."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ConditionalLogicalExpression" eSuperTypes="#//BinaryExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A binary expression with a conditional logical expression, for which the
evaluation of the second operand expression is conditioned on the result of
evaluating the first operand expression."/> + </eAnnotations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.booleanType()"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.operand1.lower = 0 or self.operand2.lower = 0 then 0 else 1 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="1"/> + </eAnnotations> + </eOperations> + <eOperations name="conditionalLogicalExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A conditional logical expression has type Boolean.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="conditionalLogicalExpressionLower" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A conditional logical expression has a multiplicity lower bound of 0 if
the lower bound if either operand expression is 0 and 1 otherwise.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="conditionalLogicalExpressionUpper" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A conditional logical expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="conditionalLogicalExpressionOperands" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The operands of a conditional logical expression must have type Boolean."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.isBooleanType(self.operand1.type) and self.isBooleanType(self.operand2.type)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="validateAssignments" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before the first operand expression of a conditional
logical expression are the same as those before the conditional logical
expression. The assignments before the second operand expression are the
same as those after the first operand expression.
(See the assignmentsBefore(element) operation.)"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="true"/> + </eAnnotations> + </eOperations> + <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.operand2 = element then self.operand1.assignmentAfter
 else self.assignmentBefore
 endif"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/> + </eOperations> + <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a name has the same assigned source after the second operand
expression as before it, then that is its assigned source after the
conditional logical expression. If a name is unassigned before the
second operand expression, then it is considered unassigned after the
conditional logical expression, even if it has an assigned source after
the second operand expression. Otherwise its assigned source after the
conditional logical expression is the conditional logical expression itself."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let namesBefore = self.operand2.assignmentBefore.name->asSet() in
 self.updateAll(
 self.operand2.assignmentBefore,
 self.operand2.newAssignments()->
 reject(namesBefore->excludes(name)).
 copy(self, null)->asSet()
 )"/> + </eAnnotations> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="LinkOperationExpression" eSuperTypes="#//InvocationExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression used to create or destroy the links of an association."/> + </eAnnotations> + <eOperations name="referent" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referents = self.associationName.referent->select(isAssociation()) in
 if referents->size() <> 1 then null
 else referents->any(true)
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="feature" eType="#//FeatureReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="null"/> + </eAnnotations> + </eOperations> + <eOperations name="linkOperationExpressionIsCreationDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A link operation expression is for link creation if its operation is
"createLink"."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="linkOperationExpressionIsClearDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A link operation expression is for clearing an association if the
operation is "clearAssoc"."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="linkOperationExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The referent for a link operation expression is the named association.
(See the referent() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="linkOperationExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="There is no feature for a link operation expression.
(See the feature() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="linkOperationExpressionAssociationReference" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The qualified name of a link operation expression must resolve to a
single association."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
	self.referent <> null and 
	-- Also check that the association owns all its ends.
	self.referent.properties()->forAll(isAssociationEnd())"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="linkOperationExpressionArgumentCompatibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Each argument expression must be assignable to its corresponding
expression."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.tuple.size() <= self.parameterCount() and
 self.tuple.input->forAll(input | self.parameterIsAssignableFrom(input))"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="parameterElements" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="For a clear association operation, returns a single, typeless parameter.
Otherwise, returns the ends of the named association."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isClear then
 OrderedSet(ElementReference){
 FormalParameter{
 direction = 'in',
 typePart = TypedElementDefinition{
 lowerBound = '1',
 upperBound = '1'
 }
 }.toReference()
 }
 else
 let referent = self.referent in
 if referent = null then OrderedSet(ElementReference){}
 else
 self.referent.associationEnds()->collect(property | 
 -- NOTE: Arguments for a link operation have multiplicity 1..1.
 parameterFromPropertyWithMultiplicity(property, '1', '1')
 )->asOrderedSet()
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="operation" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The name of the link operation."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCreation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the operation is for link creation."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.operation = 'createLink'"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isClear" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the operation is clearing the association."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.operation = 'clearAssoc'"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="associationName" lowerBound="1" + eType="#//QualifiedName" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The qualified name of the association whose links are being acted on."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="EqualityExpression" eSuperTypes="#//BinaryExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A binary expression that tests the equality of its operands."/> + </eAnnotations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.booleanType()"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="1"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="1"/> + </eAnnotations> + </eOperations> + <eOperations name="equalityExpressionIsNegatedDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An equality expression is negated if its operator is "!="."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="equalityExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An equality expression has type Boolean.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="equalityExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An equality expression has a multiplicity lower bound of 1.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="equalityExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An equality expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="noNullArguments" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns false for an equality expression."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isNegated" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the test is for being not equal."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.operator = '!='"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="AssignmentExpression" eSuperTypes="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression used to assign a value to a local name, parameter or property."/> + </eAnnotations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isSimple then self.rightHandSide.type
 else self.leftHandSide.type
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.rightHandSide.upper"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isSimple then self.rightHandSide.lower
 else self.leftHandSide.lower
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if element = self.leftHandSide then self.rightHandSide.assignmentAfter
 else self.assignmentBefore
 endif"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/> + </eOperations> + <eOperations name="assignmentExpressionIsSimpleDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An assignment expression is a simple assignment if the assignment
operator is "="."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="assignmentExpressionIsArithmeticDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An assignment expression is an arithmetic assignment if its operator is a
compound assignment operator for an arithmetic operation."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="assignmentExpressionIsDefinitionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An assignment expression is a definition if it is a simple assignment and
its left hand side is a local name for which there is no assignment
before the expression."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="assignmentExpressionIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The left hand side of an assignment expression is a feature if it is a
kind of FeatureLeftHandSide."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="assignmentExpressionIsIndexedDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The left hand side of an assignment expression is indexed if it has an index."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="assignmentExpressionIsDataValueUpdateDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An assignment expression is a data value update if its left hand side is
an attribute of a data value held in a local name or parameter."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="assignmentExpressionAssignmentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The new assigned source for an assignment to a local name is the
assignment expression. If the assignment is a definition, then the type
is given by the right hand side, the multiplicity upper bound is 1 if the
upper bound of the right hand side is 1 and otherwise * and the
multiplicity lower bound is 0. Otherwise, the type is the same as the
left-hand side and the multiplicity is also the same as the left-hand
side, if the left-hand side is not indexed, and is * if it is indexed."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="assignmentExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the left-hand side of an assignment expression is a feature, then the
feature of the assignment is the referent of the left-hand side."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="assignmentExpressionExpressionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="For a compound assignment, the effective expression is the left-hand side
treated as a name expression, property access expression or sequence
access expression, as appropriate for evaluation to obtain the original
value to be updated."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="assignmentExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A simple assignment expression has the same type as its right-hand side
expression. A compound assignment expression has the same type as its
left-hand side.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="assignmentExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An assignment expression has the same multiplicity upper bound as its
right-hand side expression.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="assignmentExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A simple assignment expression has the same multiplicity lower bound as
its right-hand side expression. A compound assignment expression has the
same multiplicity as its left-hand side.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="assignmentExpressionSimpleAssignmentTypeConformance" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the left-hand side of a simple assignment is not a new local name, and
the right-hand side is not null, then the left-hand side must either be
untyped or have a type that conforms to the type of the right-hand side
expression."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 (self.isSimple and not self.isDefinition) implies
 self.leftHandSide.isTypeConformantWith(self.rightHandSide)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="assignmentExpressionSimpleAssignmentMultiplicityConformance" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the left-hand side of a simple assignment is not a new local name and
the multiplicity upper bound of the left-hand side is less than or equal
to 1, then the multiplicity upper bound of the right-hand side cannot be
greater than that of the left-hand side."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 (self.isSimple and not self.isDefinition) implies
 self.leftHandSide.isMultiplicityConformantWith(self.rightHandSide)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="assignmentExpressionCompoundAssignmentTypeConformance" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="For a compound assignment, if the operator is an arithmetic operator,
then either the left-hand side and the right-hand side both have type
Integer or they both have type String and the operator is +. If the
operator is a logical operator, then either the left-hand side and the
right-hand side both have type Boolean or Bit String or the left-hand
side has type Bit String and the right-hand side has type Integer. If the
operator is a shift operator, then the left-hand side must have type
BitString and the right-hand side must have type Integer."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 not self.isSimple implies
 let lhsType = self.leftHandSide.type in
 let rhsType = self.rightHandSide.type in
 lhsType <> null and rhsType <> null and
 (self.isArithmetic and 
 self.isIntegerType(lhsType) and self.isIntegerType(rhsType) or
 self.isLogical and
 (self.isBooleanType(lhsType) and self.isBooleanType(rhsType) or
 self.isBitStringType(lhsType) and 
 (self.isBitStringType(rhsType) or self.isIntegerType(rhsType))
 ) or
 self.isShift and
 self.isBitStringType(lhsType) and self.isIntegerType(rhsType) or
 self.isConcatenation and
 self.isStringType(lhsType) and self.isStringType(rhsType)
 )"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="assignmentExpressionCompoundAssignmentMultiplicityConformance" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="For a compound assignment, both the left-hand and right-hand sides must
have a multiplicity upper bound of 1."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="(not self.isSimple) implies 
 (self.leftHandSide.upper = 1 and self.rightHandSide.upper = 1)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="assignmentExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assigned source of a name before the right-hand side expression of an
assignment expression is the same as the assigned source before the
assignment expression. The assigned source of a name before the left-hand
side is the assigned source after the right-hand side expression.
(See the assignmentsBefore(element) operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="assignmentExpressionIsCollectionConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An assignment requires collection conversion if the type of the
right-hand side is a collection class and its multiplicity upper bound
is 1, and the type of the left-hand side is not a collection class."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="assignmentExpressionIsBitStringConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An assignment requires BitString conversion if the type of the left-hand
side is BitString and either the type of the right-hand side is Integer
or collection conversion is required and the type of the right-hand side
is a collection class whose argument type is Integer."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="assignmentExpressionDataValueUpdateLegality" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If an assignment expression has a feature with a primary expression whose
type is a data type, then the assignment expression must be a data value
update."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let feature = self.leftHandSide.feature() in
 feature <> null implies
 let type = feature.expression.type in
 (type <> null and type.isDataType()) implies
 self.isDataValueUpdate"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments after an assignment expression are the assignments after
the left-hand side, updated by the assignment from the assignment
expression, if any."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let assignment = self.assignment in
 if assignment = null then self.leftHandSide.assignmentAfter
 else assignment.update(self.leftHandSide.assignmentAfter)
 endif"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The image of the assignment operator used in the expression."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="leftHandSide" lowerBound="1" + eType="#//LeftHandSide" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The left-hand side of the assignment, to which a value is to be assigned."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="rightHandSide" lowerBound="1" + eType="#//Expression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The right-hand side expression of the assignment, which produces the value being assigned."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="assignment" eType="#//AssignedSource" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the left-hand side is a name, then the new assigned source for that name.
(Note: This also includes assignments to parameters and local names that
are the source of data value updates.)"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let name = self.leftHandSide.assignedName() in
 if name = null then null
 else if self.isDefinition then
 AssignedSource{
 name = name,
 source = self,
 type = self.rightHandSide.type,
 lower = 0,
 upper = if self.rightHandSide.upper = 1 then 1 else -1 endif
 }
 else
 let assignments = self.assignmentBefore->select(a | a.name = name) in
 if assignments->isEmpty() then null
 else
 let oldAssignment = assignments->any(true) in
 AssignedSource{
 name = name,
 source = self,
 type = oldAssignment.type,
 lower = oldAssignment.lower,
 upper = oldAssignment.upper
 }
 endif
 endif endif"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="feature" eType="#//ElementReference" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the left-hand side is a feature, then the referent for that feature."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let feature = self.leftHandSide.feature() in
 if feature = null then null
 else
 let referents = feature.referent in
 if referents->isEmpty() then null
 else referents->any(true)
 endif
 endif"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isIndexed" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the left-hand side is a feature, whether it has an index or not."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.leftHandSide.index() <> null"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isArithmetic" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If this is a compound assignment, whether the compound assignment
operator is arithmetic or not."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="Set{'+=', '-=', '*=', '/=', '%='}->includes(self.operator)"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isLogical" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="Set{'&=', '|=', '^='}->includes(self.operator)"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isShift" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="Set{'<<=', '>>=', '>>>='}->includes(self.operator)"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isConcatenation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.operator = '+='"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDefinition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this assignment is the definition of a new local name or not."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.isSimple and not self.isIndexed and 
 self.leftHandSide.referent = null and self.leftHandSide.localName() <> null"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isSimple" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this is a simple assignment or not."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.operator = '='"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If this is a compound assignment, then the effective expression used to
obtain the original value of the left-hand side to be updated."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.leftHandSide.expression()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isFeature" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the left-hand side is a feature or not."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDataValueUpdate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this assignment updates an attribute of a data value held in a
local name or parameter."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.leftHandSide.isDataValueUpdate()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCollectionConversion" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true" + transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether collection conversion is required for this assignment."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let lhsType = self.leftHandSide.type in
 let rhsType = self.rightHandSide.type in
 lhsType <> null and rhsType <> null and
 not self.isCollectionClass(lhsType) and
 self.isCollectionClass(rhsType) and 
 self.rightHandSide.upper = 1"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true" + transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether BitString conversion is required for this assignment."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let lhsType = self.leftHandSide.type in
 let rhsType = self.type in -- Note: This works for both simple and compound assignments.assignment.
 rhsType <> null and lhsType <> null and self.isBitStringType(lhsType) and
 (self.isIntegerType(rhsType) or
 self.isCollectionConversion and self.isIntegerCollectionClass(rhsType)
 )"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="LogicalExpression" eSuperTypes="#//BinaryExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A binary expression with a logical operator."/> + </eAnnotations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isBitWise then self.bitStringType()
 else self.booleanType()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.operand1.lower = 0 or self.operand2.lower = 0 then 0 else 1 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="1"/> + </eAnnotations> + </eOperations> + <eOperations name="logicalExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A logical expression has type Boolean if it is not bit-wise and type
BitString if it is bit-wise.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="logicalExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A logical expression has a multiplicity lower bound of 0 if the lower
bound if either operand expression is 0 and 1 otherwise.annotation
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="logicalExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A logical expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="logicalExpressionOperands" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The operands of a logical expression must have type Boolean, Integer or
BitString. However, if one of the operands is Boolean, then the other
must also be Boolean."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let type1 = self.operand1.type in
 let type2 = self.operand2.type in
 self.isBooleanType(type1) and self.isBooleanType(type2) or
 (self.isIntegerType(type1) or self.isBitStringType(type1)) and
 (self.isIntegerType(type2) or self.isBitStringType(type2))"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="logicalExpressionIsBitStringConversion1Derivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="BitString conversion is required if the first operand expression of a
logical expression has type Integer."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="logicalExpressionIsBitStringConversion2Derivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="BitString conversion is required if the second operand expression of a
logical expression has type Integer."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="logicalExpressionIsBitWiseDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A logical expression is bit-wise if the type of its first operand is not
Boolean."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitWise" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this is a bit-wise logical operation on bit strings."/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="SequenceConstructionExpression"/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="SequenceConstructionExpression"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="not self.isBooleanType(self.operand1.type)"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true" + transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the first operand expression requires BitString conversion."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.isIntegerType(self.operand1.type)"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion2" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true" + transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the second operand expression requires BitString conversion."/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="SequenceConstructionExpression"/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="SequenceConstructionExpression"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.isIntegerType(self.operand2.type)"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="SequenceConstructionExpression" eSuperTypes="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression used to construct a sequence of values."/> + </eAnnotations> + <eOperations name="collectionType" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If this expression is contained in the element list of a sequence
construction expression with a collection type, then return that type
name. Otherwise return null."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let expression = self.enclosingExpression() in
 if expression = null or 
 not expression.oclIsKindOf(SequenceConstructionExpression) then 
 null
 else
 let sequenceExpression = 
 expression.oclAsType(SequenceConstructionExpression) 
 in
 if sequenceExpression.hasMultiplicity then null
 else sequenceExpression.type
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.typeName <> null then
 let referents = self.typeName.referent->select(isClassifier()) in
 if referents->size() <> 1 then null
 else referents->any(true)
 endif
 else
 let collectionType = self.collectionType() in
 if collectionType = null then null
 else collectionType.collectionArgument()
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="constructorReference" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
				if self.type = null then null
				else
		 let name = self.type.name() in
		 let operationReferents = type.ownedMembers()->select(name() = name and isOperation()) in
		 if operationReferents->size() <> 1 then null
		 else operationReferents->any(true).constructorReference()
		 endif
			 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.hasMultiplicity then 1
 else if self.elements = null then 0 
 else self.elements.upper
 endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.hasMultiplicity then 1
 else if self.elements = null then 0 
 else self.elements.lower
 endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="sequenceConstructionExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the type name of a sequence construction expression is not empty,
then the type of the expression is the classifier to which the type name
resolves."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceConstructionExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a sequence construction expression has multiplicity, then its
multiplicity upper bound is given by its elements, if this is not empty,
and zero otherwise. If a sequence construction expression does not have
multiplicity, then its multiplicity upper bound is one."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceConstructionExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a sequence construction expression has multiplicity, then its
multiplicity lower bound is given by its elements, if this is not empty,
and zero otherwise. If a sequence construction expression does not have
multiplicity, then its multiplicity lower bound is one."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceConstructionExpressionType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the type name of a sequence construction expression is not empty, then
it must resolve to a non-template classifier. If the expression does not
have multiplicity, then the type name must not be empty and the
classifier to which it resolves must be the instantiation of a collection
class."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 (self.typeName <> null implies self.type <> null) and
 (not self.hasMultiplicity implies 
 self.type <> null and self.isCollectionClass(self.type)
 )"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceConstructionExpressionElementType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the elements of a sequence construction expression are given by a
sequence range, then the expression must have type Integer. If the
elements are given by a sequence element list, and the sequence
construction expression has a non-empty type, then each expression in the
list must have a type that either conforms to the type of the sequence
construction expression or is convertible to it by bit string conversion."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.elements <> null implies 
 let type =
 if self.hasMultiplicity or self.type = null then self.type
 else self.type.collectionArgument() 
 endif
 in
 self.elements.conformsTo(type)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceConstructionExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the elements of a sequence construction expression are given by a
sequence expression list, then the assignments before the first
expression in the list are the same as the assignments before the
sequence construction expression, and the assignments before each
subsequent expression are the assignments after the previous expression.
If the elements are given by a sequence range, the assignments before
both expressions in the range are the same as the assignments before the
sequence construction expression.
(See the SyntaxElement::assignmentsBefore(element) operation. See also
the SequenceExpressionList::assignmentsBefore(element) operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the elements of the sequence construction expression are given by a
sequence expression list, then return the assignments after the last
expression in the list (if the list is empty, then return the assignments
before the sequence construction expression). If the elements are given
by a sequence range, then return the union of the assignments after each
of the expressions in the range."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.elements = null then self.assignmentBefore
 else self.elements.assignmentsAfter()
 endif"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="elements" eType="#//SequenceElements" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The specification of the elements in the sequence."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="hasMultiplicity" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the sequence construction expression has a multiplicity indicator."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" eType="#//QualifiedName" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The name of the type of the elements in the sequence."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAny" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the sequence construction expression has an empty type."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="SequenceElements" abstract="true" eSuperTypes="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A specification of the elements of a sequence."/> + </eAnnotations> + <eOperations name="conformsTo" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eParameters name="type" eType="#//ElementReference"/> + </eOperations> + <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource"/> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The multiplicity upper bound of the elements of the sequence. The
derivation for this property is given in the subclasses of SequenceElements."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.upper()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The multiplicity lower bound of the elements of the sequence. The derivation
for this property is given in the subclasses of SequenceElements."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.lower()"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="CollectOrIterateExpression" eSuperTypes="#//SequenceExpansionExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A sequence expansion expression with a collect or iterate operation."/> + </eAnnotations> + <eOperations name="collectOrIterateExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A collect or iterate expression has the same type as its argument expression."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="collectOrIterateExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A collect or iterate expression has a multiplicity lower bound that is the product of the bounds of its primary and argument expressions."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="collectOrIterateExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A collect or iterate expression has a multiplicity upper bound that is the product of the bounds of its primary and argument expressions."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="IsUniqueExpression" eSuperTypes="#//SequenceExpansionExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A sequence expansion expression with a isUnique."/> + </eAnnotations> + <eOperations name="isUniqueExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An isUnique expression has the type Boolean."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="isUniqueExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An isUnique expression has a multiplicity lower bound of 1."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="isUniqueExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An isUnique expression has a multiplicity upper bound of 1."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="isUniqueExpressionExpressionArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The argument of an isUnique expression must have a multiplicity upper bound of 1."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ArithmeticExpression" eSuperTypes="#//BinaryExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A binary expression with an arithmetic operator."/> + </eAnnotations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.operand1.type"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.operand1.lower = 0 or self.operand2.lower = 0 then 0
 else 1
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="1"/> + </eAnnotations> + </eOperations> + <eOperations name="arithmeticExpressionIsConcatenationDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An arithmetic expression is a string concatenation expression if its type
is String."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="arithmeticExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The type of an arithmetic expression is the same as the type of its operands.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="arithmeticExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An arithmetic expression has a multiplicity lower bound of 0 if the lower
bound if either operand expression is 0 and 1 otherwise.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="arithmeticExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An arithmetic expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="arithmeticExpressionOperandTypes" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The operands of an arithmetic expression must both have type Integer,
unless the operator is +, in which case they may also both have type String."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.isIntegerType(self.operand1.type) and self.isIntegerType(self.operand2.type) or
 self.operator = '+' and self.isStringType(self.operand1.type) and self.isStringType(self.operand2.type)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isConcatenation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this is a string concatenation expression."/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="FeatureLeftHandSide"/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="FeatureLeftHandSide"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.isStringType(self.type)"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="FeatureLeftHandSide" eSuperTypes="#//LeftHandSide"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A left-hand side that is a property reference."/> + </eAnnotations> + <eOperations name="referent" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referents = self.feature().referent->select(isProperty()) in
 if referents->size() <> 1 then null
 else referents->any(true)
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="feature" eType="#//FeatureReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.expression.oclIsKindOf(PropertyAccessExpression) then
 self.expression.oclAsType(PropertyAccessExpression).featureReference
 else if self.expression.oclIsKindOf(SequenceAccessExpression) then
 let primary = self.expression.oclAsType(SequenceAccessExpression).primary in
 if primary.oclIsKindOf(PropertyAccessExpression) then
 primary.oclAsType(PropertyAccessExpression).featureReference
 else
 null
 endif
 else
 null
 endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="expression" eType="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.expression"/> + </eAnnotations> + </eOperations> + <eOperations name="index" eType="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.expression.oclIsKindOf(SequenceAccessExpression) then null
 else self.expression.oclAsType(SequenceAccessExpression).index
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="localName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="null"/> + </eAnnotations> + </eOperations> + <eOperations name="featureLeftHandSideAssignmentBeforeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before the expression of the feature reference of a
feature left-hand side are the assignments before the feature left-hand
side.
(And the assignments before an index are those after the feature reference.)
(See the LeftHandSide::assignmentsBefore(element) operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="featureLeftHandSideAssignmentAfterDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments after a feature left-hand side are the assignments after
the expression of the feature reference or, if there is an index, those
after the index expression.
(See the LeftHandSide::assignmentsAfter() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="featureLeftHandSideFeatureExpression" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The expression of the feature reference of a feature left-hand side must
have a multiplicity upper bound of 1."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let expression = self.feature().expression in
 let type = expression.type in
 expression.upper = 1 and
 -- Note: The following condition ensures that a data value update will
 -- be to an existing assigned name.
 (type <> null and type.isDataType()) implies self.isDataValueUpdate()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="featureLeftHandSideAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a feature left-hand side has an index, then the assignments before the
index expression are the assignments after the expression of the feature
reference.
(See the assignmentsBefore(element) operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="featureLeftHandSideReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The referent of a feature left-hand side is the structural feature to
which the feature reference of the left-hand side resolves.
(See the referent() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="featureLeftHandSideTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The type of a feature left-hand side is the type of its referent.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="featureLeftHandSideLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a feature left-hand side is indexed, then its lower bound is 1.
Otherwise, its lower bound is that of its referent.
(see the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="featureLeftHandSideUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a feature left-hand side is indexed, then its upper bound is 1.
Otherwise, its upper bound is that of its referent.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="featureLeftHandSideReferentConstraint" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The feature of a feature-left hand side must have a single referent that
is a structural feature."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent <> null"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="featureLeftHandSideIndexedFeature" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a feature left-hand side has an index, then the referent of the
feature must be ordered and non-unique."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.index() <> null implies
 let referent = self.referent in
 referent <> null and referent.isOrdered() and referent.isNonunique()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1" + eType="#//Expression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The structural feature being assigned.
property feature : FeatureReference { composes };

The actual expression parsed for this feature left-hand side."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ConditionalTestExpression" eSuperTypes="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression that uses the value of one operand expression to condition
the evaluation of one of two other operand expressions."/> + </eAnnotations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.commonAncestor(Set{self.operand2.type, self.operand3.type})"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.operand2.lower.min(self.operand3.lower)"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.operand2.upper = -1 or self.operand2.upper = -1 then -1
 else self.operand2.upper.max(self.operand3.upper)
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.operand2 = element or self.operand3 = element then
 self.operand1.assignmentAfter
 else
 self.assignmentBefore
 endif"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/> + </eOperations> + <eOperations name="conditionalTestExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The type of a conditional-test operator expression is the effective
common ancestor (if one exists) of the types of its second and third
operand expressions.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="conditionalTestExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The multiplicity lower bound of a conditional-test operator expression is
the minimum of the multiplicity lower bounds of its second and third
operand expressions.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="conditionalTestExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The multiplicity upper bound of a conditional-test operator expression is
the maximum of the multiplicity upper bounds of its second and third
operand expressions.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="conditionalTestExpressionCondition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The first operand expression of a conditional-test expression must be of
type Boolean and have a multiplicity upper bound of 1."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.isBooleanType(self.operand1.type) and self.operand1.upper = 1"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="conditionalTestExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before the first operand expression of a conditional-test
expression are the same as those before the conditional-test expression.
The assignments before the second and third operand expressions are the
same as those after the first operand expression.
(See the assignmentsBefore(element) operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="conditionalTestExpressionAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a name is unassigned after the first operand expression and has an
assigned source after one of the other operand expression, then it must
have an assigned source after both of those expressions."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.operand1.assignmentAfter.name->includesAll(
 self.operand2.assignmentAfter.name->asSet()->
 symmetricDifference(self.operand3.assignmentAfter.name->asSet())
 )"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns the assignments after the first operand expression, plus
assignments for any newly defined local names in the second and
third operand expressions. Local names that exist after the first operand
expression but are reassigned in the second or third operand expressions
are adjusted to have the conditional-test expression as their assigned
source. Local names that are newly defined in the second and third
operand expressions have the conditional-text expression as their source
and a type that is the effective common ancestor (if one exists) of the
types from the assignments after each of the second and third operands."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let assignments1 = self.operand1.assignmentAfter in
 let assignments2 = self.operand2.newAssignments() in
 let assignments3 = self.operand3.newAssignments() in
 let reassignments = assignments1->
 select(
 assignments2.name->includes(name) or 
 assignments3.name->includes(name)
 ).copy(self, null)->asSet() in
 let newAssignments = assignments2->
 select(
 assignments1.name->excludes(name) and
 assignments3.name->includes(name)
 )->collect(assignment |
 let otherAssignment = assignments3->any(name = assignment.name) in
 AssignedSource{
 name = assignment.name,
 source = self,
 type = self.commonAncestor(Set{assignment.type, otherAssignment.type}),
 lower = assignment.lower.min(otherAssignment.lower),
 upper = 
 if assignment.upper = -1 or otherAssignment.upper = -1 then -1
 else assignment.upper.max(otherAssignment.upper)
 endif
 }
 )->asSet()
 in
 self.updateAll(assignments1, reassignments->union(newAssignments))"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="operand1" lowerBound="1" + eType="#//Expression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The first operand expression, which provides the condition to be tested."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="operand2" lowerBound="1" + eType="#//Expression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The second operand expression, to be evaluated if the condition is true."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="operand3" lowerBound="1" + eType="#//Expression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The third operand expression, to be evaluated if the condition is false."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="InstanceCreationExpression" eSuperTypes="#//InvocationExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression used to create a new instance of a class or data type."/> + </eAnnotations> + <eOperations name="referent" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.constructor = null then null
 else
 let referents = self.constructor.referent in
 let classReferents = referents->select(isClass()) in
 let dataTypeReferents = referents->select(isDataType()) in
 if dataTypeReferents->size() = 1 and classReferents->isEmpty() then
 dataTypeReferents->any(true)
 else if dataTypeReferents->notEmpty() then
 null
 else
 -- TODO: Handle operation overloading.
 let operationReferents =
 if classReferents->size() <> 1 then
 referents->select(isOperation())
 else 
 let name = self.constructor.unqualifiedName.toName() in
 classReferents->any(true).ownedMembers()->
 select(name() = name and isOperation())
 endif
 in
 if operationReferents->size() = 1 and
 operationReferents->forAll(isConstructor()) then
 operationReferents->any(true).constructorReference()
 else if classReferents->size() = 1 then
 classReferents->any(true)
 else
 null
 endif endif
 endif endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="feature" lowerBound="1" eType="#//FeatureReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="null"/> + </eAnnotations> + </eOperations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referent = self.referent in
 if referent <> null and referent.isClassifier() then referent
 else self.InvocationExpression_type()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referent = self.referent in
 if referent <> null and referent.isClassifier() then 1
 else self.InvocationExpression_lower()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referent = self.referent in
 if referent <> null and referent.isClassifier() then 1
 else self.InvocationExpression_upper()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="instanceCreationExpressionIsObjectCreationDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An instance creation expression is an object creation if its referent is
not a data type."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="instanceCreationExpressionIsConstructorlessDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An instance creation expression is constructorless if its referent is a
class."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="instanceCreationExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The referent of an instance creation expression is normally the
constructor operation, class or data type to which the constructor name
resolves. However, if the referent is an operation whose class is
abstract or is a class that is itself abstract, and there is an
associated Impl class constructor, then the referent is the Impl class
constructor."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="instanceCreationExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="There is no feature for an instance creation expression."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="instanceCreationExpressionConstructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The constructor name must resolve to a constructor operation (that is
compatible with the tuple argument expressions), a class or a data type,
but not both a class and a data type."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referent = self.referent in
 referent <> null and
 (referent.isDataType() or referent.isClass() or referent.isOperation())"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="instanceCreationExpressionConstructorlessLegality" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the expression is constructorless, then its tuple must be empty and
the referent class must not have any owned operations that are constructors."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.isConstructorless implies 
 self.tuple.size() = 0 and 
 not self.referent.ownedMembers()->exists(isConstructor())"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="instanceCreationExpressionDataTypeCompatibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If an instance creation expression is a data value creation (not an
object creation), then the tuple argument expressions are matched with
the attributes of the named type."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 -- TODO: Once overloading resolution is implemented, change this to only
 -- be for data value creation.
 self.tuple.size() <= self.parameterCount() and
 self.tuple.input->forAll(input | self.parameterIsAssignableFrom(input)) and
 self.tuple.output->forAll(output | self.parameterIsAssignableTo(output))"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="instanceCreationExpressionReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the referent of an instance creation expression is an operation, then
the class of that operation must not be abstract. Otherwise, the referent
is a class or data type, which must not be abstract."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referent = self.referent in
 let classReferent =
 if referent <> null and referent.isOperation() then 
 referent.namespace()
 else
 referent
 endif
 in
 referent <> null and not referent.isAbstractClassifier()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="parameterElements" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns the parameters of a constructor operation or the attributes of a
data type, or an empty set for a constructorless instance creation."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isConstructorless then OrderedSet(ElementReference){}
 else self.InvocationExpression_parameterElements()
 endif"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isConstructorless" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this is a constructorless object creation expression."/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="PropertyAccessExpression"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let referent = self.referent in
 referent <> null and referent.isClass()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isObjectCreation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this is an object creation expression or a data value creation
expression."/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="PropertyAccessExpression"/> + <details key="unique" value="false"/> + <details key="upper" value="*"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let referent = self.referent in
 referent = null or not referent.isDataType()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="constructor" eType="#//QualifiedName" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The name of the class constructor operation to be invoked or the name of
a class or data type."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="PropertyAccessExpression" eSuperTypes="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression comprising a reference to a structural feature."/> + </eAnnotations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let feature = self.feature in
 if feature = null then null
 else feature.type()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let feature = self.feature in
 if feature = null then 0
 else if feature.upper() = -1 or 
 self.featureReference.expression.upper = -1 then -1
 else feature.upper() * self.featureReference.expression.upper
 endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let feature = self.feature in
 if feature = null then 0
 else feature.lower() * self.featureReference.expression.lower
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="propertyAccessExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The feature of a property access expression is the structural feature to
which its feature reference resolves."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="propertyAccessExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The type of a property access expression is the type of the referenced
feature.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="propertyAccessExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The multiplicity upper bound of a property access expression is given by
the product of the multiplicity upper bounds of the referenced feature
and the target expression.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="propertyAccessExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The multiplicity lower bound of a property access expression is given by
the product of the multiplicity lower bounds of the referenced feature
and the target expression.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="propertyAccessExpressionFeatureResolution" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The feature reference for a property access expression must resolve to a
single structural feature."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.feature <> null"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="propertyAccessExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before the expression of the feature reference of a
property access expression are the same as before the property access
expression."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments after a property access expression are the same as those
after the target expression of its feature reference."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.featureReference.expression.assignmentAfter"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="featureReference" lowerBound="1" + eType="#//FeatureReference" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A reference to a structural feature."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="feature" eType="#//ElementReference" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The referenced structural feature."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let referents = self.featureReference.referent->select(isProperty()) in
 if referents->size() <> 1 then null
 else referents->any(true)
 endif"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="NameExpression" eSuperTypes="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression that comprises a name reference."/> + </eAnnotations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let assignment = self.assignment in
 if assignment <> null then assignment.type
 else
 let enumerationLiteral = self.enumerationLiteral in
 if enumerationLiteral <> null then enumerationLiteral.type()
 else
 let propertyAccess = self.propertyAccess in
 if propertyAccess <> null then propertyAccess.type
 else null
 endif
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let assignment = self.assignment in
 if assignment <> null then assignment.upper
 else
 let enumerationLiteral = self.enumerationLiteral in
 if enumerationLiteral <> null then 1
 else
 let propertyAccess = self.propertyAccess in
 if propertyAccess <> null then propertyAccess.upper
 else 1 -- Note: This ensures a name defined as an "out" argument is not considered null.
 endif
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let assignment = self.assignment in
 if assignment <> null then assignment.lower
 else
 let enumerationLiteral = self.enumerationLiteral in
 if enumerationLiteral <> null then 1
 else
 let propertyAccess = self.propertyAccess in
 if propertyAccess <> null then propertyAccess.lower
 else 0
 endif
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="parameterReferent" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referents = self.name.referent->select(isParameter()) in
 if referents->size() <> 1 then null
 else referents->any(true)
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="assignmentFor" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the source of a local name is a For Statement, it must be a @parallel
local name and it is only legal if this name expression is the target of
a CollectionFunctions::add invocation."/> + </eAnnotations> + <eParameters name="localName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="assignmentFor_" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let assignments = self.assignmentBefore->select(name = localName) in
 if assignments->isEmpty() or 
 assignments->forAll(isParallelLocalName) and not self.isAddTargetName()
 then 
 null
 else 
 assignments->any(true)
 endif"/> + </eAnnotations> + <eParameters name="localName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="isAddTargetName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let expression = self.enclosingExpression() in
 if expression = null then false
 else expression.isAddTarget(self)
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="nameExpressionAssignmentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the name in a name expression is a local or parameter name, then its
assignment is its assigned source before the expression."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="nameExpressionEnumerationLiteralDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the name in a name expression resolves to an enumeration literal name,
then that is the enumeration literal for the expression."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="nameExpressionPropertyAccessDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the name in a name expression disambiguates to a feature reference,
then the equivalent property access expression has the disambiguation of
the name as its feature. The assignments before the property access
expression are the same as those before the name expression.
(See also the assignmentsBefore(element) operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="nameExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The type of a name expression is determined by its name. If the name is a
local name or parameter with an assignment, then the type of the name
expression is the type of that assignment. If the name is an enumeration
literal, then the type of the name expression is the corresponding
enumeration. If the name disambiguates to a feature reference, then the
type of the name expression is the type of the equivalent property access
expression.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="nameExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The multiplicity upper bound of a name expression is determined by its
name.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="nameExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The multiplicity lower bound of a name expression is determined by its
name.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="nameExpressionResolution" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the name referenced by this expression is not a disambiguated feature
reference or a local or parameter name, then it must resolve to exactly
one enumeration literal."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.validateNameExpressionResolution()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="validateNameExpressionResolution" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.propertyAccess <> null or 
 self.assignment <> null and self.assignment.source <> null or 
 self.enumerationLiteral <> null or
 -- NOTE: The following allows the name of a name expression that is an
 -- an argument of an out parameter to be unassigned.
 let owner = 
 if self.owner().oclIsKindOf(NamedExpression) then self.owner().owner()
 else self.owner()
 endif
 in
 owner.oclIsKindOf(_'Tuple') and
 owner.oclAsType(_'Tuple').output->exists(
 expression = self and
 owner.oclAsType(_'Tuple').invocation.parameterNamed(name).direction() = 'out'
 )"/> + </eAnnotations> + </eOperations> + <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If propertyAccess is not empty (i.e., if the referenced name disambiguates
to a feature reference), then return the assignments after the
property access expression. Otherwise, return the result of the superclass
updateAssignments operation."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let propertyAccess = self.propertyAccess in
 if propertyAccess <> null then propertyAccess.assignmentAfter
 else self.Expression_updateAssignments()
 endif"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="enumerationLiteral" eType="#//ElementReference" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The identified enumeration literal, if the referenced name is for an enumeration literal."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 if self.name.isFeatureReference then null
 else
 let referents = self.name.referent->select(isEnumerationLiteral()) in
 if referents->size() <> 1 then null
 else referents->any(true)
 endif
 endif"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="assignment" eType="#//AssignedSource" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assigned source for the referenced name, if the name is a local or
parameter name."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 if self.name.isFeatureReference then null
 else
 let localName = self.name.unqualifiedName.toName() in
 if name.qualification = null then
 self.assignmentFor(localName)
 else
 let parameterReferent = self.parameterReferent() in
 if parameterReferent <> null and 
 parameterReferent.namespace().equals(self.currentScope()) then
 self.assignmentFor(localName)
 else
 null
 endif
 endif
 endif"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="propertyAccess" eType="#//PropertyAccessExpression" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The equivalent property access expression, if the referenced name
disambiguates to a feature reference."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let disambiguation = self.name.disambiguation in
 if disambiguation = null then null
 else
 PropertyAccessExpression{
 featureReference = disambiguation,
 owner = self
 } 
 endif"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="name" lowerBound="1" eType="#//QualifiedName" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The qualified name referenced in this expression. (For a local name, this
will actually have no qualification.)"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="BitStringUnaryExpression" eSuperTypes="#//UnaryExpression"> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.bitStringType()"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.operand.lower"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="1"/> + </eAnnotations> + </eOperations> + <eOperations name="bitStringUnaryExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A BitString unary expression has type BitString.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="bitStringUnaryExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A BitString unary expression has the same multiplicity lower bound as its
operand expression.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="bitStringUnaryExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A BitString unary expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="bitStringUnaryExpressionOperand" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The operand expression of a BitString unary expression must have type
BitString or Integer and a multiplicity upper bound of 1."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let operandType = self.operand.type in
 (self.isBitStringType(operandType) or self.isIntegerType(operandType)) and
 self.operand.upper = 1"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="bitStringUnaryExpressionIsBitStringConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="BitString conversion is required if the operand expression of a BitString
unary expression has type Integer."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true" + transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether BitString conversion is required on the operand expression."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.isIntegerType(self.operand.type)"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="FeatureInvocationExpression" eSuperTypes="#//InvocationExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An invocation of a feature referenced on a sequence of instances."/> + </eAnnotations> + <eOperations name="feature" eType="#//FeatureReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.target <> null then self.target
 else
 let outerScope = self.currentScope().namespace() in
 if outerScope = null or not outerScope.isClass() then null
 else
 FeatureReference{
 expression = ThisExpression{},
 nameBinding = NameBinding{name = outerScope.name()},
 owner = self
 }
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="referent" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let feature = self.feature in
 if feature = null then null
 else feature.behavioralFeatureReferent(self)
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="featureInvocationExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a feature invocation expression is an implicit object destruction, it
has no referent. Otherwise, its referent is the operation or signal being
invoked.
(See the referent() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="featureInvocationExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a feature invocation expression has an explicit target, then that is
its feature. Otherwise, it is an alternative constructor call with
its feature determined implicitly.
(See the feature() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="featureInvocationExpressionReferentExists" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a feature invocation expression is not an implicit destructor call,
then it must be possible to determine a single valid referent for it
according to the overloading resolution rules."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.isImplicit or self.referent <> null and
 -- TODO: Remove this check once overloading resolution is implemented.
 self.tuple.size() <= self.parameterCount() and
 self.tuple.input()->forAll(input | self.parameterIsAssignableFrom(input)) and
 self.tuple.output()->forAll(output | self.parameterIsAssignableTo(output))"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="featureInvocationExpressionAlternativeConstructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An alternative constructor invocation may only occur in an expression
statement as the first statement in the definition for the method of a
constructor operation."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.alternativeConstructorIsValid()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="featureInvocationExpressionImplicitAlternativeConstructor" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If there is no target feature expression, then the implicit feature with
the same name as the target type must be a constructor."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.target = null implies
 let referent = self.referent in
 referent <> null and referent.isConstructor()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="target" eType="#//FeatureReference" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A feature reference to the target feature to be invoked."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="BehaviorInvocationExpression" eSuperTypes="#//InvocationExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An invocation of a behavior referenced by name."/> + </eAnnotations> + <eOperations name="isAddTarget" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.feature <> null then false
 else
 let collectionFunctionAdd = self.collectionFunctionAdd() in
 if collectionFunctionAdd = null then false
 else
 let parameters = collectionFunctionAdd.parameters() in
 if parameters->isEmpty() then false
 else
 collectionFunctionAdd.containedIn(self.target.referent->asBag()) and
 self.tuple.outputFor(parameters)->exists(
 name = parameters->at(1).name() and
 expression = targetExpression
 )
 endif
 endif
 endif"/> + </eAnnotations> + <eParameters name="targetExpression" lowerBound="1" eType="#//Expression"/> + </eOperations> + <eOperations name="referent" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="referent1()"/> + </eAnnotations> + </eOperations> + <eOperations name="referent1" eType="#//ElementReference"/> + <eOperations name="BehaviorInvocation_referent" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let feature = self.feature() in
 if feature <> null then feature.behavioralFeatureReferent(self)
 else
 let referents = self.target.referent in
 if referents->select(isBehavior())->size() = 1 then
 let referent = referents->any(isBehavior()) in
 if referent.isTemplate() then 
 self.bindTemplateImplicitArguments(referent, null)
 else referent
 endif
 else if referents->select(isAssociationEnd())->size() = 1 then
 referents->any(isAssociationEnd())
 else
 null
 endif endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="feature" eType="#//FeatureReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.target.disambiguation"/> + </eAnnotations> + </eOperations> + <eOperations name="behaviorInvocationExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the target of a behavior invocation expression resolves to a behavior,
then the referent of the expression is that behavior. If the target
disambiguates to a feature reference, then the reference is the operation
or signal being invoked. Otherwise, if the target resolves to a property
that is an association end, then the referent is that property.
(See the referent() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="behaviorInvocationExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the target qualified name disambiguates to a feature reference, then
the feature of a behavior invocation expression is that feature reference.
(See the feature() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="behaviorInvocationExpressionReferentConstraint" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the target qualified name does not disambiguate to a feature reference,
then it must resolve to a behavior or an association end. Otherwise it
must resolve to a single feature referent according to the overloading
resolution rules, unless it is an implicit destructor call (in which case
it has no referent)."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.isImplicit or 
 let referent = self.referent in
 referent <> null and 
 -- NOTE: This check prevents the invocation from disambiguating to an 
 -- illegal constructor invocation.
 not referent.isConstructor() and
 -- Also check that the association owns all its ends.
 referent.isAssociationEnd() implies
 	referent.association().properties()->forAll(isAssociationEnd())"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="behaviorInvocationExpressionArgumentCompatibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the target qualified name does not disambiguate to a feature reference,
then each input argument expression must be assignable to its corresponding
parameter and each output argument expression must be assignable from its
corresponding parameter. (Note that this implies that the type of an
argument expression for an inout parameter must be the same as the type
of that parameter.)"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 -- TODO: Handle overloading for feature invocations.
 self.tuple.size() <= self.parameterCount() and
 self.tuple.input->forAll(input | self.parameterIsAssignableFrom(input)) and
 self.tuple.output->forAll(output | self.parameterIsAssignableTo(output))"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="behaviorInvocationExpressionAlternativeConstructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The referent may only be a constructor (as a result of the target
disambiguating to a feature reference) if this behavior invocation
expression is the expression of an expression statement that is the first
statement in the definition for the method of a constructor operation."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.alternativeConstructorIsValid()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="target" lowerBound="1" + eType="#//QualifiedName" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The qualified name of the behavior to be invoked."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ShiftExpression" eSuperTypes="#//BinaryExpression"> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.bitStringType()"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.operand1.lower = 0 or self.operand2.lower = 0 then 0
 else 1
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="1"/> + </eAnnotations> + </eOperations> + <eOperations name="shiftExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A shift expression has type BitString.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="shiftExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A shift expression has a multiplicity lower bound of 0 if the lower bound
if either operand expression is 0 and 1 otherwise.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="shiftExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A shift expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="shiftExpressionOperands" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The first operand expression of a shift expression must have the type
BitString or Integer. The second operand expression must have the type
Integer."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let type1 = self.operand1.type in
 let type2 = self.operand2.type in
 (self.isBitStringType(type1) or self.isIntegerType(type1)) and self.isIntegerType(type2)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="shiftExpressionIsBitStringConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="BitString conversion is required if the first operand expression of a
shift expression has type Integer."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true" + transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the first operand expression requires BitString conversion."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.isIntegerType(self.operand1.type)"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="UnboundedLiteralExpression" eSuperTypes="#//LiteralExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression that comprises an unbounded value literal."/> + </eAnnotations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.unlimitedNaturalType()"/> + </eAnnotations> + </eOperations> + <eOperations name="unboundedLiteralExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The type of an unbounded literal expression is UnlimitedNatural.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ThisExpression" eSuperTypes="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression comprising the keyword ?this?."/> + </eAnnotations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let currentScope = self.currentScope() in
 if currentScope = null then 
 null
 else if currentScope.isOperation() or currentScope.isMethod() then
 currentScope.namespace()
 else if currentScope.isBehavior() then
 let context = currentScope.context() in
 if context = null then currentScope else context endif
 else if currentScope.isClass() then
 currentScope
 else
 null
 endif endif endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="1"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="1"/> + </eAnnotations> + </eOperations> + <eOperations name="thisExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The static type of a this expression is the statically determined context
classifier for the context in which the this expression occurs.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="thisExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The multiplicity upper bound of a this expression is always 1.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="thisExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The multiplicity lower bound of a this expression is always 1.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ClassificationExpression" eSuperTypes="#//UnaryExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression used to test the dynamic type of its operand."/> + </eAnnotations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.booleanType()"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.operand.lower"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="1"/> + </eAnnotations> + </eOperations> + <eOperations name="classificationExpressionIsDirectDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A classification expression is direct if its operator is "hastype"."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="classificationExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The referent of a classification expression is the classifier to which
the type name resolves."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="classificationExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A classification expression has type Boolean.
(see the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="classificationExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A classification expression has a multiplicity lower bound that is the
same as the lower bound of its operand expression.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="classificationExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A classification expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="classificationExpressionTypeName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The type name in a classification expression must resolve to a non-template classifier."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent <> null and not self.referent.isTemplate()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="classificationExpressionOperand" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The operand expression of a classification expression must have a multiplicity upper bound of 1."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.operand.upper = 1"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="referent" eType="#//ElementReference" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The classifier to which the type name of the expression resolves."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let referents = self.typeName.referent->select(isClassifier()) in
 if referents->size() <> 1 then null
 else referents->any(true)
 endif"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDirect" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the test is for the operand to have the given type directly or to only conform to the given type."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.operator = 'hastype'"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" lowerBound="1" + eType="#//QualifiedName" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The name of the type that the operand is to be tested against."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="SuperInvocationExpression" eSuperTypes="#//InvocationExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An invocation expression used to invoke an operation of a superclass."/> + </eAnnotations> + <eOperations name="referent" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let context = self.currentScope().namespace() in
 if context = null or not context.isClass() then
 null
 else
 let superclasses =
 if target = null or target.qualification = null then
 context.parents()
 else
 target.qualification.referent->select(isClass())
 endif
 in
 if (target = null or target.qualification <> null) and
 superclasses->size() <> 1 then null
 else
 let name =
 if target = null then superclasses->any(true).name()
 else target.unqualifiedName.toName()
 endif
 in
 let referents = superclasses.base().members()->
 select(isOperation() and name() = name) 
 in
 -- TODO: Handle overloading resolution.
 if referents->size() <> 1 then
 null
 else
 referents->any(true)
 endif
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="feature" eType="#//FeatureReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="null"/> + </eAnnotations> + </eOperations> + <eOperations name="context" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let currentScope = self.currentScope() in
 if currentScope = null then null
 else if currentScope.isClassifier() and not currentScope.isMethod() and
 not currentScope.isActiveBehavior() then
 currentScope
 else if currentScope.isActiveBehavior() then
 currentScope.activeClass()
 else
 let outerScope = currentScope.namespace() in
 if outerScope = null or not outerScope.isClassifier() then null
 else outerScope
 endif
 endif endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="superInvocationExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The referent of a super invocation expression is the method behavior of
the operation identified using the overloading resolution rules.
(See the referent() operation. Actually returns the operation, not the
method.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="superInvocationExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="There is no feature for a super invocation.
(See the feature() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="superInvocationExpressionQualification" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the target has a qualification, then this must resolve to one of the
superclasses of the current context class."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.target = null or
 let qualification = self.target.qualification in
 qualification <> null implies
 let superclass = qualification.referent->select(isClass()) in
 let context = self.context() in
 superclass->size() = 1 and context <> null and
 superclass->forAll(containedIn(context.parents()->asBag()))"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="superInvocationExpressionImplicitTarget" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the target is empty, the referent must be the method for a constructor
operation and the context class for the behavior containing the super
invocation expression must have exactly one superclass."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.target = null implies
 let referent = self.referent in
 let context = self.context() in
 referent <> null and referent.isConstructor() and
 context <> null and context.parents()->size() = 1"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="superInvocationExpressionConstructorCall" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the referent is the method of a constructor operation, the super
invocation expression must occur in an expression statement at the start
of the definition for the method of a constructor operation, such that
any statements preceding it are also super constructor invocations."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referent = self.referent in
 let context = self.context() in
 referent <> null and referent.isConstructor() and context <> null implies
 let operation = self.currentScope().specification() in
 operation.isConstructor() and
 let statement = self.enclosingStatement() in
 statement <> null and statement.oclIsKindOf(ExpressionStatement) and
 let annotatedStatement = statement.owner() in
 let owner = annotatedStatement.owner() in
 owner <> null implies owner.oclIsKindOf(Block) and
 let block = owner.oclAsType(Block) in
 block.enclosingStatement() = null and
 let classReference = referent.namespace() in
 let i = block.statement->indexOf(annotatedStatement) in
 i = 1 or
 block.statement->subOrderedSet(1, i-1).statement->forAll(
 oclIsKindOf(ExpressionStatement) and
 let expression = oclAsType(ExpressionStatement).expression in
 expression.oclIsKindOf(SuperInvocationExpression) and
 -- NOTE: This checks to ensure that no previous
 -- super-constructor invocation is for the same
 -- superclass
 not expression.oclAsType(SuperInvocationExpression).
 referent.namespace().equals(classReference)
 )"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="superInvocationExpressionDestructorCall" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the referent is the method of a destructor operation, the super
invocation expression must occur within the method of a destructor
operation."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referent = self.referent in
 referent <> null and referent.isDestructor() implies
 let operation = self.currentScope() in
 operation <> null and operation.isDestructor()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="superInvocationExpressionOperation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="It must be possible to identify a single valid operation denoted by the
target of a super invocation expression that satisfies the overloading
resolution rules."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.referent <> null and
 -- TODO: Remove this check once overloading resolution is implemented.
 self.tuple.size() <= self.parameterCount() and
 self.tuple.input->forAll(input | self.parameterIsAssignableFrom(input)) and
 self.tuple.output->forAll(output | self.parameterIsAssignableTo(output))"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="target" eType="#//QualifiedName" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The name of the operation to be invoked, optionally qualified with the
name of the appropriate superclass."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="IncrementOrDecrementExpression" eSuperTypes="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A unary expression with either an increment or decrement operator."/> + </eAnnotations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.integerType()"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.operand.lower"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="1"/> + </eAnnotations> + </eOperations> + <eOperations name="incrementOrDecrementExpressionAssignmentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the operand of an increment or decrement expression is a name, then
the assignment for the expression is a new assigned source for the name
with the expression as the source."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="incrementOrDecrementExpressionIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An increment or decrement expression has a feature as its operand if the
operand is a kind of FeatureLeftHandSide."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="incrementOrDecrementExpressionIsIndexedDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An increment or decrement expression is indexed if its operand is indexed."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="incrementOrDecrementExpressionIsDataValueUpdateDerivation" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An increment or decrement expression is a data value update if its
operand is an attribute of a data value held in a local name or parameter."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="incrementOrDecrementExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the operand of an increment or decrement expression is a feature,
then the referent for the operand."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="incrementOrDecrementExpressionExpressionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The effective expression for the operand of an increment or decrement
expression is the operand treated as a name expression, property access
expression or sequence access expression, as appropriate for evaluation
to obtain the original value to be updated."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="incrementOrDecrementExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An increment or decrement expression has type Integer.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="incrementOrDecrementExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An increment or decrement expression has the same multiplicity lower
bound as its operand expression.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="incrementOrDecrementExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An increment or decrement expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="incrementOrDecrementExpressionOperand" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The operand expression must have type Integer and a multiplicity upper bound of 1."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.isIntegerType(self.operand.type) and self.operand.upper = 1"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="incrementOrDecrementExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before the operand of an increment or decrement
expression are the same as those before the increment or decrement
expression.
(See the SyntaxElement::assignmentsBefore(element) operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments after an increment and decrement expression include all
those after its operand expression. Further, if the operand expression,
considered as a left hand side, is a local name, then this is reassigned."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let assignment = self.assignment in
 if assignment = null then self.operand.assignmentAfter
 else assignment.update(self.operand.assignmentAfter)
 endif"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="assignment" eType="#//AssignedSource" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the operand is a name, then the new assigned source for that name."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 if self.isFeature then null
 else
 let assignments = 
 self.assignmentBefore->select(name = self.operand.localName()) in
 if assignments->isEmpty() then null
 else assignments->any(true).copy(self, null)
 endif
 endif"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="operand" lowerBound="1" + eType="#//LeftHandSide" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The operand, which must have the form of an assignment left-hand side."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The effective expression used to obtain the original value of the operand
to be updated."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.operand.expression()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="feature" eType="#//ElementReference" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the operand is a feature, then the referent for that feature."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 if not self.isFeature then null
 else self.operand.referent()
 endif"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isPrefix" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the operator is being used as a prefix or a postfix."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isFeature" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the operand is a feature or not."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.operand.feature() <> null"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isIndexed" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the operand has an index or not."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.operand.index() <> null"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDataValueUpdate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this expression updates an attribute of a data value held in a
local name or parameter."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.operand.isDataValueUpdate()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The increment ("++") or decrement ("--") operator for this expression."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="BooleanLiteralExpression" eSuperTypes="#//LiteralExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression that comprises a Boolean literal."/> + </eAnnotations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.booleanType()"/> + </eAnnotations> + </eOperations> + <eOperations name="booleanLiteralExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The type of a boolean literal expression is Boolean.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="image" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The textual image of the literal token for this expression."/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="NamedTuple"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="NamedTuple" eSuperTypes="#//Tuple"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A tuple in which the arguments are matched to parameters by name."/> + </eAnnotations> + <eOperations name="size" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.namedExpression->size()"/> + </eAnnotations> + </eOperations> + <eOperations name="inputFor" ordered="false" upperBound="-1" eType="#//InputNamedExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 parameters->select(
 let direction = direction() in
 direction = 'in' or direction = 'inout' 
 )->collect(parameter |
 let parameterName = parameter.name() in
 let arguments = self.namedExpression->select(actualName() = parameterName) in
 if arguments->isEmpty() then
 InputNamedExpression{
 name = parameterName,
 expression = SequenceConstructionExpression{
 hasMultiplicity = true
 },
 owner = self
 }
 else
 let argument : NamedExpression = arguments->any(true) in
 InputNamedExpression{
 name = parameterName,
 expression = argument.expression,
 index = argument.index,
 owner = self
 }
 endif
 )->asSet()"/> + </eAnnotations> + <eParameters name="parameters" upperBound="-1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="outputFor" ordered="false" upperBound="-1" eType="#//OutputNamedExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 parameters->select(parameter |
 let direction = parameter.direction() in
 -- NOTE: This allows missing arguments for out parameters.
 direction = 'out' and 
 self.namedExpression->exists(actualName() = parameter.name()) or
 direction = 'inout' 
 )->collect(parameter |
 let parameterName = parameter.name() in
 let arguments = self.namedExpression->select(actualName() = parameterName) in
 if arguments->isEmpty() then
 -- NOTE: This will cause an error for a missing argument for
 -- an inout parameter.
 OutputNamedExpression{
 name = parameterName,
 expression = SequenceConstructionExpression{
 hasMultiplicity = true
 },
 owner = self
 }
 else
 let argument : NamedExpression = arguments->any(true) in
 OutputNamedExpression{
 name = parameterName,
 index = argument.index,
 expression = argument.expression,
 owner = self
 }
 endif
 )->asSet()"/> + </eAnnotations> + <eParameters name="parameters" upperBound="-1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="outputForExpression" eType="#//OutputNamedExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
				let arguments = self.namedExpression->select(a | a.expression = expression) in
					if arguments->isEmpty() then null
					else
						let argument = arguments->any(true) in
							OutputNamedExpression{
								name = argument.name,
								index = argument.index,
								expression = expression,
								owner = self
							}
					endif"/> + </eAnnotations> + <eParameters name="expression" lowerBound="1" eType="#//Expression"/> + </eOperations> + <eOperations name="namedTupleArgumentNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The name of a named expression of a named tuple must be the name of a
parameter of the invocation the tuple is for. No two named expressions
may have the same name."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let names = self.invocation.parameter.name() in
 self.namedExpression->forAll(names->includes(actualName())) and
 self.namedExpression->isUnique(actualName())"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="namedExpression" lowerBound="1" + upperBound="-1" eType="#//NamedExpression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The argument expressions for this tuple paired with the corresponding
parameter names."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="NaturalLiteralExpression" eSuperTypes="#//LiteralExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression that comprises a natural literal."/> + </eAnnotations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.naturalType()"/> + </eAnnotations> + </eOperations> + <eOperations name="naturalLiteralExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The type of a natural literal is the Alf library type Natural. NOTE: If
the context of a natural literal expression unambiguously requires either
an Integer or an UnlimitedNatural value, then the result of the literal
expression is implicitly downcast to the required type. If the context is
ambiguous, however, than an explicit cast to Integer or UnlimitedNatural
must be used.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="image" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The textual image of the literal token for this expression."/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="SequenceRange"/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="SequenceRange"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="SequenceRange" eSuperTypes="#//SequenceElements"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A specification of the elements of a sequence as a range of integers."/> + </eAnnotations> + <eOperations name="conformsTo" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The lower and upper range expressions must have type Integer."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let rangeLowerType = self.rangeLower.type in
 let rangeUpperType = self.rangeUpper.type in
 rangeLowerType <> null and self.isIntegerType(rangeLowerType) and
 rangeUpperType <> null and self.isIntegerType(rangeUpperType)"/> + </eAnnotations> + <eParameters name="type" eType="#//ElementReference"/> + </eOperations> + <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.updateAll(
 self.updateAll(
 self.assignmentsBefore(),
 self.rangeLower.assignmentAfter
 ),
 self.rangeUpper.assignmentAfter
 )"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="-1"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="0"/> + </eAnnotations> + </eOperations> + <eOperations name="sequenceRangeLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The multiplicity lower bound of a sequence range is 0.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceRangeUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The multiplicity upper bound of a sequence range is * (since it is not
possible, in general, to statically determine a more constrained upper
bound).
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceRangeExpressionMultiplicity" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Both expressions in a sequence range must have a multiplicity upper bound
of 1."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.rangeLower.upper = 1 and self.rangeUpper.upper = 1"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceRangeAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A local name may be defined or reassigned in at most one of the
expressions of a sequence range."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.rangeLower.newAssignments().name->
 excludesAll(self.rangeUpper.newAssignments().name)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="rangeLower" lowerBound="1" + eType="#//Expression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The expression whose value gives the lower bound for the range."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="rangeUpper" lowerBound="1" + eType="#//Expression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The expression whose value gives the upper bound for the range."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="NameLeftHandSide" eSuperTypes="#//LeftHandSide"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A left-hand side that is a name."/> + </eAnnotations> + <eOperations name="target" eType="#//QualifiedName"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.target"/> + </eAnnotations> + </eOperations> + <eOperations name="index" eType="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.index"/> + </eAnnotations> + </eOperations> + <eOperations name="referent" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let feature = self.feature() in
 if feature <> null then
 let referents = feature.referent->select(isProperty()) in
 if referents->size() <> 1 then null
 else referents->any(true)
 endif
 else
 let oldAssignment = self.oldAssignment() in
 if oldAssignment = null then null
 else
 let parameterReferent = self.parameterReferent() in
 if parameterReferent <> null then parameterReferent
 else oldAssignment.source.toReference()
 endif 
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="parameterReferent" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referents = self.target().referent->select(isParameter()) in
 if referents->size() <> 1 then null
 else referents->any(true)
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let oldAssignment = self.oldAssignment() in
 if oldAssignment = null then self.LeftHandSide_type()
 else oldAssignment.type
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let oldAssignment = self.oldAssignment() in
 if self.index <> null or oldAssignment = null then 
 self.LeftHandSide_upper()
 else oldAssignment.upper
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let oldAssignment = self.oldAssignment() in
 if self.index <> null or oldAssignment = null then 
 self.LeftHandSide_lower()
 else oldAssignment.lower
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="oldAssignment" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referents = self.assignmentBefore->select(name = self.localName()) in
 if referents->isEmpty() then null
 else referents->any(true)
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="feature" eType="#//FeatureReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.target().disambiguation"/> + </eAnnotations> + </eOperations> + <eOperations name="expression" lowerBound="1" eType="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
				let expression = self.primary() in
					if self.index = null then expression
					else
						SequenceAccessExpression{
							primary = expression,
							index = index.reference(),
							owner = self
						}
					endif"/> + </eAnnotations> + </eOperations> + <eOperations name="primary" lowerBound="1" eType="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
				let feature = self.feature() in
				if feature = null then
					NameExpression{
						name = self.target.copy(),
						owner = self
					}
				else
					PropertyAccessExpression{
						feature = feature,
						owner = self
					}
				endif"/> + </eAnnotations> + </eOperations> + <eOperations name="localName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.feature() <> null then null
 else self.target().unqualifiedName.toName()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="nameLeftHandSideAssignmentAfterDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a name left-hand side has an index, then the assignments after the
left-hand side are the same as the assignments after the index. If the
left-hand side has no index, but its target disambiguates to a feature
reference, then the assignments after the left-hand side are the
assignments after the feature expression. Otherwise the assignments
after the left-hand side are the same as the assignments before the
left-hand side.
(See the LeftHandSide::assignmentsAfter() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="nameLeftHandSideTargetAssignment" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The target of a name left hand side may not already have an assigned
source that is a loop variable definition, an annotation, a sequence
expansion expression or a parameter that is an in parameter."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referent = self.referent in
 if referent = null then true
 else if referent.isParameter() then
 referent.direction() <> 'in'
 else if referent.isProperty() then
 let expression = self.feature().expression in
 -- This condition ensures that there will be an assigned name
 -- for an assignment to an attribute of a data type.
 expression.type.isDataType() implies self.isDataValueUpdate()
 else
 not (referent.isLoopVariable() or
 referent.isAnnotation() or
 referent.isSequenceExpansionExpression()
 )
 endif endif endif"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="nameLeftHandSideAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the target of a name left-hand side disambiguates to a feature
reference, then the assignments before the expression of the feature
reference are the assignments before the left-hand side. If a name
left-hand side has an index, then the target must either disambiguate
to a feature reference or already have an assigned source, and the
assignments before the index expression are the assignments before the
left-hand side or, if the target disambiguates to a feature reference,
the assignments after the expression of the feature reference.
(See also the LeftHandSide::assignmentsBefore(element) operation.)"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.index <> null implies 
 (self.feature() <> null or self.oldAssignment() <> null)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="nameLeftHandSideReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the target of a name left-hand side disambiguates to a structural
feature, then the referent of the left-hand side is that feature. If the
target resolves to a parameter, then the referent is that parameter. If
the target resolves to a local name, then the referent is the assigned
source for that local name, if it has one.
(See the referent() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="nameLeftHandSideLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a name left-hand side is indexed, then its lower bound is 1.
Otherwise, if the left-hand side is for a local name with an assignment,
than its lower bound is that of the assignment, else, if it has a
referent, then its lower bound is that of the referent.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="nameLeftHandSideUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a name left-hand side is indexed, then its upper bound is 1.
Otherwise, if the left-hand side is for a local name with an assignment,
than its upper bound is that of the assignment, else, if it has a
referent, then its upper bound is that of the referent.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="nameLeftHandSideTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a name left-hand side is for a local name with an assignment, then its
type is that of that assignment. Otherwise, if the left-hand side has a
referent, then its type is the type of that referent.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="nameLeftHandSideTargetResolution" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the target of a name left-hand side is qualified, then, if it does not
disambiguate to a feature, it must have a referent that is a parameter of
an operation or behavior that is the current scope the left-hand is in,
and, if it does disambiguate to a feature, it must have a single referent
that is a structural feature."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.target().qualification <> null implies
 let referent = self.referent in
 referent <> null and referent.isParameter() or
 let feature = self.feature() in
 feature <> null and 
 -- TODO: This should be a separate constraint.
 feature.expression.upper = 1"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="nameLeftHandSideIndexedFeature" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the target of a name left-hand side disambiguates to a feature
reference, and the left-hand side has an index, then the referent of the
feature reference must be ordered and non-unique."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.index() <> null implies
 let referent = self.referent in
 referent <> null and referent.isFeature() implies
 referent.isOrdered() and referent.isNonunique()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="nameLeftHandSideNontemplateTarget" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The target of a name left-hand side must not have a template binding."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.target.templateName = null"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="target" eType="#//QualifiedName" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The name that is the target of the assignment."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="index" eType="#//Expression" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An optional expression that evaluates to an index into the values of an
ordered sequence."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="EffectiveLeftHandSide" eSuperTypes="#//NameLeftHandSide"> + <eOperations name="target" eType="#//QualifiedName"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let expression = self.primary() in
 if expression.oclIsKindOf(NameExpression) then
 expression.oclAsType(NameExpression).name
 else
 null
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="index" eType="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.expression.oclIsKindOf(SequenceAccessExpression) then
 self.expression.oclAsType(SequenceAccessExpression).index
 else
 null
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="feature" eType="#//FeatureReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let primary = self.primary() in
 if expression.oclIsKindOf(NameExpression) then
 expression.oclAsType(NameExpression).name.disambiguation
 else if expression.oclIsKindOf(PropertyAccessExpression) then
 expression.oclAsType(PropertyAccessExpression).featureReference
 else
 null
 endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="primary" lowerBound="1" eType="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.expression.oclIsKindOf(SequenceAccessExpression) then
 self.expression.oclAsType(SequenceAccessExpression).primary
 else
 expression
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="expression" eType="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.expression"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1" + eType="#//Expression"/> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="SequenceReductionExpression" eSuperTypes="#//Expression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An expression used to reduce a sequence of values effectively by inserting
a binary operation between the values."/> + </eAnnotations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.primary.expression.type"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="1"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="1"/> + </eAnnotations> + </eOperations> + <eOperations name="sequenceReductionExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The referent for a sequence reduction expression is the behavior denoted
by the behavior name of the expression."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceReductionExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A sequence reduction expression has the same type as its primary
expression.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceReductionExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A sequence reduction expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceReductionExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A sequence reduction expression has a multiplicity lower bound of 1.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceReductionExpressionBehavior" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The behavior name in a sequence reduction expression must denote a behavior."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let referent = self.referent in
 referent <> null and not referent.isTemplate()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceReductionExpressionBehaviorParameters" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The referent behavior must have two in parameters, a return parameter and
no other parameters. The parameters must all have the same type as the
argument expression and multiplicity [1..1]."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 referent <> null implies
 let parameters = referent.parameters() in
 let returnParameter = referent.returnParameter() in
 let type = self.type in
 parameters->size() = 2 and returnParameter <> null and
 parameters->forAll(direction() = 'in') and
 parameters->including(returnParameter)->forAll(
 lower() = 1 and upper() = 1 and
 let parameterType = type() in
 parameterType = null and type = null or
 parameterType <> null and parameterType.equals(type) 
 )"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceReductionExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before the target expression of a sequence reduction
expression are the same as the assignments before the sequence reduction
expression.
(See the SyntaxElement::assignmentsBefore(element) operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments after a sequence reduction expression are the same as
after its primary expression."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.primary.expression.assignmentAfter"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="referent" eType="#//ElementReference" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A reference to the behavior to be used as the reducer."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let referents = self.behaviorName.referent->select(isBehavior()) in
 if referents->size() <> 1 then null
 else referents->any(true)
 endif"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isOrdered" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this is an ordered reduction or not."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="primary" lowerBound="1" + eType="#//ExtentOrExpression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The target class name or primary expression for the reduction."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="behaviorName" lowerBound="1" + eType="#//QualifiedName" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The name of the behavior to be used as the reducer."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="SequenceExpressionList" eSuperTypes="#//SequenceElements"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A specification of the elements of a sequence using a list of expressions."/> + </eAnnotations> + <eOperations name="conformsTo" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Each expression in the list must have a multiplicity upper bound of no
more than 1. The type of each expression in the list must conform to
the given type (with allowance for bit string conversion)."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.element->forAll(element |
 let elementType = element.type in
 element.upper <= 1 and 
 (type = null or elementType <> null and
 (elementType.conformsTo(type) or
 self.isIntegerType(elementType) and self.isBitStringType(type)
 )
 )
 )"/> + </eAnnotations> + <eParameters name="type" eType="#//ElementReference"/> + </eOperations> + <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.element->includes(element) or 
 self.element->first() = element then
 self.assignmentsBefore()
 else
 let i = self.element->indexOf(element) in
 self.element->at(i-1).assignmentAfter
 endif"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/> + </eOperations> + <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element->last().assignmentAfter"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.element.lower->sum()"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let upperBounds = self.element.upper in
 if upperBounds->includes(-1) then -1
 else upperBounds->sum()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="sequenceExpressionListLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The multiplicity lower bound of the elements of a sequence expression
list is given by the sum of the lower bounds of each of the expressions
in the list.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="sequenceExpressionListUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The multiplicity upper bound of the elements of a sequence expression
list is given by the sum of the upper bounds of each of the expressions
in the list. If any of the expressions in the list have an unbounded
upper bound, then the sequence expression list also has an unbounded
upper bound.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="element" lowerBound="1" + upperBound="-1" eType="#//Expression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The list of expressions whose values determine the elements of the sequence."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="RelationalExpression" eSuperTypes="#//BinaryExpression"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A binary expression with a relational operator."/> + </eAnnotations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.booleanType()"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.operand1.lower = 0 or self.operand2.lower = 0 then 0
 else 1
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="1"/> + </eAnnotations> + </eOperations> + <eOperations name="relationalExpressionIsUnlimitedNaturalDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A relational expression is an UnlimitedNatural comparison if either one
of its operands has type UnlimitedNatural."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="relationalExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The type of a relational expression is Boolean.
(See the type() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="relationalExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A relational expression has a multiplicity lower bound of 0 if the lower
bound if either operand expression is 0 and 1 otherwise.
(See the lower() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="relationalExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A relational expression has a multiplicity upper bound of 1.
(See the upper() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="relationalExpressionOperandTypes" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The operand expressions for a comparison operator must have type Integer,
UnlimitedNatural or Natural. However, it is not allowed to have one
operand expression be Integer and the other be UnlimitedNatural."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let type1 = self.operand1.type in
 let type2 = self.operand2.type in
 self.isNaturalType(type1) and self.isNumericType(type2) or
 self.isIntegerType(type1) and self.isIntegerType(type2) or
 self.isUnlimitedNaturalType(type1) and self.isUnlimitedNaturalType(type2)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isUnlimitedNatural" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this is an UnlimitedNatural comparison."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
				let type1 = self.operand1.type in
					self.isUnlimitedNaturalType(type1) and not self.isNaturalType(type1) or 
				let type2 = self.operand2.type in
					self.isUnlimitedNaturalType(type2) and not self.isNaturalType(type2)"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="LocalNameDeclarationStatement" eSuperTypes="#//Statement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A statement that declares the type of a local name and assigns it an
initial value."/> + </eAnnotations> + <eOperations name="actualName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="NameBinding{name = self.name}.toName()"/> + </eAnnotations> + </eOperations> + <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 AssignedSource{
 name = self.actualName(),
 source = self,
 type = self.type,
 lower = 0,
 upper = if self.hasMultiplicity then -1 else 1 endif
 }.update(self.expression.assignmentAfter)"/> + </eAnnotations> + </eOperations> + <eOperations name="localNameDeclarationStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before the expression of a local name declaration
statement are the same as the assignments before the statement.
(See SyntaxElement::assignmentsBefore(element) operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="localNameDeclarationStatementType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the type name in a local name declaration statement is not empty, then
it must resolve to a non-template classifier and the expression must be
assignable to that classifier."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.typeName <> null implies 
 self.type <> null and not self.type.isTemplate()
 and AssignableLocalNameDeclaration{localNameDeclaration = self}.
 isAssignableFrom(self.expression)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="localNameDeclarationStatementLocalName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The local name in a local name declaration statement must be unassigned
before the statement and before the expression in the statement.
It must remain unassigned after the expression."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 not self.expression.assignmentBefore->exists(a | a.name = self.actualName()) and
 not self.expression.assignmentAfter->exists(a | a.name = self.actualName())"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="localNameDeclarationStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments after a local name declaration statement are the
assignments after the expression of the statement plus a new assignment
for the local name defined by the statement. The assigned source for the
local name is the local name declaration statement. The local name has
the type denoted by the type name if this is not empty and is untyped
otherwise. If the statement has multiplicity, then the multiplicity of
the local name is [0..*], otherwise it is [0..1].
(See assignmentsAfter() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="localNameDeclarationStatementExpressionMultiplicity" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a local name declaration statement does not have multiplicity, then
the multiplicity of upper bound of the assigned expression must not be
greater than 1."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="(not self.hasMultiplicity) implies self.expression.upper <=1"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="localNameDeclarationStatementTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The type of a local name declaration statement with a type name is the
single classifier referent of the type name. Otherwise the type is empty."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="typeCached" eType="#//ElementReference"/> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.typeName = null then null
 else 
 let referent = self.typeName.referent->select(isClassifier()) in
 if referent->size() <> 1 then null
 else self.typeName.referent->any(true)
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The local name being declared."/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="AssignableLocalNameDeclaration"/> + <details key="unique" value="false"/> + <details key="upper" value="*"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1" + eType="#//Expression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The expression to be evaluated to provide the initial value to be assigned to the local name."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="hasMultiplicity" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the local name is to have a multiplicity upper bound of * rather than 1."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" eType="#//QualifiedName" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The declared type of the local name."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//ElementReference" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The type declared for the given local name."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.typeCached()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAny" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the local name is being declared with an empty type.
(Added solely to allow proper Xtext re-serialization.)"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="AssignableLocalNameDeclaration" eSuperTypes="#//AssignableElement"> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.localNameDeclaration.type"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="0"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="if self.localNameDeclaration.hasMultiplicity then -1 else 1 endif"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="localNameDeclaration" lowerBound="1" + eType="#//LocalNameDeclarationStatement"/> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="Statement" abstract="true" eSuperTypes="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A model of an Alf statement."/> + </eAnnotations> + <eOperations name="enclosingLoopStatement" eType="#//Statement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return the nearest enclosing loop statement, or this statement, if it is
a loop statement. (This operation is overridden for loop statements.)"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="let enclosingStatement = self.enclosingStatement() in
 if enclosingStatement = null then null
 else enclosingStatement.enclosingLoopStatement()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns true if the given annotation is allowed for this kind of statement.
By default, only an @isolated annotation is allowed, with no arguments.
This operation is redefined only in subclasses of Statement for kinds of
statements that allow different annotations than this default."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.Statement_annotationAllowed(annotation)"/> + </eAnnotations> + <eParameters name="annotation" lowerBound="1" eType="#//Annotation"/> + </eOperations> + <eOperations name="Statement_annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="annotation.identifier = 'isolated' and annotation.argument->isEmpty()"/> + </eAnnotations> + <eParameters name="annotation" lowerBound="1" eType="#//Annotation"/> + </eOperations> + <eOperations name="annotation" ordered="false" upperBound="-1" eType="#//Annotation"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let container = self.oclContainer() in
 if container = null or not container.oclIsKindOf(AnnotatedStatement) then
 Set(Annotation){}
 else
 container.oclAsType(AnnotatedStatement).annotations()->collect(a |
 Annotation{text = a}->asSet()
 )->asSet()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="hasAnnotation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.annotation()->exists(identifier = name)"/> + </eAnnotations> + <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="newAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Get the assigned sources for assignments made within this statement."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let assignmentsBefore = self.assignmentBefore in
 self.assignmentAfter->select(isNew(assignmentsBefore))"/> + </eAnnotations> + </eOperations> + <eOperations name="resolve" eType="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return the source of the given local name in the assignments before this
statement, if any."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let assignment = self.assignmentBefore->select(a | a.name = name) in
 if assignment->isEmpty() then null
 else assignment->any(true).source
 endif"/> + </eAnnotations> + <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="By default, the assignments after are the same as the assignments
before."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.Statement_assignmentsAfter()"/> + </eAnnotations> + </eOperations> + <eOperations name="Statement_assignmentsAfter" ordered="false" upperBound="-1" + eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.assignmentBefore"/> + </eAnnotations> + </eOperations> + <eOperations name="assignmentsAfterCached" ordered="false" upperBound="-1" eType="#//AssignedSource"/> + <eOperations name="mergeAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Merge the assignments made in a collection of blocks, such as occur in an
accept or if statement."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let newAssignments = blocks->collect(b | 
 if b = null then Set(AssignedSource){}
 else b.assignmentAfter->select(isNew(b.assignmentBefore))
 endif
 )->asSet() in
 newAssignments.name->asSet()->collect(n | 
 self.merge(n, newAssignments->select(name = n))
 )->asSet()"/> + </eAnnotations> + <eParameters name="blocks" ordered="false" unique="false" upperBound="-1" eType="#//Block"/> + </eOperations> + <eOperations name="merge" lowerBound="1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 AssignedSource{
 name = name,
 source = self,
 type = self.commonAncestor(assignments.type->asSet()),
 lower = assignments.lower->min(),
 upper = 
 if assignments.upper->exists(n | n = -1) then -1
 else assignments.upper->max()
 endif
 }"/> + </eAnnotations> + <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + <eParameters name="assignments" ordered="false" upperBound="-1" eType="#//AssignedSource"/> + </eOperations> + <eOperations name="statementAnnotationsAllowed" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="All the annotations of a statement must be allowed, as given by the annotationAllowed operation for the statement."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.annotation()->forAll(a | self.annotationAllowed(a))"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="statementUniqueAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="No name may be assigned more than once before or after a statement."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.assignmentBefore->isUnique(name) and self.assignmentAfter->isUnique(name)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="statementIsIsolatedDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A statement is isolated if it has an @isolated annotation."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentBefore" ordered="false" + upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true" + derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assigned sources for local names available lexically before this statement."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.assignmentsBefore()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentAfter" ordered="false" + upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true" + derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assigned sources for local names available lexically after this statement.
This includes not only any assignments made within the statement, but also
any assignments that are unchanged from before the statement."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.assignmentsAfterCached()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="enclosingStatement" eType="#//Statement" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The statement immediately enclosing this statement, if any."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.enclosingStatement()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isIsolated" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this statement should be executed in isolation."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.hasAnnotation('isolated')"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="Annotation" eSuperTypes="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An identified modification to the behavior of an annotated statement."/> + </eAnnotations> + <eOperations name="identifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + <eOperations name="arguments" ordered="false" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="text" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The text line for the annotation."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="identifier" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The name of the annotation."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.identifier()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="argument" ordered="false" + upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If permitted by the annotation, an optional list of local names relevant to the annotation."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.arguments()->collect(n | NameBinding{name = n}.toName())->asSet()"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="QualifiedNameList" eSuperTypes="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A group of qualified names."/> + </eAnnotations> + <eOperations name="currentScope" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Handle specially the cases of a specialization list and a redefinition list."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let owner = self.owner() in
 if owner.oclIsKindOf(ClassifierDefinition) then
 owner.oclAsType(ClassifierDefinition).outerScope()
 else if owner.oclIsKindOf(OperationDefinition) then
 owner.oclAsType(OperationDefinition).containingMember().namespace.outerScope()
 else
 self.SyntaxElement_currentScope()
 endif endif"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="name" ordered="false" lowerBound="1" + upperBound="-1" eType="#//QualifiedName" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The names in the group."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="NonFinalClause" eSuperTypes="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A clause of an if statement with a conditional expression and a sequence of
statements that may be executed if the condition is true."/> + </eAnnotations> + <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if element = self.body then self.condition.assignmentAfter
 else self.assignmentsBefore()
 endif"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/> + </eOperations> + <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before a non-final clause are the assignments before the
condition of the clause."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.SyntaxElement_assignmentsBefore()"/> + </eAnnotations> + </eOperations> + <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments after a non-final clause are the assignments after the
block of the clause."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.body.assignmentAfter"/> + </eAnnotations> + </eOperations> + <eOperations name="nonFinalClauseAssignmentsBeforeBody" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before the body of a non-final clause are the assignments
after the condition.
(See the assignmentsBefore(element) operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="nonFinalClauseConditionLocalNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a name is unassigned before the condition expression of a non-final
clause, then it must be unassigned after that expression (i.e., new local
names may not be defined in the condition)."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.condition.assignmentBefore.name->includesAll(
 self.condition.assignmentAfter.name
 )"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="nonFinalClauseConditionType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The condition of a non-final clause must have type Boolean and a
multiplicity upper bound no greater than 1."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let type = self.condition.type in
 type <> null and self.isBooleanType(type) and 
 condition.upper <= 1"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="condition" lowerBound="1" + eType="#//Expression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The expression that is evaluated to determine whether the clause body may
be executed."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="body" lowerBound="1" eType="#//Block" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The sequence of statements that may be executed if the condition evaluates
to true."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="Block" eSuperTypes="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A grouped sequence of statements."/> + </eAnnotations> + <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.statement->includes(element) then Set(AssignedSource){}
 else
 let i = self.statement->indexOf(element) in
 if i = 1 then self.assignmentBefore
 else 
 let statementBefore = self.statement->at(i-1) in
 -- NOTE: Xtext editor will try to semantically validate even
 -- when there are syntax errors.
 if statementBefore.statement = null then
 self.assignmentsBefore(statementBefore)
 else
 statementBefore.statement.assignmentAfter
 endif
 endif
 endif"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/> + </eOperations> + <eOperations name="newAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Get the assigned sources for assignments made within this block."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let assignmentsBefore = self.assignmentBefore in
 self.assignmentAfter->select(isNew(assignmentsBefore))"/> + </eAnnotations> + </eOperations> + <eOperations name="blockAssignmentsBeforeStatements" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before each statement in a block other than the first are
the same as the assignments after the previous statement."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="blockAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before the first statement of a block are the same as the
assignments before the block."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="blockAssignmentAfterDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a block is not empty, then the assignments after the block are the same
as the assignments after the last statement of the block. Otherwise they
are the same as the assignments before the block."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="statement" upperBound="-1" + eType="#//AnnotatedStatement" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The ordered sequence of statements in the block."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentAfter" ordered="false" + upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true" + derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assigned sources for local names available lexically after this block.
This includes not only any assignments made within the block, but also
any assignments that are unchanged from before the block."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 if self.statement->isEmpty() then self.assignmentBefore
 else self.statement->last().statement.assignmentAfter
 endif"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentBefore" ordered="false" + upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true" + derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assigned sources for local names available lexically before this block."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.assignmentsBefore()"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="BlockStatement" eSuperTypes="#//Statement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A statement that executes a block."/> + </eAnnotations> + <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.block.assignmentAfter"/> + </eAnnotations> + </eOperations> + <eOperations name="blockStatementParallelAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="In a parallel block statement, any name assigned in one statement of the
block may not be further assigned in any subsequent statement in the same
block."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.isParallel or self.block = null then true
 else self.block.statement.statement.newAssignments()->
 isUnique(name)
 endif"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="blockStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before the block of a block statement are the same as the
assignments before the block statement."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="blockStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments after a block statement are the same as the assignments
after the block of the block statement."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="blockStatementEnclosedStatements" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The enclosing statement for all the statements in the block of a block
statement is the block statement."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="blockStatementIsParallelDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A block statement is parallel if it has a @parallel annotation."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="In addition to an @isolated annotation, a block statement may have a
@parallel annotation. It may not have any arguments."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.Statement_annotationAllowed(annotation) or 
 annotation.identifier = 'parallel' and annotation.argument->isEmpty()"/> + </eAnnotations> + <eParameters name="annotation" lowerBound="1" eType="#//Annotation"/> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="block" lowerBound="1" eType="#//Block" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The block to be executed."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isParallel" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the statements in the block of this block statement should be
executed concurrently."/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="DoStatement"/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="DoStatement"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.hasAnnotation('parallel')"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="DoStatement" eSuperTypes="#//Statement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A looping statement for which the continuation condition is first tested
after the first iteration."/> + </eAnnotations> + <eOperations name="enclosingLoopStatement" eType="#//Statement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self"/> + </eAnnotations> + </eOperations> + <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.condition = element then self.body.assignmentAfter
 else self.assignmentBefore
 endif"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/> + </eOperations> + <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let assignmentsBefore = self.assignmentBefore in
 self.condition.assignmentAfter->
 select(isNew(assignmentsBefore)) ->
 iterate(a, assignments : Set(AssignedSource) = assignmentsBefore |
 AssignedSource{
 name = a.name,
 source = self,
 type = a.type,
 lower = a.lower,
 upper = a.upper
 }.update(assignments)
 )"/> + </eAnnotations> + </eOperations> + <eOperations name="doStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before the block of a do statement are the same as the
assignments before the do statement. The assignments before the condition
expression of a do statement are the same assignments after the block.
(See assignmentsBefore(element) operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="doStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the assigned source for a name after the condition expression is
different than before the do statement, then the assigned source of the
name after the do statement is the do statement. Otherwise it is the same
as before the do statement.
(See assignmentsAfter() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="doStatementCondition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The condition expression of a do statement must have type Boolean and a
multiplicity upper bound of 1."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let type = self.condition.type in
 type <> null and self.isBooleanType(type) and condition.upper = 1"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="doStatementEnclosedStatements" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The enclosing statement for all statements in the body of a do statement
are the do statement.
(See SyntaxElement::enclosingStatement() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="condition" lowerBound="1" + eType="#//Expression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The expression to be evaluated to determine whether to continue looping."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="body" lowerBound="1" eType="#//Block" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The sequence of statements to be iteratively executed."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ConcurrentClauses" eSuperTypes="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A grouping of non-final conditional clauses to be tested concurrently."/> + </eAnnotations> + <eOperations name="concurrentClausesAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before each of the clauses in a set of concurrent clauses
are the same as the assignments before the concurrent clauses.
(See the assignmentsBefore(element) operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="concurrentClausesConditionAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The same name may not be assigned in more than one conditional expression
within the same concurrent set of clauses."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.clause.condition.newAssignments()->isUnique(name)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="clause" ordered="false" + lowerBound="1" upperBound="-1" eType="#//NonFinalClause" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The conditional clauses in the group."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="BreakStatement" eSuperTypes="#//Statement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A statement that causes the termination of execution of an immediately
enclosing block."/> + </eAnnotations> + <eOperations name="breakStatementTargetDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The target of a break statement is the innermost switch, while, do or for
statement enclosing the break statement."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.target <> null"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="breakStatementNonparallelTarget" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The target of a break statement may not have a @parallel annotation."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.target <> null implies not self.target.hasAnnotation('parallel')"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A break statement may not have any annotations."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.annotation()->isEmpty()"/> + </eAnnotations> + <eParameters name="annotation" lowerBound="1" eType="#//Annotation"/> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="target" eType="#//Statement" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The enclosing statement that is terminated by this break statement."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.enclosingLoopStatement()"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ExpressionStatement" eSuperTypes="#//Statement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A statement that evaluates an expression when executed."/> + </eAnnotations> + <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.expression = null then Set(AssignedSource){}
 else self.expression.assignmentAfter
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="expressionStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before the expression of an expression statement are the same as the assignments before the statement."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="expressionStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments after an expression statement are the same as the assignments after its expression."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The expression to be evaluated."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ClassifyStatement" eSuperTypes="#//Statement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A statement that changes the classification of an object."/> + </eAnnotations> + <eOperations name="assignmentAfter" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.expression.assignmentAfter"/> + </eAnnotations> + </eOperations> + <eOperations name="classifyStatementExpression" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The expression in a classify statement must have a class as its type and
multiplicity upper bound of 1."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let type = self.expression.type in
 type <> null and type.isClass() and self.expression.upper = 1"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="classifyStatementClassNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="All qualified names listed in the from or to lists of a classify
statement must resolve to classes."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let fromNames = 
 if self.fromList = null then Set(QualifiedName){}
 else self.fromList.name->asSet()
 endif
 in
 let toNames =
 if self.toList = null then Set(QualifiedName){}
 else self.toList.name->asSet()
 endif
 in
 fromNames->union(toNames)->forAll(name |
 let referent = name.referent->select(isClass()) in
 referent->size() = 1 and
 referent->forAll(not isTemplate())
 )"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="classifyStatementClasses" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="All the from and to classes of a classify statement must be subclasses of
the type of the target expression and none of them may have a common
superclass that is a subclass of the type of the target expression (that
is, they must be disjoint subclasses)."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let classes = self.fromClass->union(self.toClass) in
 let expressionType = self.expression.type in
 if expressionType = null then true
 else
 classes->
 forAll(not equals(expressionType) and conformsTo(expressionType)) and
 let parents : Bag(ElementReference) = classes.allParents()->
 select(not equals(expressionType) and conformsTo(expressionType)) 
 in
 parents->forAll(countIn(parents) = 1)
 endif"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="classifyStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before the expression of a classify statement are the
same as the assignments before the statement.
(See the assignmentsBefore(element) operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="classifyStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments after a classify statement are the same as the
assignments after its expression.
(See the assignmentAfter() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="classifyStatementFromClassDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The from classes of a classify statement are the class referents of the
qualified names in the from list for the statement."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="classifyStatementToClassDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The to classes of a classify statement are the class referents of the
qualified names in the to list for the statement."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1" + eType="#//Expression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The expression to be evaluated to obtain the object to be reclassified."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="fromList" eType="#//QualifiedNameList" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A list of names of classes to be removed as types of the object."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="toList" eType="#//QualifiedNameList" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A list of names of classes to be added as types of the object."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="fromClass" ordered="false" + upperBound="-1" eType="#//ElementReference" volatile="true" transient="true" + derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The classes denoted by the names in the from list."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 if self.fromList = null then Set(ElementReference){}
 else self.fromList.name.referent->asSet()
 endif"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="toClass" ordered="false" + upperBound="-1" eType="#//ElementReference" volatile="true" transient="true" + derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The classes denoted by the names in the to list."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 if self.toList = null then Set(ElementReference){}
 else self.toList.name.referent->asSet()
 endif"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isReclassifyAll" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this classify statement reclassifies all types of the target
object."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ForStatement" eSuperTypes="#//Statement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A looping statement that gives successive values to one or more loop variables on each iteration."/> + </eAnnotations> + <eOperations name="enclosingLoopStatement" eType="#//Statement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self"/> + </eAnnotations> + </eOperations> + <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.body <> element then
 self.assignmentBefore
 else
 let assignments = 
 self.variableDefinition.assignmentAfter->asSet() in
 if not self.isParallel then
 assignments
 else
 let parallelNames = self.parallelNames() in
 self.updateAll(
 assignments,
 assignments->select(a | parallelNames->includes(a.name)).
 copy(self, true)->asSet()
 )

 endif
 endif"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/> + </eOperations> + <eOperations name="assignmentsAfterVariables" ordered="false" upperBound="-1" + eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.variableDefinition->iterate(
 v, assignments : Set(AssignedSource) = self.assignmentBefore |
 self.updateAll(assignments, v.newAssignments())
 )"/> + </eAnnotations> + </eOperations> + <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let namesBefore = self.assignmentBefore.name in
 let newAssignments =
 self.body.newAssignments()->
 select(a | namesBefore->includes(a.name)).
 copy(self, null)->asSet()
 in
 let variables = self.variableDefinition.variable in
 let assignmentsAfter = 
 self.updateAll(
 self.variableDefinition.assignmentAfter->asSet(), 
 newAssignments
 )->reject(a | variables->includes(a.name)) in
 let parallelNames = self.parallelNames() in
 let parallelNameAssignments =
 assignmentsAfter->
 select(a | parallelNames->includes(a.name)).
 copy(self, false)->asSet()
 in
 self.updateAll(assignmentsAfter, parallelNameAssignments)"/> + </eAnnotations> + </eOperations> + <eOperations name="parallelNames" ordered="false" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.isParallel then
 Set(String){}
 else
 self.annotation()->select(identifier = 'parallel').oclAsType(Annotation).argument->asSet()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="forStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before a loop variable definition in a for statement are
the same as before the for statement. The assignments before the body of
the statement include all the assignments before the statement plus any
new assignments from the loop variable definitions, except that, if the
statement is parallel, the assigned sources of any names given in @parallel
annotations are changed to be the for statement itself.
(See the assignmentsBefore(element) operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="forStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The loop variables are unassigned after a for statement. Other than the
loop variables, if the assigned source for a name after the body of a for
statement is the same as after the for variable definitions, then the
assigned source for the name after the for statement is the same as after
the for variable definitions. If a name is unassigned after the for
variable definitions, then it is unassigned after the for statement (even
if it is assigned in the body of the for statement). If, after the loop
variable definitions, a name has an assigned source, and it has a
different assigned source after the body of the for statement, then the
assigned source after the for statement is the for statement itself.
(See the assignmentsAfter() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="forStatementParallelAnnotationNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A @parallel annotation of a for statement may include a list of names.
Each such name must be already assigned after the loop variable definitions
of the for statement, with a multiplicity of [0..*]. These names may only
be used within the body of the for statement as the first argument to for
the CollectionFunctions::add behavior.
(Note: Checking that @parallel annotation names are only used with add
behaviors is done in NameExpression, BehaviorInvocationExpression and
SequenceOperationExpression.)"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let assignments = self.variableDefinition.assignmentAfter in
 self.parallelNames()->forAll(n |
 assignments->exists(name = n and lower = 0 and upper = -1)
 )"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="forStatementParallelAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If, after the loop variable definitions of a parallel for statement, a
name has an assigned source, then it must have the same assigned source
after the block of the for statement. Other than for names defined in the
@parallel annotation of the for statement, the assigned source for such
names is the same after the for statement as before it. Any names defined
in the @parallel annotation have the for statement itself as their assigned
source after the for statement. Other than names given in the @parallel
annotation, if a name is unassigned after the loop variable definitions,
then it is considered unassigned after the for statement, even if it is
assigned in the block of the for statement.
(See also the assignmentsAfter() operation.)"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if not self.isParallel then true
 else
 self.body.newAssignments().name->
 excludesAll(self.variableDefinition.assignmentAfter.name)
 /*
 * The following is guaranteed by assignmentsAfter():
 let parallelNames = self.parallelNames() in
 self.assignmentAfter->forAll(a |
 assignmentsAfterVariables->exists(name = a.name) and
 if parallelNames->includes(a.name) then a.source = self 
 else a.source = assignmentsAfterVariables->any(name = a.name).source 
 endif
 )
 */
 endif"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="forStatementVariableDefinitions" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The isFirst attribute of the first loop variable definition for a for
statement is true while the isFirst attribute is false for any other
definitions.
(See derivation of VariableDefinition::isFirst.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="forStatementLoopVariables" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assigned sources for loop variables after the body of a for statement
must be the for statement (the same as before the body).
(See the assignmentAfter() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="forStatementIsParallelDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A for statement is parallel if it has a @parallel annotation."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="forStatementEnclosedStatements" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The enclosing statement for all statements in the body of a for statement
are the for statement.
(See the SyntaxElement::enclosingStatement() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="In addition to an @isolated annotation, a for statement may have a
@parallel annotation."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.Statement_annotationAllowed(annotation) or
 annotation.identifier = 'parallel'"/> + </eAnnotations> + <eParameters name="annotation" lowerBound="1" eType="#//Annotation"/> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="body" lowerBound="1" eType="#//Block" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The sequence of statements to be iteratively executed."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="variableDefinition" lowerBound="1" + upperBound="-1" eType="#//LoopVariableDefinition" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A list of definitions of one or more loop variables."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isParallel" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the for statement is parallel."/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="LoopVariableDefinition"/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="LoopVariableDefinition"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.hasAnnotation('parallel')"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="LoopVariableDefinition" eSuperTypes="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The definition of a loop variable in a for statement."/> + </eAnnotations> + <eOperations name="actualName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="NameBinding{name=self.variable}.toName()"/> + </eAnnotations> + </eOperations> + <eOperations name="newAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Get the assignments made within this loop variable definition."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let assignmentsBefore = self.assignmentBefore in
 self.assignmentAfter->select(isNew(assignmentsBefore))"/> + </eAnnotations> + </eOperations> + <eOperations name="loopVariableDefinitionAssignmentAfterDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments after a loop variable definition include the assignments
after the expression (or expressions) of the definition plus a new
assigned source for the loop variable itself. The assigned source for the
loop variable is the loop variable definition. The multiplicity upper
bound for the variable is 1. The multiplicity lower bound is 1 if the
loop variable definition is the first in a for statement and 0 otherwise.
If collection conversion is not required, then the variable has the
inferred or declared type from the definition. If collection conversion
is required, then the variable has the argument type of the collection
class."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="loopVariableDefinitionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before the expressions of a loop variable definition are
the assignments before the loop variable definition.
(See the assignmentsBefore(element) operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="loopVariableDefinitionRangeExpressions" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a loop variable definition has two expressions, then both expressions
must have type Integer and a multiplicity upper bound of 1, and no name
may be newly assigned or reassigned in more than one of the expressions."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.expression2 = null then true
 else
 let type1 = self.expression1.type in
 let type2 = self.expression2.type in
 type1 <> null and self.isIntegerType(type) and self.expression1.upper = 1 and
 type2 <> null and self.isIntegerType(type) and self.expression2.upper = 1 and
 expression1.newAssignments().name->excludesAll(expression2.newAssignments().name)
 endif"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="loopVariableDefinitionTypeName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a loop variable definition has a type name, then this name must
resolve to a non-template classifier."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.typeName = null then true
 else
 let referents = self.typeName.referent->select(isClassifier()) in
 referents->size() = 1 and not referents->exists(isTemplate())
 endif"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="loopVariableDefinitionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the type of a loop variable is not inferred, then the variable has the
type denoted by the type name, if it is not empty, and is untyped
otherwise. If the type is inferred, them the variable has the same type
as the expression in its definition."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="loopVariableDefinitionDeclaredType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the type of a loop variable definition is not inferred, then the first
expression of the definition must have a type that conforms to the
declared type."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.typeIsInferred then true
 else self.expression1.type.conformsTo(self.type)
 endif"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="loopVariableDefinitionIsCollectionConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Collection conversion is required for a loop variable definition if the
type for the definition is the instantiation of a collection class and
the multiplicity upper bound of the first expression is no greater than 1."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="loopVariableDefinitionVariable" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The variable name given in a loop variable definition must be unassigned
after the expression or expressions in the definition."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.expression1.assignmentAfter.name->excludes(self.actualName()) and
 self.expression2 <> null implies
 self.expression2.assignmentAfter.name->excludes(self.actualName())"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="variable" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The name of the loop variable."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="expression1" lowerBound="1" + eType="#//Expression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If there is only one expression, then this expression is evaluated to produce a sequence of values to be assigned to the loop variable on successive iterations. Otherwise it is evaluated to provide the first value of a range of values to be assigned to the loop variable."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="expression2" eType="#//Expression" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The expression to be evaluated to give the second value in a range of values to be assigned to the loop variable."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" eType="#//QualifiedName" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The declared type of the loop variable."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="typeIsInferred" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the type of the variable is inferred or declared explicitly.
NOTE: This flag is necessary to because a variable that is explicitly
declared to have type "any" will have an empty typeName,
just like a variable whose type is to be inferred, but, in the former
case, the type is actually intended to be empty, not inferred."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCollectionConversion" + lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether collection conversion is required."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let type = self.type in
 type <> null and self.isCollectionClass(type) and
 self.expression1 <> null and self.expression1.upper <= 1"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//ElementReference" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The declared or inferred type of the loop variable."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 if self.typeIsInferred then expression1.type
 else if self.typeName = null then null
 else self.typeName.referent->any(isClassifier())
 endif endif"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isFirst" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this definition is the first in the list of definitions in the
enclosing for statement."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.enclosingStatement().oclAsType(ForStatement).variableDefinition->at(1) = self"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentBefore" ordered="false" + upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true" + derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assigned sources for local names available lexically before this loop
variable definition."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.assignmentsBefore()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentAfter" ordered="false" + upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true" + derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assigned sources for local names available lexically after this loop
variable definition. This includes not only any assignments made within
the statement, but also any assignments that are unchanged from before
the statement."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let assignmentsAfter =
 if self.expression2 = null then 
 self.expression1.assignmentAfter
 else 
 self.updateAll(
 self.expression1.assignmentAfter,
 self.expression2.newAssignments()
 )
 endif
 in
 AssignedSource{
 name = self.variable,
 source = self,
 type = 
 if self.isCollectionConversion then self.type.collectionArgument() 
 else self.type 
 endif,
 lower = if self.isFirst then 1 else 0 endif,
 upper = 1
 }.update(assignmentsAfter)"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAny" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the loop variable has an empty type."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="IfStatement" eSuperTypes="#//Statement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A conditional statement that executes (at most) one of a set of clauses based on boolean conditions."/> + </eAnnotations> + <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let blocks =
 if self.finalClause = null then self.nonFinalClauses.clause.body
 else self.nonFinalClauses.clause.body->including(self.finalClause)
 endif
 in
 self.updateAll(
 self.Statement_assignmentsAfter(), 
 self.mergeAssignments(blocks->asBag())
 )"/> + </eAnnotations> + </eOperations> + <eOperations name="ifStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before all the non-final clauses of an if statement are
the same as the assignments before the if statement. If the statement has
a final clause, then the assignments before that clause are also the same
as the assignments before the if statement.
(See assignmentBefore(element) operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="ifStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If an if statement does not have a final else clause, then any name that
is not an out parameter and is unassigned before the if statement is
unassigned after the if statement. If an if statement does have a final
else clause, then any name that is unassigned before the if statement and
is assigned after any one clause of the if statement must also be assigned
after every other clause. The type of such names after the if statement is
the effective common ancestor of the types of the name in each clause with
a multiplicity lower bound that is the minimum of the lower bound for the
name in each clause and a multiplicity upper bound that is the maximum for
the name in each clause. For a name that has an assigned source after any
clause of an if statement that is different than before that clause, then
the assigned source after the if statement is the if statement. Otherwise,
the assigned source of a name after the if statement is the same as before
the if statement.
(See assignmentsAfter() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="ifStatementEnclosedStatements" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The enclosing statement of all the statements in the bodies of all
non-final clauses and in the final clause (if any) of an if statement is
the if statement.
(See SyntaxElement::enclosingStatement() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="ifStatementIsAssuredDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An if statement is assured if it has an @assured annotation."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="ifStatementIsDeterminateDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An if statement is determinate if it has an @determinate annotation."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="In addition to an @isolated annotation, an if statement may have @assured
and @determinate annotations. They may not have arguments."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.Statement_annotationAllowed(annotation) or
 (annotation.identifier = 'assured' or annotation.identifier = 'determinate') and 
 annotation.argument->isEmpty()"/> + </eAnnotations> + <eParameters name="annotation" lowerBound="1" eType="#//Annotation"/> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="nonFinalClauses" lowerBound="1" + upperBound="-1" eType="#//ConcurrentClauses" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A list of groupings of concurrent clauses that are to be checked
sequentially for a successful condition."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="finalClause" eType="#//Block" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A sequence of statements to be executed if no other clause has a
successful condition."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAssured" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether at least one condition in the if statement is assured to evaluate
to true."/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="SwitchStatement"/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="SwitchStatement"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.hasAnnotation('assured')"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDeterminate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether at most one condition in the if statement will ever to evaluate
to true."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.hasAnnotation('determinate')"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="SwitchStatement" eSuperTypes="#//Statement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A statement that executes (at most) one of a set of statement sequences
based on matching a switch value to a set of test cases."/> + </eAnnotations> + <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.nonDefaultClause->includes(element) or 
 self.defaultClause = element then
 self.expression.assignmentAfter
 else
 self.assignmentBefore
 endif"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/> + </eOperations> + <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let blocks =
 if self.defaultClause = null then
 self.nonDefaultClause.block
 else
 self.nonDefaultClause.block->including(self.defaultClause)
 endif
 in
 self.updateAll(
 self.Statement_assignmentsAfter(),
 self.mergeAssignments(blocks)
 )"/> + </eAnnotations> + </eOperations> + <eOperations name="switchStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before all clauses of a switch statement are the same as
the assignments after the expression of the switch statement.
(See assignmentBefore(element) expression.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="switchStatementCaseAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The same local name may not be assigned in more than one case expression
in a switch statement."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.nonDefaultClause.case.newAssignments()->isUnique(name)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="switchStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a name has an assigned source after any clause of a switch statement
that is different than before that clause (including newly defined names),
the assigned source after the switch statement is the switch statement.
Otherwise, the assigned source of a name after the switch statement is
the same as before the switch statement.
(See assignmentsAfter() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="switchStatementAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a switch statement does not have a final default clause, then any name
that is not an out parameter and is unassigned before the switch statement
is unassigned after the switch statement. If a switch statement does have
a final default clause, then any name that is unassigned before the switch
statement and is assigned after any one clause of the switch statement
must also be assigned after every other clause. The type of such names
after the switch statement is the effective common ancestor of the types
of the name in each clause with a multiplicity lower bound that is the
minimum of the lower bound for the name in each clause and a multiplicity
upper bound that is the maximum for the name in each clause.
(See also assignmentsAfter() operation.)"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let newNames = self.assignmentAfter.name->excludingAll(self.assignmentBefore.name) in
	 if self.defaultClause = null then
	 newNames->isEmpty()
	 else
	 self.nonDefaultClause.block->including(self.defaultClause)->forAll(
	 	assignmentAfter.name->includesAll(newNames)
	 )
	 endif"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="switchStatementExpression" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A switch statement expression must have a multiplicity no greater than 1."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.expression.upper <= 1"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="switchStatementEnclosedStatements" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A switch statement is the enclosing statement for the statements in all
of its switch clauses.
(See SyntaxElement::enclosingStatement() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="switchStatementIsDeterminateDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A switch statement is determinate if it has a @determinate annotation."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="switchStatementIsAssuredDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A switch statement is assured if it has an @assured annotation."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="In addition to an @isolated annotation, a switch statement may have
@assured and @determinate annotations. They may not have arguments."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.Statement_annotationAllowed(annotation) or
 (annotation.identifier = 'assured' or annotation.identifier = 'determinate') and 
 annotation.argument->isEmpty()"/> + </eAnnotations> + <eParameters name="annotation" lowerBound="1" eType="#//Annotation"/> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="nonDefaultClause" ordered="false" + upperBound="-1" eType="#//SwitchClause" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The set of switch clauses whose cases are to be tested against the switch
value."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1" + eType="#//Expression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The expression to be evaluated to provide the switch value."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="defaultClause" eType="#//Block" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A sequence of statements to be executed if no switch clause case matches
the switch value."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAssured" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether at least one case in the switch statement is assured to match."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.hasAnnotation('assured')"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDeterminate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether at most one case in the if statement will ever to match."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.hasAnnotation('determinate')"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="SwitchClause" eSuperTypes="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A clause in a switch statement with a set of cases and a sequence of
statements that may be executed if one of the cases matches the switch value."/> + </eAnnotations> + <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.block <> element then 
 self.assignmentsBefore()
 else
 self.updateAll(
 self.assignmentsBefore(),
 self.case.newAssignments()->asSet()
 )
 endif"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/> + </eOperations> + <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before a switch clause are the assignments before any
case expression of the clause."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.SyntaxElement_assignmentsBefore()"/> + </eAnnotations> + </eOperations> + <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments after a switch clause are the assignments after the block
of the switch clause."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.block.assignmentAfter"/> + </eAnnotations> + </eOperations> + <eOperations name="switchClauseAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before any case expression of a switch clause are the
same as the assignments before the clause. The assignments before the
block of a switch clause are the assignments after all case expressions.
(See assignmentsBefore(element) operation.)
"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="switchClauseCaseLocalNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a name is unassigned before a switch clause, then it must be
unassigned after all case expressions of the clause (i.e., new local
names may not be defined in case expressions)."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.assignmentsBefore().name->includesAll(self.case.assignmentAfter.name)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="switchClauseCases" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="All the case expressions of a switch clause must have a multiplicity
no greater than 1."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.case->forAll(upper <= 1)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="case" ordered="false" lowerBound="1" + upperBound="-1" eType="#//Expression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The expressions to be evaluated to provide values to test against the switch value."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="block" lowerBound="1" eType="#//Block" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The sequence of statements that may be executed if one of the cases matches the switch value."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="WhileStatement" eSuperTypes="#//Statement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A looping statement for which the continuation condition is first tested
before the first iteration."/> + </eAnnotations> + <eOperations name="enclosingLoopStatement" eType="#//Statement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self"/> + </eAnnotations> + </eOperations> + <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.body <> element then self.assignmentBefore
 else self.condition.assignmentAfter 
 endif"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/> + </eOperations> + <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let assignmentsBeforeBlock = self.body.assignmentBefore in
 self.body.newAssignments()->
 reject(a | assignmentsBeforeBlock.name->excludes(a.name))->
 iterate(a, assignments : Set(AssignedSource) = assignmentsBeforeBlock |
 AssignedSource{
 name = a.name,
 source = self,
 type = a.type,
 lower = a.lower,
 upper = a.upper
 }.update(assignments)
 )"/> + </eAnnotations> + </eOperations> + <eOperations name="whileStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before the condition expression of a while statement
are the same as the assignments before the while statement. The
assignments before the block of the while statement are the same as the
assignments after the condition expression.
(See assignmentsBefore(element) operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="whileStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a name is assigned before the block, but the assigned source for the
name after the block is different than before the block, then the assigned
source of the name after the while statement is the while statement.
Otherwise it is the same as before the block. If a name is unassigned
before the block of a while statement, then it is unassigned after the
while statement, even if it is assigned after the block.
(See assignmentsAfter() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="whileStatementCondition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The condition expression of a while statement must have type Boolean and
a multiplicity upper bound of 1."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let type = self.condition.type in
 type <> null and self.isBooleanType(type) and self.condition.upper = 1"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="whileStatementEnclosedStatements" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The enclosing statement for all statements in the body of a while
statement are the while statement.
(See the SyntaxElement::enclosingStatement() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="body" lowerBound="1" eType="#//Block" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The sequence of statements to be iteratively executed."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="condition" lowerBound="1" + eType="#//Expression" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The expression to be evaluated to determine whether to continue looping."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ReturnStatement" eSuperTypes="#//Statement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A statement that provides a value for the return parameter of an activity."/> + </eAnnotations> + <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.expression = null then self.assignmentBefore
 else self.expression.assignmentAfter
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="returnStatementContext" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the behavior containing the return statement has a return parameter,
then the return statement must have an expression, and the expression
must be assignable to that return parameter.
(And, if the behavior does not have a return parameter, then the return
statement must not have an expression.)"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let behavior = self.behavior in
 if behavior = null then false
 else
 let returnParameter = behavior.returnParameter() in
 self.expression = null and returnParameter = null or
 self.expression <> null and returnParameter <> null and
 returnParameter.isAssignableFrom(self.expression)
 endif"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="returnStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before the expression of a return statement are the same
as the assignments before the statement.
(See the assignmentsBefore(element) operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="returnStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments after a return statement are the same as the assignments
after the expression of the return statement.
(Or, if the statement has no expression, the same as the assignments
before the statement.)
(See the assignmentsAfter() operation.)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The expression to be evaluated to provide the returned value."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="behavior" eType="#//ElementReference" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A reference to the enclosing behavior for this return statement."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.currentScope()"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="InLineStatement" eSuperTypes="#//Statement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A statement that executes code in a language other than Alf."/> + </eAnnotations> + <eOperations name="inLineStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments after an in-line statement are the same as the assignments
before the statement."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="language" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The name of the language in which the code is written."/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="AcceptStatement"/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="AcceptStatement"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="code" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The in-line code to be executed."/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="AcceptStatement"/> + <details key="unique" value="false"/> + <details key="upper" value="*"/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="AcceptStatement"/> + <details key="unique" value="false"/> + <details key="upper" value="*"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="AcceptStatement" eSuperTypes="#//Statement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A statement used to accept the receipt of instances of one or more signals."/> + </eAnnotations> + <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="let assignmentsAfter = self.Statement_assignmentsAfter() in
 if self.isSimple then
 let acceptBlock : AcceptBlock = self.acceptBlock->any(true) in
 let name = acceptBlock.actualName() in
 if (name = null) then assignmentsAfter
 else 
 AssignedSource{
 name = name,
 source = self,
 type = self.commonAncestor(acceptBlock.signal),
 lower = 1,
 upper = 1
 }.update(assignmentsAfter)
 endif
 else
 self.mergeAssignments(self.acceptBlock.block)->
 iterate(
 assignment : AssignedSource; 
 assignments : Set(AssignedSource) = assignmentsAfter |
 if self.acceptBlock.actualName()->includes(assignment.name) then 
 assignments
 else 
 assignment.update(assignments)
 endif
 )
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="effectiveBehavior" lowerBound="1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the behavior for this accept statement is a subunit, then return the
corresponding stub. Note that, if the original behavior is an Alf
activity definition, the "stub" may be an external operation or activity."/> + </eAnnotations> + </eOperations> + <eOperations name="effectiveBehavior_" lowerBound="1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let behavior = self.behavior in
 if behavior = null then null
 else
 let stub = behavior.stub() in
 if stub = null then behavior
 else stub
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="acceptStatementContext" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An accept statement can only be used within the definition of an active
behavior or the classifier behavior of an active class."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let behavior = self.effectiveBehavior() in
 behavior <> null and behavior.isActiveBehavior()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="acceptStatementSignals" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The containing behavior of an accept statement must have receptions for
all signals from all accept blocks of the accept statement. No signal may
be referenced in more than one accept block of an accept statement."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let signals : Bag(ElementReference) = self.acceptBlock.signal in
 let behavior = self.effectiveBehavior() in
 let activeClass = 
 if behavior = null then null 
 else behavior.activeClass() 
 endif 
 in
 signals->forAll(s | signals->select(equals(s))->size() = 1) and
 (activeClass = null or -- Let the acceptStatementContext constraint catch a null active class.
 signals->forAll(containedIn(self.receivedSignals(activeClass))))"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="receivedSignals" ordered="false" unique="false" upperBound="-1" + eType="#//ElementReference"> + <eParameters name="activeClass" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="receivedSignals_" ordered="false" unique="false" upperBound="-1" + eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="activeClass.receptions().signal()"/> + </eAnnotations> + <eParameters name="activeClass" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="acceptStatementNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Any name defined in an accept block of an accept statement must be
unassigned before the accept statement."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let namesBefore = self.assignmentBefore.name in
 self.acceptBlock.actualName()->excludesAll(namesBefore)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="acceptStatementSimpleAcceptLocalName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A local name specified in the accept block of a simple accept statement
has the accept statement as its assigned source after the accept statement.
The type of the local name is the effective common ancestor of the specified
signals, if one exists, and it is untyped otherwise."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="acceptStatementCompoundAcceptLocalName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="For a compound accept statement, a local name defined in an accept block
has the accept block as its assigned source before the block associated
with the accept block. The type of the local name is the effective common
ancestor of the specified signals for that accept clause, if one exists,
and it is untyped otherwise. However, the local name is considered
unassigned after the accept statement."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="acceptStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before any block of an accept statement are the assignments
before the accept statement."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="acceptStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a name is assigned in any block of an accept statement, then the
assigned source of the name after the accept statement is the accept
statement itself."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="acceptStatementNewAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a name is unassigned before an accept statement and assigned in any
block of an accept statement, then it must be assigned in every block."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.acceptBlock->size() = 1 then true
 else
 let namesBefore = self.assignmentBefore.name in
 let newNames : Bag(String) = 
 self.acceptBlock.block.newAssignments().name in
 newNames->forAll(name | 
 namesBefore->excludes(name) implies 
 newNames->count(name) = self.acceptBlock->size()
 )
 endif"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="acceptStatementIsSimpleDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An accept statement is simple if it has exactly one accept block and that
accept block does not have a block."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="acceptStatementEnclosedStatements" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The enclosing statement for all statements in the blocks of all accept
blocks of an accept statement is the accept statement."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="acceptBlock" ordered="false" + lowerBound="1" upperBound="-1" eType="#//AcceptBlock" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="One or more blocks for accepting alternate groups of signals."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="behavior" eType="#//ElementReference" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The behavior containing the accept statement."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.currentScope()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isSimple" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the accept statement is simple or not."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="let acceptBlocks = self.acceptBlock in
 acceptBlocks->size() = 1 and acceptBlocks->forAll(block = null)"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="AcceptBlock" eSuperTypes="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A block of an accept statement that accepts one or more signals."/> + </eAnnotations> + <eOperations name="actualName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="NameBinding{name = self.name}.toName()"/> + </eAnnotations> + </eOperations> + <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="For a compound accept statement, a local name defined in an accept block
has the accept block as its assigned source before the block associated
with the accept block. The type of the local name is the effective common
ancestor of the specified signals for that accept clause, if one exists,
and it is untyped otherwise.

Otherwise, the assignments before any block of an accept statement are the
assignments before the accept statement.
"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let name = self.actualName() in
 if name = null or element <> self.block then
 self.assignmentsBefore()
 else
 AssignedSource{
 name = name,
 source = self,
 type = self.commonAncestor(self.signal),
 lower = 1,
 upper = 1
 }.update(self.assignmentsBefore())
 endif"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/> + </eOperations> + <eOperations name="acceptBlockSignalDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The signals of an accept block are the referents of the signal names of the accept block."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="acceptBlockSignalNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="All signal names in an accept block must resolve to signals."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.signalNames.name->forAll(
 referent->select(isSignal())->size() = 1
 )"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The local name to which an accepted signal instance will be assigned."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="block" eType="#//Block" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The body of the accept block, executed if one of the named signals is received."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="signalNames" lowerBound="1" + eType="#//QualifiedNameList" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A list of names of the signals accepted by this accept block."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="signal" ordered="false" + upperBound="-1" eType="#//ElementReference" volatile="true" transient="true" + derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The signals denoted by the signal names of the accept block."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 self.signalNames.name.referent->select(isSignal())->asSet()"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="EmptyStatement" eSuperTypes="#//Statement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A statement that has no affect when executed."/> + </eAnnotations> + <eOperations name="emptyStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments after and empty statement are the same as the assignments before the statement."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ModelNamespace" eSuperTypes="#//PackageDefinition"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A namespace to represent model scope."/> + </eAnnotations> + <eOperations name="context" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="EXTERNAL"/> + </eAnnotations> + </eOperations> + <eOperations name="outerScope" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="null"/> + </eAnnotations> + </eOperations> + <eOperations name="modelScope" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.toReference()"/> + </eAnnotations> + </eOperations> + <eOperations name="qualifiedName" eType="#//QualifiedName"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="QualifiedName{nameBinding = OrderedSet(NameBinding){}}"/> + </eAnnotations> + </eOperations> + <eOperations name="resolveInScope" ordered="false" upperBound="-1" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.resolveInRoot(name)"/> + </eAnnotations> + <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="resolveInRoot" ordered="false" upperBound="-1" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="EXTERNAL"/> + </eAnnotations> + <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="resolvePathName" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="EXTERNAL"/> + </eAnnotations> + <eParameters name="pathName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="resolveAssociationEnd" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="Set(ElementReference){}"/> + </eAnnotations> + <eParameters name="oppositeEndType" lowerBound="1" eType="#//ElementReference"/> + <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="ModelNamespace_appliedProfiles()"/> + </eAnnotations> + </eOperations> + <eOperations name="stubFor" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.context().stubFor(unit)"/> + </eAnnotations> + <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/> + </eOperations> + <eOperations name="ModelNamespace_appliedProfiles" ordered="false" upperBound="-1" + eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="EXTERNAL"/> + </eAnnotations> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="NamespaceDefinition" eSuperTypes="#//MemberDefinition"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A model of the common properties of the definition of a namespace in Alf."/> + </eAnnotations> + <eOperations name="currentScope" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A namespace definition is its own current scope."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.toReference()"/> + </eAnnotations> + </eOperations> + <eOperations name="outerScope" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The outer scope of a namespace definition is either the namespace
definition that owns it as a member or the declared namespace of the
unit that owns it or, if it has neither of these, then model scope."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.NamespaceDefinition_outerScope()"/> + </eAnnotations> + </eOperations> + <eOperations name="NamespaceDefinition_outerScope" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let outerScope = self.MemberDefinition_outerScope() in
 if outerScope <> null then
 outerScope
 else if self.unit = null then
 null
 else if unit.namespace = null then
 self.modelNamespace().toReference()
 else
 unit.namespace
 endif endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="modelNamespace" lowerBound="1" eType="#//NamespaceDefinition"/> + <eOperations name="modelScope" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let outerScope = self.outerScope() in
 if outerScope = null then
 self.modelNamespace().toReference()
 else
 outerScope.modelScope()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="resolveInScope" ordered="false" upperBound="-1" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.member->select(m | m.definition.actualName() = name)->asSet()"/> + </eAnnotations> + <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.NamespaceDefinition_appliedProfiles()"/> + </eAnnotations> + </eOperations> + <eOperations name="NamespaceDefinition_appliedProfiles" ordered="false" upperBound="-1" + eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let outerScope = self.outerScope() in
 if outerScope = null then null
 else outerScope.appliedProfiles()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="parameters" upperBound="-1" eType="#//FormalParameter"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns any owned members that are formal parameters, excluding return parameters."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.ownedMember.definition->
 select(oclIsKindOf(FormalParameter)).oclAsType(FormalParameter)->
 reject(direction = 'return')->asOrderedSet()"/> + </eAnnotations> + </eOperations> + <eOperations name="returnParameter" eType="#//FormalParameter"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns an owned member that is a return parameter, if any."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.NamespaceDefinition_returnParameter()"/> + </eAnnotations> + </eOperations> + <eOperations name="NamespaceDefinition_returnParameter" eType="#//FormalParameter"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let returnParameters = self.ownedMember.definition->
 select(oclIsKindOf(FormalParameter)).oclAsType(FormalParameter)->
 select(direction = 'return') 
 in
 if returnParameters->isEmpty() then null
 else returnParameters->any(true)
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="subunitOwnedMembers" upperBound="-1" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let subunit = self.subunit in
 if subunit = null or subunit.definition = null then self.ownedMember
 else subunit.definition.ownedMember
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns true if the annotation is @external."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="NamespaceDefinition_annotationAllowed(annotation)"/> + </eAnnotations> + <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/> + </eOperations> + <eOperations name="NamespaceDefinition_annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.annotation().stereotypeName.pathName = 'external' or

 /* TODO: Allow real stereotype application. */
 self.annotation().stereotypeName.pathName = 'ModelLibrary'"/> + </eAnnotations> + <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/> + </eOperations> + <eOperations name="templateParameters" upperBound="-1" eType="#//ClassifierTemplateParameter"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns the members of this namespace definition that are template parameters."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.ownedMember.definition->select(oclIsKindOf(ClassifierTemplateParameter)).
 oclAsType(ClassifierTemplateParameter)->asOrderedSet()"/> + </eAnnotations> + </eOperations> + <eOperations name="membersCached" upperBound="-1" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return all the members of this namespace (at least all the owned and imported members)."/> + </eAnnotations> + </eOperations> + <eOperations name="members" upperBound="-1" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.NamespaceDefinition_members()"/> + </eAnnotations> + </eOperations> + <eOperations name="NamespaceDefinition_members" upperBound="-1" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.ownedMember->includingAll(self.importedMembers())->asOrderedSet()"/> + </eAnnotations> + </eOperations> + <eOperations name="importedMembers" ordered="false" upperBound="-1" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns the members imported into this namespace."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.unit = null then 
 Set(Member){}
 else 
 self.importMembers(self.unit.imports().importedMembers()->asSet())
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="importMembers" ordered="false" upperBound="-1" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return the subset of the given imported members that are actually imported into the namespace.
This excludes hidden ones, i.e., those that have names that conflict with names of owned members,
and also excludes elements that would have the same name when imported."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.includeDistinguishableCaching(self.excludeCollisions(importedMembers))"/> + </eAnnotations> + <eParameters name="importedMembers" ordered="false" upperBound="-1" eType="#//Member"/> + </eOperations> + <eOperations name="excludeCollisions" ordered="false" upperBound="-1" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return the subset of the given imported members that excludes any that would not be
distinguishable from each other in this namespace."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let remainingMembers = self.removeDuplicates(importedMembers) in
 remainingMembers->reject(imp1 | 
 remainingMembers->exists(imp2 | imp1 <> imp2 and 
 not imp1.definition.isDistinguishableFrom(imp2.definition)
 )
 )"/> + </eAnnotations> + <eParameters name="importedMembers" ordered="false" upperBound="-1" eType="#//Member"/> + </eOperations> + <eOperations name="removeDuplicates" ordered="false" upperBound="-1" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Remove duplicate imported members that have the same referent
(but leave one of them)."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 importedMembers->iterate(m1; result : Set(Member) = Set(Member){} | 
 if result->exists(m2 | m1.toReference().equals(m2.toReference())) then
 result
 else
 result->including(m1)
 endif
 )"/> + </eAnnotations> + <eParameters name="importedMembers" ordered="false" upperBound="-1" eType="#//Member"/> + </eOperations> + <eOperations name="includeDistinguishableCaching" ordered="false" upperBound="-1" + eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Cache an intermediate value for member before caling includingDistinguishable,
in order to avoid an infinite loop."/> + </eAnnotations> + <eParameters name="importedMembers" ordered="false" upperBound="-1" eType="#//Member"/> + </eOperations> + <eOperations name="includeDistinguishable" ordered="false" upperBound="-1" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return the subset of the given imported members that would be distinguishable
from all owned members of this namespace."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 importedMembers->select(imp | self.ownedMember->forAll(m | 
 imp.definition.isDistinguishableFrom(m.definition)
 ))"/> + </eAnnotations> + <eParameters name="importedMembers" ordered="false" upperBound="-1" eType="#//Member"/> + </eOperations> + <eOperations name="stub" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return the stub member the subunit for which has this namespace
definition as its definition, if any. Note that, for an activity
definition, the "stub" may be an external operation or activity."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let unit = self.unit in
 if unit = null then null
 else
 let namespace = self.outerScope() in
 if namespace = null then null
 else namespace.stubFor(unit)
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="stubFor" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if unit = null or unit.definition = null then null
 else
 let members = self.ownedMember.definition->select(m |
 m.actualName() = unit.definition.actualName() and 
 m.isStub and m.matchForStub(unit)
 ) in
 if members->isEmpty() then null
 else members->any(true).oclAsType(Member).toReference()
 endif
 endif"/> + </eAnnotations> + <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/> + </eOperations> + <eOperations name="namespaceDefinitionMemberDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The members of a namespace definition include references to all owned members.
Also, if the namespace definition has a unit with imports, then the members
include imported members with referents to all imported elements.
The imported elements and their visibility are determined as given in the
UML Superstructure. The name of an imported member is the name of the
imported element or its alias, if one has been given for it.
Elements that would be indistinguishable from each other or from an owned
member (as determined by the Member::isDistinguishableFrom operation) are not imported. .
"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="namespaceDefinitionMemberDistinguishability" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The members of a namespace must be distinguishable as determined by the Member::isDistinguishableFrom operation."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.member->forAll(m1 | 
 self.member->forAll(m2 | 
 m1 = m2 or m1.definition.isDistinguishableFrom(m2.definition)
 )
 )"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="ownedMember" upperBound="-1" + eType="#//Member" containment="true" eOpposite="#//Member/namespace"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The definitions of owned members of the namespace."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="unit" eType="#//UnitDefinition" + eOpposite="#//UnitDefinition/definition"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The unit for which this namespace is a definition, if any."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="member" upperBound="-1" + eType="#//Member" volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The owned and imported members of a namespace definition."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.membersCached()"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="MemberDefinition" abstract="true" eSuperTypes="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A model of the common properties of the definition of a member of a namespace in Alf."/> + </eAnnotations> + <eOperations name="annotation" ordered="false" upperBound="-1" eType="#//StereotypeAnnotation"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let container = self.oclContainer() in 
 if container.oclIsKindOf(Member) then 
 container.oclAsType(Member).annotation
 else if container.oclIsKindOf(UnitDefinition) then 
 container.oclAsType(UnitDefinition).annotation
 else if container.oclIsKindOf(MemberDefinition) then
 container.oclAsType(MemberDefinition).annotation()
 else 
 Set{}
 endif endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="actualName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 NameBinding{name = self.name}.toName()"/> + </eAnnotations> + </eOperations> + <eOperations name="outerScope" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.MemberDefinition_outerScope()"/> + </eAnnotations> + </eOperations> + <eOperations name="MemberDefinition_outerScope" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let container = self.containingMember() in
 if container <> null then
 let namespace = container.namespace in
 if namespace = null then null else namespace.toReference() endif
 else
 null
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="qualifiedName" eType="#//QualifiedName"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.name = null then
 null
 else
 let nameBinding = NameBinding{name = self.name} in
 let outerScope = self.outerScope() in
 if outerScope = null then
 QualifiedName{nameBinding = nameBinding}
 else
 let qualificationName = outerScope.qualifiedName() in
 if qualificationName = null then
 null
 else
 QualifiedName{
 nameBinding = qualificationName.nameBinding->append(nameBinding)
 }
 endif
 endif
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="namespaceReference" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let container = self.oclContainer() in
 if container.oclIsKindOf(Member) then
 let namespace = container.oclAsType(Member).namespace in
 if namespace = null then null
 else namespace.toReference()
 endif
 else if container.oclIsKindOf(NamespaceDefinition) then
 container.oclAsType(NamespaceDefinition).toReference()
 else if container.oclIsKindOf(UnitDefinition) then
 container.oclAsType(UnitDefinition).namespace
 else if container.oclIsKindOf(MemberDefinition) then
 -- NOTE: This is a workaround to handle an Xtext
 -- editor bug in which the syntax tree is built wrong.
 container.oclAsType(MemberDefinition).namespaceReference()
 else
 null
 endif endif endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="addToModel" lowerBound="1" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="EXTERNAL"/> + </eAnnotations> + </eOperations> + <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns true of the given stereotype annotation is allowed for this kind
of element."/> + </eAnnotations> + <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/> + </eOperations> + <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns true of the given unit definition is a legal match for this
member as a stub. By default, always returns false."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/> + </eOperations> + <eOperations name="isDistinguishableFrom" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns true if this member is distinguishable from the given member. Two
members are distinguishable if their names are different or the they are of
different kinds (as determined by the isSameKindAs operation). However, in
any case that the UML Superstructure considers two names to be distinguishable
if they are different, an Alf implementation may instead impose the stronger
requirement that the names not be conflicting."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="MemberDefinition_isDistinguishableFrom(member)"/> + </eAnnotations> + <eParameters name="member" lowerBound="1" eType="#//MemberDefinition"/> + </eOperations> + <eOperations name="MemberDefinition_isDistinguishableFrom" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.actualName() <> member.actualName() or not self.isSameKindAs(member.toReference())"/> + </eAnnotations> + <eParameters name="member" lowerBound="1" eType="#//MemberDefinition"/> + </eOperations> + <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns true if this member is of the same kind as the given member."/> + </eAnnotations> + <eParameters name="member" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="templateParameters" upperBound="-1" eType="#//ClassifierTemplateParameter"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The template parameters associated with this member. (Only a namespace
definition can actually have template parameters.)"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="OrderedSet{}"/> + </eAnnotations> + </eOperations> + <eOperations name="isTemplate" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns true if this member is a template."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.templateParameters()->notEmpty()"/> + </eAnnotations> + </eOperations> + <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns true if this member is a feature. By default is is not."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + </eOperations> + <eOperations name="memberAnnotations" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="All stereotype annotations for a member must be allowed, as determined using the stereotypeAllowed operation."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.annotation()->forAll(a | self.annotationAllowed(a))"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="memberIsPrimitiveDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A member is primitive if it has a @primitive annotation."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="memberIsExternalDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A member is external if it has an @external derivation."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="memberExternal" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a member is external then it must be a stub."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.isExternal implies self.isStub"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="memberStub" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a member is a stub and is not external, then there must be a single subunit with the same qualified name as the stub that matches the stub, as determined by the matchForStub operation."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="memberSubunitDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the member is a stub and is not external, then its corresponding subunit is a unit definition with the same fully qualified name as the stub."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="memberStubStereotypes" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a member is a stub, then the it must not have any stereotype annotations that are the same as its subunit. Two stereotype annotations are the same if they are for the same stereotype."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="memberPrimitive" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a member is primitive, then it may not be a stub and it may not have any owned members that are template parameters."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.isPrimitive implies not self.isStub and not self.isTemplate()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="containingMember" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="This is a workaround for an Xtext editor problem in which a reparsed
subtree may be put in the wrong container."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let container = self.oclContainer() in
 if container = null then null
 else if container.oclIsKindOf(Member) then 
 container.oclAsType(Member)
 else if container.oclIsKindOf(MemberDefinition) then 
 container.oclAsType(MemberDefinition).containingMember()
 else 
 null
 endif endif endif"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The name of the member."/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="StereotypeAnnotation"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isStub" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this member definition is a stub for a subunit."/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="StereotypeAnnotation"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isFeature" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this member is a feature of a classifier."/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="StereotypeAnnotation"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.isFeature()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isPrimitive" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this member is a primitive or not."/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="StereotypeAnnotation"/> + <details key="unique" value="false"/> + <details key="upper" value="*"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.annotation().stereotypeName->exists(pathName = 'primitive')"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isExternal" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this member is external or not."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.annotation().stereotypeName->exists(pathName = 'external')"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="subunit" eType="#//UnitDefinition" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The subunit corresponding to the member, if the member is a stub."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="null"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="StereotypeAnnotation" eSuperTypes="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An annotation of a member definition indicating the application of a stereotype (or one of a small number of special-case annotations)."/> + </eAnnotations> + <eOperations name="stereotypeAnnotationStereotypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Unless the stereotype name is "apply", "primitive" or "external" then the stereotype for a stereotype annotation is the stereotype denoted by the stereotype name."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="stereotypeAnnotationStereotypeName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The stereotype name of a stereotype annotation must either be one of "apply",
"primitive" or "external", or it must denote a single stereotype from a profile
applied to an enclosing package. The stereotype name does not need to be qualified
if there is only one applied profile with a stereotype of that name or if the
there is a standard UML profile with the name."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let name = self.stereotypeName.pathName in 
 name = 'apply' or name = 'primitive' or name = 'external' or
 self.stereotype <> null"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="stereotypeAnnotationApply" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the stereotype name of a stereotype annotation is "apply", then it must have a name list and all of the names in the list must resolve to profiles."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.stereotypeName.pathName = 'apply' implies names->notEmpty()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="stereotypeAnnotationPrimitive" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the stereotype name of a stereotype annotation is "primitive", then it may not have tagged values or names."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.stereotypeName.pathName = 'primitive' implies
 (self.taggedValues = null and self.names = null)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="stereotypeAnnotationExternal" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the stereotype name of a stereotype annotation is "external", then it may optionally have a single tagged value with the name "file" and no operator."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.stereotypeName.pathName = 'external' implies
 (self.names = null and 
 (self.taggedValues = null or 
 self.taggedValues.taggedValue->size() = 1 and 
 self.taggedValues.taggedValue->exists(
 name = 'file' and operator = null
 )
 )
 )"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="stereotypeAnnotationTaggedValues" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a stereotype annotation has a stereotype and tagged values, then the each tagged value must have the name of an attribute of the stereotype and a value that is legally interpretable for the type of that attribute."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="stereotypeAnnotationNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a stereotype annotation has a stereotype and a list of names, then all the names in the list must resolve to visible model elements and the stereotype must have a single attribute with a (metaclass) type and multiplicity that are consistent with the types and number of the elements denoted by the given names."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let owner = self.owner() in
 if owner.oclIsKindOf(UnitDefinition) then
 owner.oclAsType(UnitDefinition).appliedProfile
 else
 self.currentScope().appliedProfiles()
 endif"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="taggedValues" eType="#//TaggedValueList" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A set of tagged values for the applied stereotype."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="names" eType="#//QualifiedNameList" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A set of references to model elements required for the stereotype being applied."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="stereotypeName" lowerBound="1" + eType="#//QualifiedName" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The name of the stereotype being applied."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="stereotype" lowerBound="1" + eType="#//ElementReference" volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The stereotype denoted by the stereotype name."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let profiles = self.appliedProfiles() in
 let qualification = self.stereotypeName.qualification in
 let name = self.stereotypeName.unqualifiedName.toName() in
 if self.stereotypeName.qualification = null then
 let standardProfile = profiles->select(name() = 'StandardProfile') in
 let standardStereotype = standardProfile.resolveStereotype(name) in
 if standardStereotype->size() = 1 then
 standardStereotype->any(true)
 else
 let stereotype = profiles.resolveStereotype(name) in
 if stereotype->size() = 1 then
 stereotype->any(true)
 else
 null
 endif
 endif
 else
 let profile = profiles->select(qualifiedName() = qualification.pathName) in
 if profile->size() = 1 then
 let stereotype = profile.resolveStereotype(name) in
 if stereotype->size() = 1 then
 stereotype->any(true)
 else
 null
 endif
 else
 null
 endif
 endif"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="TaggedValueList" eSuperTypes="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A set of tagged values for a stereotype application."/> + </eAnnotations> + <eStructuralFeatures xsi:type="ecore:EReference" name="taggedValue" ordered="false" + lowerBound="1" upperBound="-1" eType="#//TaggedValue" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The tagged values in the set."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="TaggedValue" eSuperTypes="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An assignment of a value to an attribute of an applied stereotype."/> + </eAnnotations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The name of the stereotype attribute to be assigned a value."/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="UnitDefinition"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The string image of a literal value to be assigned to the stereotype attribute."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="For a numeric value, an optional unary plus or minus operator."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="UnitDefinition" eSuperTypes="#//DocumentedElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The definition of a namespace as an Alf unit."/> + </eAnnotations> + <eOperations name="imports" ordered="false" upperBound="-1" eType="#//ImportReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isModelLibrary then
 self.import
 else
 self.import->union(self.implicitImports())
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="implicitImports" ordered="false" upperBound="-1" eType="#//ImportReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 Set{'PrimitiveTypes', 'PrimitiveBehaviors', 'BasicInputOutput', 
 'CollectionFunctions', 'CollectionClasses'}->
 collect(name | self.implicitImportFor(name))->asSet()"/> + </eAnnotations> + </eOperations> + <eOperations name="implicitImportFor" lowerBound="1" eType="#//ImportReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 PackageImportReference {
 referentName = QualifiedName{
 nameBinding = Sequence{
 NameBinding{name = 'Alf'},
 NameBinding{name = 'Library'},
 NameBinding{name = name}
 }
 }
 }"/> + </eAnnotations> + <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eOperations> + <eOperations name="unitDefinitionNamespaceDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a unit definition has a declared namespace name, then the containing
namespace for the unit is the referent for that name."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="unitDefinitionNamespace" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The declared namespace name for a unit definition, if any, must resolve
to a UML namespace or an Alf unit definition. If it is an Alf unit
definition, then it must have a stub for this unit definition."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.namespaceName <> null implies
 let namespace = self.namespace in
 namespace <> null and namespace.isNamespaceFor(self)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="unitDefinitionIsModelLibraryDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A unit definition is for a model library if its associated namespace
definition has a stereotype annotation for the UML standard stereotype
ModelLibrary."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="unitDefinitionImplicitImports" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Unless the unit definition is a model library, it has private package
import references for all the sub-packages of the Alf::Library package."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="unitDefinitionAppliedProfileDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The profiles applied to a unit definition include any profiles applied
to the containing namespace of the unit definition. If the unit
definition is for a package, then the applied profiles for the unit
definition also include the applied profiles for its associated package
definition."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="namespaceName" eType="#//QualifiedName" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A declaration of the name of the namespace that contains this unit as a
subunit."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="definition" lowerBound="1" + eType="#//NamespaceDefinition" containment="true" eOpposite="#//NamespaceDefinition/unit"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The definition of the unit as a namespace."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="import" ordered="false" + upperBound="-1" eType="#//ImportReference" containment="true" eOpposite="#//ImportReference/unit"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The set of references to imported elements or packages."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="namespace" eType="#//ElementReference" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A reference to the namespace denoted by the declared namespace name for
the unit, if any."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 if self.namespaceName = null then
 null
 else
 let referents = self.namespaceName.modelReferents() in
 if referents->size() = 1 then
 referents->any(true)
 else
 null
 endif
 endif"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isModelLibrary" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this unit definition is for a model library or not."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="

 /* TODO: Allow real stereotype application. */
 self.annotation->exists(stereotypeName.pathName = 'ModelLibrary')"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="appliedProfile" ordered="false" + upperBound="-1" eType="#//ElementReference" volatile="true" transient="true" + derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The profiles applied to this unit."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.definition.appliedProfiles()"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="annotation" ordered="false" + upperBound="-1" eType="#//StereotypeAnnotation" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The stereotype annotations on this unit definition."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ImportReference" abstract="true" eSuperTypes="#//SyntaxElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A reference to an element or package to be imported into a unit."/> + </eAnnotations> + <eOperations name="importedMembers" ordered="false" upperBound="-1" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return the set of all imported members."/> + </eAnnotations> + </eOperations> + <eOperations name="importReferenceReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The referent of an import reference is the element denoted by the
referent name."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="importReferenceReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The referent name of an import reference must resolve to a single element
with public or empty visibility."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.referent <> null and
 let visibility = self.referent.visibility() in 
 visibility = null or visibility = 'public'"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="visibility" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An indication of the visibility of the import."/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="ImportedMember"/> + <details key="unique" value="false"/> + <details key="upper" value="*"/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="ImportedMember"/> + <details key="unique" value="false"/> + <details key="upper" value="*"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="referentName" lowerBound="1" + eType="#//QualifiedName" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The name of the element or package to be imported."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="referent" eType="#//ElementReference" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A reference to the imported element denoted by the given qualified name."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let referents = self.referentName.modelReferents() in 
 if referents->size() = 1 then referents->any(true)
 else null
 endif"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="unit" lowerBound="1" eType="#//UnitDefinition" + eOpposite="#//UnitDefinition/import"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The unit that is making this import reference."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ImportedMember" eSuperTypes="#//MemberDefinition"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value=""/> + </eAnnotations> + <eOperations name="actualName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.name"/> + </eAnnotations> + </eOperations> + <eOperations name="toReference" lowerBound="1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent"/> + </eAnnotations> + </eOperations> + <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns false. (Imported members do not have annotations.)"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/> + </eOperations> + <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the given member is not an imported member, then return the result of
checking whether the given member is the same kind as this member. Else,
if the element of the referent for this member is an Alf member, then
return the result of checking whether that element is the same kind as the
given member. Else, if the element of the referent for the given member is
an Alf member, then return the result of checking whether that element is
the same kind as this member. Else, the referents for both this and the
given member are UML elements, so return the result of checking their
distinguishability according to the rules of the UML superstructure."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isSameKindAs(member)"/> + </eAnnotations> + <eParameters name="member" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns true if the referent of this imported member is a feature."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.referent.isFeature()"/> + </eAnnotations> + </eOperations> + <eOperations name="importedMemberNotStub" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An imported element is not a stub."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="not self.isStub"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="importedMemberIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An imported element is a feature if its referent is a feature."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="referent" lowerBound="1" + eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value=""/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="EnumerationLiteralName" eSuperTypes="#//MemberDefinition"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The definition of an enumeration literal, as a member of an enumeration definition."/> + </eAnnotations> + <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns false. (Enumeration literal name cannot have annotations.)"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="OperationDefinition" eSuperTypes="#//NamespaceDefinition"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The definition of an operation, with any formal parameters defined as owned members."/> + </eAnnotations> + <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before the body of an operation definition include an
assigned source for each parameter of the activity definition. The
source for out parameters is actually null, however, to indicate that it
has not been assigned yet (but that the name should not otherwise be used
as a local name)."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.body <> element then Set(AssignedSource){}
 else
 self.parameters()->collect(parameter |
 AssignedSource{
 name = parameter.actualName(),
 source = if parameter.direction = 'out' then null else parameter endif,
 type = parameter.typePart.type,
 upper = parameter.typePart.upper,
 lower = parameter.typePart.lower
 }
 )->asSet()
 endif"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/> + </eOperations> + <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns true if the annotation is for a stereotype that has a metaclass consistent with Operation."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 /* TODO: Allow operation stereotype annotations. */
 annotation.stereotypeName.pathName = 'Create' or
 annotation.stereotypeName.pathName = 'Destroy' or
 self.NamespaceDefinition_annotationAllowed(annotation)"/> + </eAnnotations> + <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/> + </eOperations> + <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The namespace definition associated with the given unit definition must be
an activity definition with no template parameters. In addition, the subunit
definition must have formal parameters that match each of the formal parameters
of the stub definition, in order. Two formal parameters match if they have
the same direction, name, multiplicity bounds, ordering, uniqueness and type
reference. If this operation definition is a constructor, then it is considered
to have an implicit return parameter, following any other formal parameters,
with the same type as the class of the operation definition and a multiplicity of 1..1.
"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let definition = unit.definition in
 definition.oclIsKindOf(ActivityDefinition) and
 definition.templateParameters()->isEmpty() and
 let operationParameters = self.parameters() in
 let activityParameters = definition.parameters() in
 operationParameters->size() = activityParameters->size() and 
 Sequence{1 .. operationParameters->size()}->forAll(i | 
 operationParameters->at(i).matches(activityParameters->at(i))
 ) and
 let operationReturnParameter = self.returnParameter() in
 let activityReturnParameter = definition.returnParameter() in
 operationReturnParameter = null and activityReturnParameter = null or
 operationReturnParameter <> null and 
 operationReturnParameter.matches(activityReturnParameter)"/> + </eAnnotations> + <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/> + </eOperations> + <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return true if the given member is either an OperationDefinition or an
imported member whose referent is an OperationDefinition or an Operation,
and the formal parameters of this operation definition match, in order,
the parameters of the other operation definition or operation. In this
context, matching means the same name and type (per UML Superstructure,
Subclause 7.3.5). A constructor operation without an explicit return parameter
is considered to implicitly have a return parameter, following any other
formal parameters, of the same type as the owner of the constructor operation."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 member.isOperation() and self.parametersMatchNameType(member)"/> + </eAnnotations> + <eParameters name="member" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="parametersMatch" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns whether the parameters of this operation definition match the parameters of another operation
in direction, name, multiplicity bounds, ordering, uniqueness and type."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let parameters = self.parameters() in
 let otherParameters = other.parameters() in
 parameters->size() = otherParameters->size() and
 Sequence{1..parameters->size()}->forAll(i |
 parameters->at(i).matchesElement(otherParameters->at(i))
 ) and
 let returnParameter = self.returnParameter() in
 let otherReturnParameter = other.returnParameter() in
 returnParameter = null and otherReturnParameter = null or
 returnParameter <> null and returnParameter.matchesElement(otherReturnParameter)"/> + </eAnnotations> + <eParameters name="other" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="parametersMatchNameType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns whether the parameters of this operation definition match the parameters of another operation
in name and type only."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let parameters = self.parameters() in
 let otherParameters = other.parameters() in
 parameters->size() = otherParameters->size() and
 Sequence{1..parameters->size()}->forAll(i |
 parameters->at(i).matchesNameType(otherParameters->at(i))
 ) and
 let returnParameter = self.returnParameter() in
 let otherReturnParameter = other.returnParameter() in
 returnParameter = null and otherReturnParameter = null or
 returnParameter <> null and returnParameter.matchesType(otherReturnParameter)"/> + </eAnnotations> + <eParameters name="other" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="returnParameter" eType="#//FormalParameter"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns the return parameter for this operation. If the operation is a constructor, a
formal parameter is created to represent its implicit return parameter."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isConstructor then 
 let namespace = self.containingMember().namespace.toReference() in
 let returnType =
 if not namespace.isTemplate() then namespace
 else
 namespace.bind(
 namespace.parameteredElements()->asSequence()
 )
 endif
 in
 FormalParameter{
 direction = 'return', 
 name = '', 
 typePart = TypedElementDefinition{
 actualType = returnType
 }
 }
 else
 self.NamespaceDefinition_returnParameter()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="specializationReferents" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns the specialization referents for the owning class definition of this operation definition."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let namespace = self.containingMember().namespace in 
 if namespace.oclIsKindOf(ClassDefinition) then 
 namespace.oclAsType(ClassDefinition).specializationReferent->asSet()
 else 
 Set{}
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="operationDefinitionNamespace" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The namespace for an operation definition must be a class definition."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.containingMember().namespace.oclIsKindOf(ClassDefinition)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="operationDefinitionRedefinedOperationDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If an operation definition has a redefinition list, its redefined operations
are the referent operations of the names in the redefinition list for the
operation definition. Otherwise, the redefined operations are any operations
that would otherwise be indistinguishable from the operation being defined
in this operation definition."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="operationDefinitionRedefinition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Each name in the redefinition list of an operation definition must have a
single referent that is an operation. This operation must be a non-private
operation that is a member of a specialization referent of the class
definition of the operation definition."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.redefinition = null or
 self.redefinition.name->forAll(
 referent->size() = 1 and 
 referent->forAll(
 visibility() <> 'private' and 
 containedIn(self.specializationReferents().members()) and 
 isOperation()
 )
 )"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="operationDefinitionRedefinedOperations" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The redefined operations of an operation definition must have formal parameters
that match each of the formal parameters of this operation definition, in order.
Two formal parameters match if they have the same direction, name, multiplicity
bounds, ordering, uniqueness and type reference."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.redefinedOperation->forAll(op | self.parametersMatch(op))"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="operationDefinitionIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An operation definition is a feature."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="operationDefinitionIsConstructorDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An operation definition is a constructor if it has a @Create annotation."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="operationDefinitionIsDestructorDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An operation definition is a destructor if it has a @Destroy annotation."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="operationDefinitionConstructorDestructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An operation definition cannot be both a constructor and a destructor."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 not (self.isConstructor and self.isDestructor)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="operationDefinitionConstructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If an operation definition is a constructor, any redefined operation for it must also be a constructor.
The body of a constructor may contain an alternative constructor invocation for another constructor
in the same class or super constructor invocations for constructors in immediate superclasses."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.isConstructor implies
 ( self.redefinedOperation->forAll(isConstructor)) and
 -- NOTE: The following condition is added.
 -- A constructor may not have an explicit return type.
 not self.ownedMember.definition->exists(
 oclIsKindOf(FormalParameter) and 
 oclAsType(FormalParameter).direction = 'return'
 )"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="operationDefinitionDestructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If an operation definition is a destructor, any redefined operation for it must also be a destructor."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.isDestructor implies
 self.redefinedOperation->forAll(isDestructor)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="redefinition" eType="#//QualifiedNameList" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The names of other operations that are redefined by the operation being defined."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAbstract" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the operation being defined is abstract."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="body" eType="#//Block" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The sequence of statements that defines the behavior of the operation (empty for a stub)."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="redefinedOperation" ordered="false" + upperBound="-1" eType="#//ElementReference" volatile="true" transient="true" + derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value=""/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 if self.redefinition <> null then 
 -- NOTE: The current scope for the redefinition qualifed name list is
 -- defined to be the outer scope of the class of the operation. This
 -- prevents an infinite loop in resolving the members of the class,
 -- relying on the fact that redefined operations can not be members of
 -- the class with the redefinition.
 self.redefinition.name.referent->asSet()
 else
 let owner = self.containingMember().namespace.oclAsType(ClassDefinition) in 
 owner.specializationReferent.members()->
 select(m | m.visibility() <> 'private' and not self.isDistinguishableFrom(m.asMember().definition))->
 asSet()
 endif"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isConstructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this operation definition is for a constructor."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.annotation()->exists(stereotypeName.pathName = 'Create')"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDestructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether this operation definition is for a destructor."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="self.annotation()->exists(stereotypeName.pathName = 'Destroy')"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="AssociationDefinition" eSuperTypes="#//ClassifierDefinition"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The definition of an association, whose members must all be properties."/> + </eAnnotations> + <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns true if the given unit definition matches this association definition
considered as a classifier definition and the subunit is for an association definition."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.ClassifierDefinition_matchForStub(unit) and
 unit.definition.oclIsKindOf(AssociationDefinition)"/> + </eAnnotations> + <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/> + </eOperations> + <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="In addition to the annotations allowed for classifiers in general, an association
definition allows an annotation for any stereotype whose metaclass is consistent with Association."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 /* TODO: Handle association stereotype annotations. */
 self.ClassifierDefinition_annotationAllowed(annotation)"/> + </eAnnotations> + <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/> + </eOperations> + <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return true if the given member is either an AssociationDefinition or an
imported member whose referent is an AssociationDefinition or an Association."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="member.isAssociation()"/> + </eAnnotations> + <eParameters name="member" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="associationDefinitionSpecializationReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The specialization referents of an association definition must all be associations."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.specializationReferent->forAll(isAssociation())"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ClassifierDefinition" abstract="true" + eSuperTypes="#//NamespaceDefinition"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The definition of a classifier."/> + </eAnnotations> + <eOperations name="ClassifierDefinition_annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="NamespaceDefinition_annotationAllowed(annotation)"/> + </eAnnotations> + <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/> + </eOperations> + <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The namespace definition associated with the given unit definition must
be a classifier definition. The subunit classifier definition may be abstract
if and only if the subunit classifier definition is abstract. The subunit
classifier definition must have the same specialization referents as the
stub classifier definition. (Note that it is the referents that must match,
not the exact names or the ordering of those names in the specialization list.)
The subunit classifier definition must also have a matching classifier
template parameter for each classifier template parameter of the stub classifier
definition. Two template parameters match if they have same names and the same
specialization referents."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="ClassifierDefinition_matchForStub(unit)"/> + </eAnnotations> + <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/> + </eOperations> + <eOperations name="ClassifierDefinition_matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 unit.definition.oclIsKindOf(ClassifierDefinition) and
 let classifier = unit.definition.oclAsType(ClassifierDefinition) in
 classifier.isAbstract = self.isAbstract and
 classifier.specializationReferent->size() = self.specializationReferent->size() and
 classifier.specializationReferent->forAll(containedIn(self.specializationReferent->asBag())) and
 classifier.templateParameters()->size() = self.templateParameters()->size() and
 Sequence{1..classifier.templateParameters()->size()}->forAll(i |
 classifier.templateParameters()->at(i).matches(self.templateParameters()->at(i))
 )"/> + </eAnnotations> + <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/> + </eOperations> + <eOperations name="members" upperBound="-1" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns the members of a classifier definition including its inherited members."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.NamespaceDefinition_members()->
 includingAll(self.inheritedMembers())->asOrderedSet()"/> + </eAnnotations> + </eOperations> + <eOperations name="inheritedMembers" upperBound="-1" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns all of the inherited members of this classifier definition."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.inherit(
 self.specializationReferent.members()->select(visibility() <> 'private').
 asMember()->asOrderedSet()
 )"/> + </eAnnotations> + </eOperations> + <eOperations name="inherit" upperBound="-1" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Define how to inherit a set of members. Here the operation is defined to inherit them all.
It is intended to be redefined in circumstances where inheritance is affected by redefinition."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="members"/> + </eAnnotations> + <eParameters name="members" upperBound="-1" eType="#//Member"/> + </eOperations> + <eOperations name="classifierDefinitionSpecialization" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Each name listed in the specialization list for a classifier definition must
have a single classifier referent. None of these referents may be templates."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.specialization = null or
 self.specialization.name->forAll(
 referent->size() = 1 and
 referent->forAll(isClassifier() and not isTemplate())
 )"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="classifierDefinitionSpecializationReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The specialization referents of a classifier definition are the classifiers denoted by the
names in the specialization list for the classifier definition."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="classifierDefinitionInheritedMembers" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The members of a classifier definition include non-private members inherited from the classifiers it specializes.
The visibility of inherited members is as specified in the UML Superstructure, Subclause 7.3.8."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAbstract" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the classifier is abstract or not."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="specialization" eType="#//QualifiedNameList" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The names of classifiers specialized by the classifier being defined."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="specializationReferent" + upperBound="-1" eType="#//ElementReference" volatile="true" transient="true" + derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="References to the classifiers to which the names in the specialization list resolve."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 if self.specialization = null then OrderedSet{}
 else self.specialization.name.referent->asOrderedSet()
 endif"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ClassDefinition" eSuperTypes="#//ClassifierDefinition"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The definition of a class, whose members may be properties, operations, signals or signal receptions."/> + </eAnnotations> + <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="In addition to the annotations allowed for classifiers in general, a class definition allows an
annotation for any stereotype whose metaclass is consistent with Class."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 /* TODO: Allow class stereotype annotations. */
 self.ClassifierDefinition_annotationAllowed(annotation)"/> + </eAnnotations> + <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/> + </eOperations> + <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns true if the given unit definition matches this class definition considered as a
classifier definition and the subunit is for a class definition."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.ClassifierDefinition_matchForStub(unit) and
 /* NOTE: Cannot be an ActiveClassDefinition. */
 unit.definition.oclIsTypeOf(ClassDefinition)"/> + </eAnnotations> + <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/> + </eOperations> + <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return true if the given member is either a ClassDefinition or an imported member whose referent is a ClassDefinition or a Class."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="member.isClass()"/> + </eAnnotations> + <eParameters name="member" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="needsDefaultConstructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Checks whether this class needs to have a default constructor added."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 not self.ownedMember.definition->exists(
 oclIsKindOf(OperationDefinition) and 
 oclAsType(OperationDefinition).isConstructor
 )"/> + </eAnnotations> + </eOperations> + <eOperations name="needsDefaultDestructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Checks whether this class needs to have a default destructor added."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 not self.ownedMember.definition->exists(
 oclIsKindOf(OperationDefinition) and 
 oclAsType(OperationDefinition).isDestructor
 )"/> + </eAnnotations> + </eOperations> + <eOperations name="inherit" upperBound="-1" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.inheritCached(inheritableMembers)"/> + </eAnnotations> + <eParameters name="inheritableMembers" upperBound="-1" eType="#//Member"/> + </eOperations> + <eOperations name="inheritCached" upperBound="-1" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="EXTERNAL: Caches intermediate members computation to avoid infinite loops."/> + </eAnnotations> + <eParameters name="inheritableMembers" upperBound="-1" eType="#//Member"/> + </eOperations> + <eOperations name="ClassDefinition_inherit" upperBound="-1" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let ownedOperations = self.subunitOwnedMembers().definition->
 select(oclIsKindOf(OperationDefinition)).oclAsType(OperationDefinition)
 in
 inheritableMembers->reject(inheritableMember |
 ownedOperations->exists(operation |
 inheritableMember.toReference().
 containedIn(operation.redefinedOperation->asBag()) or
 not operation.isDistinguishableFrom(inheritableMember.definition)
 )
 )"/> + </eAnnotations> + <eParameters name="inheritableMembers" upperBound="-1" eType="#//Member"/> + </eOperations> + <eOperations name="classDefinitionSpecializationReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The specialization referents of a class definition must all be classes.
A class definition may not have any referents that are active classes unless
this is an active class definition."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.specializationReferent->forAll(isClass()) and
 (self.specializationReferent->exists(isActiveClass())
 implies self.oclIsKindOf(ActiveClassDefinition)
 )"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="classDefinitionAbstractMember" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a class definition is not abstract, then no member operations (owned or inherited)
of the class definition may be abstract."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isAbstract then true
 else 
 self.member.definition->select(oclIsKindOf(OperationDefinition)).
 oclAsType(OperationDefinition)->forAll(not isAbstract)
 endif"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="TypedElementDefinition" eSuperTypes="#//AssignableElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The common properties of the definitions of typed elements."/> + </eAnnotations> + <eOperations name="isOrdered" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.isOrdered or self.isSequence"/> + </eAnnotations> + </eOperations> + <eOperations name="isNonunique" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.isNonunique or self.isSequence"/> + </eAnnotations> + </eOperations> + <eOperations name="typedElementDefinitionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If the lower bound string image of a typed element definition is not empty,
then the integer lower bound is the integer value of the lower bound string.
Otherwise the lower bound is equal to the upper bound, unless the upper bound
is unbounded, in which case the lower bound is 0."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="typedElementDefinitionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The unlimited natural upper bound value is the unlimited natural value of
the upper bound string (with "*" representing the unbounded value)."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="typedElementDefinitionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The type of a typed element definition is the single classifier referent
of the type name."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="typedElementDefinitionTypeName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The type name of a typed element definition must have a single classifier
referent. This referent may not be a template."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.typeName = null or self.type <> null and not self.type.isTemplate()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="type" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.actualType <> null then
 self.actualType
 else if self.typeName = null then
 null
 else
 let types = self.typeName.referent->select(isClassifier()) in 
 if types->size() <> 1 then
 null
 else
 types->any(true)
 endif
 endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="lower" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.lowerBound <> null then
 self.lowerBound.toInteger()
 else if self.isMultiplicity or self.upperBound = '*' then
 0
 else
 self.upper
 endif endif"/> + </eAnnotations> + </eOperations> + <eOperations name="upper" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.isMultiplicity or self.upperBound = '*' then
 -1
 else 
 self.upperBound.toInteger()
 endif"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="lowerBound" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The string image of the literal given to specify the lower bound of the
multiplicity of the element being defined."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="upperBound" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" defaultValueLiteral="1"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The string image of the literal given to specify the upper bound of the
multiplicity of the element being defined."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isOrdered" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the element being defined is ordered."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isNonunique" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the element being defined is non-unique."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isSequence" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the element being defined is a sequence (and hence both ordered
and non-unique)."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" eType="#//QualifiedName" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The name of the type of the element being defined."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="actualType" eType="#//ElementReference"/> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAny" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the element being defined has an empty type."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isMultiplicity" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the element being defined has multiplicity specified as 0..*
using the shortand multiplicity indicator "[]"."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="DataTypeDefinition" eSuperTypes="#//ClassifierDefinition"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The definition of a data type, whose members must all be properties."/> + </eAnnotations> + <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns true if the given unit definition matches this data type definition
considered as a classifier definition and the subunit is for a data type
definition."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.ClassifierDefinition_matchForStub(unit) and
 unit.definition.oclIsKindOf(DataTypeDefinition)"/> + </eAnnotations> + <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/> + </eOperations> + <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="In addition to the annotations allowed for classifiers in general, a data type
definition allows @primitive annotations plus any stereotype whose metaclass is consistent with DataType."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 /* TODO: Allow data type stereotype annotations. */
 self.ClassifierDefinition_annotationAllowed(annotation) or
 annotation.stereotypeName.pathName = 'primitive'"/> + </eAnnotations> + <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/> + </eOperations> + <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return true if the given member is either a DataTypeDefinition or an imported member
whose referent is a DataTypeDefinition or a DataType."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="member.isDataType()"/> + </eAnnotations> + <eParameters name="member" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="dataTypeDefinitionPrimitive" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a data type is primitive, then it may not have any owned members."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.isPrimitive implies self.ownedMember->isEmpty()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="dataTypeDefinitionSpecializationReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The specialization referents of a data type definition must all be data types."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.specializationReferent->forAll(isDataType())"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="PackageDefinition" eSuperTypes="#//NamespaceDefinition"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The definition of a package, all of whose members must be packageable elements."/> + </eAnnotations> + <eOperations name="allowPackageOnly" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + </eOperations> + <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="In addition to the annotations allowed on any namespace definition, a package definition
allows @apply annotations plus any stereotype whose metaclass is consistent with Package."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 /* TODO: Allow package stereotype annotations. */
 self.NamespaceDefinition_annotationAllowed(annotation) or
 annotation.stereotypeName.pathName = 'apply' or
 annotation.stereotypeName.pathName = 'ModelLibrary'"/> + </eAnnotations> + <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/> + </eOperations> + <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns true of the namespace definition associated with the given unit definition is a package definition."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="unit.definition.oclIsKindOf(PackageDefinition)"/> + </eAnnotations> + <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/> + </eOperations> + <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return true if the given member is either a PackageDefinition or an imported member whose referent is a PackageDefinition or a Package."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="member.isPackage()"/> + </eAnnotations> + <eParameters name="member" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="packageDefinitionAppliedProfileDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The applied profiles of a package definition are the profiles listed in any @apply annotations on the package."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return all profiles applied in this package, any containing package or in the model scope."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.appliedProfile->union(self.NamespaceDefinition_appliedProfiles())"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="appliedProfile" ordered="false" + upperBound="-1" eType="#//ElementReference" volatile="true" transient="true" + derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The profiles applied (directly) to this package."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let applications : Set(StereotypeAnnotation) = 
 self.annotation()->select(stereotypeName.pathName = 'apply') 
 in
 applications.names.name.referent->select(isProfile())->asSet()"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="PropertyDefinition" eSuperTypes="#//MemberDefinition"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A typed element definition for a property (attribute or association end)."/> + </eAnnotations> + <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="Set(AssignedSource){}"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/> + </eOperations> + <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns true if the annotation is for a stereotype that has a metaclass
consistent with Property."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 /* TODO: Allow property stereotype annotations. */
 false"/> + </eAnnotations> + <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/> + </eOperations> + <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return true if the given member is either a PropertyDefinition or an
imported member whose referent is a PropertyDefinition or a Property."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="member.isProperty()"/> + </eAnnotations> + <eParameters name="member" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="true"/> + </eAnnotations> + </eOperations> + <eOperations name="propertyDefinitionInitializer" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If a property definition has an initializer, then the initializer expression
must be assignable to the property definition. There are no assignments before
an initializer expression.
(See also assignmentsBefore(element) operation.)"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.initializer <> null implies 
 self.typePart.isAssignableFrom(self.initializer)"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="propertyDefinitionIsCollectionConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A property definition requires collection conversion if its initializer has
a collection class as its type and the property definition does not."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="propertyDefinitionIsBitStringConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A property definition requires BitString conversion if its type is BitString and
the type of its initializer is Integer or a collection class whose argument type is Integer."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="propertyDefinitionIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A property definition is a feature."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isComposite" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether the property being defined has composite aggregation."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="initializer" eType="#//Expression" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The expression to be evaluated to initialize the property."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCollectionConversion" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true" + transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether collection conversion is required for the initialization of this property."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 self.initializer <> null and 
 self.initializer.type <> null and
 self.isCollectionClass(self.initializer.type) and
 (self.typePart.type = null or 
 not self.isCollectionClass(self.typePart.type)
 )"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true" + transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Whether BitString conversion is required for the initialization of this property."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 self.typePart.type <> null and
 self.isIntegerType(self.typePart.type) and
 self.initializer.type <> null and
 (self.isIntegerType(self.initializer.type) or
 self.isIntegerCollectionClass(self.initializer.type)
 )"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="typePart" eType="#//TypedElementDefinition" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value=""/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="SignalDefinition" eSuperTypes="#//ClassifierDefinition"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The definition of a signal, whose members must all be properties."/> + </eAnnotations> + <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns true if the given unit definition matches this signal definition considered
as a classifier definition and the subunit is for a signal definition."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.ClassifierDefinition_matchForStub(unit) and
 unit.definition.oclIsKindOf(SignalDefinition)"/> + </eAnnotations> + <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/> + </eOperations> + <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="In addition to the annotations allowed for classifiers in general, a signal definition
allows an annotation for any stereotype whose metaclass is consistent with Signal."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 /* TODO: Allow signal stereotype annotations */
 self.ClassifierDefinition_annotationAllowed(annotation)"/> + </eAnnotations> + <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/> + </eOperations> + <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return true if the given member is either a SignalDefinition or an imported member
whose referent is a SignalDefinition or a Signal (where signal reception definitions are
considered to be kinds of signal definitions)."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="member.isSignal()"/> + </eAnnotations> + <eParameters name="member" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="signalDefinitionSpecializationReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The specialization referents of a signal definition must all be signals."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.specializationReferent->forAll(isSignal())"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ActiveClassDefinition" eSuperTypes="#//ClassDefinition"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The definition of an active class."/> + </eAnnotations> + <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns true if the given unit definition matches this active class definition
considered as a class definition and the subunit is for an active class definition."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 /* NOTE: ClassDefinition::matchForStub would not allow an ActiveClassDefinition. */
 self.ClassifierDefinition_matchForStub(unit) and
 unit.definition.oclIsKindOf(ActiveClassDefinition)"/> + </eAnnotations> + <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/> + </eOperations> + <eOperations name="activeClassDefinitionClassifierBehavior" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If an active class definition is not abstract, then it must have a classifier behavior."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 not self.isAbstract implies self.classifierBehavior <> null"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="classifierBehavior" eType="#//ActivityDefinition" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The definition of an activity (which may be a stub) to act as the classifier behavior of the active class."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ActivityDefinition" eSuperTypes="#//ClassifierDefinition"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The definition of an activity, with any formal parameters defined as owned members."/> + </eAnnotations> + <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The assignments before the body of an activity definition include an
assigned source for each parameter of the activity definition. The
source for out parameters is actually null, however, to indicate that it
has not been assigned yet (but that the name should not otherwise be used
as a local name)."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.body <> element then Set(AssignedSource){}
 else
 self.parameters()->collect(parameter |
 AssignedSource{
 name = parameter.actualName(),
 source = if parameter.direction = 'out' then null else parameter endif,
 type = parameter.typePart.type,
 upper = parameter.typePart.upper,
 lower = parameter.typePart.lower
 }
 )->asSet()
 endif"/> + </eAnnotations> + <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/> + </eOperations> + <eOperations name="outerScope" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="This is necessary because, for Xtext parsing, ActiveClassDefinition::classifierBehavior is
composite and the classifierBehavior is not also added as a member of its active class."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 let owner = self.oclContainer() in
 if owner.oclIsKindOf(ActiveClassDefinition) and 
 owner.oclAsType(ActiveClassDefinition).classifierBehavior = self then
 owner.oclAsType(ActiveClassDefinition).toReference()
 else
 self.NamespaceDefinition_outerScope()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="In addition to the annotations allowed for classifiers in general, an activity definition allows
@primitive annotations and any stereotype whose metaclass is consistent with Activity."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 /* TODO: Allow activity stereotype annotations. */
 self.ClassifierDefinition_annotationAllowed(annotation) or
 annotation.stereotypeName.pathName = 'primitive'"/> + </eAnnotations> + <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/> + </eOperations> + <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns true if the given unit definition matches this activity definition considered
as a classifier definition and the subunit is for an activity definition. In addition,
the subunit definition must have formal parameters that match each of the formal parameters
of the stub definition, in order. Two formal parameters match if they have the same
direction, name, multiplicity bounds, ordering, uniqueness and type reference."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.ClassifierDefinition_matchForStub(unit) and
 let definition = unit.definition in
 definition.oclIsKindOf(ActivityDefinition) and
 let parameters = self.parameters() in
 let otherParameters = definition.parameters() in
 parameters->size() = otherParameters->size() and 
 Sequence{1 .. parameters->size()}->forAll(i | 
 parameters->at(i).matches(otherParameters->at(i))
 ) and
 let returnParameter = self.returnParameter() in
 let otherReturnParameter = definition.returnParameter() in
 returnParameter = null and otherReturnParameter = null or
 returnParameter <> null and returnParameter.matches(otherReturnParameter)"/> + </eAnnotations> + <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/> + </eOperations> + <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return true if the given member is either an ActivityDefinition or an
imported member whose referent is an ActivityDefinition or an Activity."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="member.isActivity()"/> + </eAnnotations> + <eParameters name="member" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="activityDefinitionSpecialization" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An activity definition may not have a specialization list."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.specialization = null"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="activityDefinitionPrimitive" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="If an activity definition is primitive, then it must have a body that is empty."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.isPrimitive implies self.body = null"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="body" eType="#//Block" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The sequence of statements that defines the behavior of the activity (empty for a stub)."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ElementImportReference" eSuperTypes="#//ImportReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An import reference to a single element to be imported into a unit."/> + </eAnnotations> + <eOperations name="importedMembers" ordered="false" upperBound="-1" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return the set of all imported members."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.referent = null then
 Set(Member){}
 else
 Set{Member{
 visibility = self.visibility,
 definition = ImportedMember{
 name = if self.alias = null then self.referent.name() else self.alias endif,
 referent = self.referent
 }
 }}
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="elementImportReferenceReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The referent of an element import reference must be a packageable element."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.referent <>null and self.referent.isPackageableElement()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="alias" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The alias to be used as the name for the imported element in the importing unit?s namespace."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="SignalReceptionDefinition" eSuperTypes="#//SignalDefinition"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The definition of both a signal and a reception of that signal as a feature of the containing active class."/> + </eAnnotations> + <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="true"/> + </eAnnotations> + </eOperations> + <eOperations name="signalReceptionDefinitionIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A signal reception definition is a feature."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="EnumerationDefinition" eSuperTypes="#//ClassifierDefinition"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The definition of an enumeration, whose members must all be enumeration literal names."/> + </eAnnotations> + <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns true if the given unit definition matches this enumeration definition considered
as a classifier definition and the subunit is for an enumeration definition."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.ClassifierDefinition_matchForStub(unit) and
 unit.definition.oclIsKindOf(EnumerationDefinition)"/> + </eAnnotations> + <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/> + </eOperations> + <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="In addition to the annotations allowed for classifiers in general, an enumeration definition
allows an annotation for any stereotype whose metaclass is consistent with Enumeration."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 /* TODO: Allow enumeration stereotype annotations. */
 self.ClassifierDefinition_annotationAllowed(annotation)"/> + </eAnnotations> + <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/> + </eOperations> + <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return true if the given member is either an EnumerationDefinition or an imported member
whose referent is an EnumerationDefinition or an Enumeration."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="member.isEnumeration()"/> + </eAnnotations> + <eParameters name="member" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="enumerationDefinitionSpecializationReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The specialization referents of an enumeration definition must all be enumerations."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.specializationReferent->forAll(isEnumeration())"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="PackageImportReference" eSuperTypes="#//ImportReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An import reference to a package all of whose public members are to be imported."/> + </eAnnotations> + <eOperations name="importedMembers" ordered="false" upperBound="-1" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return the visible members of the referent package."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.referent = null then Set(Member){}
 else self.referent.visibleMembers()->collect(m | 
 Member{
 visibility = self.visibility,
 definition = ImportedMember{name = m.name(), referent = m}
 }
 )->asSet()
 endif"/> + </eAnnotations> + </eOperations> + <eOperations name="packageImportReferenceReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The referent of a package import must be a package."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.referent <> null and self.referent.isPackage()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ClassifierTemplateParameter" eSuperTypes="#//ClassifierDefinition"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The definition of a classifier template parameter, which acts as a classifier within the definition of the template."/> + </eAnnotations> + <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Annotations are not allowed on classifier template parameters."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="false"/> + </eAnnotations> + <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/> + </eOperations> + <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns false. (Classifier template parameters cannot be stubs.)"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="not self.isStub"/> + </eAnnotations> + <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/> + </eOperations> + <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return true if the given member is a classifier template parameter."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="member.isClassifierTemplateParameter()"/> + </eAnnotations> + <eParameters name="member" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="matches" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Two template parameters match if they have same names and the same
specialization referents."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.actualName() = other.actualName() and
 self.specializationReferent->size() = other.specializationReferent->size() and
 self.specializationReferent->forAll(containedIn(other.specializationReferent->asBag()))"/> + </eAnnotations> + <eParameters name="other" lowerBound="1" eType="#//ClassifierTemplateParameter"/> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="FormalParameter" eSuperTypes="#//MemberDefinition"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A typed element definition for the formal parameter of an activity or operation."/> + </eAnnotations> + <eOperations name="currentScope" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The current scope for a formal parameter is the outer scope
of the namespace definition that owns it."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.oclContainer().oclContainer().oclAsType(NamespaceDefinition).toReference()"/> + </eAnnotations> + </eOperations> + <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns true if the annotation is for a stereotype that has a metaclass consistent with Parameter."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 /* TODO: Allow formal parameter stereoype annotations. */
 false"/> + </eAnnotations> + <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/> + </eOperations> + <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return true if the given member is a FormalParameter."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="member.isParameter()"/> + </eAnnotations> + <eParameters name="member" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="matches" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Two formal parameters match if they have the same direction, name,
multiplicity bounds, ordering, uniqueness and type reference."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 other <> null and
 self.direction = other.direction and 
 self.actualName() = other.actualName() and 
 self.typePart.lower = other.typePart.lower and 
 self.typePart.upper = other.typePart.upper and
 self.typePart.isOrdered() = other.typePart.isOrdered() and
 self.typePart.isNonunique() = other.typePart.isNonunique() and 
 let type = self.typePart.type in
 let otherType = other.typePart.type in
 type = null and otherType = null or 
 type <> null and type.equals(otherType)"/> + </eAnnotations> + <eParameters name="other" eType="#//FormalParameter"/> + </eOperations> + <eOperations name="matchesElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.matchesNameType(other) and
 self.direction = other.direction() and 
 self.typePart.lower = other.lower() and 
 self.typePart.upper = other.upper() and
 self.typePart.isOrdered() = other.isOrdered() and
 self.typePart.isNonunique() = other.isNonunique()"/> + </eAnnotations> + <eParameters name="other" eType="#//ElementReference"/> + </eOperations> + <eOperations name="matchesNameType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.matchesType(other) and
 self.actualName() = other.name()"/> + </eAnnotations> + <eParameters name="other" eType="#//ElementReference"/> + </eOperations> + <eOperations name="matchesType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 other <> null and
 let type = self.typePart.type in
 let otherType = other.type() in
 type = null and otherType = null or
 type <> null and type.equals(otherType)"/> + </eAnnotations> + <eParameters name="other" eType="#//ElementReference"/> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="direction" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" defaultValueLiteral="return"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An indication of the direction of the parameter being defined."/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="ReceptionDefinition"/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="ReceptionDefinition"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="typePart" eType="#//TypedElementDefinition" + containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value=""/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ReceptionDefinition" eSuperTypes="#//MemberDefinition"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The declaration of the ability of an active class to receive a signal."/> + </eAnnotations> + <eOperations name="actualName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.signalName.unqualifiedName.toName()"/> + </eAnnotations> + </eOperations> + <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Returns true if the annotation is for a stereotype that has a metaclass consistent with Reception."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 /* TODO: Allow reception stereoype annotations. */
 false"/> + </eAnnotations> + <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/> + </eOperations> + <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="Return true if the given member is either a ReceptionDefinition, a SignalReceptionDefinition or an
imported member whose referent is a ReceptionDefinition, a SignalReceptionDefinition or a Reception."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="member.isReception()"/> + </eAnnotations> + <eParameters name="member" lowerBound="1" eType="#//ElementReference"/> + </eOperations> + <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="true"/> + </eAnnotations> + </eOperations> + <eOperations name="receptionDefinitionSignalName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The signal name for a reception definition must have a single referent that is a signal. This referent must not be a template."/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.signal <> null and not self.signal.isTemplate()"/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="receptionDefinitionSignalDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The signal for a reception definition is the signal referent of the signal name for the reception definition."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eOperations name="receptionDefinitionIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A reception definition is a feature."/> + </eAnnotations> + <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/> + <eParameters name="context"> + <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap"> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/> + </eGenericType> + </eParameters> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="signalName" lowerBound="1" + eType="#//QualifiedName" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The name of the signal to be received."/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="signal" eType="#//ElementReference" + volatile="true" transient="true" derived="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value=""/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="derivation" value="
 let referents = self.signalName.referent->select(isSignal()) in
 if referents->size() = 1 then
 referents->any(true)
 else
 null
 endif"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="Member" eSuperTypes="#//DocumentedElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value=""/> + </eAnnotations> + <eOperations name="toReference" lowerBound="1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 self.definition.toReference()"/> + </eAnnotations> + </eOperations> + <eOperations name="visibility" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 if self.visibility <> null then self.visibility
 else if definition.oclIsKindOf(EnumerationLiteralName) then 'public'
 else 'package'
 endif endif"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="definition" lowerBound="1" + eType="#//MemberDefinition" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value=""/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="visibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="An indication of the visibility of the member outside of its namespace."/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="AnnotatedStatement"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="namespace" eType="#//NamespaceDefinition" + eOpposite="#//NamespaceDefinition/ownedMember"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The namespace definition within which this member definition is nested, if any.
(The namespace definitions for units are not physically nested within another
Alf namespace definition.)"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="annotation" ordered="false" + upperBound="-1" eType="#//StereotypeAnnotation" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The stereotype annotations on this member definition."/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="AnnotatedStatement" eSuperTypes="#//DocumentedElement"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value=""/> + </eAnnotations> + <eOperations name="annotations" ordered="false" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="External"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="annotation" ordered="false" + upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="The annotations applied to this statement."/> + </eAnnotations> + <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName"> + <details key="body" value="BoundClassifier"/> + <details key="unique" value="false"/> + <details key="upper" value="*"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="statement" lowerBound="1" + eType="#//Statement" containment="true"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value=""/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="BoundClassifier" eSuperTypes="#//ClassifierDefinition"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A classifier resulting from the binding of a template to its actual
parameters."/> + </eAnnotations> + <eOperations name="toReference" lowerBound="1" eType="#//ElementReference"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
 BoundElementReference{
 referent = self.template,
 namespace = self.template.namespace(),
 templateBinding = InternalElementReference{element = self}
 }"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="template" lowerBound="1" + eType="#//ElementReference"/> + <eStructuralFeatures xsi:type="ecore:EReference" name="actual" unique="false" + upperBound="-1" eType="#//ElementReference"/> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="ReturnParameter" eSuperTypes="#//FormalParameter"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A formal parameter representing a return parameter."/> + </eAnnotations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="NonReturnParameter" eSuperTypes="#//FormalParameter"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A formal parameter representing a parameter that is not a return parameter."/> + </eAnnotations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="AnyType" eSuperTypes="#//ClassifierDefinition"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value="A classifier representing the null "any" type in a list of
template paraemter actuals."/> + </eAnnotations> + <eOperations name="actualName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="'any'"/> + </eAnnotations> + </eOperations> + </eClassifiers> +</ecore:EPackage> |