Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/uml/alf/org.eclipse.papyrus.uml.alf/syntax-gen/org/eclipse/papyrus/uml/alf/impl/alf.ecore')
-rw-r--r--plugins/uml/alf/org.eclipse.papyrus.uml.alf/syntax-gen/org/eclipse/papyrus/uml/alf/impl/alf.ecore10089
1 files changed, 10089 insertions, 0 deletions
diff --git a/plugins/uml/alf/org.eclipse.papyrus.uml.alf/syntax-gen/org/eclipse/papyrus/uml/alf/impl/alf.ecore b/plugins/uml/alf/org.eclipse.papyrus.uml.alf/syntax-gen/org/eclipse/papyrus/uml/alf/impl/alf.ecore
new file mode 100644
index 00000000000..2a8b1cb93b1
--- /dev/null
+++ b/plugins/uml/alf/org.eclipse.papyrus.uml.alf/syntax-gen/org/eclipse/papyrus/uml/alf/impl/alf.ecore
@@ -0,0 +1,10089 @@
+<?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">
+ <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="&#xA; let assignment = assignmentsBefore->select(name = self.name) in&#xA; 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{&#xA; name = self.name,&#xA; source = if newSource = null then self.source else newSource endif,&#xA; upper = self.upper,&#xA; lower = self.lower,&#xA; type = self.type,&#xA; isParallelLocalName = &#xA; if isParallelLocal = null then self.isParallelLocalName &#xA; else isParallelLocal endif&#xA; }"/>
+ </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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="source" lowerBound="1"
+ eType="#//SyntaxElement"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EIntegerObject"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EIntegerObject"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//ElementReference"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isParallelLocalName" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SyntaxElement" abstract="true">
+ <eOperations name="toReference" lowerBound="1" eType="#//ElementReference">
+ <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/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="&#xA; let container = self.oclContainer() in&#xA; if container = null or not container.oclIsKindOf(SyntaxElement) then&#xA; self.owner&#xA; else&#xA; container.oclAsType(SyntaxElement)&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="currentScope" eType="#//ElementReference">
+ <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="&#xA; let owner = self.owner() in&#xA; if owner = null then null&#xA; else owner.currentScope()&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="enclosingStatement" eType="#//Statement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let owner = self.owner() in&#xA; if owner = null or owner.oclIsKindOf(MemberDefinition) then null&#xA; else if owner.oclIsKindOf(Statement) then owner.oclAsType(Statement)&#xA; else owner.enclosingStatement()&#xA; endif endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="enclosingExpression" eType="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let owner = self.owner() in&#xA; if owner = null or owner.oclIsKindOf(MemberDefinition) or&#xA; owner.oclIsKindOf(Statement) then null&#xA; else if owner.oclIsKindOf(Expression) then owner.oclAsType(Expression)&#xA; else owner.enclosingExpression()&#xA; endif 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="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="&#xA; let owner = self.owner() in&#xA; if owner = null then Set(AssignedSource){}&#xA; else owner.assignmentsBefore(self)&#xA; 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="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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; newAssignments->iterate(&#xA; assignment, updatedAssignments : Set(AssignedSource) = assignments |&#xA; assignment.update(updatedAssignments)&#xA; )"/>
+ </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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if classifiers->isEmpty() or classifiers->exists(c | c = null) then null&#xA; else&#xA; let classifierSet = self.removeDuplicateElements(classifiers->asBag()) in&#xA; if classifierSet->size() = 1 then classifierSet->any(true)&#xA; else&#xA; let ancestors = self.commonAncestors(classifierSet) in&#xA; let parents = ancestors.allParents() in&#xA; self.commonAncestor(ancestors->reject(containedIn(parents)))&#xA; endif &#xA; 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="&#xA; let ancestors : Bag(ElementReference) = &#xA; classifiers.allParents()->union(classifiers) in&#xA; self.removeDuplicateElements(&#xA; ancestors->select(countIn(ancestors) = classifiers->size())&#xA; )"/>
+ </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="&#xA; elements->iterate(e, bag : Bag(ElementReference) = Bag{} |&#xA; if e.containedIn(bag) then bag&#xA; else bag->including(e)&#xA; endif&#xA; )->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="&#xA; let currentScope = self.currentScope() in&#xA; if currentScope = null then Set(ElementReference){}&#xA; else&#xA; let modelScope = currentScope.modelScope() in&#xA; if modelScope = null then Set(ElementReference){}&#xA; else modelScope.resolvePathName('Alf::Library::' + pathName)&#xA; endif&#xA; 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="&#xA; let referents = self.resolveInLibrary('PrimitiveTypes::' + typeName)->&#xA; select(isPrimitiveType()) in&#xA; if referents->isEmpty() then null&#xA; else referents->any(true)&#xA; 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 &lt;> 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 &lt;> 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 &lt;> 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 &lt;> 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 &lt;> 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 &lt;> 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 &#xA; self.isUnlimitedNaturalType(element) or &#xA; 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="&#xA; let referents = self.resolveInLibrary('CollectionFunctions::add')->&#xA; select(isBehavior()) in&#xA; if referents->isEmpty() then null&#xA; else referents->any(true)&#xA; 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="&#xA; let template = element.template() in&#xA; template &lt;> null and&#xA; let collectionClasses = self.resolveInLibrary('CollectionClasses') in&#xA; collectionClasses->notEmpty() and&#xA; 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="&#xA; self.isCollectionClass(element) and &#xA; 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="&#xA; self.isCollectionClass(element) and &#xA; self.isBitStringType(element.collectionArgument())"/>
+ </eAnnotations>
+ <eParameters name="element" lowerBound="1" eType="#//ElementReference"/>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="owner" eType="#//SyntaxElement"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ElementReference" abstract="true">
+ <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="&#xA; let member = self.asMember() in&#xA; let otherMember = other.asMember() in&#xA; if member = null or otherMember = null then true&#xA; else&#xA; member.definition.isDistinguishableFrom(otherMember.definition)&#xA; 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="&#xA; AssignableElementReference{&#xA; reference = self, owner = element.owner()&#xA; }.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="&#xA;-- let templateActuals = self.templateActuals() in&#xA;-- if templateActuals->isEmpty() then null&#xA;-- else templateActuals->first()&#xA;-- endif;&#xA; let toSequenceOperation = self.resolve('toSequence')->select(&#xA; isOperation() and parameters()->size() = 0 and returnParameter() &lt;> null&#xA; ) in&#xA; if toSequenceOperation->size() &lt;> 1 then null&#xA; else toSequenceOperation->any(true).type()&#xA; 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')"/>
+ </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.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())"/>
+ </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="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="&#xA; let template = self.template() in&#xA; if template = null then self&#xA; else template&#xA; 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="&#xA; BoundClassifier{&#xA; name = self.boundElementName(actuals),&#xA; template = self,&#xA; actual = actuals&#xA; }.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="&#xA; actuals->iterate(&#xA; actual, s : Types::String = '$$' + self.boundPathName() + '__' |&#xA; s + if actual = null then 'any' else actual.boundPathName() endif + '_'&#xA; ) + '_'"/>
+ </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="&#xA; if self.isModelNamespace() then ''&#xA; else&#xA; let template = self.template() in&#xA; if template = null then&#xA; let namespace = self.namespace() in&#xA; let name = if self.name() = null then '' else self.name() endif in&#xA; if namespace = null or namespace.isModelNamespace() then name&#xA; else namespace.boundPathName() + '$' + name&#xA; endif&#xA; else&#xA; template.boundElementName(self.templateActuals()->asSequence())&#xA; endif&#xA; 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="&#xA; if self.isModelNamespace() then&#xA; QualifiedName{nameBinding = OrderedSet(NameBinding){}}&#xA; else&#xA; let template = self.template() in&#xA; if template = null then&#xA; let namespace = self.namespace() in&#xA; let qualifiedName =&#xA; if namespace = null then null &#xA; else namespace.qualifiedName() endif in&#xA; let name = self.name() in&#xA; let nameBinding = NameBinding{&#xA; name = if name = null then '' else name endif&#xA; } in&#xA; if qualifiedName = null then&#xA; QualifiedName{nameBinding = OrderedSet{nameBinding}}&#xA; else&#xA; QualifiedName{&#xA; nameBinding = qualifiedName.nameBinding->append(nameBinding)&#xA; }&#xA; endif&#xA; else&#xA; let templateName = template.qualifiedName() in&#xA; let nameBindings = templateName.nameBinding in&#xA; let n = nameBindings->size() in&#xA; if n = 0 then&#xA; templateName&#xA; else&#xA; let templateBinding = PositionalTemplateBinding{&#xA; argumentName = self.templateActuals()->&#xA; collect(templateActual | &#xA; if templateActual = null then &#xA; QualifiedName{nameBinding = OrderedSet(NameBinding){}}&#xA; else &#xA; templateActual.qualifiedName() &#xA; endif&#xA; )&#xA; } in&#xA; let name = self.name() in&#xA; let nameBinding = NameBinding{&#xA; name = if name = null then '' else name endif,&#xA; binding = templateBinding&#xA; } in&#xA; if n = 1 then&#xA; QualifiedName{nameBinding = OrderedSet{nameBinding}}&#xA; else&#xA; QualifiedName{&#xA; nameBinding =&#xA; nameBindings->subOrderedSet(1,n-1)->append(nameBinding)&#xA; }&#xA; endif&#xA; endif&#xA; endif&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="activeClass" eType="#//ElementReference"/>
+ <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() &lt;> 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="&#xA; if references->isEmpty() then 0&#xA; else&#xA; let indices = &#xA; Sequence{1..references->size()}->select(i | self.equals(references->at(i)))&#xA; in&#xA; if indices->isEmpty() then 0&#xA; else indices->first()&#xA; endif&#xA; 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="&#xA; let members = self.resolveInScope(name) in&#xA; let outerScope = self.namespace() in&#xA; if outerScope = null then&#xA; members&#xA; else&#xA; members->union(&#xA; outerScope.resolve(name)->select(m1 | &#xA; members->forAll(m2 | &#xA; m1.isDistinguishableFrom(m2)&#xA; )&#xA; )&#xA; )&#xA; 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="&#xA; let members = self.resolveInScope(name) in&#xA; -- Note: If this namespace is the same as or a containing scope of the &#xA; -- given namespace, or if the given namespace is null, then all members &#xA; -- of this namespace are visible.&#xA; if namespace = null or&#xA; self.equals(namespace) or&#xA; self.containsMember(namespace) then&#xA; members&#xA; else&#xA; members->select(visibility() = 'public' or &#xA; self.allowPackageOnly() and visibility() = 'package'&#xA; )&#xA; 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="&#xA; let referents = self.members()->&#xA; -- Note: Only association-owned ends are considered as association ends.&#xA; select(isAssociation() and (properties()->size() = 2)).associationEnds()->&#xA; select(associationEnd |&#xA; let opposite = associationEnd.opposite() in&#xA; opposite &lt;> null and&#xA; oppositeEndType.conformsTo(opposite.type()) and&#xA; name = associationEnd.name()&#xA; )&#xA; in&#xA; let outerScope = self.namespace() in&#xA; if outerScope = null then referents&#xA; else&#xA; let hiddenNames = referents.name() in&#xA; referents->union(&#xA; outerScope.resolveAssociationEnd(oppositeEndType, name)->&#xA; reject(outerReferent | hiddenNames->includes(outerReferent.name()))&#xA; )&#xA; 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="&#xA; member = null or&#xA; let namespace = member.namespace() in&#xA; namespace &lt;> null and&#xA; (self.equals(namespace) or&#xA; self.containsMember(namespace))"/>
+ </eAnnotations>
+ <eParameters name="member" lowerBound="1" 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>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="InternalElementReference" eSuperTypes="#//ElementReference">
+ <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="&#xA; if self.element.oclIsKindOf(Member) then self.element.oclAsType(Member)&#xA; else if self.element.oclIsKindOf(MemberDefinition) then&#xA; let container = self.element.oclContainer() in&#xA; if container.oclIsKindOf(Member) then container.oclAsType(Member)&#xA; else null&#xA; endif&#xA; else null&#xA; 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="&#xA; self.element.oclIsKindOf(MemberDefinition) and&#xA; 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) &lt;> 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="&#xA; self.element.oclIsKindOf(Member) and&#xA; not self.element.oclIsKindOf(FormalParameter) and&#xA; not self.element.oclIsKindOf(ClassifierTemplateParameter) and&#xA; 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="&#xA; let template = self.template() in&#xA; if template &lt;> null then&#xA; template.isAbstractClassifier()&#xA; else&#xA; self.isClassifier() and &#xA; self.element.oclAsType(ClassifierDefinition).isAbstract&#xA; 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="&#xA; let template = self.template() in&#xA; if template &lt;> null then&#xA; template.isAssociation()&#xA; else&#xA; self.element.oclIsKindOf(AssociationDefinition)&#xA; 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="&#xA; let template = self.template() in&#xA; if template &lt;> null then&#xA; template.isDataType()&#xA; else&#xA; self.element.oclIsKindOf(DataTypeDefinition)&#xA; 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="&#xA; let template = self.template() in&#xA; if template &lt;> null then&#xA; template.isClass()&#xA; else&#xA; self.element.oclIsKindOf(ClassDefinition)&#xA; 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="&#xA; let template = self.template() in&#xA; if template &lt;> null then&#xA; template.isActiveClass()&#xA; else&#xA; self.element.oclIsKindOf(ActiveClassDefinition)&#xA; 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="&#xA; let template = self.template() in&#xA; if template &lt;> null then&#xA; template.isSignal()&#xA; else&#xA; self.element.oclIsKindOf(SignalDefinition) or&#xA; self.element.oclIsKindOf(SignalReceptionDefinition)&#xA; 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="&#xA; let template = self.template() in&#xA; if template &lt;> null then&#xA; template.isEnumeration()&#xA; else&#xA; self.element.oclIsKindOf(EnumerationDefinition)&#xA; 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="&#xA; let template = self.template() in&#xA; if template &lt;> null then&#xA; template.isBehavior()&#xA; else&#xA; self.element.oclIsKindOf(ActivityDefinition)&#xA; 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="&#xA; let template = self.template() in&#xA; if template &lt;> null then&#xA; template.isActivity()&#xA; else&#xA; self.element.oclIsKindOf(ActivityDefinition)&#xA; 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="&#xA; self.isActivity() and &#xA; let stub = self.stub() in&#xA; -- The case of the stub being a property covers the case of an&#xA; -- activity used in the default value of an external property.&#xA; stub &lt;> 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="&#xA; let template = self.template() in&#xA; if template &lt;> null then&#xA; template.isReception()&#xA; else&#xA; self.element.oclIsKindOf(ReceptionDefinition) or&#xA; self.element.oclIsKindOf(SignalReceptionDefinition)&#xA; 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="&#xA; self.isOperation() and&#xA; 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="&#xA; self.isOperation() and&#xA; 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="&#xA; self.element.oclIsKindOf(MemberDefinition) and &#xA; 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="&#xA; 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="&#xA; self.isProperty() and&#xA; 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="&#xA; 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="&#xA; self.element.oclIsKindOf(MemberDefinition) and&#xA; 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="&#xA; if not self.isNamedElement() then null&#xA; else self.element.oclAsType(MemberDefinition).actualName()&#xA; 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="&#xA; let member = self.asMember() in&#xA; if member = null then null&#xA; else member.visibility()&#xA; 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="&#xA; if self.isNamespace() then &#xA; self.element.oclAsType(NamespaceDefinition).ownedMember.toReference()->&#xA; asOrderedSet()&#xA; else&#xA; OrderedSet(ElementReference){}&#xA; 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="&#xA; if self.isNamespace() then &#xA; self.element.oclAsType(NamespaceDefinition).member.toReference()->&#xA; asOrderedSet()&#xA; else &#xA; OrderedSet(ElementReference){}&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="opposite" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if not self.isProperty() then null&#xA; else&#xA; let member = self.asMember() in&#xA; if member = null then null&#xA; else&#xA; let owner = member.owner() in&#xA; if not owner.oclIsKindOf(AssociationDefinition) then null&#xA; else&#xA; let ends = owner.oclAsType(AssociationDefinition).ownedMember in&#xA; if ends->size() &lt;> 2 then null&#xA; else ends->any(e | e &lt;> member).oclAsType(Member).toReference()&#xA; endif&#xA; endif&#xA; endif&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="signal" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let element = self.element in&#xA; if element.oclIsKindOf(ReceptionDefinition) then&#xA; element.oclAsType(ReceptionDefinition).signal&#xA; else if element.oclIsKindOf(SignalReceptionDefinition) then&#xA; element.oclAsType(SignalReceptionDefinition).toReference()&#xA; else&#xA; null&#xA; 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="&#xA; let template = self.template() in&#xA; if template &lt;> null then&#xA; template.parameters()&#xA; else if self.isBehavior() or self.isOperation() then&#xA; self.element.oclAsType(NamespaceDefinition).parameters().toReference()&#xA; else&#xA; OrderedSet(ElementReference){}&#xA; endif endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="returnParameter" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let template = self.template() in&#xA; if template &lt;> null then&#xA; template.returnParameter()&#xA; else if self.isBehavior() or self.isOperation() then&#xA; let returnParameter = self.element.oclAsType(NamespaceDefinition).returnParameter() in&#xA; if returnParameter = null then&#xA; null&#xA; else&#xA; returnParameter.toReference()&#xA; endif&#xA; else&#xA; null&#xA; endif endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="specification" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.isOperation() then &#xA; self&#xA; else if self.isBehavior() then&#xA; self.element.oclAsType(NamespaceDefinition).stub()&#xA; else &#xA; null&#xA; 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="&#xA; if not self.isOperation() then Set(ElementReference){}&#xA; else self.oclAsType(OperationDefinition).redefinedOperation&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="namespace" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.element.oclIsKindOf(MemberDefinition) then&#xA; self.element.oclAsType(MemberDefinition).outerScope()&#xA; else&#xA; null&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="template" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.isTemplateBinding() then&#xA; self.element.oclAsType(BoundClassifier).template&#xA; else&#xA; null&#xA; 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="&#xA; if self.isTemplate() then&#xA; self.element.oclAsType(ClassifierDefinition).templateParameters().toReference()&#xA; else&#xA; OrderedSet(ElementReference){}&#xA; 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="&#xA; if self.isTemplateBinding() then&#xA; self.element.oclAsType(BoundClassifier).actual->collect (actual |&#xA; if actual.isAnyType() then null else actual endif&#xA; )->asOrderedSet()&#xA; else&#xA; OrderedSet(ElementReference){}&#xA; 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="&#xA; if self.isParameter() then&#xA; self.element.oclAsType(FormalParameter).direction&#xA; else&#xA; null&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="association" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if not self.isAssociationEnd() then null&#xA; else self.namespace()&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.isProperty() then&#xA; self.element.oclAsType(PropertyDefinition).typePart.type&#xA; else if self.isParameter() then&#xA; self.element.oclAsType(FormalParameter).typePart.type&#xA; else if self.isBehavior() or self.isOperation() then&#xA; let returnParameter = self.returnParameter() in&#xA; if returnParameter = null then null&#xA; else returnParameter.type()&#xA; endif&#xA; else if self.isEnumerationLiteral() then&#xA; self.namespace()&#xA; else&#xA; null&#xA; 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="&#xA; if self.isProperty() then&#xA; self.element.oclAsType(PropertyDefinition).typePart.lower&#xA; else if self.isParameter() then&#xA; self.element.oclAsType(FormalParameter).typePart.lower&#xA; else&#xA; 1&#xA; 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="&#xA; if self.isProperty() then&#xA; self.element.oclAsType(PropertyDefinition).typePart.upper&#xA; else if self.isParameter() then&#xA; self.element.oclAsType(FormalParameter).typePart.upper&#xA; else&#xA; 1&#xA; 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="&#xA; if self.isProperty() then&#xA; self.element.oclAsType(PropertyDefinition).typePart.isOrdered()&#xA; else if self.isParameter() then&#xA; self.element.oclAsType(FormalParameter).typePart.isOrdered()&#xA; else&#xA; false&#xA; 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="&#xA; if self.isProperty() then&#xA; self.element.oclAsType(PropertyDefinition).typePart.isNonunique()&#xA; else if self.isParameter() then&#xA; self.element.oclAsType(FormalParameter).typePart.isNonunique()&#xA; else&#xA; false&#xA; 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="&#xA; if self.isClassifier() then&#xA; self.element.oclAsType(ClassifierDefinition).specializationReferent&#xA; else&#xA; Set(ElementReference){}&#xA; 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="&#xA; if self.isClassifier() then&#xA; self.element.removeDuplicateElements(&#xA; self->closure(parents())->excluding(self)->asBag()&#xA; )->asSet()&#xA; else&#xA; Set(ElementReference){}&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="classifierBehavior" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if not self.isActiveClass() then null&#xA; else&#xA; let classifierBehavior = &#xA; self.element.oclAsType(ActiveClassDefinition).classifierBehavior in&#xA; if classifierBehavior = null then null&#xA; else classifierBehavior.toReference()&#xA; endif&#xA; 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="&#xA; if not self.isNamespace() then Set(ecore::EObject){}&#xA; else self.element.oclAsType(NamespaceDefinition).appliedProfiles()&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="activeClass" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if not self.isActivity() then null&#xA; else&#xA; let namespace = self.element.oclAsType(ActivityDefinition).namespaceReference() in&#xA; if namespace = null or &#xA; not self.equals(namespace.classifierBehavior()) then null&#xA; else namespace&#xA; endif&#xA; 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="&#xA; other = null or&#xA; self.isClassifier() and (self.equals(other) or&#xA; self.element.oclAsType(ClassifierDefinition).&#xA; 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 &lt;> null and other.asAlf() = 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="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="&#xA; if not self.isNamespace() then null&#xA; else self.element.oclAsType(NamespaceDefinition).modelScope()&#xA; 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="&#xA; if not self.element.oclIsKindOf(ModelNamespace) then&#xA; Set(ElementReference){}&#xA; else&#xA; self.element.oclAsType(ModelNamespace).resolvePathName(pathName)&#xA; 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="&#xA; let template = self.template() in&#xA; if template &lt;> null then&#xA; template.resolveInScope(name)&#xA; else if not self.isNamespace() then Set(ElementReference){}&#xA; else &#xA; self.element.oclAsType(NamespaceDefinition).resolveInScope(name).&#xA; toReference()&#xA; 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="&#xA; if not self.isNamespace() then null&#xA; else self.element.oclAsType(NamespaceDefinition).stub()&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="stubFor" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if not self.isNamespace() then null&#xA; else self.element.oclAsType(NamespaceDefinition).stubFor(unit)&#xA; endif"/>
+ </eAnnotations>
+ <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="element" lowerBound="1"
+ eType="#//SyntaxElement"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ExternalElementReference" eSuperTypes="#//ElementReference">
+ <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="&#xA; if not self.isNamedElement() then null&#xA; else&#xA; Member{&#xA; visibility = self.visibility(), &#xA; definition = ImportedMember{name = self.name(), referent = self}&#xA; }&#xA; 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="&#xA; if member.isAlf() then member.isSameKindAs(self)&#xA; else&#xA; let other = member.asUml().oclAsType(UML::Element) in&#xA; self.element.oclIsKindOf(other.oclType()) or&#xA; other.oclIsKindOf(self.element.oclType())&#xA; 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="&#xA; self.isBehavior() and&#xA; self.element.oclAsType(UML::Behavior).specification &lt;> 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="&#xA; self.isOperation() and &#xA; self.element.oclAsType(UML::Element).&#xA; getAppliedStereotype('StandardProfile::Create') &lt;> 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="&#xA; self.isOperation() and &#xA; self.element.oclAsType(UML::Element).&#xA; getAppliedStereotype('StandardProfile::Destroy') &lt;> 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="&#xA; self.isProperty() and &#xA; -- Note: Only association-owned ends are considered as association ends.&#xA; self.element.oclAsType(UML::Property).owningAssociation &lt;> 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="&#xA; self.element.oclIsKindOf(UML::TemplateableElement) and&#xA; 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="&#xA; self.element.oclIsKindOf(UML::Classifier) and&#xA; self.element.oclAsType(UML::Classifier).templateParameter &lt;> 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="&#xA; if alias &lt;> null then&#xA; alias&#xA; else if self.element.oclIsKindOf(UML::NamedElement) then &#xA; self.element.oclAsType(UML::NamedElement).name&#xA; else if self.element.oclIsKindOf(UML::TemplateParameter) then&#xA; let parameteredElement = &#xA; self.element.oclAsType(UML::TemplateParameter).parameteredElement &#xA; in&#xA; if parameteredElement.oclIsKindOf(UML::NamedElement) then&#xA; parameteredElement.oclAsType(UML::NamedElement).name&#xA; else&#xA; null&#xA; endif&#xA; else&#xA; null&#xA; 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="&#xA; if not self.element.oclIsKindOf(UML::NamedElement) then ''&#xA; else&#xA; let visibility = self.element.oclAsType(UML::NamedElement).visibility in &#xA; if visibility = null then null&#xA; else if visibility = UML::VisibilityKind::public then 'public'&#xA; else if visibility = UML::VisibilityKind::protected then 'protected'&#xA; else if visibility = UML::VisibilityKind::private then 'private'&#xA; else ''&#xA; endif endif endif endif&#xA; 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="&#xA; if not self.isNamespace() then OrderedSet(ElementReference){}&#xA; else &#xA; self.element.oclAsType(UML::Namespace).ownedMember->&#xA; collect(m | ExternalElementReference{element = m})->asOrderedSet()&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="enumerationMembers" ordered="false" upperBound="-1" eType="#//ElementReference"/>
+ <eOperations name="members" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if not self.isNamespace() then OrderedSet(ElementReference){}&#xA; else&#xA; let namespace = self.element.oclAsType(UML::Namespace) in&#xA; let members = &#xA; if self.isEnumeration() then&#xA; self.enumerationMembers()&#xA; else&#xA; namespace.member-> &#xA; collect(m | &#xA; let names = namespace.getNamesOfMember(m) in&#xA; if names->isEmpty() then&#xA; Bag{ExternalElementReference{element = m}}&#xA; else&#xA; names->collect(name | &#xA; ExternalElementReference{alias = name, element = m}&#xA; )&#xA; endif&#xA; )->asOrderedSet()&#xA; endif&#xA; in&#xA; let additionalMembers = self.additionalMembers() in&#xA; additionalMembers->includingAll(members)->&#xA; includingAll(self.templateParameters())&#xA; 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="&#xA; if not self.isClassifier() then OrderedSet(ElementReference){}&#xA; else&#xA; -- This will collect the inherited members from the effective &#xA; -- expanded bound elements of each parent that is a template binding. &#xA; self.parents()->select(isTemplateBinding())->asOrderedSet()->&#xA; collect(binding |&#xA; binding.oclAsType(ExternalElementReference).inherit(&#xA; binding.template().bind(binding.templateActuals()->asSequence()).&#xA; members()->select(visibility() &lt;> 'private')&#xA; )&#xA; )->asOrderedSet()&#xA; 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="&#xA; -- NOTE: This is used to reject operations that would be inherited&#xA; -- via a template binding, in the case that the template binding itself&#xA; -- has an operation that should hide the inheritable operation.&#xA; -- This is used in the Alf standard library implementation as a&#xA; -- substitute for redefinition of operations from template instantiation. &#xA; let ownedOperations = self.ownedMembers()->select(isOperation()) in&#xA; inheritableMembers->reject(inheritableMember |&#xA; ownedOperations->exists(not isDistinguishableFrom(inheritableMember))&#xA; )"/>
+ </eAnnotations>
+ <eParameters name="inheritableMembers" upperBound="-1" eType="#//ElementReference"/>
+ </eOperations>
+ <eOperations name="properties" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if not self.isClassifier() then OrderedSet(ElementReference){}&#xA; else if self.isAssociation() then&#xA; -- NOTE: This is to ensure proper ordering.&#xA; self.memberEnds()->includingAll(self.parents().properties())&#xA; else&#xA; self.element.oclAsType(UML::Classifier).allAttributes()->&#xA; collect(a | ExternalElementReference{element = a})->&#xA; asOrderedSet()&#xA; endif endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="memberEnds" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if not self.isAssociation() then OrderedSet(ElementReference){}&#xA; else&#xA; self.element.oclAsType(UML::Association).memberEnd->&#xA; collect(e | ExternalElementReference{element = e})->&#xA; asOrderedSet()&#xA; 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="&#xA; -- NOTE: This is to ensure proper ordering.&#xA; self.ownedEnds()->includingAll(self.parents().associationEnds())"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="ownedEnds" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if not self.isAssociation() then OrderedSet(ElementReference){}&#xA; else&#xA; self.element.oclAsType(UML::Association).ownedEnd->&#xA; collect(e | ExternalElementReference{element = e})->&#xA; asOrderedSet()&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="opposite" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA;-- if not self.isProperty() then null&#xA;-- else self.element.oclAsType(UML::Property).opposite()&#xA;-- endif;&#xA; if not self.isAssociationEnd() then null&#xA; else&#xA; let property = self.element.oclAsType(UML::Property) in&#xA; let association = property.association in&#xA; let ends = association.memberEnd in&#xA; if ends->size() &lt;> 2 then null&#xA; else ExternalElementReference{element= ends->any(e | e &lt;> property)}&#xA; endif&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="signal" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if not self.isReception() then&#xA; null&#xA; else&#xA; ExternalElementReference{&#xA; element = self.element.oclAsType(UML::Reception).signal&#xA; }&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="namespace" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.isParameteredElement() then&#xA; ExternalElementReference{&#xA; element = self.element.oclAsType(UML::ParameterableElement).&#xA; templateParameter.signature.template&#xA; }&#xA; else if self.element.oclIsKindOf(UML::NamedElement) then&#xA; let namespace = self.element.oclAsType(UML::NamedElement).namespace in&#xA; if namespace = null then&#xA; null&#xA; else&#xA; ExternalElementReference{element = namespace}&#xA; endif&#xA; else&#xA; null&#xA; endif endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="ownedParameters" upperBound="-1" 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="&#xA; let template = self.template() in&#xA; if template &lt;> null then&#xA; template.parameters()&#xA; else if self.isBehavior() then&#xA; self.element.oclAsType(UML::Behavior).ownedParameter&#xA; else if self.isOperation() then&#xA; self.element.oclAsType(UML::Operation).ownedParameter&#xA; else&#xA; OrderedSet{}&#xA; endif 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="&#xA; self.ownedParameters().oclAsType(UML::Parameter)->&#xA; reject(direction = UML::ParameterDirectionKind::return)->&#xA; collect(parameter |&#xA; ExternalElementReference{element = parameter}&#xA; )->asOrderedSet()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="returnParameter" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let returnParameters = self.ownedParameters().oclAsType(UML::Parameter)->&#xA; select(direction = UML::ParameterDirectionKind::return) &#xA; in&#xA; if returnParameters->isEmpty() then&#xA; null&#xA; else&#xA; ExternalElementReference{element = returnParameters->any(true)}&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="specification" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.isOperation() then &#xA; self&#xA; else if self.isBehavior() then&#xA; let specification = self.element.oclAsType(UML::Behavior).specification in&#xA; if specification = null then null&#xA; else ExternalElementReference{element = specification}&#xA; endif&#xA; else &#xA; null&#xA; 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="&#xA; if not self.isOperation() then Set(ElementReference){}&#xA; else&#xA; self.element.oclAsType(UML::Operation).redefinedOperation->&#xA; collect(op | ExternalElementReference{element = op})&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="template" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let templateBinding = self.umlTemplateBinding() in&#xA; if templateBinding = null or &#xA; templateBinding.oclAsType(UML::TemplateBinding).signature = null then&#xA; null&#xA; else&#xA; ExternalElementReference{&#xA; element = templateBinding.oclAsType(UML::TemplateBinding).signature.template&#xA; }&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="umlTemplateBinding" 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="&#xA; if self.element.oclIsKindOf(UML::TemplateableElement) then&#xA; let templateBindings = &#xA; self.element.oclAsType(UML::TemplateableElement).templateBinding &#xA; in&#xA; if templateBindings->notEmpty() then&#xA; templateBindings->any(true)&#xA; else if self.element.oclIsKindOf(UML::NamedElement) then&#xA; let templateBindings =&#xA; self.element.oclAsType(UML::NamedElement).clientDependency->select(&#xA; oclIsKindOf(UML::Realization) and&#xA; supplier->size() = 1 and&#xA; supplier->forAll(oclIsKindOf(UML::TemplateableElement))&#xA; )->collect(&#xA; supplier.oclAsType(UML::TemplateableElement).templateBinding&#xA; )&#xA; in&#xA; if templateBindings->isEmpty() then&#xA; null&#xA; else&#xA; templateBindings->any(true)&#xA; endif&#xA; else&#xA; null&#xA; endif endif&#xA; else&#xA; null&#xA; 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="&#xA; if self.isTemplate() then&#xA; self.element.oclAsType(UML::TemplateableElement).&#xA; ownedTemplateSignature.parameter->&#xA; collect(p | ExternalElementReference{element = p})->asOrderedSet()&#xA; else&#xA; OrderedSet(ElementReference){}&#xA; 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="&#xA; if self.isTemplate() then&#xA; self.element.oclAsType(UML::TemplateableElement).&#xA; ownedTemplateSignature.parameter.parameteredElement->&#xA; collect(p | ExternalElementReference{element = p})->asOrderedSet()&#xA; else&#xA; OrderedSet(ElementReference){}&#xA; 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="&#xA; let t = self.umlTemplateBinding() in&#xA; if t = null then&#xA; OrderedSet(ElementReference){}&#xA; else&#xA; let templateBinding = t.oclAsType(UML::TemplateBinding) in&#xA; let parameterSubstitution = templateBinding.parameterSubstitution in&#xA; templateBinding.signature.parameter->collect(parameter |&#xA; parameterSubstitution->select(formal = parameter).actual&#xA; )->collect(actual |&#xA; ExternalElementReference{element = actual}&#xA; )->asOrderedSet()&#xA; 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="&#xA; if self.isParameter() then&#xA; let direction = self.element.oclAsType(UML::Parameter).direction in&#xA; if direction = UML::ParameterDirectionKind::_in then 'in'&#xA; else if direction = UML::ParameterDirectionKind::_in then 'in'&#xA; else if direction = UML::ParameterDirectionKind::out then 'out'&#xA; else if direction = UML::ParameterDirectionKind::inout then 'inout'&#xA; else if direction = UML::ParameterDirectionKind::return then 'return'&#xA; else null&#xA; endif endif endif endif endif&#xA; else&#xA; null&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="association" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if not self.isProperty() then null&#xA; -- Note: Only owned ends are treated as association ends.&#xA; else self.element.oclAsType(UML::Property).owningAssociation&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.isBehavior() then&#xA; let returnParameter = self.returnParameter() in&#xA; if returnParameter = null then null&#xA; else returnParameter.type()&#xA; endif&#xA; else&#xA; let type =&#xA; if self.element.oclIsKindOf(UML::TypedElement) then&#xA; self.element.oclAsType(UML::TypedElement).type&#xA; else if self.isOperation() then&#xA; self.element.oclAsType(UML::Operation).type&#xA; else if self.isEnumerationLiteral() then&#xA; self.element.oclAsType(UML::EnumerationLiteral).enumeration&#xA; else&#xA; null&#xA; endif endif endif&#xA; in&#xA; if type = null then null &#xA; else ExternalElementReference{element = type} endif&#xA; 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="&#xA; if self.element.oclIsKindOf(UML::MultiplicityElement) then&#xA; self.element.oclAsType(UML::MultiplicityElement).lower&#xA; else&#xA; 1&#xA; 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="&#xA; if self.element.oclIsKindOf(UML::MultiplicityElement) then&#xA; self.element.oclAsType(UML::MultiplicityElement).upper&#xA; else&#xA; 1&#xA; 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="&#xA; if self.element.oclIsKindOf(UML::MultiplicityElement) then&#xA; self.element.oclAsType(UML::MultiplicityElement).isOrdered&#xA; else&#xA; false&#xA; 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="&#xA; if self.element.oclIsKindOf(UML::MultiplicityElement) then&#xA; not self.element.oclAsType(UML::MultiplicityElement).isUnique&#xA; else&#xA; false&#xA; 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="&#xA; if self.isClassifier() then&#xA; self.element.oclAsType(UML::Classifier).general->&#xA; collect(g | ExternalElementReference{element = g})->asSet()&#xA; else if self.element.oclIsKindOf(UML::ClassifierTemplateParameter) then&#xA; self.element.oclAsType(UML::ClassifierTemplateParameter).constrainingClassifier->&#xA; collect(c | ExternalElementReference{element = c})->asSet()&#xA; else&#xA; Set(ElementReference){}&#xA; 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="&#xA; let allParents = &#xA; if self.isClassifier() then &#xA; self.element.oclAsType(UML::Classifier).allParents()->asSet()&#xA; else if self.element.oclIsKindOf(UML::ClassifierTemplateParameter) then&#xA; let parents = &#xA; self.element.oclAsType(UML::ClassifierTemplateParameter).&#xA; constrainingClassifier &#xA; in&#xA; parents->union(parents.allParents())->asSet()&#xA; else&#xA; Set(UML::Classifier){}&#xA; endif endif&#xA; in&#xA; 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="&#xA; if not self.element.oclIsKindOf(UML::BehavioredClassifier) then null&#xA; else&#xA; let classifierBehavior = &#xA; self.element.oclAsType(UML::BehavioredClassifier).classifierBehavior in&#xA; if classifierBehavior = null then null&#xA; else ExternalElementReference{element = classifierBehavior}&#xA; endif&#xA; 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="&#xA; if not self.isNamespace() then Set(ecore::EObject){}&#xA; else&#xA; self.element.oclAsType(UML::Namespace).getNearestPackage().&#xA; getAllAppliedProfiles()->&#xA; collect(e | ExternalElementReference{element = e})&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="activeClass" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if not self.isBehavior() then null&#xA; else if self.element.oclAsType(UML::Behavior).isActive then self&#xA; else&#xA; let context = self.element.oclAsType(UML::Behavior).context in&#xA; if context &lt;> null and self.element = context.classifierBehavior then&#xA; ExternalElementReference{element = context}&#xA; else&#xA; null&#xA; endif&#xA; 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="&#xA; other = null or&#xA; self.isClassifier() and &#xA; let otherType = other.asUml() in&#xA; otherType &lt;> null and otherType.oclIsKindOf(UML::Type) and&#xA; 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="&#xA; other &lt;> null and &#xA; other.asUml() = self.element and &#xA; other.name() = self.name()"/>
+ </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="&#xA; if self.isNamespace() then self&#xA; else null&#xA; 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">
+ <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)"/>
+ </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="&#xA; if self.isProfile() then&#xA; self.element.oclAsType(UML::Profile).ownedStereotype->&#xA; select(name = stereotypeName)->&#xA; collect(e | ExternalElementReference{element = e})->asSet()&#xA; else&#xA; Set(ElementReference){}&#xA; 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="&#xA; let definition = unit.definition in&#xA; if not definition.oclIsKindOf(ActivityDefinition) then null&#xA; else&#xA; let name = definition.actualName() in&#xA; let referents = self.ownedMembers()->select(&#xA; isOperation() and (name = name() or name.startsWith(name() + '$method$')) or&#xA; isActiveBehavior() and (name = name() or name.startsWith(name() + '$behavior$')) or&#xA; isProperty() and name.startsWith(name() + '$defaultValue$') &#xA; ) in&#xA; if referents->isEmpty() then null&#xA; else referents->any(true)&#xA; endif&#xA; 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"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="alias" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ExternalEnumerationLiteralReference"
+ eSuperTypes="#//ExternalElementReference">
+ <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">
+ <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="&#xA; Member{&#xA; visibility = self.visibility(),&#xA; definition = ImportedMember{&#xA; name = self.name(),&#xA; referent = self.referent&#xA; }&#xA; }"/>
+ </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="&#xA; if self.isTemplateBinding() then&#xA; self.templateBinding.isTemplate()&#xA; else&#xA; self.referent.isTemplate()&#xA; 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="&#xA; self.boundReferencesTo(&#xA; self.referent.ownedMembers()->reject(isTemplateParameter())&#xA; )"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="members" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.boundReferencesTo(&#xA; self.referent.members()->reject(isTemplateParameter())&#xA; )"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="opposite" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; 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="&#xA; 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="&#xA; self.boundReferencesTo(self.referent.parameters())"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="returnParameter" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; 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="&#xA; 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="&#xA; if self.namespace &lt;> null then self.namespace&#xA; else&#xA; let namespace = self.referent.namespace() in&#xA; if self.template() &lt;> null then namespace&#xA; else self.boundReferenceTo(namespace)&#xA; endif&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="template" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.isTemplateBinding() then self.referent&#xA; else null&#xA; 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="&#xA; if self.isTemplateBinding() then self.templateBinding.templateActuals()&#xA; else OrderedSet(ElementReference){}&#xA; 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="&#xA; if self.isAssociationEnd() then self.namespace()&#xA; else null&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let type = self.referent.type() in&#xA; -- This handles the special case of a constructor of a template class&#xA; -- that has that class directly as its return type, rather than a&#xA; -- template binding for it.&#xA; if self.isConstructor() and &#xA; self.templateBinding.template().equals(type) then&#xA; type.bind(self.templateBinding.templateActuals()->asSequence())&#xA; else&#xA; self.boundReferenceTo(type)&#xA; 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="&#xA; self.boundReferencesTo(self.referent.parents()->asOrderedSet())"/>
+ </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="&#xA; self.boundReferencesTo(self.referent.allParents()->asOrderedSet())"/>
+ </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="&#xA; if self.isActivity() then self&#xA; else null&#xA; endif"/>
+ </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() &lt;> 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="&#xA; other = null or&#xA; self.isClassifier() and (self.equals(other) or&#xA; 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="&#xA; other &lt;> null and&#xA; other.oclIsKindOf(BoundElementReference) and&#xA; self.templateBinding.equals(other.templateBinding()) and&#xA; 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="&#xA; BoundElementReference{&#xA; referent = self.referent,&#xA; namespace = self.namespace,&#xA; templateBinding = self.templateBinding&#xA; }"/>
+ </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="&#xA; if element = null then null&#xA; else if not element.isNamedElement() then element&#xA; else if element.isTemplateBinding() then&#xA; let actuals = self.boundReferencesTo(element.templateActuals()) in&#xA; element.template().bind(actuals)&#xA; else if element.isParameteredElement() then&#xA; let parameters = &#xA; self.templateBinding.template().parameteredElements()->asSequence() in&#xA; let i = element.positionIn(parameters) in&#xA; if i > 0 then&#xA; self.templateBinding.templateActuals()->at(i)&#xA; else&#xA; element&#xA; endif&#xA; else&#xA; let elementTemplateBinding = element.templateBinding() in&#xA; if elementTemplateBinding = null then &#xA; if self.referent.equals(element.namespace()) then&#xA; BoundElementReference{&#xA; referent = element,&#xA; namespace = self,&#xA; templateBinding = self.templateBinding&#xA; }&#xA; else if self.templateBinding.template().containsMember(element) then&#xA; BoundElementReference{&#xA; referent = element,&#xA; namespace = null,&#xA; templateBinding = self.templateBinding&#xA; }&#xA; else&#xA; element&#xA; endif endif&#xA; else if not elementTemplateBinding.equals(self.templateBinding) then&#xA; BoundElementReference{&#xA; referent = element.reference(),&#xA; namespace = null,&#xA; templateBinding = &#xA; self.boundReferenceTo(elementTemplateBinding).templateBinding()&#xA; }&#xA; else&#xA; element&#xA; endif endif&#xA; 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">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="documentation" ordered="false"
+ upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SequenceExpansionExpression" eSuperTypes="#//Expression">
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.argument &lt;> element then self.assignmentBefore&#xA; else&#xA; self.variableSource.update(self.assignmentsAfterPrimary())&#xA; 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="&#xA; let expression = self.primary.expression in&#xA; if expression = null then self.assignmentBefore&#xA; else expression.assignmentAfter&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.isSelectOrReject then&#xA; let expression = self.primary.expression in&#xA; if expression = null then null else expression.type endif&#xA; else if self.isCollectOrIterate then&#xA; if self.argument = null then null else self.argument.type endif&#xA; else if self.isForAllOrExistsOrOne or self.isIsUnique then&#xA; self.booleanType()&#xA; else&#xA; null&#xA; 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="&#xA; if self.isSelectOrReject then 0&#xA; else if self.isCollectOrIterate then&#xA; let expression = self.primary.expression in&#xA; if expression = null or self.argument = null then 0&#xA; else expression.lower * self.argument.lower&#xA; endif&#xA; else if self.isForAllOrExistsOrOne or self.isIsUnique then 1&#xA; else 0&#xA; 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="&#xA; if self.isSelectOrReject then -1&#xA; else if self.isCollectOrIterate then&#xA; let expression = self.primary.expression in&#xA; if expression = null or self.argument = null then 0&#xA; else &#xA; let upper1 = expression.upper in&#xA; let upper2 = self.argument.upper in&#xA; if upper1 = -1 or upper2 = -1 then -1 else upper1 * upper2 endif&#xA; endif&#xA; else if self.isForAllOrExistsOrOne or self.isIsUnique then 1&#xA; else 0&#xA; endif endif endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="sequenceExpansionExpressionVariableSourceDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.argument &lt;> 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; (self.isSelectOrReject and self.argument &lt;> null) implies&#xA; self.isBooleanType(self.argument.type) and&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; (self.isForAllOrExistsOrOne and self.argument &lt;> null) implies&#xA; self.isBooleanType(self.argument.type) and&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; (self.isIsUnique and self.argument &lt;> null) implies &#xA; 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/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="&#xA; self.isSelectOrReject or self.isCollectOrIterate or &#xA; 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"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="variable" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="variableSource" eType="#//AssignedSource"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let expression = self.primary.expression in&#xA; AssignedSource{&#xA; name = variable,&#xA; source = self,&#xA; type = if expression = null then null else expression.type endif,&#xA; lower = 1,&#xA; upper = 1&#xA; }"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="argument" lowerBound="1"
+ eType="#//Expression" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="primary" lowerBound="1"
+ eType="#//ExtentOrExpression" containment="true"/>
+ <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">
+ <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="&#xA; self.isAssignableFrom(&#xA; AssignableElementReference{&#xA; reference = element, owner = self.owner()&#xA; }&#xA; )"/>
+ </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="&#xA; source = null or &#xA; self.isTypeConformantWith(source) and &#xA; 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="&#xA; -- Null conversion&#xA; source.isNull() or&#xA; &#xA; let sourceType = source.type in&#xA; &#xA; -- Type conformance&#xA; self.isConformantWithType(sourceType) or&#xA; &#xA; -- Collection conversion&#xA; sourceType &lt;> null and self.isCollectionClass(sourceType) and&#xA; source.upper = 1 and (self.upper = -1 or self.upper > 1) and&#xA; self.isConformantWithType(sourceType.collectionArgument())"/>
+ </eAnnotations>
+ <eParameters name="source" lowerBound="1" eType="#//AssignableElement"/>
+ </eOperations>
+ <eOperations name="isConformantWithType">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let targetType = self.type in&#xA; -- Untyped target is conformant with anything.&#xA; targetType = null or&#xA; &#xA; -- Untyped source is only assignable to untyped target.&#xA; sourceType &lt;> null and (&#xA; &#xA; -- Basic type conformance.&#xA; sourceType.conformsTo(targetType) or&#xA; &#xA; -- Bit string conversion.&#xA; self.isIntegerType(sourceType) and self.isBitStringType(targetType)&#xA; )"/>
+ </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="&#xA; let targetUpper = self.upper in&#xA; let sourceUpper = source.upper in&#xA; targetUpper = -1 or targetUpper > 1 or&#xA; sourceUpper &lt;> -1 and sourceUpper &lt;= 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/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/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/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.typeCached()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="AssignableElementReference" eSuperTypes="#//AssignableElement">
+ <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">
+ <eOperations name="newAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let assignmentsBefore = self.assignmentBefore in&#xA; self.assignmentAfter->select(isNew(assignmentsBefore))"/>
+ </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_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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let assignment = self.assignmentBefore->select(a | a.name = name) in&#xA; if assignment->isEmpty() then null&#xA; else assignment->any(true).source&#xA; 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/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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; 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/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.updateAssignmentsCached()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ExtentOrExpression" eSuperTypes="#//Expression">
+ <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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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="&#xA; let expression = self.expression in&#xA; expression.oclIsKindOf(ClassExtentExpression) implies&#xA; 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="&#xA; let expression = self.expression in&#xA; expression.oclIsKindOf(NameExpression) implies&#xA; 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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; if self.nonNameExpression &lt;> null then self.nonNameExpression&#xA; else if self.name.referent->exists(isClass()) then&#xA; ClassExtentExpression{&#xA; className = self.name.copy(),&#xA; owner = self&#xA; }&#xA; else&#xA; NameExpression{&#xA; name = self.name.copy(),&#xA; owner = self&#xA; }&#xA; endif endif"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="nonNameExpression" eType="#//Expression"
+ containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="QualifiedName" eSuperTypes="#//SyntaxElement">
+ <eOperations name="copy" lowerBound="1" eType="#//QualifiedName">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="QualifiedName{&#xA; nameBinding = self.nameBinding.copy(),&#xA; isAmbiguous = self.isAmbiguous,&#xA; owner = self.owner()&#xA; }"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="addName" lowerBound="1" eType="#//QualifiedName">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let nameBinding = NameBinding{name = name} in&#xA; QualifiedName{&#xA; nameBinding = self.nameBinding.copy()->append(nameBinding),&#xA; isAmbiguous = self.isAmbiguous,&#xA; owner = self.owner()&#xA; }"/>
+ </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="&#xA; QualifiedName{&#xA; nameBinding = self.nameBinding.copy()->includingAll(nameBindings),&#xA; isAmbiguous = self.isAmbiguous,&#xA; owner = self.owner()&#xA; }"/>
+ </eAnnotations>
+ <eParameters name="nameBindings" upperBound="-1" eType="#//NameBinding"/>
+ </eOperations>
+ <eOperations name="modelReferents" ordered="false" upperBound="-1" eType="#//ElementReference"/>
+ <eOperations name="qualifiedNameUnqualifiedNameDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.templateName &lt;> null implies&#xA; let templates = self.templateName.referent in &#xA; templates->size() = 1 and &#xA; templates->forAll(template | &#xA; template.isTemplate() and &#xA; self.unqualifiedName.binding.matches(template)&#xA; )"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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="&#xA; if not self.isAmbiguous or self.qualification = null then null&#xA; else if self.qualification.referent->exists(isNamespace()) then null&#xA; else &#xA; FeatureReference{&#xA; nameBinding = self.unqualifiedName.copy(), &#xA; expression = &#xA; if self.qualification.isFeatureReference then &#xA; PropertyAccessExpression{&#xA; featureReference = self.qualification.disambiguation&#xA; }&#xA; else NameExpression{name = self.qualification}&#xA; endif,&#xA; owner = self.owner()&#xA; }&#xA; 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="&#xA; if self.isFeatureReference then&#xA; Set(ElementReference){}&#xA; else if self.templateName = null then&#xA; let n = self.nameBinding->size() in&#xA; let currentScope = self.currentScope() in&#xA; if n = 0 or currentScope = null then&#xA; Set(ElementReference){}&#xA; else if n = 1 then&#xA; -- Resolve as an unqualified name.&#xA; currentScope.resolve(self.unqualifiedName.toName())&#xA; else&#xA; -- Resolve as a qualified name.&#xA; self.qualification.referent->select(isNamespace()).&#xA; resolveVisible(self.unqualifiedName.toName(), currentScope)->&#xA; asSet()&#xA; endif endif&#xA; else&#xA; -- Resolve as a bound element.&#xA; let referents = self.templateName.referent in&#xA; if referents->size() &lt;> 1 then&#xA; Set(ElementReference){}&#xA; else&#xA; let template = referents->any(true) in&#xA; let actuals = self.unqualifiedName.binding.bindTo(template) in&#xA; Set{template.bind(actuals)}&#xA; endif&#xA; 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"/>
+ <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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; if self.unqualifiedName = null then ''&#xA; else if self.qualification = null then self.unqualifiedName.toString()&#xA; else self.qualification.pathName + '::' + self.unqualifiedName.toString()&#xA; 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/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.disambiguation &lt;> 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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let n = self.nameBinding->size() in &#xA; if n &lt;= 1 then null&#xA; else QualifiedName{&#xA; nameBinding = self.nameBinding->subOrderedSet(1, n - 1).copy(),&#xA; isAmbiguous = n > 1 and self.isAmbiguous,&#xA; owner = self.owner()&#xA; }&#xA; 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/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.disambiguationCached()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="nameBinding" upperBound="-1"
+ eType="#//NameBinding" containment="true"/>
+ <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/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/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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; if self.unqualifiedName = null or &#xA; self.unqualifiedName.binding = null then &#xA; null&#xA; else if self.nameBinding->size() = 1 then&#xA; QualifiedName{&#xA; nameBinding = Sequence{NameBinding{name = self.unqualifiedName.name}},&#xA; isAmbiguous = false,&#xA; owner = self.owner()&#xA; }&#xA; else&#xA; QualifiedName{&#xA; nameBinding = self.nameBinding->subOrderedSet(1, self.nameBinding->size() - 1).copy()->&#xA; append(NameBinding{name = self.unqualifiedName.name}),&#xA; isAmbiguous = false,&#xA; owner = self.owner()&#xA; }&#xA; endif endif"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="FeatureReference" eSuperTypes="#//Expression">
+ <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="&#xA; -- TODO: Handle overloading resolution.&#xA; let referents = self.referent->select(isOperation() or isReception()) in&#xA; if referents->size() &lt;> 1 then null&#xA; else if referents->forAll(isReception()) then&#xA; referents->any(true).signal()&#xA; else&#xA; referents->any(true)&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let type = self.expression.type in&#xA; type &lt;> 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="&#xA; let type = self.expression.type in&#xA; let name = self.nameBinding.toName() in&#xA; if type = null then Set(ElementReference){}&#xA; else&#xA; let currentScope = self.currentScope() in&#xA; let features = type.resolveVisible(name, currentScope) in&#xA; if currentScope = null then features&#xA; else features->union(currentScope.resolveAssociationEnd(type, name))&#xA; endif&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
+ eType="#//Expression" containment="true"/>
+ <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/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.referentCached()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="nameBinding" eType="#//NameBinding"
+ containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="NameBinding" eSuperTypes="#//SyntaxElement">
+ <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="&#xA; if self.binding = null then self.toName()&#xA; else self.toName() + self.binding.toString()&#xA; 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="&#xA; if self.name = null or self.name = '' or self.name.at(1) &lt;> '\'' then&#xA; name&#xA; else&#xA; let s = self.name.substring(2, name.size() - 1) in&#xA; self.process(s)&#xA; 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="&#xA; let i = s.indexOf('\\') in&#xA; if i = 0 then&#xA; s&#xA; else &#xA; if i = 1 then '' else s.substring(1, i-1) endif +&#xA; self.escape(s.at(i+1)) +&#xA; if i+2 > s.size() then '' else self.process(s.substring(i+2, s.size())) endif&#xA; 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="&#xA; if s = 'b' then '\b'&#xA; else if s = 'f' then '\f'&#xA; else if s = 't' then '\t'&#xA; else if s = 'n' then '\n'&#xA; 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{&#xA; name = self.name,&#xA; binding = if self.binding = null then null else self.binding.copy() endif&#xA; }"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="toQualifiedName" lowerBound="1" eType="#//QualifiedName">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; QualifiedName{&#xA; nameBinding = OrderedSet{self.copy()},&#xA; isAmbiguous = false,&#xA; owner = owner&#xA; }"/>
+ </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="&#xA; QualifiedName{&#xA; nameBinding = OrderedSet{self.copy(), other},&#xA; isAmbiguous = false,&#xA; owner = owner&#xA; }"/>
+ </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"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="TemplateBinding" abstract="true" eSuperTypes="#//SyntaxElement">
+ <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">
+ <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="&#xA; '&lt;' + &#xA; self.substitution->iterate(substitution : TemplateParameterSubstitution; s : Types::String = '' | &#xA; if s = '' then substitution.toString()&#xA; else s + ',' + substitution.toString()&#xA; endif&#xA; ) + &#xA; '>'"/>
+ </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="&#xA; let parameters = template.templateParameters() in &#xA; parameters->size() = self.substitution->size() and &#xA; 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="&#xA; self.substitution->exists(&#xA; parameterName = parameter.name() and&#xA; referent &lt;> null and&#xA; parameter.parents()->forAll(c | referent.conformsTo(c))&#xA; )"/>
+ </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="&#xA; template.templateParameters()->collect(p |&#xA; let substitutions = self.substitution->select(actualParameterName() = p.name()) &#xA; in&#xA; if substitutions->size() = 1 then substitutions.referent->asSequence()&#xA; else Sequence(ElementReference){} endif&#xA; )"/>
+ </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"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="TemplateParameterSubstitution" eSuperTypes="#//SyntaxElement">
+ <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{&#xA; parameterName = self.parameterName,&#xA; argumentName = if self.argumentName = null then null else self.argumentName.copy() endif&#xA; }"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="parameterName" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="argumentName" lowerBound="1"
+ eType="#//QualifiedName" containment="true"/>
+ <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="&#xA; let referents = argumentName.referent in &#xA; if referents->size() &lt;> 1 or not referents->forAll(isClassifier()) then null&#xA; else referents->any(true)&#xA; endif"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="NumericUnaryExpression" eSuperTypes="#//UnaryExpression">
+ <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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/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">
+ <eOperations name="unaryExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="operand" lowerBound="1"
+ eType="#//Expression" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ForAllOrExistsOrOneExpression" eSuperTypes="#//SequenceExpansionExpression">
+ <eOperations name="forAllOrExistsOrOneExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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">
+ <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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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">
+ <eOperations name="validateAssignments" lowerBound="1" eType="ecore: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.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/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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.noNullArguments() then&#xA; self.operand1.upper = 1 and self.operand2.upper = 1&#xA; else&#xA; self.operand1.upper &lt;= 1 and self.operand2.upper &lt;= 2&#xA; 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/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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.updateAll(&#xA; self.assignmentBefore,&#xA; self.operand1.newAssignments()->union(operand2.newAssignments())&#xA; )"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="operand1" lowerBound="1"
+ eType="#//Expression" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="operand2" lowerBound="1"
+ eType="#//Expression" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="BooleanUnaryExpression" eSuperTypes="#//UnaryExpression">
+ <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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/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">
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.typeName = null then null&#xA; else&#xA; let referents = self.typeName.referent->&#xA; select(isClassifier() and not isTemplate()) in&#xA; if referents->size() &lt;> 1 then null&#xA; else referents->any(true)&#xA; endif&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="self.typeName &lt;> null implies self.type &lt;> 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" eType="#//QualifiedName"
+ containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAny" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="PositionalTuple" eSuperTypes="#//Tuple">
+ <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="&#xA; if parameters->isEmpty() then Set(InputNamedExpression){}&#xA; else&#xA; Set{1..parameters->size()}->select(i |&#xA; let direction = parameters->at(i).direction() in&#xA; direction = 'in' or direction = 'inout' &#xA; )->collect(i : Integer | &#xA; InputNamedExpression{&#xA; name = parameters->at(i).name(),&#xA; expression = &#xA; if i &lt;= self.size() then&#xA; self.expression->at(i)&#xA; else&#xA; SequenceConstructionExpression{&#xA; hasMultiplicity = true,&#xA; owner = self&#xA; }&#xA; endif,&#xA; owner = self&#xA; }&#xA; )->asSet()&#xA; 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="&#xA; if parameters->isEmpty() then Set(OutputNamedExpression){}&#xA; else&#xA; Set{1..parameters->size()}->select(i |&#xA; let direction = parameters->at(i).direction() in&#xA; -- NOTE: This allows missing arguments for out parameters.&#xA; direction = 'out' and i &lt;= self.size() or &#xA; direction = 'inout' &#xA; )->collect(i : Integer | &#xA; OutputNamedExpression{&#xA; name = parameters->at(i).name(),&#xA; expression = &#xA; if i &lt;= self.size() then&#xA; self.expression->at(i)&#xA; else&#xA; -- NOTE: This will cause an error for missing arguments for &#xA; -- inout parameters.&#xA; SequenceConstructionExpression{&#xA; hasMultiplicity = true,&#xA; owner = self&#xA; }&#xA; endif,&#xA; owner = self&#xA; }&#xA; )->asSet()&#xA; endif"/>
+ </eAnnotations>
+ <eParameters name="parameters" upperBound="-1" eType="#//ElementReference"/>
+ </eOperations>
+ <eOperations name="positionalTupleArguments" eType="ecore: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.size() &lt;= 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"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Tuple" abstract="true" eSuperTypes="#//SyntaxElement">
+ <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="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA;-- let assignmentsBefore = self.assignmentsBefore() in&#xA;-- if not element.oclIsKindOf(NameExpression) then assignmentsBefore&#xA;-- else&#xA;-- let outputs : Set = self.output->select(expression = element) in&#xA;-- if outputs->isEmpty() then assignmentsBefore&#xA;-- else self.updateFor(assignmentsBefore, &#xA;-- outputs->any(true).oclAsType(OutputNamedExpression)&#xA;-- )&#xA;-- endif&#xA;-- endif&#xA; 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="&#xA; let assignments1 = self.updateAll(&#xA; self.assignmentsBefore(),&#xA; self.input.expression->union(self.output.expression).newAssignments()->asSet()&#xA; ) in&#xA; let assignments2 = self.output->iterate(&#xA; output, assignments : Set(AssignedSource) = assignments1 |&#xA; self.updateFor(assignments, output)&#xA; ) in&#xA; self.updateAll(&#xA; assignments2,&#xA; self.output->reject(leftHandSide = null)->&#xA; collect(output : OutputNamedExpression | &#xA; assignments2->select(name = output.leftHandSide.assignedName())&#xA; )->&#xA; reject(isParallelLocalName).copy(self.invocation, null)->asSet()&#xA; )"/>
+ </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="&#xA; let assignmentsBefore = self.assignmentsBefore() in&#xA; 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="&#xA; let parameter = self.invocation.parameterNamed(output.name) in&#xA; if parameter = null or parameter.direction() &lt;> 'out' then &#xA; assignments&#xA; else&#xA; let lhs = output.leftHandSide in&#xA; if lhs = null or lhs.localName() = null or lhs.index() &lt;> null or &#xA; assignments->exists(name = lhs.localName()) then &#xA; assignments&#xA; else&#xA; AssignedSource{&#xA; name = lhs.localName(),&#xA; source = self,&#xA; type = parameter.type(),&#xA; lower = 0,&#xA; upper = if parameter.upper() = 1 then 1 else -1 endif&#xA; }.update(assignments)&#xA; endif&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.input->forAll(&#xA; expression.isNull() implies &#xA; self.invocation.parameterNamed(name).lower() = 0&#xA; )"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.output->forAll(&#xA; expression.isNull() implies &#xA; self.invocation.parameterNamed(name).direction() = 'out'&#xA; )"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.input.expression->union(self.output.expression).&#xA; 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/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"/>
+ <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/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.outputCached()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="NamedExpression" eSuperTypes="#//SyntaxElement">
+ <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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
+ eType="#//Expression" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="index" eType="#//Expression"
+ containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="InputNamedExpression" eSuperTypes="#//SyntaxElement">
+ <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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
+ eType="#//Expression"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="index" eType="#//Expression"/>
+ <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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let parameterType = self.tuple().invocation.parameterNamed(self.name).type() in&#xA; parameterType &lt;> null and self.expression.type &lt;> null and&#xA; self.isCollectionClass(parameterType) and &#xA; 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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let parameterType = self.tuple().invocation.parameterNamed(self.name).type() in&#xA; parameterType &lt;> null and self.expression &lt;> null and&#xA; (self.isBitStringType(parameterType) or &#xA; self.isBitStringCollectionClass(parameterType)) and &#xA; not self.isBitStringType(self.expression.type)"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="InvocationExpression" abstract="true"
+ eSuperTypes="#//Expression">
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let feature = self.feature() in&#xA; if feature &lt;> null and self.tuple = element then feature.assignmentAfter&#xA; else self.assignmentBefore&#xA; 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="&#xA; let referent = self.referent in&#xA; if referent = null then null&#xA; else referent.type()&#xA; 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="&#xA; let referent = self.referent in&#xA; if referent = null then 0&#xA; else referent.upper()&#xA; 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="&#xA; let referent = self.referent in&#xA; if referent = null then 0&#xA; else referent.lower()&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="parameterNamed" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let parameter = self.parameter->select(p | p.name() = name) in&#xA; if parameter->isEmpty() then null&#xA; else parameter->any(true)&#xA; 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="&#xA; let parameters = self.parameter in&#xA; if parameters->exists(direction() = 'return') then&#xA; parameters->size()-1&#xA; else&#xA; parameters->size()&#xA; 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="&#xA; let parameter = self.parameterNamed(input.name) in&#xA; let direction = parameter.direction() in&#xA; (direction = 'in' or direction = 'inout') and&#xA; 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="&#xA; let parameter = self.parameterNamed(output.name) in&#xA; let direction = parameter.direction() in&#xA; let lhs = output.leftHandSide in&#xA; direction = 'out' and lhs.referent = null or&#xA; (direction = 'out' or direction = 'inout') and&#xA; 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="&#xA; let referent = self.referent in&#xA; let currentScope = self.currentScope() in&#xA; referent &lt;> null and referent.isConstructor() and currentScope &lt;> null implies&#xA; let operation = currentScope.specification() in&#xA; operation.isConstructor() and&#xA; let statement = self.enclosingStatement() in&#xA; statement &lt;> null and statement.oclIsKindOf(ExpressionStatement) and&#xA; let annotatedStatement = statement.owner() in&#xA; let owner = annotatedStatement.owner() in&#xA; owner &lt;> null implies owner.oclIsKindOf(Block) and&#xA; let block = owner.oclAsType(Block) in&#xA; block.enclosingStatement() = null and&#xA; block.statement->notEmpty() and&#xA; block.statement->at(1) = annotatedStatement and&#xA; -- NOTE: This ensures that the invoked constructor is&#xA; -- from the same class as the containing constructor.&#xA; operation.namespace().equals(referent.namespace()) and&#xA; -- NOTE: An alternative constructor invocation should&#xA; -- only be allowed on &quot;this&quot;.&#xA; 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="&#xA; let allParameters = referent.parameters() in&#xA; let firstParameter =&#xA; if primary = null or allParameters->isEmpty() then null&#xA; else allParameters->first()&#xA; endif&#xA; in&#xA; let firstParameterType =&#xA; if firstParameter = null then null&#xA; else firstParameter.type()&#xA; endif&#xA; in&#xA; let primaryType =&#xA; if firstParameter = null then null&#xA; else self.effectiveType(firstParameter, primary)&#xA; endif&#xA; in&#xA; let parameters =&#xA; if firstParameter = null then allParameters&#xA; else allParameters->excluding(firstParameter)&#xA; endif&#xA; in&#xA; let templateArguments =&#xA; referent.parameteredElements()->collect(parameteredElement |&#xA; let inputTypes =&#xA; self.tuple.inputFor(parameters)->&#xA; select(input |&#xA; let parameter = parameters->any(name() = input.name) in&#xA; parameteredElement.equals(parameter.type())&#xA; )->&#xA; collect(input | &#xA; let parameter = parameters->any(name() = input.name) in&#xA; self.effectiveType(parameter, input.expression)&#xA; )->asSet()&#xA; in&#xA; let types =&#xA; if parameteredElement.equals(firstParameterType) then&#xA; inputTypes->including(primaryType)&#xA; else&#xA; inputTypes&#xA; endif&#xA; in&#xA; let commonAncestor = self.commonAncestor(types) in&#xA; if commonAncestor = null then AnyType{}.toReference()&#xA; else commonAncestor&#xA; endif&#xA; )&#xA; in&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let type = expression.type in&#xA; let parameterUpper = parameter.upper() in&#xA; if (parameterUpper = -1 or parameterUpper > 1) and&#xA; expression.upper = 1 and&#xA; type &lt;> null and self.isCollectionClass(type) then&#xA; type.collectionArgument()&#xA; else&#xA; type&#xA; 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/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="&#xA; let referent = self.referent in&#xA; if self.isBehavior or self.isOperation then&#xA; referent.parameters()&#xA; else if self.isAssociationEnd then&#xA; let association = referent.association() in&#xA; association.properties()->reject(equals(referent))->&#xA; collect(p | self.parameterFromProperty(p))->asOrderedSet()&#xA; else if referent &lt;> null then&#xA; referent.properties()->&#xA; collect(p | self.parameterFromProperty(p))->asOrderedSet() &#xA; else&#xA; OrderedSet(ElementReference){}&#xA; 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="&#xA; self.parameterFromPropertyWithMultiplicity(&#xA; property, &#xA; property.lower().toString(), &#xA; let upper = property.upper() in&#xA; if upper = -1 then '*'&#xA; else upper.toString()&#xA; endif&#xA; )"/>
+ </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="&#xA; FormalParameter{&#xA; name = property.name(),&#xA; direction = 'in',&#xA; typePart = TypedElementDefinition{&#xA; actualType = property.type(),&#xA; lowerBound = lower,&#xA; upperBound = upper&#xA; },&#xA; owner = property.namespace().asMember()&#xA; }.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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let referent = self.referent in&#xA; referent &lt;> null implies&#xA; let template = referent.template() in&#xA; template &lt;> null implies &#xA; let parameters = template.templateParameters() in&#xA; let actuals = referent.templateActuals() in&#xA; parameters->size() = actuals->size() and&#xA; parameters->size() &lt;> 0 implies&#xA; Sequence{1..parameters->size()}->forAll(i |&#xA; let parameter = parameters->at(i) in&#xA; let actual = actuals->at(i) in&#xA; parameter.isClassifierTemplateParameter() and&#xA; parameter.parents()->forAll(p | actual.conformsTo(p))&#xA; )"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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://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="&#xA; let referent = self.referent in&#xA; referent &lt;> 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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let referent = self.referent in&#xA; referent&lt;> 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/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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let referent = self.referent in&#xA; referent&lt;> 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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let referent = self.referent in&#xA; referent&lt;> 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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let feature = self.feature in&#xA; if feature = null then false&#xA; else&#xA; let nameBinding = feature.nameBinding in&#xA; let referent = self.referent in&#xA; nameBinding &lt;> null and referent = null and&#xA; nameBinding.toName() = 'destroy' and&#xA; nameBinding.binding = null&#xA; 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/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/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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let referent = self.referent in&#xA; referent &lt;> null and referent.isSignal()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="tuple" lowerBound="1" eType="#//Tuple"
+ containment="true" eOpposite="#//Tuple/invocation"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="OutputNamedExpression" eSuperTypes="#//InputNamedExpression">
+ <eOperations name="outputNamedExpressionLeftHandSideDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/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="&#xA; let primary =&#xA; if self.expression.oclIsKindOf(SequenceAccessExpression) then&#xA; self.expression.oclAsType(SequenceAccessExpression).primary&#xA; else&#xA; self.expression&#xA; endif&#xA; in&#xA; primary.oclIsKindOf(NameExpression) or &#xA; 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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; if self.expression &lt;> null and self.hasLegalExpression() then&#xA; EffectiveLeftHandSide{&#xA; expression = self.expression,&#xA; owner = self&#xA; }&#xA; else&#xA; null&#xA; endif"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="LeftHandSide" abstract="true" eSuperTypes="#//AssignableElement">
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.index() &lt;> element then self.assignmentBefore&#xA; else&#xA; let feature = self.feature() in&#xA; if feature = null then self.assignmentBefore&#xA; else feature.assignmentAfter&#xA; endif&#xA; 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="&#xA; if self.index() &lt;> null then self.index().assignmentAfter&#xA; else &#xA; let feature = self.feature() in&#xA; if feature = null then self.assignmentBefore&#xA; else feature.assignmentAfter&#xA; endif&#xA; 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="&#xA; let referent = self.referent() in&#xA; 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="&#xA; if self.index() &lt;> null then 1&#xA; else&#xA; let referent = self.referent() in&#xA; if referent = null then 0 else referent.upper() endif&#xA; 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="&#xA; if self.index() &lt;> null then 1&#xA; else&#xA; let referent = self.referent() in&#xA; if referent = null then 0 else referent.lower() endif&#xA; 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="&#xA; if not self.isDataValueUpdate() then self.localName()&#xA; else&#xA; self.feature().expression.oclAsType(NameExpression).name.unqualifiedName.toName()&#xA; 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="&#xA; let feature = self.feature() in&#xA; feature &lt;> null and&#xA; feature.expression.oclIsKindOf(NameExpression) and&#xA; let expression = feature.expression.oclAsType(NameExpression) in&#xA; expression.propertyAccess = null and&#xA; let name = expression.name.unqualifiedName.toName() in&#xA; let assignments = self.assignmentBefore->select(a | a.name = name) in&#xA; assignments->notEmpty() and &#xA; assignments->forAll(type &lt;> 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/Ecore/OCL/Pivot">
+ <details key="body" value="self.index() &lt;> null implies self.index().upper &lt;= 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"/>
+ <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/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/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/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.referent()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SequenceAccessExpression" eSuperTypes="#//Expression">
+ <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="&#xA; self.updateAll(&#xA; self.updateAll(&#xA; self.assignmentBefore,&#xA; self.primary.newAssignments()&#xA; ),&#xA; self.index.newAssignments()&#xA; )"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="sequenceAccessExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let type = self.index.type in&#xA; type &lt;> 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/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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="index" lowerBound="1" eType="#//Expression"
+ containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="StringLiteralExpression" eSuperTypes="#//LiteralExpression">
+ <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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="LiteralExpression" abstract="true" eSuperTypes="#//Expression">
+ <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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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">
+ <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="&#xA; let referents = self.operation.referent in&#xA; if referents->select(isBehavior())->size() &lt;> 1 then null&#xA; else&#xA; let referent = referents->any(isBehavior()) in&#xA; if referent.isTemplate() then &#xA; self.bindTemplateImplicitArguments(&#xA; referent, self.primary.expression&#xA; )&#xA; else referent&#xA; endif&#xA; 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="&#xA; let collectionFunctionAdd = self.collectionFunctionAdd() in&#xA; if collectionFunctionAdd = null then false&#xA; else&#xA; collectionFunctionAdd.containedIn(self.operation.referent->asBag()) and&#xA; /* Note: This works even if the target expression is the&#xA; * derived name expression of an ExtentOrExpression element.&#xA; */&#xA; targetExpression.owner() = self.primary &#xA; 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="&#xA; let referent = self.referent in&#xA; if referent = null then null&#xA; else&#xA; let parameters = referent.parameters() in&#xA; if parameters->isEmpty() then null&#xA; else parameters->first()&#xA; endif&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="sequenceOperationExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let parameter = self.firstParameter() in&#xA; parameter &lt;> null and&#xA; let direction = parameter.direction() in&#xA; let expression = self.primary.expression in&#xA; (direction = 'in' or direction = 'inout') and&#xA; parameter.lower() = 0 and parameter.upper() = -1 and&#xA; expression &lt;> 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let expression = self.primary.expression in&#xA; let parameter = self.firstParameter() in&#xA; expression &lt;> null and parameter &lt;> null and &#xA; parameter.direction() = 'inout' implies&#xA; let lhs = self.leftHandSide in&#xA; lhs &lt;> null and &#xA; let assignedName = lhs.assignedName() in&#xA; (assignedName &lt;> null implies &#xA; self.assignmentBefore->exists(name = assignedName)&#xA; ) and&#xA; let expressionType = self.type in&#xA; let type = parameter.type() in&#xA; type &lt;> null and type.equals(expressionType) or&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.referent &lt;> null implies&#xA; (self.tuple.input->forAll(input | self.parameterIsAssignableFrom(input)) and&#xA; self.tuple.output->forAll(output | self.parameterIsAssignableTo(output))&#xA; )"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let expression = self.primary.expression in&#xA; expression &lt;> null implies&#xA; expression.newAssignments().name->&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let expression = self.primary.expression in&#xA; let firstParameter = self.firstParameter() in&#xA; let assignments1 =&#xA; if expression = null then self.assignmentBefore&#xA; else expression.assignmentAfter&#xA; endif&#xA; in&#xA; let assignments2 =&#xA; self.updateAll(assignments1, self.tuple.assignmentsAfter())&#xA; in&#xA; if firstParameter = null or firstParameter.direction() &lt;> 'inout' then&#xA; assignments2&#xA; else&#xA; let oldAssignment = self.assignmentBefore->&#xA; select(name = self.leftHandSide.assignedName())&#xA; in&#xA; if oldAssignment->isEmpty() or oldAssignment->forAll(isParallelLocalName) then&#xA; assignments2&#xA; else&#xA; oldAssignment->any(true).copy(self, null).update(assignments2)&#xA; endif&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="parameterElements" lowerBound="1" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let parameters = self.InvocationExpression_parameterElements() in&#xA; if parameters->size() &lt; 2 then OrderedSet(ElementReference){}&#xA; else parameters->subOrderedSet(2, parameters->size())&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="primary" lowerBound="1"
+ eType="#//ExtentOrExpression" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="operation" eType="#//QualifiedName"
+ containment="true"/>
+ <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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let expression = self.primary.expression in&#xA; expression &lt;> null and expression.upper = 1 and&#xA; let type = expression.type in&#xA; type &lt;> 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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let referent = self.referent in&#xA; let firstParameter = self.firstParameter() in&#xA; let expression = self.primary.expression in&#xA; referent &lt;> null and firstParameter &lt;> null and expression &lt;> null and&#xA; let parameterType = firstParameter.type() in&#xA; let primaryType =&#xA; if self.isCollectionConversion then&#xA; expression.type.collectionArgument()&#xA; else&#xA; expression.type&#xA; endif&#xA; in&#xA; parameterType &lt;> null and self.isBitStringType(parameterType) and&#xA; primaryType &lt;> 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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let expression = self.primary.expression in&#xA; let firstParameter = self.firstParameter() in&#xA; if expression = null or firstParameter = null or &#xA; firstParameter.direction() &lt;> 'inout' then&#xA; null&#xA; else&#xA; EffectiveLeftHandSide{&#xA; expression = expression,&#xA; owner = self&#xA; }&#xA; endif"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SelectOrRejectExpression" eSuperTypes="#//SequenceExpansionExpression">
+ <eOperations name="selectOrRejectExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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">
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let referents = self.className.referent->select(isClass()) in&#xA; if referents->size() &lt;> 1 then null&#xA; else referents->any(true)&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/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 &lt;> null and not self.type.isTemplate()"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="className" lowerBound="1"
+ eType="#//QualifiedName" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="PositionalTemplateBinding" eSuperTypes="#//TemplateBinding">
+ <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="&#xA; '&lt;' + &#xA; self.argumentName->iterate(name : QualifiedName; s : Types::String = '' | &#xA; if s = '' then name.pathName&#xA; else s + ',' + name.pathName&#xA; endif&#xA; ) + &#xA; '>'"/>
+ </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="&#xA; let parameters = template.templateParameters() in &#xA; parameters->size() = self.argumentName->size() and &#xA; Sequence{1 .. parameters->size()}->forAll(i | &#xA; self.matches(parameters->at(i), argumentName->at(i))&#xA; )"/>
+ </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="&#xA; let referents = argumentName.referent in&#xA; referents->size() = 1 and&#xA; referents->forAll(referent |&#xA; referent.isClassifier() and&#xA; parameter.parents()->forAll(c | referent.conformsTo(c))&#xA; )"/>
+ </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="&#xA; self.argumentName->collect(argumentName |&#xA; let referents = argumentName.referent in&#xA; if referents->size() = 1 then referents->asSequence()&#xA; else Sequence(ElementReference){} endif&#xA; )"/>
+ </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"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ConditionalLogicalExpression" eSuperTypes="#//BinaryExpression">
+ <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="&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/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/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="&#xA; if self.operand2 = element then self.operand1.assignmentAfter&#xA; else self.assignmentBefore&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let namesBefore = self.operand2.assignmentBefore.name->asSet() in&#xA; self.updateAll(&#xA; self.operand2.assignmentBefore,&#xA; self.operand2.newAssignments()->&#xA; reject(namesBefore->excludes(name)).&#xA; copy(self, null)->asSet()&#xA; )"/>
+ </eAnnotations>
+ </eOperations>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="LinkOperationExpression" eSuperTypes="#//InvocationExpression">
+ <eOperations name="referent" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let referents = self.associationName.referent->select(isAssociation()) in&#xA; if referents->size() &lt;> 1 then null&#xA; else referents->any(true)&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="self.referent &lt;> 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="linkOperationExpressionArgumentCompatibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.tuple.size() &lt;= self.parameterCount() and&#xA; 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" lowerBound="1" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.isClear then&#xA; OrderedSet(ElementReference){&#xA; FormalParameter{&#xA; direction = 'in',&#xA; typePart = TypedElementDefinition{&#xA; lowerBound = '1',&#xA; upperBound = '1'&#xA; }&#xA; }.toReference()&#xA; }&#xA; else&#xA; let referent = self.referent in&#xA; if referent = null then OrderedSet(ElementReference){}&#xA; else&#xA; self.referent.properties()->collect(property | &#xA; -- NOTE: Arguments for a link operation have multiplicity 1..1.&#xA; parameterFromPropertyWithMultiplicity(property, '1', '1')&#xA; )&#xA; endif&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="operation" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <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/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/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"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="EqualityExpression" eSuperTypes="#//BinaryExpression">
+ <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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/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/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.operator = '!='"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="AssignmentExpression" eSuperTypes="#//Expression">
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.isSimple then self.rightHandSide.type&#xA; else self.leftHandSide.type&#xA; 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="&#xA; if self.isSimple then self.rightHandSide.lower&#xA; else self.leftHandSide.lower&#xA; 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="&#xA; if element = self.leftHandSide then self.rightHandSide.assignmentAfter&#xA; else self.assignmentBefore&#xA; endif"/>
+ </eAnnotations>
+ <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
+ </eOperations>
+ <eOperations name="assignmentExpressionIsSimpleDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; (self.isSimple and not self.isDefinition) implies&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; (self.isSimple and not self.isDefinition) implies&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; not self.isSimple implies&#xA; let lhsType = self.leftHandSide.type in&#xA; let rhsType = self.rightHandSide.type in&#xA; lhsType &lt;> null and rhsType &lt;> null and&#xA; (self.isArithmetic and &#xA; self.isIntegerType(lhsType) and self.isIntegerType(rhsType) or&#xA; self.isLogical and&#xA; (self.isBooleanType(lhsType) and self.isBooleanType(rhsType) or&#xA; self.isBitStringType(lhsType) and &#xA; (self.isBitStringType(rhsType) or self.isIntegerType(rhsType))&#xA; ) or&#xA; self.isShift and&#xA; self.isBitStringType(lhsType) and self.isIntegerType(rhsType) or&#xA; self.isConcatenation and&#xA; self.isStringType(lhsType) and self.isStringType(rhsType)&#xA; )"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="(not self.isSimple) implies &#xA; (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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let feature = self.leftHandSide.feature() in&#xA; feature &lt;> null implies&#xA; let type = feature.expression.type in&#xA; (type &lt;> null and type.isDataType()) implies&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let assignment = self.assignment in&#xA; if assignment = null then self.leftHandSide.assignmentAfter&#xA; else assignment.update(self.leftHandSide.assignmentAfter)&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="leftHandSide" lowerBound="1"
+ eType="#//LeftHandSide" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="rightHandSide" lowerBound="1"
+ eType="#//Expression" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="assignment" eType="#//AssignedSource"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let name = self.leftHandSide.assignedName() in&#xA; if name = null then null&#xA; else if self.isDefinition then&#xA; AssignedSource{&#xA; name = name,&#xA; source = self,&#xA; type = self.rightHandSide.type,&#xA; lower = 0,&#xA; upper = if self.rightHandSide.upper = 1 then 1 else -1 endif&#xA; }&#xA; else&#xA; let assignments = self.assignmentBefore->select(a | a.name = name) in&#xA; if assignments->isEmpty() then null&#xA; else&#xA; let oldAssignment = assignments->any(true) in&#xA; AssignedSource{&#xA; name = name,&#xA; source = self,&#xA; type = oldAssignment.type,&#xA; lower = oldAssignment.lower,&#xA; upper = oldAssignment.upper&#xA; }&#xA; endif&#xA; 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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let feature = self.leftHandSide.feature() in&#xA; if feature = null then null&#xA; else&#xA; let referents = feature.referent in&#xA; if referents->isEmpty() then null&#xA; else referents->any(true)&#xA; endif&#xA; 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/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.leftHandSide.index() &lt;> 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/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{'&amp;=', '|=', '^='}->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{'&lt;&lt;=', '>>=', '>>>='}->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/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.isSimple and not self.isIndexed and &#xA; self.leftHandSide.referent = null and self.leftHandSide.localName() &lt;> 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/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/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"/>
+ <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/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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let lhsType = self.leftHandSide.type in&#xA; let rhsType = self.rightHandSide.type in&#xA; lhsType &lt;> null and rhsType &lt;> null and&#xA; not self.isCollectionClass(lhsType) and&#xA; self.isCollectionClass(rhsType) and &#xA; 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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let lhsType = self.leftHandSide.type in&#xA; let rhsType = self.type in -- Note: This works for both simple and compound assignments.assignment.&#xA; rhsType &lt;> null and lhsType &lt;> null and&#xA; (self.isIntegerType(rhsType) or&#xA; self.isCollectionConversion and self.isIntegerCollectionClass(rhsType)&#xA; )"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="LogicalExpression" eSuperTypes="#//BinaryExpression">
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.isBitWise then self.bitStringType()&#xA; else self.booleanType()&#xA; 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="&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let type1 = self.operand1.type in&#xA; let type2 = self.operand2.type in&#xA; self.isBooleanType(type1) and self.isBooleanType(type2) or&#xA; (self.isIntegerType(type1) or self.isBitStringType(type1)) and&#xA; (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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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://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/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://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">
+ <eOperations name="collectionType" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let expression = self.enclosingExpression() in&#xA; if expression = null or &#xA; not expression.oclIsKindOf(SequenceConstructionExpression) then &#xA; null&#xA; else&#xA; let sequenceExpression = &#xA; expression.oclAsType(SequenceConstructionExpression) &#xA; in&#xA; if sequenceExpression.hasMultiplicity then null&#xA; else sequenceExpression.type&#xA; endif&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.typeName &lt;> null then&#xA; let referents = self.typeName.referent->select(isClassifier()) in&#xA; if referents->size() &lt;> 1 then null&#xA; else referents->any(true)&#xA; endif&#xA; else&#xA; let collectionType = self.collectionType() in&#xA; if collectionType = null then null&#xA; else collectionType.collectionArgument()&#xA; endif&#xA; 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="&#xA; if not self.hasMultiplicity then 1&#xA; else if self.elements = null then 0 &#xA; else self.elements.upper&#xA; 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="&#xA; if not self.hasMultiplicity then 1&#xA; else if self.elements = null then 0 &#xA; else self.elements.lower&#xA; endif endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="sequenceConstructionExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; (self.typeName &lt;> null implies self.type &lt;> null) and&#xA; (not self.hasMultiplicity implies &#xA; self.type &lt;> null and self.isCollectionClass(self.type)&#xA; )"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.elements &lt;> null implies &#xA; let type =&#xA; if self.hasMultiplicity or self.type = null then self.type&#xA; else self.type.collectionArgument() &#xA; endif&#xA; in&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.elements = null then self.assignmentBefore&#xA; else self.elements.assignmentsAfter()&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="elements" eType="#//SequenceElements"
+ containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="hasMultiplicity" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" eType="#//QualifiedName"
+ containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAny" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SequenceElements" abstract="true" eSuperTypes="#//SyntaxElement">
+ <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/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/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.lower()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="CollectOrIterateExpression" eSuperTypes="#//SequenceExpansionExpression">
+ <eOperations name="collectOrIterateExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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">
+ <eOperations name="isUniqueExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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">
+ <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="&#xA; if self.operand1.lower = 0 or self.operand2.lower = 0 then 0&#xA; else 1&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.isIntegerType(self.operand1.type) and self.isIntegerType(self.operand2.type) or&#xA; 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://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">
+ <eOperations name="referent" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let referents = self.feature().referent->select(isProperty()) in&#xA; if referents->size() &lt;> 1 then null&#xA; else referents->any(true)&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="feature" eType="#//FeatureReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.expression.oclIsKindOf(PropertyAccessExpression) then&#xA; self.expression.oclAsType(PropertyAccessExpression).featureReference&#xA; else if self.expression.oclIsKindOf(SequenceAccessExpression) then&#xA; let primary = self.expression.oclAsType(SequenceAccessExpression).primary in&#xA; if primary.oclIsKindOf(PropertyAccessExpression) then&#xA; primary.oclAsType(PropertyAccessExpression).featureReference&#xA; else&#xA; null&#xA; endif&#xA; else&#xA; null&#xA; endif endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="index" eType="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if not self.expression.oclIsKindOf(SequenceAccessExpression) then null&#xA; else self.expression.oclAsType(SequenceAccessExpression).index&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let expression = self.feature().expression in&#xA; let type = expression.type in&#xA; expression.upper = 1 and&#xA; -- Note: The following condition ensures that a data value update will&#xA; -- be to an existing assigned name.&#xA; (type &lt;> 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="self.referent &lt;> 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.index() &lt;> null implies&#xA; let referent = self.referent in&#xA; referent &lt;> 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"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ConditionalTestExpression" eSuperTypes="#//Expression">
+ <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="&#xA; if self.operand2.upper = -1 or self.operand2.upper = -1 then -1&#xA; else self.operand2.upper.max(self.operand3.upper)&#xA; 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="&#xA; if self.operand2 = element or self.operand3 = element then&#xA; self.operand1.assignmentAfter&#xA; else&#xA; self.assignmentBefore&#xA; endif"/>
+ </eAnnotations>
+ <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
+ </eOperations>
+ <eOperations name="conditionalTestExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.operand1.assignmentAfter.name->includesAll(&#xA; self.operand2.assignmentAfter.name->asSet()->&#xA; symmetricDifference(self.operand3.assignmentAfter.name->asSet())&#xA; )"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let assignments1 = self.operand1.assignmentAfter in&#xA; let assignments2 = self.operand2.newAssignments() in&#xA; let assignments3 = self.operand3.newAssignments() in&#xA; let reassignments = assignments1->&#xA; select(&#xA; assignments2.name->includes(name) or &#xA; assignments3.name->includes(name)&#xA; ).copy(self, null)->asSet() in&#xA; let newAssignments = assignments2->&#xA; select(&#xA; assignments1.name->excludes(name) and&#xA; assignments3.name->includes(name)&#xA; )->collect(assignment |&#xA; let otherAssignment = assignments3->any(name = assignment.name) in&#xA; AssignedSource{&#xA; name = assignment.name,&#xA; source = self,&#xA; type = self.commonAncestor(Set{assignment.type, otherAssignment.type}),&#xA; lower = assignment.lower.min(otherAssignment.lower),&#xA; upper = &#xA; if assignment.upper = -1 or otherAssignment.upper = -1 then -1&#xA; else assignment.upper.max(otherAssignment.upper)&#xA; endif&#xA; }&#xA; )->asSet()&#xA; in&#xA; self.updateAll(assignments1, reassignments->union(newAssignments))"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="operand1" lowerBound="1"
+ eType="#//Expression" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="operand2" lowerBound="1"
+ eType="#//Expression" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="operand3" lowerBound="1"
+ eType="#//Expression" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="InstanceCreationExpression" eSuperTypes="#//InvocationExpression">
+ <eOperations name="referent" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.constructor = null then null&#xA; else&#xA; let referents = self.constructor.referent in&#xA; let classReferents = referents->select(isClass()) in&#xA; let dataTypeReferents = referents->select(isDataType()) in&#xA; if dataTypeReferents->size() = 1 and classReferents->isEmpty() then&#xA; dataTypeReferents->any(true)&#xA; else if dataTypeReferents->notEmpty() then&#xA; null&#xA; else&#xA; -- TODO: Handle operation overloading.&#xA; let operationReferents =&#xA; if classReferents->size() &lt;> 1 then&#xA; referents->select(isOperation())&#xA; else &#xA; let name = self.constructor.unqualifiedName.toName() in&#xA; classReferents->any(true).ownedMembers()->&#xA; select(name() = name and isOperation())&#xA; endif&#xA; in&#xA; if operationReferents->size() = 1 and&#xA; operationReferents->forAll(isConstructor()) then&#xA; let operationReferent = operationReferents->any(true) in&#xA; let classReferent = operationReferent.namespace() in&#xA; if not classReferent.isAbstractClassifier() then&#xA; operationReferent&#xA; else&#xA; -- Check for an &quot;Impl&quot; package.&#xA; let namespaceReferent = classReferent.namespace() in&#xA; if namespaceReferent = null then null&#xA; else&#xA; let template = classReferent.template() in&#xA; let className = classReferent.name() in&#xA; let operationName = operationReferent.name() in&#xA; let implClassReferent = &#xA; namespaceReferent.ownedMembers()->&#xA; select(name() = 'Impl' and isPackage()).&#xA; ownedMembers()->&#xA; select(name() = className and isClass())&#xA; in&#xA; let boundClassReferent =&#xA; if classReferent.template() = null or&#xA; implClassReferent->exists(not isTemplate()) then &#xA; implClassReferent&#xA; else &#xA; -- TODO: Check that template parameters match.&#xA; implClassReferent.bind(&#xA; classReferent.templateActuals()->asSequence()&#xA; )&#xA; endif&#xA; in&#xA; let implOperationReferent =&#xA; boundClassReferent.ownedMembers()->&#xA; select(name() = operationName and isOperation())&#xA; in&#xA; if implOperationReferent->size() &lt;> 1 then null&#xA; else implOperationReferent->any(true)&#xA; endif&#xA; endif&#xA; endif&#xA; else if classReferents->size() = 1 then&#xA; classReferents->any(true)&#xA; else&#xA; null&#xA; endif endif&#xA; endif endif&#xA; 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="&#xA; let referent = self.referent in&#xA; if referent &lt;> null and referent.isClassifier() then referent&#xA; else self.InvocationExpression_type()&#xA; 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="&#xA; let referent = self.referent in&#xA; if referent &lt;> null and referent.isClassifier() then 1&#xA; else self.InvocationExpression_lower()&#xA; 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="&#xA; let referent = self.referent in&#xA; if referent &lt;> null and referent.isClassifier() then 1&#xA; else self.InvocationExpression_upper()&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="instanceCreationExpressionIsObjectCreationDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let referent = self.referent in&#xA; referent &lt;> null and&#xA; (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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.isConstructorless implies &#xA; self.tuple.size() = 0 and &#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; -- TODO: Once overloading resolution is implemented, change this to only&#xA; -- be for data value creation.&#xA; self.tuple.size() &lt;= self.parameterCount() and&#xA; self.tuple.input->forAll(input | self.parameterIsAssignableFrom(input)) and&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let referent = self.referent in&#xA; let classReferent =&#xA; if referent &lt;> null and referent.isOperation() then &#xA; referent.namespace()&#xA; else&#xA; referent&#xA; endif&#xA; in&#xA; referent &lt;> 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.isConstructorless then Set(ElementReference){}&#xA; else self.InvocationExpression_parameterElements()&#xA; 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://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="&#xA; let referent = self.referent in&#xA; referent &lt;> 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://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="&#xA; let referent = self.referent in&#xA; referent = null or not referent.isDataType()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="constructor" eType="#//QualifiedName"
+ containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="PropertyAccessExpression" eSuperTypes="#//Expression">
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let feature = self.feature in&#xA; if feature = null then null&#xA; else feature.type()&#xA; 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="&#xA; let feature = self.feature in&#xA; if feature = null then 0&#xA; else if feature.upper() = -1 or &#xA; self.featureReference.expression.upper = -1 then -1&#xA; else feature.upper() * self.featureReference.expression.upper&#xA; 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="&#xA; let feature = self.feature in&#xA; if feature = null then 0&#xA; else feature.lower() * self.featureReference.expression.lower&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="propertyAccessExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="self.feature &lt;> 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="feature" eType="#//ElementReference"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let referents = self.featureReference.referent->select(isProperty()) in&#xA; if referents->size() &lt;> 1 then null&#xA; else referents->any(true)&#xA; endif"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="NameExpression" eSuperTypes="#//Expression">
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let assignment = self.assignment in&#xA; if assignment &lt;> null then assignment.type&#xA; else&#xA; let enumerationLiteral = self.enumerationLiteral in&#xA; if enumerationLiteral &lt;> null then enumerationLiteral.type()&#xA; else&#xA; let propertyAccess = self.propertyAccess in&#xA; if propertyAccess &lt;> null then propertyAccess.type&#xA; else null&#xA; endif&#xA; endif&#xA; 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="&#xA; let assignment = self.assignment in&#xA; if assignment &lt;> null then assignment.upper&#xA; else&#xA; let enumerationLiteral = self.enumerationLiteral in&#xA; if enumerationLiteral &lt;> null then 1&#xA; else&#xA; let propertyAccess = self.propertyAccess in&#xA; if propertyAccess &lt;> null then propertyAccess.upper&#xA; else 0&#xA; endif&#xA; endif&#xA; 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="&#xA; let assignment = self.assignment in&#xA; if assignment &lt;> null then assignment.lower&#xA; else&#xA; let enumerationLiteral = self.enumerationLiteral in&#xA; if enumerationLiteral &lt;> null then 1&#xA; else&#xA; let propertyAccess = self.propertyAccess in&#xA; if propertyAccess &lt;> null then propertyAccess.lower&#xA; else 0&#xA; endif&#xA; endif&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="parameterReferent" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let referents = self.name.referent->select(isParameter()) in&#xA; if referents->size() &lt;> 1 then null&#xA; else referents->any(true)&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="assignmentFor" eType="#//AssignedSource">
+ <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="&#xA; let assignments = self.assignmentBefore->select(name = localName) in&#xA; if assignments->isEmpty() or &#xA; assignments->forAll(isParallelLocalName) and not self.isAddTarget()&#xA; then &#xA; null&#xA; else &#xA; assignments->any(true)&#xA; endif"/>
+ </eAnnotations>
+ <eParameters name="localName" 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let expression = self.enclosingExpression() in&#xA; if expression = null then false&#xA; else expression.isAddTarget(self)&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="nameExpressionAssignmentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/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="&#xA; self.propertyAccess &lt;> null or &#xA; self.assignment &lt;> null and self.assignment.source &lt;> null or &#xA; self.enumerationLiteral &lt;> null or&#xA; -- NOTE: The following allows the name of a name expression that is an&#xA; -- an argument of an out parameter to be unassigned.&#xA; let owner = &#xA; if self.owner().oclIsKindOf(NamedExpression) then self.owner().owner()&#xA; else self.owner()&#xA; endif&#xA; in&#xA; owner.oclIsKindOf(_'Tuple') and&#xA; owner.oclAsType(_'Tuple').output->exists(&#xA; expression = self and&#xA; owner.oclAsType(_'Tuple').invocation.parameterNamed(name).direction() = 'out'&#xA; )"/>
+ </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="&#xA; let propertyAccess = self.propertyAccess in&#xA; if propertyAccess &lt;> null then propertyAccess.assignmentAfter&#xA; else self.Expression_updateAssignments()&#xA; 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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; if self.name.isFeatureReference then null&#xA; else&#xA; let referents = self.name.referent->select(isEnumerationLiteral()) in&#xA; if referents->size() &lt;> 1 then null&#xA; else referents->any(true)&#xA; endif&#xA; 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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; if self.name.isFeatureReference then null&#xA; else&#xA; let localName = self.name.unqualifiedName.toName() in&#xA; if name.qualification = null then&#xA; self.assignmentFor(localName)&#xA; else&#xA; let parameterReferent = self.parameterReferent() in&#xA; if parameterReferent &lt;> null and &#xA; parameterReferent.namespace().equals(self.currentScope()) then&#xA; self.assignmentFor(localName)&#xA; else&#xA; null&#xA; endif&#xA; endif&#xA; 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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let disambiguation = self.name.disambiguation in&#xA; if disambiguation = null then null&#xA; else&#xA; PropertyAccessExpression{&#xA; featureReference = disambiguation,&#xA; owner = self&#xA; } &#xA; endif"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="name" lowerBound="1" eType="#//QualifiedName"
+ containment="true"/>
+ </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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let operandType = self.operand.type in&#xA; (self.isBitStringType(operandType) or self.isIntegerType(operandType)) and&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="FeatureInvocationExpression"/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="FeatureInvocationExpression"/>
+ </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">
+ <eOperations name="feature" eType="#//FeatureReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.target &lt;> null then self.target&#xA; else&#xA; let outerScope = self.currentScope().namespace() in&#xA; if outerScope = null or not outerScope.isClass() then null&#xA; else&#xA; FeatureReference{&#xA; expression = ThisExpression{},&#xA; nameBinding = NameBinding{name = outerScope.name()},&#xA; owner = self&#xA; }&#xA; endif&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="referent" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let feature = self.feature in&#xA; if feature = null then null&#xA; else feature.behavioralFeatureReferent(self)&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="featureInvocationExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.isImplicit or&#xA; -- TODO: Remove this check once overloading resolution is implemented.&#xA; self.tuple.size() &lt;= self.parameterCount() and&#xA; self.tuple.input()->forAll(input | self.parameterIsAssignableFrom(input)) and&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.target = null implies&#xA; let referent = self.referent in&#xA; referent &lt;> 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"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="BehaviorInvocationExpression" eSuperTypes="#//InvocationExpression">
+ <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="&#xA; if self.feature &lt;> null then false&#xA; else&#xA; let collectionFunctionAdd = self.collectionFunctionAdd() in&#xA; if collectionFunctionAdd = null then false&#xA; else&#xA; let parameters = collectionFunctionAdd.parameters() in&#xA; if parameters->isEmpty() then false&#xA; else&#xA; collectionFunctionAdd.containedIn(self.target.referent->asBag()) and&#xA; self.tuple.outputFor(parameters)->exists(&#xA; name = parameters->at(1).name() and&#xA; expression = targetExpression&#xA; )&#xA; endif&#xA; endif&#xA; 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="&#xA; let feature = self.feature() in&#xA; if feature &lt;> null then feature.behavioralFeatureReferent(self)&#xA; else&#xA; let referents = self.target.referent in&#xA; if referents->select(isBehavior())->size() = 1 then&#xA; let referent = referents->any(isBehavior()) in&#xA; if referent.isTemplate() then &#xA; self.bindTemplateImplicitArguments(referent, null)&#xA; else referent&#xA; endif&#xA; else if referents->select(isAssociationEnd())->size() = 1 then&#xA; referents->any(isAssociationEnd())&#xA; else&#xA; null&#xA; endif endif&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.isImplicit or &#xA; let referent = self.referent in&#xA; referent &lt;> null and &#xA; -- NOTE: This check prevents the invocation from disambiguating to an &#xA; -- illegal constructor invocation.&#xA; not 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>
+ <eOperations name="behaviorInvocationExpressionArgumentCompatibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; -- TODO: Handle overloading for feature invocations.&#xA; self.tuple.size() &lt;= self.parameterCount() and&#xA; self.tuple.input->forAll(input | self.parameterIsAssignableFrom(input)) and&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; 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"/>
+ </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="&#xA; if self.operand1.lower = 0 or self.operand2.lower = 0 then 0&#xA; else 1&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let type1 = self.operand1.type in&#xA; let type2 = self.operand2.type in&#xA; (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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.isIntegerType(self.operand1.type)"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="UnboundedLiteralExpression" eSuperTypes="#//LiteralExpression">
+ <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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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">
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let context = self.currentScope() in&#xA; if context = null then &#xA; null&#xA; else if context.isOperation() or context.isMethod() then&#xA; context.namespace()&#xA; else if context.isBehavior() then&#xA; let activeClass = context.activeClass() in&#xA; if activeClass = null then context else activeClass endif&#xA; else if context.isClass() then&#xA; context&#xA; else&#xA; null&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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">
+ <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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="self.referent &lt;> 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/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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let referents = self.typeName.referent->select(isClassifier()) in&#xA; if referents->size() &lt;> 1 then null&#xA; else referents->any(true)&#xA; 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/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"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SuperInvocationExpression" eSuperTypes="#//InvocationExpression">
+ <eOperations name="referent" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let context = self.currentScope().namespace() in&#xA; if context = null or not context.isClass() then&#xA; null&#xA; else&#xA; let superclasses =&#xA; if target = null or target.qualification = null then&#xA; context.parents()&#xA; else&#xA; target.qualification.referent->select(isClass())&#xA; endif&#xA; in&#xA; if (target = null or target.qualification &lt;> null) and&#xA; superclasses->size() &lt;> 1 then null&#xA; else&#xA; let name =&#xA; if target = null then superclasses->any(true).name()&#xA; else target.unqualifiedName.toName()&#xA; endif&#xA; in&#xA; let referents = superclasses.base().members()->&#xA; select(isOperation() and name() = name) &#xA; in&#xA; -- TODO: Handle overloading resolution.&#xA; if referents->size() &lt;> 1 then&#xA; null&#xA; else&#xA; referents->any(true)&#xA; endif&#xA; endif&#xA; 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="&#xA; let currentScope = self.currentScope() in&#xA; if currentScope = null then null&#xA; else if currentScope.isClassifier() and not currentScope.isMethod() and&#xA; not currentScope.isActiveBehavior() then&#xA; currentScope&#xA; else if currentScope.isActiveBehavior() then&#xA; currentScope.activeClass()&#xA; else&#xA; let outerScope = currentScope.namespace() in&#xA; if outerScope = null or not outerScope.isClassifier() then null&#xA; else outerScope&#xA; endif&#xA; endif endif endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="superInvocationExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.target = null or&#xA; let qualification = self.target.qualification in&#xA; qualification &lt;> null implies&#xA; let superclass = qualification.referent->select(isClass()) in&#xA; let context = self.context() in&#xA; superclass->size() = 1 and context &lt;> null and&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.target = null implies&#xA; let referent = self.referent in&#xA; let context = self.context() in&#xA; referent &lt;> null and referent.isConstructor() and&#xA; context &lt;> 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let referent = self.referent in&#xA; let context = self.context() in&#xA; referent &lt;> null and referent.isConstructor() and context &lt;> null implies&#xA; let operation = self.currentScope().specification() in&#xA; operation.isConstructor() and&#xA; let statement = self.enclosingStatement() in&#xA; statement &lt;> null and statement.oclIsKindOf(ExpressionStatement) and&#xA; let annotatedStatement = statement.owner() in&#xA; let owner = annotatedStatement.owner() in&#xA; owner &lt;> null implies owner.oclIsKindOf(Block) and&#xA; let block = owner.oclAsType(Block) in&#xA; block.enclosingStatement() = null and&#xA; let classReference = referent.namespace() in&#xA; let i = block.statement->indexOf(annotatedStatement) in&#xA; i = 1 or&#xA; block.statement->subOrderedSet(1, i-1).statement->forAll(&#xA; oclIsKindOf(ExpressionStatement) and&#xA; let expression = oclAsType(ExpressionStatement).expression in&#xA; expression.oclIsKindOf(SuperInvocationExpression) and&#xA; -- NOTE: This checks to ensure that no previous&#xA; -- super-constructor invocation is for the same&#xA; -- superclass&#xA; not expression.oclAsType(SuperInvocationExpression).&#xA; referent.namespace().equals(classReference)&#xA; )"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let referent = self.referent in&#xA; referent &lt;> null and referent.isDestructor() implies&#xA; let operation = self.currentScope() in&#xA; operation &lt;> 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.referent &lt;> null and&#xA; -- TODO: Remove this check once overloading resolution is implemented.&#xA; self.tuple.size() &lt;= self.parameterCount() and&#xA; self.tuple.input->forAll(input | self.parameterIsAssignableFrom(input)) and&#xA; 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"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="IncrementOrDecrementExpression" eSuperTypes="#//Expression">
+ <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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let assignment = self.assignment in&#xA; if assignment = null then self.operand.assignmentAfter&#xA; else assignment.update(self.operand.assignmentAfter)&#xA; 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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; if self.isFeature then null&#xA; else&#xA; let assignments = &#xA; self.assignmentBefore->select(name = self.operand.localName()) in&#xA; if assignments->isEmpty() then null&#xA; else assignments->any(true).copy(self, null)&#xA; endif&#xA; endif"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="operand" lowerBound="1"
+ eType="#//LeftHandSide" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression"
+ volatile="true" transient="true" derived="true">
+ <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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; if not self.isFeature then null&#xA; else self.operand.referent()&#xA; 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"/>
+ <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/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.operand.feature() &lt;> 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/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.operand.index() &lt;> 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/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"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="BooleanLiteralExpression" eSuperTypes="#//LiteralExpression">
+ <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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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://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">
+ <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="&#xA; parameters->select(&#xA; let direction = direction() in&#xA; direction = 'in' or direction = 'inout' &#xA; )->collect(parameter |&#xA; let parameterName = parameter.name() in&#xA; let arguments = self.namedExpression->select(actualName() = parameterName) in&#xA; if arguments->isEmpty() then&#xA; InputNamedExpression{&#xA; name = parameterName,&#xA; expression = SequenceConstructionExpression{&#xA; hasMultiplicity = true&#xA; },&#xA; owner = self&#xA; }&#xA; else&#xA; let argument : NamedExpression = arguments->any(true) in&#xA; InputNamedExpression{&#xA; name = parameterName,&#xA; expression = argument.expression,&#xA; index = argument.index&#xA; }&#xA; endif&#xA; )->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="&#xA; parameters->select(parameter |&#xA; let direction = parameter.direction() in&#xA; -- NOTE: This allows missing arguments for out parameters.&#xA; direction = 'out' and &#xA; self.namedExpression->exists(actualName() = parameter.name()) or&#xA; direction = 'inout' &#xA; )->collect(parameter |&#xA; let parameterName = parameter.name() in&#xA; let arguments = self.namedExpression->select(actualName() = parameterName) in&#xA; if arguments->isEmpty() then&#xA; -- NOTE: This will cause an error for a missing argument for&#xA; -- an inout parameter.&#xA; OutputNamedExpression{&#xA; name = parameterName,&#xA; expression = SequenceConstructionExpression{&#xA; hasMultiplicity = true&#xA; },&#xA; owner = self&#xA; }&#xA; else&#xA; let argument : NamedExpression = arguments->any(true) in&#xA; OutputNamedExpression{&#xA; name = parameterName,&#xA; index = argument.index,&#xA; expression = argument.expression,&#xA; owner = self&#xA; }&#xA; endif&#xA; )->asSet()"/>
+ </eAnnotations>
+ <eParameters name="parameters" upperBound="-1" eType="#//ElementReference"/>
+ </eOperations>
+ <eOperations name="namedTupleArgumentNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let names = self.invocation.parameter.name() in&#xA; self.namedExpression->forAll(names->includes(actualName())) and&#xA; 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"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="NaturalLiteralExpression" eSuperTypes="#//LiteralExpression">
+ <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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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://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">
+ <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="&#xA; let rangeLowerType = self.rangeLower.type in&#xA; let rangeUpperType = self.rangeUpper.type in&#xA; rangeLowerType &lt;> null and self.isIntegerType(rangeLowerType) and&#xA; rangeUpperType &lt;> 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="&#xA; self.updateAll(&#xA; self.updateAll(&#xA; self.assignmentsBefore(),&#xA; self.rangeLower.assignmentAfter&#xA; ),&#xA; self.rangeUpper.assignmentAfter&#xA; )"/>
+ </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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.rangeLower.newAssignments().name->&#xA; 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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="rangeUpper" lowerBound="1"
+ eType="#//Expression" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="NameLeftHandSide" eSuperTypes="#//LeftHandSide">
+ <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="&#xA; let feature = self.feature() in&#xA; if feature &lt;> null then&#xA; let referents = feature.referent->select(isProperty()) in&#xA; if referents->size() &lt;> 1 then null&#xA; else referents->any(true)&#xA; endif&#xA; else&#xA; let oldAssignment = self.oldAssignment() in&#xA; if oldAssignment = null then null&#xA; else&#xA; let parameterReferent = self.parameterReferent() in&#xA; if parameterReferent &lt;> null then parameterReferent&#xA; else oldAssignment.source.toReference()&#xA; endif &#xA; endif&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="parameterReferent" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let referents = self.target().referent->select(isParameter()) in&#xA; if referents->size() &lt;> 1 then null&#xA; else referents->any(true)&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let oldAssignment = self.oldAssignment() in&#xA; if oldAssignment = null then self.LeftHandSide_type()&#xA; else oldAssignment.type&#xA; 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="&#xA; let oldAssignment = self.oldAssignment() in&#xA; if self.index &lt;> null or oldAssignment = null then &#xA; self.LeftHandSide_upper()&#xA; else oldAssignment.upper&#xA; 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="&#xA; let oldAssignment = self.oldAssignment() in&#xA; if self.index &lt;> null or oldAssignment = null then &#xA; self.LeftHandSide_lower()&#xA; else oldAssignment.lower&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="oldAssignment" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let referents = self.assignmentBefore->select(name = self.localName()) in&#xA; if referents->isEmpty() then null&#xA; else referents->any(true)&#xA; 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="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="&#xA; if self.feature() &lt;> null then null&#xA; else self.target().unqualifiedName.toName()&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="nameLeftHandSideAssignmentAfterDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let referent = self.referent in&#xA; if referent = null then true&#xA; else if referent.isParameter() then&#xA; referent.direction() &lt;> 'in'&#xA; else if referent.isProperty() then&#xA; let expression = self.feature().expression in&#xA; -- This condition ensures that there will be an assigned name&#xA; -- for an assignment to an attribute of a data type.&#xA; expression.type.isDataType() implies self.isDataValueUpdate()&#xA; else&#xA; not (referent.isLoopVariable() or&#xA; referent.isAnnotation() or&#xA; referent.isSequenceExpansionExpression()&#xA; )&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="self.index &lt;> null implies &#xA; (self.feature() &lt;> null or self.oldAssignment() &lt;> 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.target().qualification &lt;> null implies&#xA; let referent = self.referent in&#xA; referent &lt;> null and referent.isParameter() or&#xA; let feature = self.feature() in&#xA; feature &lt;> null and &#xA; -- TODO: This should be a separate constraint.&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.index() &lt;> null implies&#xA; let referent = self.referent in&#xA; referent &lt;> null and referent.isFeature() implies&#xA; 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/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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="index" eType="#//Expression"
+ containment="true"/>
+ </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="&#xA; let expression = self.primary() in&#xA; if expression.oclIsKindOf(NameExpression) then&#xA; expression.oclAsType(NameExpression).name&#xA; else&#xA; null&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="index" eType="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.expression.oclIsKindOf(SequenceAccessExpression) then&#xA; self.expression.oclAsType(SequenceAccessExpression).index&#xA; else&#xA; null&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="feature" eType="#//FeatureReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let primary = self.primary() in&#xA; if expression.oclIsKindOf(NameExpression) then&#xA; expression.oclAsType(NameExpression).name.disambiguation&#xA; else if expression.oclIsKindOf(PropertyAccessExpression) then&#xA; expression.oclAsType(PropertyAccessExpression).featureReference&#xA; else&#xA; null&#xA; 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="&#xA; if self.expression.oclIsKindOf(SequenceAccessExpression) then&#xA; self.expression.oclAsType(SequenceAccessExpression).primary&#xA; else&#xA; expression&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
+ eType="#//Expression"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SequenceReductionExpression" eSuperTypes="#//Expression">
+ <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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let referent = self.referent in&#xA; referent &lt;> 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; referent &lt;> null implies&#xA; let parameters = referent.parameters() in&#xA; let returnParameter = referent.returnParameter() in&#xA; let type = self.type in&#xA; parameters->size() = 2 and returnParameter &lt;> null and&#xA; parameters->forAll(direction() = 'in') and&#xA; parameters->including(returnParameter)->forAll(&#xA; lower() = 1 and upper() = 1 and&#xA; let parameterType = type() in&#xA; parameterType = null and type = null or&#xA; parameterType &lt;> null and parameterType.equals(type) &#xA; )"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let referents = self.behaviorName.referent->select(isBehavior()) in&#xA; if referents->size() &lt;> 1 then null&#xA; else referents->any(true)&#xA; 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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="primary" lowerBound="1"
+ eType="#//ExtentOrExpression" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="behaviorName" lowerBound="1"
+ eType="#//QualifiedName" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SequenceExpressionList" eSuperTypes="#//SequenceElements">
+ <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="&#xA; self.element->forAll(element |&#xA; let elementType = element.type in&#xA; element.upper &lt;= 1 and &#xA; (type = null or elementType &lt;> null and&#xA; (elementType.conformsTo(type) or&#xA; self.isIntegerType(elementType) and self.isBitStringType(type)&#xA; )&#xA; )&#xA; )"/>
+ </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="&#xA; if not self.element->includes(element) or &#xA; self.element->first() = element then&#xA; self.assignmentsBefore()&#xA; else&#xA; let i = self.element->indexOf(element) in&#xA; self.element->at(i-1).assignmentAfter&#xA; 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="&#xA; let lowerBounds = self.element.lower in&#xA; if lowerBounds->includes(-1) then -1&#xA; else lowerBounds->sum()&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="sequenceExpressionListLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="RelationalExpression" eSuperTypes="#//BinaryExpression">
+ <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="&#xA; if self.operand1.lower = 0 or self.operand2.lower = 0 then 0&#xA; else 1&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let type1 = self.operand1.type in&#xA; let type2 = self.operand2.type in&#xA; self.isNaturalType(type1) and self.isNumericType(type2) or&#xA; self.isIntegerType(type1) and self.isIntegerType(type2) or&#xA; 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/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.isUnlimitedNaturalType(self.operand1.type) or self.isUnlimitedNaturalType(self.operand2.type)"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="LocalNameDeclarationStatement" eSuperTypes="#//Statement">
+ <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="&#xA; AssignedSource{&#xA; name = self.actualName(),&#xA; source = self,&#xA; type = self.type,&#xA; lower = 0,&#xA; upper = if self.hasMultiplicity then -1 else 1 endif&#xA; }.update(self.expression.assignmentAfter)"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="localNameDeclarationStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.typeName &lt;> null implies &#xA; self.type &lt;> null and not self.type.isTemplate()&#xA; and AssignableLocalNameDeclaration{localNameDeclaration = self}.&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; not self.expression.assignmentBefore->exists(a | a.name = self.actualName()) and&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="(not self.hasMultiplicity) implies self.expression.upper &lt;=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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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="&#xA; if self.typeName = null then null&#xA; else &#xA; let referent = self.typeName.referent->select(isClassifier()) in&#xA; if referent->size() &lt;> 1 then null&#xA; else self.typeName.referent->any(true)&#xA; endif&#xA; 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://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"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="hasMultiplicity" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" eType="#//QualifiedName"
+ containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//ElementReference"
+ volatile="true" transient="true" derived="true">
+ <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"/>
+ </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">
+ <eOperations name="enclosingLoopStatement" eType="#//Statement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="let enclosingStatement = self.enclosingStatement() in&#xA; if enclosingStatement = null then null&#xA; else enclosingStatement.enclosingLoopStatement()&#xA; 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/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="&#xA; let container = self.oclContainer() in&#xA; if container = null or not container.oclIsKindOf(AnnotatedStatement) then&#xA; Set(Annotation){}&#xA; else&#xA; container.oclAsType(AnnotatedStatement).annotations()->collect(a |&#xA; Annotation{text = a}->asSet()&#xA; )->asSet()&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let assignmentsBefore = self.assignmentBefore in&#xA; self.assignmentAfter->select(isNew(assignmentsBefore))"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="resolve" eType="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let assignment = self.assignmentBefore->select(a | a.name = name) in&#xA; if assignment->isEmpty() then null&#xA; else assignment->any(true).source&#xA; 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/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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let newAssignments : Set(AssignedSource) = blocks->collect(b | &#xA; if b = null then Set(AssignedSource){}&#xA; else b.assignmentAfter->select(isNew(b.assignmentBefore))&#xA; endif&#xA; ) in&#xA; newAssignments.name->asSet()->collect(n | &#xA; self.merge(n, newAssignments->select(name = n))&#xA; )->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="&#xA; AssignedSource{&#xA; name = name,&#xA; source = self,&#xA; type = self.commonAncestor(assignments.type->asSet()),&#xA; lower = assignments.lower->min(),&#xA; upper = &#xA; if assignments.upper->exists(n | n = -1) then -1&#xA; else assignments.upper->max()&#xA; endif&#xA; }"/>
+ </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/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/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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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/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/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/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/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.hasAnnotation('isolated')"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Annotation" eSuperTypes="#//SyntaxElement">
+ <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"/>
+ <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/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/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">
+ <eOperations name="currentScope" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let owner = self.owner() in&#xA; if owner.oclIsKindOf(ClassifierDefinition) then&#xA; owner.oclAsType(ClassifierDefinition).outerScope()&#xA; else if owner.oclIsKindOf(OperationDefinition) then&#xA; owner.oclAsType(OperationDefinition).containingMember().namespace.outerScope()&#xA; else&#xA; self.SyntaxElement_currentScope()&#xA; endif endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="name" ordered="false" lowerBound="1"
+ upperBound="-1" eType="#//QualifiedName" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="NonFinalClause" eSuperTypes="#//SyntaxElement">
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if element = self.body then self.condition.assignmentAfter&#xA; else self.assignmentsBefore()&#xA; 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/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/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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.condition.assignmentBefore.name->includesAll(&#xA; self.condition.assignmentAfter.name&#xA; )"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let type = self.condition.type in&#xA; type &lt;> null and self.isBooleanType(type) and &#xA; condition.upper &lt;= 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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="body" lowerBound="1" eType="#//Block"
+ containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Block" eSuperTypes="#//SyntaxElement">
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if not self.statement->includes(element) then Set(AssignedSource){}&#xA; else&#xA; let i = self.statement->indexOf(element) in&#xA; if i = 1 then self.assignmentBefore&#xA; else &#xA; let statementBefore = self.statement->at(i-1) in&#xA; -- NOTE: Xtext editor will try to semantically validate even&#xA; -- when there are syntax errors.&#xA; if statementBefore.statement = null then&#xA; self.assignmentsBefore(statementBefore)&#xA; else&#xA; statementBefore.statement.assignmentAfter&#xA; endif&#xA; endif&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let assignmentsBefore = self.assignmentBefore in&#xA; self.assignmentAfter->select(isNew(assignmentsBefore))"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="blockAssignmentsBeforeStatements" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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"/>
+ <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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; if self.statement->isEmpty() then self.assignmentBefore&#xA; else self.statement->last().statement.assignmentAfter&#xA; 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/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.assignmentsBefore()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="BlockStatement" eSuperTypes="#//Statement">
+ <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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if not self.isParallel or self.block = null then true&#xA; else self.block.statement.statement.newAssignments()->&#xA; isUnique(name)&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="self.Statement_annotationAllowed(annotation) or &#xA; 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"/>
+ <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://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">
+ <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="&#xA; if self.condition = element then self.body.assignmentAfter&#xA; else self.assignmentBefore&#xA; 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="&#xA; let assignmentsBefore = self.assignmentBefore in&#xA; self.condition.assignmentAfter->&#xA; select(isNew(assignmentsBefore)) ->&#xA; iterate(a, assignments : Set(AssignedSource) = assignmentsBefore |&#xA; AssignedSource{&#xA; name = a.name,&#xA; source = self,&#xA; type = a.type,&#xA; lower = a.lower,&#xA; upper = a.upper&#xA; }.update(assignments)&#xA; )"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="doStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let type = self.condition.type in&#xA; type &lt;> 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="body" lowerBound="1" eType="#//Block"
+ containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ConcurrentClauses" eSuperTypes="#//SyntaxElement">
+ <eOperations name="concurrentClausesAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/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"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="BreakStatement" eSuperTypes="#//Statement">
+ <eOperations name="breakStatementTargetDerivation" eType="ecore: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.target &lt;> 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/Ecore/OCL/Pivot">
+ <details key="body" value="self.target &lt;> 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/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/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.enclosingLoopStatement()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ExpressionStatement" eSuperTypes="#//Statement">
+ <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.expression = null then Set(AssignedSource){}&#xA; else self.expression.assignmentAfter&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="expressionStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ClassifyStatement" eSuperTypes="#//Statement">
+ <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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let type = self.expression.type in&#xA; type &lt;> 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let fromNames = &#xA; if self.fromList = null then Set(QualifiedName){}&#xA; else self.fromList.name->asSet()&#xA; endif&#xA; in&#xA; let toNames =&#xA; if self.toList = null then Set(QualifiedName){}&#xA; else self.toList.name->asSet()&#xA; endif&#xA; in&#xA; fromNames->union(toNames)->forAll(name |&#xA; let referent = name.referent->select(isClass()) in&#xA; referent->size() = 1 and&#xA; referent->forAll(not isTemplate())&#xA; )"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let classes = self.fromClass->union(self.toClass) in&#xA; let expressionType = self.expression.type in&#xA; if expressionType = null then true&#xA; else&#xA; classes->&#xA; forAll(not equals(expressionType) and conformsTo(expressionType)) and&#xA; let parents : Bag(ElementReference) = classes.allParents()->&#xA; select(not equals(expressionType) and conformsTo(expressionType)) &#xA; in&#xA; parents->forAll(countIn(parents) = 1)&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="fromList" eType="#//QualifiedNameList"
+ containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="toList" eType="#//QualifiedNameList"
+ containment="true"/>
+ <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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; if self.fromList = null then Set(ElementReference){}&#xA; else self.fromList.name.referent->asSet()&#xA; 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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; if self.toList = null then Set(ElementReference){}&#xA; else self.toList.name.referent->asSet()&#xA; 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"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ForStatement" eSuperTypes="#//Statement">
+ <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="&#xA; if self.body &lt;> element then&#xA; self.assignmentBefore&#xA; else&#xA; let assignments = &#xA; self.variableDefinition.assignmentAfter->asSet() in&#xA; if not self.isParallel then&#xA; assignments&#xA; else&#xA; let parallelNames = self.parallelNames() in&#xA; self.updateAll(&#xA; assignments,&#xA; assignments->select(a | parallelNames->includes(a.name)).&#xA; copy(self, true)->asSet()&#xA; )&#xA;&#xA; endif&#xA; 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="&#xA; self.variableDefinition->iterate(&#xA; v, assignments : Set(AssignedSource) = self.assignmentBefore |&#xA; self.updateAll(assignments, v.newAssignments())&#xA; )"/>
+ </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="&#xA; let namesBefore = self.assignmentBefore.name in&#xA; let newAssignments =&#xA; self.body.newAssignments()->&#xA; select(a | namesBefore->includes(a.name)).&#xA; copy(self, null)->asSet()&#xA; in&#xA; let variables = self.variableDefinition.variable in&#xA; let assignmentsAfter = &#xA; self.updateAll(&#xA; self.variableDefinition.assignmentAfter->asSet(), &#xA; newAssignments&#xA; )->reject(a | variables->includes(a.name)) in&#xA; let parallelNames = self.parallelNames() in&#xA; let parallelNameAssignments =&#xA; assignmentsAfter->&#xA; select(a | parallelNames->includes(a.name)).&#xA; copy(self, false)->asSet()&#xA; in&#xA; 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="&#xA; if not self.isParallel then&#xA; Set(String){}&#xA; else&#xA; self.annotation()->select(identifier = 'parallel').oclAsType(Annotation).argument->asSet()&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="forStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let assignments = self.variableDefinition.assignmentAfter in&#xA; self.parallelNames()->forAll(n |&#xA; assignments->exists(name = n and lower = 0 and upper = -1)&#xA; )"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if not self.isParallel then true&#xA; else&#xA; self.body.newAssignments().name->&#xA; excludesAll(self.variableDefinition.assignmentAfter.name)&#xA; /*&#xA; * The following is guaranteed by assignmentsAfter():&#xA; let parallelNames = self.parallelNames() in&#xA; self.assignmentAfter->forAll(a |&#xA; assignmentsAfterVariables->exists(name = a.name) and&#xA; if parallelNames->includes(a.name) then a.source = self &#xA; else a.source = assignmentsAfterVariables->any(name = a.name).source &#xA; endif&#xA; )&#xA; */&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="self.Statement_annotationAllowed(annotation) or&#xA; 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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="variableDefinition" lowerBound="1"
+ upperBound="-1" eType="#//LoopVariableDefinition" containment="true"/>
+ <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://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">
+ <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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let assignmentsBefore = self.assignmentBefore in&#xA; self.assignmentAfter->select(isNew(assignmentsBefore))"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="loopVariableDefinitionAssignmentAfterDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.expression2 = null then true&#xA; else&#xA; let type1 = self.expression1.type in&#xA; let type2 = self.expression2.type in&#xA; type1 &lt;> null and self.isIntegerType(type) and self.expression1.upper = 1 and&#xA; type2 &lt;> null and self.isIntegerType(type) and self.expression2.upper = 1 and&#xA; expression1.newAssignments().name->excludesAll(expression2.newAssignments().name)&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.typeName = null then true&#xA; else&#xA; let referents = self.typeName.referent->select(isClassifier()) in&#xA; referents->size() = 1 and not referents->exists(isTemplate())&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.typeIsInferred then true&#xA; else self.expression1.type.conformsTo(self.type)&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.expression1.assignmentAfter.name->excludes(self.actualName()) and&#xA; self.expression2 &lt;> null implies&#xA; 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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="expression1" lowerBound="1"
+ eType="#//Expression" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="expression2" eType="#//Expression"
+ containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" eType="#//QualifiedName"
+ containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="typeIsInferred" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="true"/>
+ <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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let type = self.type in&#xA; type &lt;> null and self.isCollectionClass(type) and&#xA; self.expression1 &lt;> null and self.expression1.upper &lt;= 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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; if self.typeIsInferred then expression1.type&#xA; else if self.typeName = null then null&#xA; else self.typeName.referent->any(isClassifier())&#xA; 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/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/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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let assignmentsAfter =&#xA; if self.expression2 = null then &#xA; self.expression1.assignmentAfter&#xA; else &#xA; self.updateAll(&#xA; self.expression1.assignmentAfter,&#xA; self.expression2.newAssignments()&#xA; )&#xA; endif&#xA; in&#xA; AssignedSource{&#xA; name = self.variable,&#xA; source = self,&#xA; type = &#xA; if self.isCollectionConversion then self.type.collectionArgument() &#xA; else self.type &#xA; endif,&#xA; lower = if self.isFirst then 1 else 0 endif,&#xA; upper = 1&#xA; }.update(assignmentsAfter)"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAny" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="IfStatement" eSuperTypes="#//Statement">
+ <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let blocks =&#xA; if self.finalClause = null then self.nonFinalClauses.clause.body&#xA; else self.nonFinalClauses.clause.body->including(self.finalClause)&#xA; endif&#xA; in&#xA; self.updateAll(&#xA; self.Statement_assignmentsAfter(), &#xA; self.mergeAssignments(blocks->asBag())&#xA; )"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="ifStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="self.Statement_annotationAllowed(annotation) or&#xA; (annotation.identifier = 'assured' or annotation.identifier = 'determinate') and &#xA; 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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="finalClause" eType="#//Block"
+ containment="true"/>
+ <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://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/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.hasAnnotation('determinate')"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SwitchStatement" eSuperTypes="#//Statement">
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.nonDefaultClause->includes(element) or &#xA; self.defaultClause = element then&#xA; self.expression.assignmentAfter&#xA; else&#xA; self.assignmentBefore&#xA; 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="&#xA; let blocks =&#xA; if self.defaultClause = null then&#xA; self.nonDefaultClause.block&#xA; else&#xA; self.nonDefaultClause.block->including(self.defaultClause)&#xA; endif&#xA; in&#xA; self.updateAll(&#xA; self.Statement_assignmentsAfter(),&#xA; self.mergeAssignments(blocks)&#xA; )"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="switchStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.defaultClause = null then&#xA; self.assignmentBefore.name->includesAll(self.assignmentBefore.name)&#xA; else&#xA; let blocks =&#xA; if self.defaultClause = null then&#xA; self.nonDefaultClause.block&#xA; else&#xA; self.nonDefaultClause.block->including(self.defaultClause)&#xA; endif&#xA; in&#xA; let names = blocks.newAssignments().name in&#xA; let n = blocks->size() in&#xA; names->forAll(name | names->count(name) = n)&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="self.expression.upper &lt;= 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="self.Statement_annotationAllowed(annotation) or&#xA; (annotation.identifier = 'assured' or annotation.identifier = 'determinate') and &#xA; annotation.argument->isEmpty()"/>
+ </eAnnotations>
+ <eParameters name="annotation" lowerBound="1" eType="#//Annotation"/>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="nonDefaultClause" ordered="false"
+ lowerBound="1" upperBound="-1" eType="#//SwitchClause" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
+ eType="#//Expression" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="defaultClause" eType="#//Block"
+ containment="true"/>
+ <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/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/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.hasAnnotation('determinate')"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SwitchClause" eSuperTypes="#//SyntaxElement">
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.block &lt;> element then &#xA; self.assignmentsBefore()&#xA; else&#xA; self.updateAll(&#xA; self.assignmentsBefore(),&#xA; self.case.newAssignments()->asSet()&#xA; )&#xA; 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/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/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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/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/Ecore/OCL/Pivot">
+ <details key="body" value="self.case->forAll(upper &lt;= 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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="block" lowerBound="1" eType="#//Block"
+ containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="WhileStatement" eSuperTypes="#//Statement">
+ <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="&#xA; if self.body &lt;> element then self.assignmentBefore&#xA; else self.condition.assignmentAfter &#xA; 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="&#xA; let assignmentsBeforeBlock = self.body.assignmentBefore in&#xA; self.body.newAssignments()->&#xA; reject(a | assignmentsBeforeBlock.name->excludes(a.name))->&#xA; iterate(a, assignments : Set(AssignedSource) = assignmentsBeforeBlock |&#xA; AssignedSource{&#xA; name = a.name,&#xA; source = self,&#xA; type = a.type,&#xA; lower = a.lower,&#xA; upper = a.upper&#xA; }.update(assignments)&#xA; )"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="whileStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let type = self.condition.type in&#xA; type &lt;> 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="condition" lowerBound="1"
+ eType="#//Expression" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ReturnStatement" eSuperTypes="#//Statement">
+ <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.expression = null then self.assignmentBefore&#xA; else self.expression.assignmentAfter&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let behavior = self.behavior in&#xA; if behavior = null then false&#xA; else&#xA; let returnParameter = behavior.returnParameter() in&#xA; self.expression = null and returnParameter = null or&#xA; self.expression &lt;> null and returnParameter &lt;> null and&#xA; returnParameter.isAssignableFrom(self.expression)&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="behavior" eType="#//ElementReference"
+ volatile="true" transient="true" derived="true">
+ <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">
+ <eOperations name="inLineStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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://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://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">
+ <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&#xA; if self.isSimple then&#xA; let acceptBlock : AcceptBlock = self.acceptBlock->any(true) in&#xA; let name = acceptBlock.actualName() in&#xA; if (name = null) then assignmentsAfter&#xA; else &#xA; AssignedSource{&#xA; name = name,&#xA; source = self,&#xA; type = self.commonAncestor(acceptBlock.signal),&#xA; lower = 1,&#xA; upper = 1&#xA; }.update(assignmentsAfter)&#xA; endif&#xA; else&#xA; self.mergeAssignments(self.acceptBlock.block)->&#xA; iterate(&#xA; assignment : AssignedSource; &#xA; assignments : Set(AssignedSource) = assignmentsAfter |&#xA; if self.acceptBlock.actualName()->includes(assignment.name) then &#xA; assignments&#xA; else &#xA; assignment.update(assignments)&#xA; endif&#xA; )&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="effectiveBehavior" lowerBound="1" eType="#//ElementReference"/>
+ <eOperations name="effectiveBehavior_" lowerBound="1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let behavior = self.behavior in&#xA; if behavior = null then null&#xA; else&#xA; let stub = behavior.stub() in&#xA; if stub = null then behavior&#xA; else stub&#xA; endif&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let behavior = self.effectiveBehavior() in&#xA; behavior &lt;> 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let signals : Bag(ElementReference) = self.acceptBlock.signal in&#xA; let behavior = self.effectiveBehavior() in&#xA; let activeClass = &#xA; if behavior = null then null &#xA; else behavior.activeClass() &#xA; endif &#xA; in&#xA; signals->forAll(s | signals->select(equals(s))->size() = 1) and&#xA; (activeClass = null or -- Let the acceptStatementContext constraint catch a null active class.&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let namesBefore = self.assignmentBefore.name in&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.acceptBlock->size() = 1 then true&#xA; else&#xA; let namesBefore = self.assignmentBefore.name in&#xA; let newNames : Bag(String) = &#xA; self.acceptBlock.block.newAssignments().name in&#xA; newNames->forAll(name | &#xA; namesBefore->excludes(name) implies &#xA; newNames->count(name) = self.acceptBlock->size()&#xA; )&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="behavior" eType="#//ElementReference"
+ volatile="true" transient="true" derived="true">
+ <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/Ecore/OCL/Pivot">
+ <details key="derivation" value="let acceptBlocks = self.acceptBlock in&#xA; acceptBlocks->size() = 1 and acceptBlocks->forAll(block = null)"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="AcceptBlock" eSuperTypes="#//SyntaxElement">
+ <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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let name = self.actualName() in&#xA; if name = null or element &lt;> self.block then&#xA; self.assignmentsBefore()&#xA; else&#xA; AssignedSource{&#xA; name = name,&#xA; source = self,&#xA; type = self.commonAncestor(self.signal),&#xA; lower = 1,&#xA; upper = 1&#xA; }.update(self.assignmentsBefore())&#xA; endif"/>
+ </eAnnotations>
+ <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
+ </eOperations>
+ <eOperations name="acceptBlockSignalDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.signalNames.name->forAll(&#xA; referent->select(isSignal())->size() = 1&#xA; )"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="block" eType="#//Block"
+ containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="signalNames" lowerBound="1"
+ eType="#//QualifiedNameList" containment="true"/>
+ <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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; self.signalNames.name.referent->select(isSignal())->asSet()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="EmptyStatement" eSuperTypes="#//Statement">
+ <eOperations name="emptyStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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">
+ <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">
+ <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">
+ <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="ModelNamespace_stubFor(unit)"/>
+ </eAnnotations>
+ <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
+ </eOperations>
+ <eOperations name="ModelNamespace_stubFor" eType="#//ElementReference">
+ <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
+ </eOperations>
+ <eOperations name="ModelNamespace_appliedProfiles" ordered="false" upperBound="-1"
+ eType="#//ElementReference"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="NamespaceDefinition" eSuperTypes="#//MemberDefinition">
+ <eOperations name="currentScope" eType="#//ElementReference">
+ <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/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="&#xA; let outerScope = self.MemberDefinition_outerScope() in&#xA; if outerScope &lt;> null then&#xA; outerScope&#xA; else if self.unit = null then&#xA; null&#xA; else if unit.namespace = null then&#xA; self.modelNamespace().toReference()&#xA; else&#xA; unit.namespace&#xA; 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="&#xA; let outerScope = self.outerScope() in&#xA; if outerScope = null then&#xA; self.modelNamespace().toReference()&#xA; else&#xA; outerScope.modelScope()&#xA; 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="&#xA; self.member->select(m | m.definition.actualName() = name)"/>
+ </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="&#xA; let outerScope = self.outerScope() in&#xA; if outerScope = null then null&#xA; else outerScope.appliedProfiles()&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="parameters" upperBound="-1" eType="#//FormalParameter">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.ownedMember.definition->&#xA; select(oclIsKindOf(FormalParameter)).oclAsType(FormalParameter)->&#xA; reject(direction = 'return')->asOrderedSet()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="returnParameter" eType="#//FormalParameter">
+ <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="&#xA; let returnParameters = self.ownedMember.definition->&#xA; select(oclIsKindOf(FormalParameter)).oclAsType(FormalParameter)->&#xA; select(direction = 'return') &#xA; in&#xA; if returnParameters->isEmpty() then null&#xA; else returnParameters->any(true)&#xA; 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="&#xA; let subunit = self.subunit in&#xA; if subunit = null or subunit.definition = null then self.ownedMember&#xA; else subunit.definition.ownedMember&#xA; 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/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="&#xA; self.annotation().stereotypeName.pathName = 'external' or&#xA;&#xA; /* TODO: Allow real stereotype application. */&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.ownedMember.definition->select(oclIsKindOf(ClassifierTemplateParameter)).&#xA; oclAsType(ClassifierTemplateParameter)"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="membersCached" upperBound="-1" eType="#//Member"/>
+ <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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.unit = null then &#xA; Set(Member){}&#xA; else &#xA; self.importMembers(self.unit.imports().importedMembers()->asSet())&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="importMembers" ordered="false" upperBound="-1" eType="#//Member">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let remainingMembers = self.removeDuplicates(importedMembers) in&#xA; remainingMembers->reject(imp1 | &#xA; remainingMembers->exists(imp2 | imp1 &lt;> imp2 and &#xA; not imp1.definition.isDistinguishableFrom(imp2.definition)&#xA; )&#xA; )"/>
+ </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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; importedMembers->iterate(m1; result : Set(Member) = Set(Member){} | &#xA; if result->exists(m2 | m1.toReference().equals(m2.toReference())) then&#xA; result&#xA; else&#xA; result->including(m1)&#xA; endif&#xA; )"/>
+ </eAnnotations>
+ <eParameters name="importedMembers" ordered="false" upperBound="-1" eType="#//Member"/>
+ </eOperations>
+ <eOperations name="includeDistinguishableCaching" ordered="false" upperBound="-1"
+ eType="#//Member">
+ <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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; importedMembers->select(imp | self.ownedMember->forAll(m | &#xA; imp.definition.isDistinguishableFrom(m.definition)&#xA; ))"/>
+ </eAnnotations>
+ <eParameters name="importedMembers" ordered="false" upperBound="-1" eType="#//Member"/>
+ </eOperations>
+ <eOperations name="stub" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let unit = self.unit in&#xA; if unit = null then null&#xA; else&#xA; let namespace = self.outerScope() in&#xA; if namespace = null then null&#xA; else namespace.stubFor(unit)&#xA; endif&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="stubFor" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if unit = null or unit.definition = null then null&#xA; else&#xA; let members = self.ownedMember.definition->select(m |&#xA; m.actualName() = unit.definition.actualName() and &#xA; m.isStub and m.matchForStub(unit)&#xA; ) in&#xA; if members->isEmpty() then null&#xA; else members->any(true).oclAsType(Member).toReference()&#xA; endif&#xA; endif"/>
+ </eAnnotations>
+ <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
+ </eOperations>
+ <eOperations name="namespaceDefinitionMemberDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.member->forAll(m1 | &#xA; self.member->forAll(m2 | &#xA; m1 = m2 or m1.definition.isDistinguishableFrom(m2.definition)&#xA; )&#xA; )"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="unit" eType="#//UnitDefinition"
+ eOpposite="#//UnitDefinition/definition"/>
+ <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/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.membersCached()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="MemberDefinition" abstract="true" eSuperTypes="#//SyntaxElement">
+ <eOperations name="annotation" ordered="false" upperBound="-1" eType="#//StereotypeAnnotation">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let container = self.oclContainer() in &#xA; if container.oclIsKindOf(Member) then &#xA; container.oclAsType(Member).annotation&#xA; else if container.oclIsKindOf(UnitDefinition) then &#xA; container.oclAsType(UnitDefinition).annotation&#xA; else if container.oclIsKindOf(MemberDefinition) then&#xA; container.oclAsType(MemberDefinition).annotation()&#xA; else &#xA; Set{}&#xA; 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="&#xA; 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="&#xA; let container = self.containingMember() in&#xA; if container &lt;> null then&#xA; let namespace = container.namespace in&#xA; if namespace = null then null else namespace.toReference() endif&#xA; else&#xA; null&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="qualifiedName" eType="#//QualifiedName">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.name = null then&#xA; null&#xA; else&#xA; let nameBinding = NameBinding{name = self.name} in&#xA; let outerScope = self.outerScope() in&#xA; if outerScope = null then&#xA; QualifiedName{nameBinding = nameBinding}&#xA; else&#xA; let qualificationName = outerScope.qualifiedName() in&#xA; if qualificationName = null then&#xA; null&#xA; else&#xA; QualifiedName{&#xA; nameBinding = qualificationName.nameBinding->append(nameBinding)&#xA; }&#xA; endif&#xA; endif&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="namespaceReference" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let container = self.oclContainer() in&#xA; if container.oclIsKindOf(Member) then&#xA; let namespace = container.oclAsType(Member).namespace in&#xA; if namespace = null then null&#xA; else namespace.toReference()&#xA; endif&#xA; else if container.oclIsKindOf(NamespaceDefinition) then&#xA; container.oclAsType(NamespaceDefinition).toReference()&#xA; else if container.oclIsKindOf(UnitDefinition) then&#xA; container.oclAsType(UnitDefinition).namespace&#xA; else if container.oclIsKindOf(MemberDefinition) then&#xA; -- NOTE: This is a workaround to handle an Xtext&#xA; -- editor bug in which the syntax tree is built wrong.&#xA; container.oclAsType(MemberDefinition).namespaceReference()&#xA; else&#xA; null&#xA; endif endif endif endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="addToModel" lowerBound="1" eType="#//Member"/>
+ <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <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/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/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() &lt;> 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">
+ <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
+ </eOperations>
+ <eOperations name="templateParameters" upperBound="-1" eType="#//ClassifierTemplateParameter">
+ <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/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/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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let container = self.oclContainer() in&#xA; if container = null then null&#xA; else if container.oclIsKindOf(Member) then &#xA; container.oclAsType(Member)&#xA; else if container.oclIsKindOf(MemberDefinition) then &#xA; container.oclAsType(MemberDefinition).containingMember()&#xA; else &#xA; null&#xA; 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://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://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://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://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/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/Ecore/OCL/Pivot">
+ <details key="derivation" value="null"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="StereotypeAnnotation" eSuperTypes="#//SyntaxElement">
+ <eOperations name="stereotypeAnnotationStereotypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let name = self.stereotypeName.pathName in &#xA; name = 'apply' or name = 'primitive' or name = 'external' or&#xA; self.stereotype &lt;> 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.stereotypeName.pathName = 'primitive' implies&#xA; (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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.stereotypeName.pathName = 'external' implies&#xA; (self.names = null and &#xA; (self.taggedValues = null or &#xA; self.taggedValues.taggedValue->size() = 1 and &#xA; self.taggedValues.taggedValue->exists(&#xA; name = 'file' and operator = null&#xA; )&#xA; )&#xA; )"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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="&#xA; let owner = self.owner() in&#xA; if owner.oclIsKindOf(UnitDefinition) then&#xA; owner.oclAsType(UnitDefinition).appliedProfile&#xA; else&#xA; self.currentScope().appliedProfiles()&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="taggedValues" eType="#//TaggedValueList"
+ containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="names" eType="#//QualifiedNameList"
+ containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="stereotypeName" lowerBound="1"
+ eType="#//QualifiedName" containment="true"/>
+ <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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let profiles = self.appliedProfiles() in&#xA; let qualification = self.stereotypeName.qualification in&#xA; let name = self.stereotypeName.unqualifiedName.toName() in&#xA; if self.stereotypeName.qualification = null then&#xA; let standardProfile = profiles->select(name() = 'StandardProfile') in&#xA; let standardStereotype = standardProfile.resolveStereotype(name) in&#xA; if standardStereotype->size() = 1 then&#xA; standardStereotype->any(true)&#xA; else&#xA; let stereotype = profiles.resolveStereotype(name) in&#xA; if stereotype->size() = 1 then&#xA; stereotype->any(true)&#xA; else&#xA; null&#xA; endif&#xA; endif&#xA; else&#xA; let profile = profiles->select(qualifiedName() = qualification.pathName) in&#xA; if profile->size() = 1 then&#xA; let stereotype = profile.resolveStereotype(name) in&#xA; if stereotype->size() = 1 then&#xA; stereotype->any(true)&#xA; else&#xA; null&#xA; endif&#xA; else&#xA; null&#xA; endif&#xA; endif"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="TaggedValueList" eSuperTypes="#//SyntaxElement">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="taggedValue" ordered="false"
+ lowerBound="1" upperBound="-1" eType="#//TaggedValue" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="TaggedValue" eSuperTypes="#//SyntaxElement">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <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"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="UnitDefinition" eSuperTypes="#//DocumentedElement">
+ <eOperations name="imports" ordered="false" upperBound="-1" eType="#//ImportReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.isModelLibrary then&#xA; self.import&#xA; else&#xA; self.import->union(self.implicitImports())&#xA; 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="&#xA; Set{'PrimitiveTypes', 'PrimitiveBehaviors', 'BasicInputOutput', &#xA; 'CollectionFunctions', 'CollectionClasses'}->&#xA; 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="&#xA; PackageImportReference {&#xA; referentName = QualifiedName{&#xA; nameBinding = Sequence{&#xA; NameBinding{name = 'Alf'},&#xA; NameBinding{name = 'Library'},&#xA; NameBinding{name = name}&#xA; }&#xA; }&#xA; }"/>
+ </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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.namespaceName &lt;> null implies&#xA; let namespace = self.namespace in&#xA; namespace &lt;> 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="definition" lowerBound="1"
+ eType="#//NamespaceDefinition" containment="true" eOpposite="#//NamespaceDefinition/unit"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="import" ordered="false"
+ upperBound="-1" eType="#//ImportReference" containment="true" eOpposite="#//ImportReference/unit"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="namespace" eType="#//ElementReference"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; if self.namespaceName = null then&#xA; null&#xA; else&#xA; let referents = self.namespaceName.modelReferents() in&#xA; if referents->size() = 1 then&#xA; referents->any(true)&#xA; else&#xA; null&#xA; endif&#xA; 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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA;&#xA; /* TODO: Allow real stereotype application. */&#xA; 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/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"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ImportReference" abstract="true" eSuperTypes="#//SyntaxElement">
+ <eOperations name="importedMembers" ordered="false" upperBound="-1" eType="#//Member"/>
+ <eOperations name="importReferenceReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.referent &lt;> null and&#xA; let visibility = self.referent.visibility() in &#xA; 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://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"/>
+ <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="&#xA; let referents = self.referentName.modelReferents() in &#xA; if referents->size() = 1 then referents->any(true)&#xA; else null&#xA; endif"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="unit" lowerBound="1" eType="#//UnitDefinition"
+ eOpposite="#//UnitDefinition/import"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ImportedMember" eSuperTypes="#//MemberDefinition">
+ <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/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/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/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/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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="EnumerationLiteralName" eSuperTypes="#//MemberDefinition">
+ <eOperations name="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="false"/>
+ </eAnnotations>
+ <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
+ </eOperations>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="OperationDefinition" eSuperTypes="#//NamespaceDefinition">
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.body &lt;> element then Set(AssignedSource){}&#xA; else&#xA; self.parameters()->collect(parameter |&#xA; AssignedSource{&#xA; name = parameter.actualName(),&#xA; source = if parameter.direction = 'out' then null else parameter endif,&#xA; type = parameter.typePart.type,&#xA; upper = parameter.typePart.upper,&#xA; lower = parameter.typePart.lower&#xA; }&#xA; )&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; /* TODO: Allow operation stereotype annotations. */&#xA; annotation.stereotypeName.pathName = 'Create' or&#xA; annotation.stereotypeName.pathName = 'Destroy' or&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let definition = unit.definition in&#xA; definition.oclIsKindOf(ActivityDefinition) and&#xA; definition.templateParameters()->isEmpty() and&#xA; let operationParameters = self.parameters() in&#xA; let activityParameters = definition.parameters() in&#xA; operationParameters->size() = activityParameters->size() and &#xA; Sequence{1 .. operationParameters->size()}->forAll(i | &#xA; operationParameters->at(i).matches(activityParameters->at(i))&#xA; ) and&#xA; let operationReturnParameter = self.returnParameter() in&#xA; let activityReturnParameter = definition.returnParameter() in&#xA; operationReturnParameter = null and activityReturnParameter = null or&#xA; operationReturnParameter &lt;> null and &#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let parameters = self.parameters() in&#xA; let otherParameters = other.parameters() in&#xA; parameters->size() = otherParameters->size() and&#xA; Sequence{1..parameters->size()}->forAll(i |&#xA; parameters->at(i).matchesElement(otherParameters->at(i))&#xA; ) and&#xA; let returnParameter = self.returnParameter() in&#xA; let otherReturnParameter = other.returnParameter() in&#xA; returnParameter = null and otherReturnParameter = null or&#xA; returnParameter &lt;> 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let parameters = self.parameters() in&#xA; let otherParameters = other.parameters() in&#xA; parameters->size() = otherParameters->size() and&#xA; Sequence{1..parameters->size()}->forAll(i |&#xA; parameters->at(i).matchesNameType(otherParameters->at(i))&#xA; ) and&#xA; let returnParameter = self.returnParameter() in&#xA; let otherReturnParameter = other.returnParameter() in&#xA; returnParameter = null and otherReturnParameter = null or&#xA; returnParameter &lt;> 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.isConstructor then &#xA; let namespace = self.containingMember().namespace.toReference() in&#xA; let returnType =&#xA; if not namespace.isTemplate() then namespace&#xA; else&#xA; namespace.bind(&#xA; namespace.parameteredElements()->asSequence()&#xA; )&#xA; endif&#xA; in&#xA; FormalParameter{&#xA; direction = 'return', &#xA; name = '', &#xA; typePart = TypedElementDefinition{&#xA; actualType = returnType&#xA; }&#xA; }&#xA; else&#xA; self.NamespaceDefinition_returnParameter()&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="specializationReferents" ordered="false" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let namespace = self.containingMember().namespace in &#xA; if namespace.oclIsKindOf(ClassDefinition) then &#xA; namespace.oclAsType(ClassDefinition).specializationReferent&#xA; else &#xA; Set{}&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.redefinition = null or&#xA; self.redefinition.name->forAll(&#xA; referent->size() = 1 and &#xA; referent->forAll(&#xA; visibility() &lt;> 'private' and &#xA; containedIn(self.specializationReferents().members()) and &#xA; isOperation()&#xA; )&#xA; )"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.isConstructor implies&#xA; ( self.redefinedOperation->forAll(isConstructor)) and&#xA; -- NOTE: The following condition is added.&#xA; -- A constructor may not have an explicit return type.&#xA; not self.ownedMember.definition->exists(&#xA; oclIsKindOf(FormalParameter) and &#xA; oclAsType(FormalParameter).direction = 'return'&#xA; )"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.isDestructor implies&#xA; 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"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAbstract" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="body" eType="#//Block"
+ containment="true"/>
+ <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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; if self.redefinition &lt;> null then &#xA; -- NOTE: The current scope for the redefinition qualifed name list is&#xA; -- defined to be the outer scope of the class of the operation. This&#xA; -- prevents an infinite loop in resolving the members of the class,&#xA; -- relying on the fact that redefined operations can not be members of&#xA; -- the class with the redefinition.&#xA; self.redefinition.name.referent->asSet()&#xA; else&#xA; let owner = self.containingMember().namespace.oclAsType(ClassDefinition) in &#xA; owner.specializationReferent.members()->&#xA; select(m | m.visibility() &lt;> 'private' and not self.isDistinguishableFrom(m.asMember().definition))->&#xA; asSet()&#xA; 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/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/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">
+ <eOperations name="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="&#xA; self.ClassifierDefinition_matchForStub(unit) and&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; /* TODO: Handle association stereotype annotations. */&#xA; 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/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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; 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">
+ <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/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="&#xA; unit.definition.oclIsKindOf(ClassifierDefinition) and&#xA; let classifier = unit.definition.oclAsType(ClassifierDefinition) in&#xA; classifier.isAbstract = self.isAbstract and&#xA; classifier.specializationReferent->size() = self.specializationReferent->size() and&#xA; classifier.specializationReferent->forAll(containedIn(self.specializationReferent->asBag())) and&#xA; classifier.templateParameters()->size() = self.templateParameters()->size() and&#xA; Sequence{1..classifier.templateParameters()->size()}->forAll(i |&#xA; classifier.templateParameters()->at(i).matches(self.templateParameters()->at(i))&#xA; )"/>
+ </eAnnotations>
+ <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
+ </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()->&#xA; includingAll(self.inheritedMembers())->asOrderedSet()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="inheritedMembers" upperBound="-1" eType="#//Member">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.inherit(&#xA; self.specializationReferent.members()->select(visibility() &lt;> 'private').&#xA; asMember()->asOrderedSet()&#xA; )"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="inherit" upperBound="-1" eType="#//Member">
+ <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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.specialization = null or&#xA; self.specialization.name->forAll(&#xA; referent->size() = 1 and&#xA; referent->forAll(isClassifier() and not isTemplate())&#xA; )"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="specialization" eType="#//QualifiedNameList"
+ containment="true"/>
+ <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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; if self.specialization = null then OrderedSet{}&#xA; else self.specialization.name.referent->asOrderedSet()&#xA; endif"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ClassDefinition" eSuperTypes="#//ClassifierDefinition">
+ <eOperations name="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="&#xA; /* TODO: Allow class stereotype annotations. */&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.ClassifierDefinition_matchForStub(unit) and&#xA; /* NOTE: Cannot be an ActiveClassDefinition. */&#xA; 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/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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; not self.ownedMember.definition->exists(&#xA; oclIsKindOf(OperationDefinition) and &#xA; oclAsType(OperationDefinition).isConstructor&#xA; )"/>
+ </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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; not self.ownedMember.definition->exists(&#xA; oclIsKindOf(OperationDefinition) and &#xA; oclAsType(OperationDefinition).isDestructor&#xA; )"/>
+ </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">
+ <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="&#xA; let ownedOperations = self.subunitOwnedMembers().definition->&#xA; select(oclIsKindOf(OperationDefinition)).oclAsType(OperationDefinition)&#xA; in&#xA; inheritableMembers->reject(inheritableMember |&#xA; ownedOperations->exists(operation |&#xA; inheritableMember.toReference().&#xA; containedIn(operation.redefinedOperation->asBag()) or&#xA; not operation.isDistinguishableFrom(inheritableMember.definition)&#xA; )&#xA; )"/>
+ </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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.specializationReferent->forAll(isClass()) and&#xA; (self.specializationReferent->exists(isActiveClass())&#xA; implies self.oclIsKindOf(ActiveClassDefinition)&#xA; )"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.isAbstract then true&#xA; else &#xA; self.member.definition->select(oclIsKindOf(OperationDefinition)).&#xA; oclAsType(OperationDefinition)->forAll(not isAbstract)&#xA; 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">
+ <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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.typeName = null or self.type &lt;> 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="&#xA; if self.actualType &lt;> null then&#xA; self.actualType&#xA; else if self.typeName = null then&#xA; null&#xA; else&#xA; let types = self.typeName.referent->select(isClassifier()) in &#xA; if types->size() &lt;> 1 then&#xA; null&#xA; else&#xA; types->any(true)&#xA; endif&#xA; 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="&#xA; if self.lowerBound &lt;> null then&#xA; self.lowerBound.toInteger()&#xA; else if self.isMultiplicity or self.upperBound = '*' then&#xA; 0&#xA; else&#xA; self.upper&#xA; 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="&#xA; if self.isMultiplicity or self.upperBound = '*' then&#xA; -1&#xA; else &#xA; self.upperBound.toInteger()&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="lowerBound" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="upperBound" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" defaultValueLiteral="1"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isOrdered" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isNonunique" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isSequence" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" eType="#//QualifiedName"
+ containment="true"/>
+ <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"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isMultiplicity" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="DataTypeDefinition" eSuperTypes="#//ClassifierDefinition">
+ <eOperations name="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="&#xA; self.ClassifierDefinition_matchForStub(unit) and&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; /* TODO: Allow data type stereotype annotations. */&#xA; self.ClassifierDefinition_annotationAllowed(annotation) or&#xA; 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/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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; 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">
+ <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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; /* TODO: Allow package stereotype annotations. */&#xA; self.NamespaceDefinition_annotationAllowed(annotation) or&#xA; annotation.stereotypeName.pathName = 'apply' or&#xA; 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/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/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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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="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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let applications : Set(StereotypeAnnotation) = &#xA; self.annotation()->select(stereotypeName.pathName = 'apply') &#xA; in&#xA; applications.names.name.referent->select(isProfile())->asSet()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="PropertyDefinition" eSuperTypes="#//MemberDefinition">
+ <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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; /* TODO: Allow property stereotype annotations. */&#xA; 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/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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.initializer &lt;> null implies &#xA; 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="initializer" eType="#//Expression"
+ containment="true"/>
+ <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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; self.initializer &lt;> null and &#xA; self.initializer.type &lt;> null and&#xA; self.isCollectionClass(self.initializer.type) and&#xA; (self.typePart.type = null or &#xA; not self.isCollectionClass(self.typePart.type)&#xA; )"/>
+ </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/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; self.typePart.type &lt;> null and&#xA; self.isIntegerType(self.typePart.type) and&#xA; self.initializer.type &lt;> null and&#xA; (self.isIntegerType(self.initializer.type) or&#xA; self.isIntegerCollectionClass(self.initializer.type)&#xA; )"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="typePart" eType="#//TypedElementDefinition"
+ containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SignalDefinition" eSuperTypes="#//ClassifierDefinition">
+ <eOperations name="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="&#xA; self.ClassifierDefinition_matchForStub(unit) and&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; /* TODO: Allow signal stereotype annotations */&#xA; 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/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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; 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">
+ <eOperations name="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="&#xA; /* NOTE: ClassDefinition::matchForStub would not allow an ActiveClassDefinition. */&#xA; self.ClassifierDefinition_matchForStub(unit) and&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; not self.isAbstract implies self.classifierBehavior &lt;> 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"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ActivityDefinition" eSuperTypes="#//ClassifierDefinition">
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.body &lt;> element then Set(AssignedSource){}&#xA; else&#xA; self.parameters()->collect(parameter |&#xA; AssignedSource{&#xA; name = parameter.actualName(),&#xA; source = if parameter.direction = 'out' then null else parameter endif,&#xA; type = parameter.typePart.type,&#xA; upper = parameter.typePart.upper,&#xA; lower = parameter.typePart.lower&#xA; }&#xA; )&#xA; endif"/>
+ </eAnnotations>
+ <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
+ </eOperations>
+ <eOperations name="outerScope" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let owner = self.oclContainer() in&#xA; if owner.oclIsKindOf(ActiveClassDefinition) and &#xA; owner.oclAsType(ActiveClassDefinition).classifierBehavior = self then&#xA; owner.oclAsType(ActiveClassDefinition).toReference()&#xA; else&#xA; self.NamespaceDefinition_outerScope()&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; /* TODO: Allow activity stereotype annotations. */&#xA; self.ClassifierDefinition_annotationAllowed(annotation) or&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.ClassifierDefinition_matchForStub(unit) and&#xA; let definition = unit.definition in&#xA; definition.oclIsKindOf(ActivityDefinition) and&#xA; let parameters = self.parameters() in&#xA; let otherParameters = definition.parameters() in&#xA; parameters->size() = otherParameters->size() and &#xA; Sequence{1 .. parameters->size()}->forAll(i | &#xA; parameters->at(i).matches(otherParameters->at(i))&#xA; ) and&#xA; let returnParameter = self.returnParameter() in&#xA; let otherReturnParameter = definition.returnParameter() in&#xA; returnParameter = null and otherReturnParameter = null or&#xA; returnParameter &lt;> 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/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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; 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"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ElementImportReference" eSuperTypes="#//ImportReference">
+ <eOperations name="importedMembers" ordered="false" upperBound="-1" eType="#//Member">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.referent = null then&#xA; Set(Member){}&#xA; else&#xA; Set{Member{&#xA; visibility = self.visibility,&#xA; definition = ImportedMember{&#xA; name = if self.alias = null then self.referent.name() else self.alias endif,&#xA; referent = self.referent&#xA; }&#xA; }}&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.referent &lt;>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"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SignalReceptionDefinition" eSuperTypes="#//SignalDefinition">
+ <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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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">
+ <eOperations name="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="&#xA; self.ClassifierDefinition_matchForStub(unit) and&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; /* TODO: Allow enumeration stereotype annotations. */&#xA; 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/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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; 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">
+ <eOperations name="importedMembers" ordered="false" upperBound="-1" eType="#//Member">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.referent = null then Set(Member){}&#xA; else self.referent.visibleMembers()->collect(m | &#xA; Member{&#xA; visibility = self.visibility,&#xA; definition = ImportedMember{name = m.name(), referent = m}&#xA; }&#xA; )&#xA; 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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.referent &lt;> 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">
+ <eOperations name="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="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/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/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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.actualName() = other.actualName() and&#xA; self.specializationReferent->size() = other.specializationReferent->size() and&#xA; 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">
+ <eOperations name="currentScope" eType="#//ElementReference">
+ <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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; /* TODO: Allow formal parameter stereoype annotations. */&#xA; 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/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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; other &lt;> null and&#xA; self.direction = other.direction and &#xA; self.actualName() = other.actualName() and &#xA; self.typePart.lower = other.typePart.lower and &#xA; self.typePart.upper = other.typePart.upper and&#xA; self.typePart.isOrdered() = other.typePart.isOrdered() and&#xA; self.typePart.isNonunique() = other.typePart.isNonunique() and &#xA; let type = self.typePart.type in&#xA; let otherType = other.typePart.type in&#xA; type = null and otherType = null or &#xA; type &lt;> 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="&#xA; self.matchesNameType(other) and&#xA; self.direction = other.direction() and &#xA; self.typePart.lower = other.lower() and &#xA; self.typePart.upper = other.upper() and&#xA; self.typePart.isOrdered() = other.isOrdered() and&#xA; 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="&#xA; self.matchesType(other) and&#xA; 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="&#xA; other &lt;> null and&#xA; let type = self.typePart.type in&#xA; let otherType = other.type() in&#xA; type = null and otherType = null or&#xA; type &lt;> 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://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"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ReceptionDefinition" eSuperTypes="#//MemberDefinition">
+ <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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; /* TODO: Allow reception stereoype annotations. */&#xA; 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/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/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.signal &lt;> 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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://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">
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore: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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="signal" eType="#//ElementReference"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let referents = self.signalName.referent->select(isSignal()) in&#xA; if referents->size() = 1 then&#xA; referents->any(true)&#xA; else&#xA; null&#xA; endif"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Member" eSuperTypes="#//DocumentedElement">
+ <eOperations name="toReference" lowerBound="1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; 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="&#xA; if self.visibility &lt;> null then self.visibility&#xA; else if definition.oclIsKindOf(EnumerationLiteralName) then 'public'&#xA; else 'package'&#xA; endif endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="definition" lowerBound="1"
+ eType="#//MemberDefinition" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="visibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <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"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="annotation" ordered="false"
+ upperBound="-1" eType="#//StereotypeAnnotation" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="AnnotatedStatement" eSuperTypes="#//DocumentedElement">
+ <eOperations name="annotations" ordered="false" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <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://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"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="BoundClassifier" eSuperTypes="#//ClassifierDefinition">
+ <eOperations name="toReference" lowerBound="1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; BoundElementReference{&#xA; referent = self.template,&#xA; namespace = self.template.namespace(),&#xA; templateBinding = InternalElementReference{element = self}&#xA; }"/>
+ </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"/>
+ <eClassifiers xsi:type="ecore:EClass" name="NonReturnParameter" eSuperTypes="#//FormalParameter"/>
+ <eClassifiers xsi:type="ecore:EClass" name="AnyType" eSuperTypes="#//ClassifierDefinition">
+ <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>

Back to the top