Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/uml/alf/org.eclipse.papyrus.uml.alf/model/alf.ecore')
-rw-r--r--plugins/uml/alf/org.eclipse.papyrus.uml.alf/model/alf.ecore26824
1 files changed, 13412 insertions, 13412 deletions
diff --git a/plugins/uml/alf/org.eclipse.papyrus.uml.alf/model/alf.ecore b/plugins/uml/alf/org.eclipse.papyrus.uml.alf/model/alf.ecore
index fe5bb1aee7b..18d7afe0f44 100644
--- a/plugins/uml/alf/org.eclipse.papyrus.uml.alf/model/alf.ecore
+++ b/plugins/uml/alf/org.eclipse.papyrus.uml.alf/model/alf.ecore
@@ -1,13412 +1,13412 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="alf" nsURI="http://www.omg.org/spec/ALF/20120827" nsPrefix="alf">
- <eAnnotations source="http://www.eclipse.org/OCL/Import">
- <details key="ecore" value="http://www.eclipse.org/emf/2002/Ecore"/>
- <details key="types" value="http://www.eclipse.org/uml2/5.0.0/Types"/>
- <details key="uml" value="http://www.eclipse.org/uml2/5.0.0/UML"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
- <details key="invocationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
- <details key="settingDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
- <details key="validationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
- </eAnnotations>
- <eClassifiers xsi:type="ecore:EClass" name="AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An assignment of a source element that gives the value of a local name, along with a record of the defined type (if any) and multiplicity of the local name."/>
- </eAnnotations>
- <eOperations name="isNew" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The local name for which this is the assigned source."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="source" lowerBound="1"
- eType="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The syntax element that is to be the source for the assigned value of the given local name."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EIntegerObject">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity upper bound for the local name."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EIntegerObject">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity lower bound for the name."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reference to the element that gives the type for the local name (if any)."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isParallelLocalName" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An indication whether this assignment is for a local name listed in a&#xA;@parallel annotation of a for statement."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SyntaxElement" abstract="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A syntax element synthesized in an abstract syntax tree, along with any additional information determined during static semantic analysis."/>
- </eAnnotations>
- <eOperations name="toReference" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return a reference to this element."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="InternalElementReference{element = self}"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="owner" eType="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the owner of this element."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="SyntaxElement_owner()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="SyntaxElement_owner" eType="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Return the current scope for this element. By default, this is the current&#xA;scope of the owner of this element, if any."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.SyntaxElement_currentScope()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="SyntaxElement_currentScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Return the enclosing statement for this element, if there is one."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Return the enclosing expression for this element, if there is one."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Return the assignments before this element, as appropriate."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.SyntaxElement_assignmentsBefore()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="SyntaxElement_assignmentsBefore" ordered="false" upperBound="-1"
- eType="#//AssignedSource"/>
- <eOperations name="SyntaxElement_assignmentsBefore_base" ordered="false" upperBound="-1"
- eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Return the assignments before the given subelement of this element,&#xA;if any, as appropriate. (By default, by default they are are the&#xA;assignments before this element.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.assignmentsBefore()"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
- </eOperations>
- <eOperations name="updateAll" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Update the initial set of assignments with all the assigned sources in&#xA;newAssignments."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="Return the effective common ancestor of a set of classifiers."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The element to consider the owner of this element, if this element&#xA;does not have a composite container."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ElementReference" abstract="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reference to a model element, either directly or via its Alf abstract&#xA;syntax representation. (NOTE: The definitions of all the helper operations&#xA;of ElementReference are specific to its subclasses.)"/>
- </eAnnotations>
- <eOperations name="isUml" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isAlf" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="asUml" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="null"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="asAlf" eType="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="null"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="asMember" eType="#//Member"/>
- <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="isNamedElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isNamespace" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isNamespaceFor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="isModelNamespace" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isPackage" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isProfile" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isPackageableElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isClassifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isAbstractClassifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isAssociation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isDataType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isActiveClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isSignal" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isEnumeration" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isBehavior" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isActivity" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isMethod" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isPrimitiveType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isReception" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isOperation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isConstructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isDestructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isProperty" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isAssociationEnd" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isTemplate" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isTemplateParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isClassifierTemplateParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isParameteredElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isTemplateBinding" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isStereotype" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isEnumerationLiteral" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isLoopVariable" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isAnnotation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isSequenceExpansionExpression" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isAnyType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isDistinguishableFrom" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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')->asSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="nestedClassifiers" upperBound="-1" eType="#//ElementReference"/>
- <eOperations name="properties" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.members()->select(isProperty())"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="associationEnds" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.members()->select(isAssociationEnd())"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="opposite" eType="#//ElementReference"/>
- <eOperations name="receptions" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.members()->select(isReception())->asSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="signal" eType="#//ElementReference"/>
- <eOperations name="parameters" upperBound="-1" eType="#//ElementReference"/>
- <eOperations name="returnParameter" eType="#//ElementReference"/>
- <eOperations name="specification" eType="#//ElementReference"/>
- <eOperations name="redefinedOperations" ordered="false" upperBound="-1" eType="#//ElementReference"/>
- <eOperations name="namespace" eType="#//ElementReference"/>
- <eOperations name="template" eType="#//ElementReference"/>
- <eOperations name="templateParameters" upperBound="-1" eType="#//ElementReference"/>
- <eOperations name="parameteredElements" upperBound="-1" eType="#//ElementReference"/>
- <eOperations name="templateActuals" upperBound="-1" eType="#//ElementReference"/>
- <eOperations name="direction" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- <eOperations name="association" eType="#//ElementReference"/>
- <eOperations name="type" eType="#//ElementReference"/>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
- <eOperations name="isOrdered" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="isNonunique" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- <eOperations name="parents" ordered="false" upperBound="-1" eType="#//ElementReference"/>
- <eOperations name="allParents" ordered="false" upperBound="-1" eType="#//ElementReference"/>
- <eOperations name="classifierBehavior" eType="#//ElementReference"/>
- <eOperations name="context" eType="#//ElementReference"/>
- <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference"/>
- <eOperations name="base" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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 : 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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the active class corresponding to an activity, if any.&#xA;This is either the activity itself, if it is active, or the class that&#xA;has the activity as a classifier behavior."/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isActiveBehavior" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.activeClass() &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; )->asSet()&#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" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="allowPackageOnly" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="not self.isPackage()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="stub" eType="#//ElementReference"/>
- <eOperations name="stubFor" eType="#//ElementReference">
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="constructorReference" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA;&#x9;&#x9;&#x9;&#x9;if not self.isConstructor() then null&#xA;&#x9;&#x9;&#x9;&#x9;else&#xA; let classReferent = self.namespace() in&#xA; if not classReferent.isAbstractClassifier() then&#xA; self&#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 = self.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;&#x9;&#x9;&#x9;&#x9;endif"/>
- </eAnnotations>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="InternalElementReference" eSuperTypes="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A direct reference to a UML model element."/>
- </eAnnotations>
- <eOperations name="isAlf" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="true"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="asAlf" eType="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="asMember" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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="nestedClassifiers" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA;&#x9;&#x9;if not self.element.oclIsKindOf(ModelNamespace) then OrderedSet(ElementReference){}&#xA;&#x9;&#x9;else&#xA;&#x9;&#x9;&#x9;self.element.oclAsType(ModelNamespace).context().nestedClassifiers()&#xA;&#x9;&#x9;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()->asOrderedSet()&#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.isModelNamespace() then&#xA; &#x9;self.element.oclAsType(ModelNamespace).context().namespace()&#xA; else if self.element.oclIsKindOf(MemberDefinition) then&#xA; self.element.oclAsType(MemberDefinition).outerScope()&#xA; else&#xA; null&#xA; endif 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()->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="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->asSet()&#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(ElementReference){}&#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; &#x9;let stub = self.stub() in&#xA; &#x9;&#x9;-- This will also work is the stub is external.&#xA;&#x9; &#x9;if stub &lt;> null then stub.activeClass()&#xA;&#x9; &#x9;else&#xA;&#x9; &#x9;let namespace = self.namespace() in&#xA;&#x9;&#x9;&#x9; if namespace = null or &#xA;&#x9;&#x9;&#x9; not self.equals(namespace.classifierBehavior()) then null&#xA;&#x9;&#x9;&#x9; else namespace&#xA;&#x9;&#x9;&#x9; endif&#xA;&#x9;&#x9;&#x9; endif&#xA; endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="context" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA;&#x9;&#x9;if not self.isActivity() then null&#xA;&#x9;&#x9;else&#xA;&#x9;&#x9;&#x9;let stub = self.stub() in&#xA;&#x9;&#x9;&#x9;let namespace = if stub = null then self.namespace() else stub.namespace() endif in&#xA;&#x9;&#x9;&#x9;&#x9;if namespace = null or &#xA;&#x9;&#x9;&#x9;&#x9;&#x9;namespace.nestedClassifiers()->exists(name() = self.name()) then null&#xA;&#xA;&#x9;&#x9;&#x9;&#x9;-- Note: This can only happen for a namespace that is an&#xA;&#x9;&#x9;&#x9;&#x9;-- external element reference.&#xA;&#x9;&#x9;&#x9;&#x9;else if namespace.isBehavior() then namespace.context()&#xA;&#xA;&#x9;&#x9;&#x9;&#x9;else namespace&#xA;&#x9;&#x9;&#x9;&#x9;endif endif&#xA;&#x9;&#x9;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="&#xA;&#x9;&#x9;other &lt;> null and (other.asAlf() = self.element or &#xA;&#x9;&#x9;&#x9;self.isModelNamespace() and other.asUml() = self.element.oclAsType(ModelNamespace).context().asUml())"/>
- </eAnnotations>
- <eParameters name="other" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="copy" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="InternalElementReference{element = self.element}"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="modelScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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()->asSet()&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The Alf syntax element that represents the referenced model element."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ExternalElementReference" eSuperTypes="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A direct reference to a UML model element."/>
- </eAnnotations>
- <eOperations name="isUml" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="true"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="asUml" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.element"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="asMember" lowerBound="1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="EXTERNAL&#xA;(Workaround for a seeming OCL bug &quot;unboxing&quot; enumeration literals.)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="members" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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;&#x9; namespace.member-> &#xA;&#x9; collect(m | &#xA;&#x9; let names = namespace.getNamesOfMember(m) in&#xA;&#x9; if names->isEmpty() then&#xA;&#x9; Bag{ExternalElementReference{element = m}}&#xA;&#x9; else&#xA;&#x9; names->collect(name | &#xA;&#x9; ExternalElementReference{alias = name, element = m}&#xA;&#x9; )&#xA;&#x9; endif&#xA;&#x9; )&#xA; endif->asOrderedSet() in&#xA; let additionalMembers = self.additionalMembers() in&#xA; additionalMembers->appendAll(members)->&#xA; appendAll(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="nestedClassifiers" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA;&#x9;&#x9;if not self.element.oclIsKindOf(uml::Class) then OrderedSet(ElementReference){}&#xA;&#x9;&#x9;else&#xA;&#x9; self.element.oclAsType(uml::Class).nestedClassifier->collect(e |&#xA;&#x9; ExternalElementReference{element = e}&#xA;&#x9; )->asOrderedSet()&#xA;&#x9; endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="properties" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA; if not self.isClassifier() then OrderedSet(ElementReference){}&#xA; else if self.isAssociation() then &#xA; &#x9;self.members()->select(isProperty())&#xA; else&#xA; self.element.oclAsType(uml::Classifier).allAttributes()->&#xA; collect(a | ExternalElementReference{element = a})->&#xA; asOrderedSet()&#xA; endif endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="associationEnds" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA;&#x9;&#x9;if not self.isAssociation() then OrderedSet(ElementReference){}&#xA;&#x9;&#x9;else &#xA;&#x9;&#x9;&#x9;self.element.oclAsType(uml::Association).ownedEnd->&#xA; collect(e | ExternalElementReference{element = e})->&#xA; asOrderedSet()&#xA;&#x9;&#x9;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="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA;&#x9;&#x9;&#x9;&#x9;let ownedParameters = &#xA;&#x9; if self.isBehavior() then&#xA;&#x9; self.element.oclAsType(uml::Behavior).ownedParameter&#xA;&#x9; else if self.isOperation() then&#xA;&#x9; self.element.oclAsType(uml::Operation).ownedParameter&#xA;&#x9; else&#xA;&#x9; OrderedSet{}&#xA;&#x9; endif endif&#xA;&#x9; in&#xA;&#x9; &#x9;ownedParameters->&#xA;&#x9; &#x9;&#x9;collect(parameter | ExternalElementReference{element = parameter})->&#xA;&#x9; &#x9;&#x9;asOrderedSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="parameters" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA; self.ownedParameters()->reject(direction() = 'return')"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="returnParameter" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA; let returnParameters = self.ownedParameters()->select(direction() = 'return') &#xA; in&#xA; if returnParameters->isEmpty() then&#xA; null&#xA; else&#xA; 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})->asSet()&#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.asUml().oclAsType(uml::TemplateBinding).signature = null then&#xA; null&#xA; else&#xA; ExternalElementReference{&#xA; element = templateBinding.asUml().oclAsType(uml::TemplateBinding).signature.template&#xA; }&#xA; endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="umlTemplateBinding" eType="#//ElementReference">
- <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; ExternalElementReference{element = 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; ExternalElementReference{element = 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.asUml().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.isAssociationEnd() then null&#xA; -- Note: Only owned ends are treated as association ends.&#xA; else ExternalElementReference{element = 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.oclAsType(Integer)&#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(ElementReference){}&#xA; else&#xA; self.element.oclAsType(uml::Namespace).getNearestPackage().&#xA; getAllAppliedProfiles()->&#xA; collect(e | ExternalElementReference{element = e})->asSet()&#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&#xA; let context = self.element.oclAsType(uml::Behavior).context in&#xA; &#x9;if context &lt;> null then ExternalElementReference{element = context}&#xA; &#x9;else if self.element.oclAsType(uml::Behavior).isActive then self&#xA; &#x9;else null&#xA; &#x9;endif endif &#xA; endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="context" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA;&#x9;&#x9;if not self.isBehavior() then null&#xA;&#x9;&#x9;else&#xA;&#x9;&#x9;&#x9;let context = self.element.oclAsType(uml::Behavior).context in&#xA;&#x9;&#x9;&#x9;&#x9;if context = null then self &#xA;&#x9;&#x9;&#x9;&#x9;else ExternalElementReference{element = context} &#xA;&#x9;&#x9;&#x9;&#x9;endif&#xA;&#x9;&#x9;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; &#x9;(other.asUml() = self.element and other.name() = self.name() or&#xA; &#x9; other.isModelNamespace() and other.asAlf().oclAsType(ModelNamespace).context().asUml() = self.element)"/>
- </eAnnotations>
- <eParameters name="other" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="copy" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="ExternalElementReference{element = self.element}"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="modelScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="EXTERNAL"/>
- </eAnnotations>
- <eParameters name="pathName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="resolveInScope" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.members()->select(name() = name)->asSet()"/>
- </eAnnotations>
- <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="resolveStereotype" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA; if self.isProfile() then&#xA; self.element.oclAsType(uml::Package).ownedElement->&#xA; select(oclIsKindOf(uml::Stereotype) and oclAsType(uml::Stereotype).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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referenced model element."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="alias" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The alias for the model element, if this is a reference to an imported&#xA;element with multiple names within a namespace."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ExternalEnumerationLiteralReference"
- eSuperTypes="#//ExternalElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Workaround for apparent bug in Eclipse OCL handling of enumeration literals."/>
- </eAnnotations>
- <eOperations name="isNamedEement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="true"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isClassifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isEnumerationLiteral" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="true"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="ExternalEnumerationLiteralReference_visibility" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- <eOperations name="visibility" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="ExternalEnumerationLiteralReference_visibility()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="ExternalEnumerationLiteralReference_type" lowerBound="1" eType="#//ElementReference"/>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="ExternalEnumerationLiteralReference_type()"/>
- </eAnnotations>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="BoundElementReference" eSuperTypes="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reference to an element as bound within a template instantiation."/>
- </eAnnotations>
- <eOperations name="isUml" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isAlf" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="true"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="asUml" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="null"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="asAlf" eType="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.asMember()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="asMember" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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; )->asOrderedSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="members" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA; self.boundReferencesTo(&#xA; self.referent.members()->reject(isTemplateParameter())&#xA; )->asOrderedSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="nestedClassifiers" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.boundReferencesTo(self.referent.nestedClassifiers())->asOrderedSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="properties" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.boundReferencesTo(self.referent.properties())->asOrderedSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="associationEnds" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.boundReferencesTo(self.referent.associationEnds())->asOrderedSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="opposite" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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())->asOrderedSet()"/>
- </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())->asSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="allParents" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA; self.boundReferencesTo(self.referent.allParents()->asOrderedSet())->asSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="classifierBehavior" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.classifierBehavior()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.appliedProfiles()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="reference" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="templateBinding" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.templateBinding"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="activeClass" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA; if self.isActivity() then self&#xA; else null&#xA; endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="context" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.boundReferenceTo(self.referent.context())"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isActiveBehavior" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.activeClass() &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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A syntax element that has documentation comments associated with it."/>
- </eAnnotations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="documentation" ordered="false"
- upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The documentation text to be associated with a syntax element. Each string is intended to be mapped to the body of a comment element in the target UML model."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SequenceExpansionExpression" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression used to carry out one of a predefined set of operations over each of the elements in a sequence."/>
- </eAnnotations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assigned source for the expansion variable of a sequence expansion&#xA;expression is the expression itself. The type for the assignment is the&#xA;type of the primary expression of the sequence expansion expression and&#xA;the multiplicity lower and upper bounds are 1."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceExpansionExpressionAssignmentsBeforePrimary" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the primary expression of a sequence expansion&#xA;expression are the same as the assignments before the sequence expansion&#xA;expression.&#xA;(See the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceExpansionExpressionAssignmentsBeforeArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the argument expression of a sequence expansion&#xA;expression include those after the primary expression plus one for the&#xA;expansion variable.&#xA;(See the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceExpansionExpressionVariableName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expansion variable name may not conflict with any name already&#xA;assigned after the primary expression."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="The assignments after the argument expression of a sequence expansion&#xA;expression must be the same as the assignments before the argument&#xA;expression."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A select or reject expression has the same type as its primary expression.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="selectOrRejectExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A select or reject expression has a multiplicity lower bound of 0.&#xA;(See the lower operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="selectOrRejectExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A select or reject expression has a multiplicity upper bound of *.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="selectOrRejectExpressionArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument of a select or reject expression must have type Boolean and&#xA;a multiplicity upper bound of 1."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A collect or iterate expression has the same type as its argument&#xA;expression.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="collectOrIterateExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A collect or iterate expression has a multiplicity lower bound that is&#xA;the product of the bounds of its primary and argument expressions.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="collectOrIterateExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A collect or iterate expression has a multiplicity upper bound that is&#xA;the product of the bounds of its primary and argument expressions.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forAllOrExistsOrOneExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A forAll, exists or one expression has the type Boolean.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forAllOrExistsOrOneExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A forAll, exists or one expression has a multiplicity lower bound of 1.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forAllOrExistsOrOneExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A forAll, exists or one expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forAllOrExistsOrOneExpressionArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument of a forAll, exists or one expression must have type Boolean&#xA;and a multiplicity upper bound of 1."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An isUnique expression has the type Boolean.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="isUniqueExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An isUnique expression has a multiplicity lower bound of 1.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="isUniqueExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An isUnique expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="isUniqueExpressionExpressionArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument of an isUnique expression must have a multiplicity upper&#xA;bound of 1."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="The assignments after a sequence expansion expression are the same as&#xA;after its primary expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.assignmentsAfterPrimary()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="sequenceExpansionExpressionOperation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the operation to be carried out."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="variable" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the expansion variable available as a local name within the&#xA;argument expression."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="variableSource" eType="#//AssignedSource"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assigned source for the expansion variable within the argument&#xA;expression. The source is actually the sequence expansion expression&#xA;itself."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument expression. The exact form required for this expression&#xA;depends on which expansion operation is being carried out."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="primary" lowerBound="1"
- eType="#//ExtentOrExpression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The class name or primary expression that evaluates to the sequence to&#xA;be acted on."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isSelectOrReject" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operation = 'select' or self.operation = 'reject'"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCollectOrIterate" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operation = 'collect' or self.operation = 'iterate'"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isForAllOrExistsOrOne"
- lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operation = 'forAll' or self.operation = 'exists' or self.operation = 'one'"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isIsUnique" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operation = 'isUnique'"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="AssignableElement" abstract="true" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An element that is or has an assignable value."/>
- </eAnnotations>
- <eOperations name="typeCached" eType="#//ElementReference"/>
- <eOperations name="type" eType="#//ElementReference"/>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
- <eOperations name="isNull" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.type = null and self.lower = 0 and self.upper = 0"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isAssignableFromElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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" eType="ecore: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 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/GenModel">
- <details key="documentation" value="The statically determined upper bound of the multiplicity of this&#xA;element."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.upper()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="lower" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The statically determined lower bound of the multiplicity of this&#xA;element."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.lower()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reference to the element that specifies the statically determined&#xA;type for this element (if any)."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.typeCached()"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="AssignableElementReference" eSuperTypes="#//AssignableElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A wrapper for treating an element reference as an assignable element.&#xA;This is necessary to tie into the ownership hierarchy, so library&#xA;type resolution works correctly."/>
- </eAnnotations>
- <eOperations name="type" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.reference.type()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.reference.lower()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.reference.upper()"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="reference" lowerBound="1"
- eType="#//ElementReference"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="Expression" abstract="true" eSuperTypes="#//AssignableElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A model of the common properties derived for any Alf expression.&#xA;NOTE: The derivations for all properties of Expression except&#xA;AssignmentsAfter are specific to its various subclasses.&#xA;"/>
- </eAnnotations>
- <eOperations name="reference" lowerBound="1" eType="#//ExpressionReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="ExpressionReference{expression = self}"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="newAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Get the assigned sources for assignments made within this expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Returns the assignments from before this expression updated for any&#xA;assignments made in the expression. By default, this is the same set as&#xA;the assignments before the expression. This operation is redefined only&#xA;in subclasses of Expression for kinds of expressions that make assignments."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.Expression_updateAssignments()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="Expression_updateAssignments" ordered="false" upperBound="-1"
- eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.assignmentBefore"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="updateAssignmentsCached" ordered="false" upperBound="-1" eType="#//AssignedSource"/>
- <eOperations name="resolve" eType="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the assigned source element for the given name before this&#xA;expression, if any."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="Return whether the given expression is the first argument of an&#xA;invocation of CollectionFunctions::add. This is false by default and&#xA;is overidden for relevant invocation expressions."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- <eParameters name="targetExpression" lowerBound="1" eType="#//Expression"/>
- </eOperations>
- <eOperations name="expressionAssignmentAfterDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after an expression are given by the result of the&#xA;updateAssignments helper operation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="expressionUniqueAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="No name may be assigned more than once before or after an expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.assignmentBefore->isUnique(name) and self.assignmentAfter->isUnique(name)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentBefore" ordered="false"
- upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assigned sources for local names available lexically before this&#xA;expression."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="The assigned sources for local names available lexically after this&#xA;expression. This includes not only any assignments made within the&#xA;expression, but also any assignments that are unchanged from before the&#xA;expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.updateAssignmentsCached()"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ExpressionReference" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Provides a non-composition reference to an expression that is owned elsewhere."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression.type"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression.lower"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression.upper"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isAddTarget" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression.isAddTarget(targetExpression)"/>
- </eAnnotations>
- <eParameters name="targetExpression" lowerBound="1" eType="#//Expression"/>
- </eOperations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression.assignmentBefore"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression.assignmentAfter"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
- eType="#//Expression"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ExtentOrExpression" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The target of a sequence operation, reduction or expansion expression,&#xA;which may be either a primary expression or a class name denoting the class&#xA;extent."/>
- </eAnnotations>
- <eOperations name="isAddTarget" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.enclosingExpression().isAddTarget(targetExpression)"/>
- </eAnnotations>
- <eParameters name="targetExpression" lowerBound="1" eType="#//Expression"/>
- </eOperations>
- <eOperations name="extentOrExpressionExpressionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The effective expression for the target is the parsed primary expression,&#xA;if the target is not a qualified name, a name expression, if the target&#xA;is a qualified name other than a class name, or a class extent expression,&#xA;if the target is the qualified name of a class."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="extentOrExpressionExtentType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the target is a qualified name, then that name, before it is&#xA;disambiguated into either a name expression or a class name."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The effective expression for the target."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The target primary expression, if it is not a qualified name."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="QualifiedName" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The representation of a qualified name as a sequence of individual simple&#xA;names."/>
- </eAnnotations>
- <eOperations name="copy" lowerBound="1" eType="#//QualifiedName">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="QualifiedName{&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="EXTERNAL&#xA;Get the referents for this qualified name as a fully qualified name in&#xA;model scope."/>
- </eAnnotations>
- </eOperations>
- <eOperations name="qualifiedNameUnqualifiedNameDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The unqualified name of a qualified name is the last name binding.&#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="qualifiedNamePathNameDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The path name for a qualified name consists of the string representation&#xA;of each of the name bindings, separated by &quot;::&quot; punctuation. The string&#xA;representation of a name binding is its name followed by the&#xA;representation of its template binding, if it has one. The string&#xA;representation of a positional template binding consists of an ordered&#xA;list of the path names of its argument qualified names separated by&#xA;commas, all surrounded by the angle brackets &quot;&lt;&quot; and &quot;>&quot;.&#xA;The string representation of a named template binding consists of an&#xA;ordered list of its template parameter substitutions, each consisting of&#xA;the formal parameter name followed by &quot;=>&quot; followed by the path name of&#xA;the argument qualified name, separated by commas, all surrounded by the&#xA;angle brackets &quot;&lt;&quot; and &quot;>&quot;."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="qualifiedNameIsFeatureReferenceDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A qualified name is a feature reference if its disambiguation is not&#xA;empty."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="qualifiedNameQualificationDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The qualification of a qualified name is a empty if the qualified name&#xA;has only one name binding. Otherwise it is the qualified name consisting&#xA;of all the name bindings of the original qualified name except for the&#xA;last one. The qualification of a qualified name is considered ambiguous&#xA;if the qualified name is ambiguous and has more than two name bindings."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="qualifiedNameDisambiguationDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a qualified name is not ambiguous or it has a qualification that resolves&#xA;to a namespace, then it is has no disambiguation. Otherwise, its&#xA;disambiguation is a feature reference with a name given by the unqualified&#xA;name of the qualified name and a target expression determined by the&#xA;disambiguation of the qualification of the qualified name."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="qualifiedNameReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referents of a qualified name are the elements to which the name may&#xA;resolve in the current scope, according to the UML rules for namespaces&#xA;and named elements."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="qualifiedNameLocalName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a qualified name is a local name, then the reference must be within&#xA;the same local scope as the definition of the named element."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="qualifiedNameNonLocalUnqualifiedName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a qualified name is an unqualified, non-local name, then it must be&#xA;visible in the current scope of the use of the name."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="qualifiedNameQualifiedResolution" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a qualified name has a qualification, then its unqualified name must&#xA;name an element of the namespace named by the qualification, where the&#xA;first name in the qualification must name an element of the current scope."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="qualifiedNameTemplateBinding" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the unqualified name of a qualified name has a template binding, then&#xA;the template name must resolve to a template. The template binding must&#xA;have an argument name for each of the template parameters and each argument&#xA;name must resolve to a classifier. If the template parameter has constraining&#xA;classifiers, then the referent of the corresponding argument name must conform&#xA;to all those constraining classifiers."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the last name binding in a qualified name has a template binding, then&#xA;the template name is a qualified name with the same template bindings as&#xA;the original qualified name, but with the template binding removed on the&#xA;last name binding."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="disambiguationCached" eType="#//FeatureReference"/>
- <eOperations name="disambiguation" eType="#//FeatureReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this qualified name is ambiguous."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="pathName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The complete path name for the qualified name, with individual name&#xA;bindings separated by &quot;::&quot; punctuation."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="Indicates whether this qualified name has been disambiguated to a&#xA;feature reference."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="The qualified name corresponding to the qualification part of this&#xA;qualified name, if any."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="The disambiguation into a feature reference of a syntactic element&#xA;initially parsed as a qualified name."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.disambiguationCached()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="nameBinding" upperBound="-1"
- eType="#//NameBinding" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The sequence of individual name bindings in this qualified name."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="referent" ordered="false"
- upperBound="-1" eType="#//ElementReference" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The possible referents to which this qualified name may resolve.&#xA;(Note that the UML rules for namespaces in general allow a namespace to&#xA;contain elements of different kinds with the same name.) If the qualified&#xA;name is for a template instantiation, then the referent is the equivalent&#xA;bound element."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.referentCached()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="unqualifiedName" eType="#//NameBinding"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The rightmost individual name binding in the qualified name, without the&#xA;qualification."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.nameBinding->last()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="templateName" eType="#//QualifiedName"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If this qualified name is for a template binding, then the name of the&#xA;template for which this qualified name is a binding."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reference to a structural or behavioral feature of the type of its target&#xA;expression or a binary association end the opposite end of which is typed&#xA;by the type of its target expression."/>
- </eAnnotations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression.assignmentAfter"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="behavioralFeatureReferent" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The features referenced by a feature reference include the features of&#xA;the type of the target expression and the association ends of any binary&#xA;associations whose opposite ends are typed by the type of the target&#xA;expression."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="featureReferenceTargetType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The target expression of the feature reference may not be untyped, nor&#xA;may it have a primitive or enumeration type."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The target expression."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="referent" ordered="false"
- upperBound="-1" eType="#//ElementReference" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The features referenced by this feature reference."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.referentCached()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="nameBinding" eType="#//NameBinding"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the feature."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="NameBinding" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An unqualified name, optionally with a template binding."/>
- </eAnnotations>
- <eOperations name="toString" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The template binding to be used, if the name denotes a template."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An unqualified name. For names that appeared as unrestricted names in the input text, the string value here excludes the surrounding single quote characters and has any escape sequences resolved to the denoted special characters."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="TemplateBinding" abstract="true" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A list of type names used to provide arguments for the parameters of a template."/>
- </eAnnotations>
- <eOperations name="toString" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- <eOperations name="matches" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eParameters name="template" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="copy" lowerBound="1" eType="#//TemplateBinding"/>
- <eOperations name="bindTo" unique="false" upperBound="-1" eType="#//ElementReference">
- <eParameters name="template" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="NamedTemplateBinding" eSuperTypes="#//TemplateBinding">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A template binding in which the arguments are matched to formal template parameters by name."/>
- </eAnnotations>
- <eOperations name="toString" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA; '&lt;' + &#xA; self.substitution->iterate(substitution : TemplateParameterSubstitution; s : 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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The substitutions of arguments for template parameters."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="TemplateParameterSubstitution" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A specification of the substitution of an argument type name for a template parameter."/>
- </eAnnotations>
- <eOperations name="actualParameterName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="NameBinding{name = self.parameterName}.toName()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="toString" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.parameterName + '=>' + argumentName.pathName"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="copy" lowerBound="1" eType="#//TemplateParameterSubstitution">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="TemplateParameterSubstitution{&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the template parameter."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="argumentName" lowerBound="1"
- eType="#//QualifiedName" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the argument type."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="referent" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A unary expression with a numeric operator."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.integerType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand.lower"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="numericUnaryExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A numeric unary expression must have type Integer.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="numericUnaryExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A numeric unary expression has the same multiplicity lower bound as its&#xA;operand expression.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="numericUnaryExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A numeric unary expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="numericUnaryExpressionOperand" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The operand expression must have type Integer and a multiplicity upper&#xA;bound of 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.isIntegerType(self.operand.type) and self.operand.upper = 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="UnaryExpression" abstract="true" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression consisting of an operator acting on a single operand expression."/>
- </eAnnotations>
- <eOperations name="unaryExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the operand of a unary expression are the same as&#xA;those before the unary expression."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="By default, the assignments after a unary expression are the same as&#xA;those after its operand expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand.assignmentAfter"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The symbol representing the operator."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="operand" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression giving the operand."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ForAllOrExistsOrOneExpression" eSuperTypes="#//SequenceExpansionExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A sequence expansion expression with a forAll, exists or one operation."/>
- </eAnnotations>
- <eOperations name="forAllOrExistsOrOneExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A forAll, exists or one expression has the type Boolean."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forAllOrExistsOrOneExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A forAll, exists or one expression has a multiplicity lower bound of 1."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forAllOrExistsOrOneExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A forAll, exists or one expression has a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forAllOrExistsOrOneExpressionArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument of a forAll, exists or one expression must have type Boolean and a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="IsolationExpression" eSuperTypes="#//UnaryExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression used to evaluate its operand expression in isolation."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand.type"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand.lower"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand.upper"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isolationExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An isolation expression has the type of its operand expression.&#xA;(See the type() expression.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="isolationExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An isolation expression has the multiplicity lower bound of its&#xA;operand expression.&#xA;(see the lower() expression.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="isolationExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An isolation expression has the multiplicity upper bound of its&#xA;operand expression.&#xA;(See the upper() expression.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="BinaryExpression" abstract="true" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression consisting of an operator acting on two operand expressions."/>
- </eAnnotations>
- <eOperations name="validateAssignments" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="In general the assignments before the operand expressions of a binary&#xA;expression are the same as those before the binary expression and, if an&#xA;assignment for a name is changed in one operand expression, then the&#xA;assignment for that name may not change in the other operand expression.&#xA;(This is overridden for conditional logical expressions.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand1.newAssignments().name->excludesAll(self.operand2.newAssignments().name)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="noNullArguments" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="By default, null arguments are not allowed for binary expressions.&#xA;(This is overridden for equality expressions.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="true"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="binaryExpressionOperandMultiplicity" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The operands of a binary expression must both have a multiplicity upper&#xA;bound no greater than 1. If null arguments are not allowed (as given by&#xA;the noNullArguments helper operation), then the upper bounds must be&#xA;exactly 1."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="The assignments in the operand expressions of a binary expression must be&#xA;valid (as determined by the validateAssignments helper operation)."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.validateAssignments()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a binary expression include all the assignments&#xA;before the expression that are not reassigned in either operand&#xA;expression, plus the new assignments from each of the operand expressions."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression giving the first operand."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="operand2" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression giving the second operand."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The symbol representing the operator."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="BooleanUnaryExpression" eSuperTypes="#//UnaryExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A unary expression with a Boolean operator."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.booleanType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand.lower"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="booleanUnaryExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A Boolean unary expression has type Boolean.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="booleanUnaryExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A Boolean unary expression has the same multiplicity lower bound&#xA;as its operand expression.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="booleanUnaryExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A Boolean unary expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="booleanUnaryExpressionOperand" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The operand expression of a Boolean unary expression must have type&#xA;Boolean and a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.isBooleanType(self.operand.type) and self.operand.upper = 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="CastExpression" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression used to filter values by type."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a cast expression is the referent of the given type name (if&#xA;there is one).&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="castExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A cast expression has a multiplicity lower bound of 0.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="castExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A cast expression has a multiplicity upper bound that is the same as the&#xA;upper bound of its operand expression.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="castExpressionTypeResolution" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the cast expression has a type name, then it must resolve to a&#xA;non-template classifier."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the operand of a cast expression are the same as&#xA;those before the cast expression."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a cast expression are the same as those after its&#xA;operand expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand.assignmentAfter"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="operand" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The operand expression of the cast expression."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" eType="#//QualifiedName"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The named type of the cast expression (if any)"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAny" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the cast expression has an empty type."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="PositionalTuple" eSuperTypes="#//Tuple">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A tuple in which the arguments are matched to parameters in order by position."/>
- </eAnnotations>
- <eOperations name="size" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression->size()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="inputFor" ordered="false" upperBound="-1" eType="#//InputNamedExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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="outputForExpression" eType="#//OutputNamedExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;if self.expression->excludes(expression) then null&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;else&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;let i = self.expression->indexOf(expression) in&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;let parameter = self.invocation.parameter->at(i) in&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;OutputNamedExpression{&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;name = parameter.name(),&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;expression = expression,&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;owner = self&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;endif"/>
- </eAnnotations>
- <eParameters name="expression" lowerBound="1" eType="#//Expression"/>
- </eOperations>
- <eOperations name="positionalTupleArguments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A positional tuple must not have more arguments than the invocation it is for has parameters."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.size() &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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument expressions for this tuple, to be matched by position to the invocation parameters."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="Tuple" abstract="true" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A list of expressions used to provide the arguments for an invocation."/>
- </eAnnotations>
- <eOperations name="size" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
- <eOperations name="inputCached" ordered="false" upperBound="-1" eType="#//InputNamedExpression"/>
- <eOperations name="input" ordered="false" upperBound="-1" eType="#//InputNamedExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.inputFor(self.invocation.parameter)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="inputFor" ordered="false" upperBound="-1" eType="#//InputNamedExpression">
- <eParameters name="parameters" upperBound="-1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="outputCached" ordered="false" upperBound="-1" eType="#//OutputNamedExpression"/>
- <eOperations name="output" ordered="false" upperBound="-1" eType="#//OutputNamedExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.outputFor(self.invocation.parameter)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="outputFor" ordered="false" upperBound="-1" eType="#//OutputNamedExpression">
- <eParameters name="parameters" upperBound="-1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="outputForExpression" eType="#//OutputNamedExpression">
- <eParameters name="expression" lowerBound="1" eType="#//Expression"/>
- </eOperations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA;-- let assignmentsBefore = self.assignmentsBefore() in&#xA;-- if not element.oclIsKindOf(NameExpression) then assignmentsBefore&#xA;-- else&#xA;-- let output = self.outputForExpression(element.oclAsType(NameExpression)) in&#xA;-- if output = null then assignmentsBefore&#xA;-- else self.updateFor(assignmentsBefore, output)&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A tuple has the same number of inputs as its invocation has input&#xA;parameters. For each input parameter, the tuple has a corresponding input&#xA;with the same name as the parameter and an expression that is the&#xA;matching argument from the tuple, or an empty sequence construction&#xA;expression if there is no matching argument."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="tupleOutputDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A tuple has the same number of outputs as its invocation has output&#xA;parameters. For each output parameter, the tuple has a corresponding&#xA;output with the same name as the parameter and an expression that is the&#xA;matching argument from the tuple, or an empty sequence construction&#xA;expression if there is no matching argument."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="tupleNullInputs" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An input parameter may only have a null argument if it has a multiplicity&#xA;lower bound of 0."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="An output parameter may only have a null argument if it is an out parameter."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before each expression in a tuple are the same as the&#xA;assignments before the tuple, except in the case of a name expression&#xA;that defines a new local name, in which case the assigned source for the&#xA;new name is included in the assignments before the name expression. (Note&#xA;that the assigned source for a new name is included before the name&#xA;expression so that the nameExpressionResolution constraint is not&#xA;violated.) The assignments before the tuple are the same as the&#xA;assignments after the feature reference of the invocation of the tuple,&#xA;if the invocation has one, or otherwise the assignments before the&#xA;invocation.&#xA;&#xA;CHANGE: An assignment before is NOT given to a name expression that&#xA;that defines a local name. Instead the nameExpressionResolution&#xA;constraint has been modified. (This avoids a potential infinite recursion&#xA;in InvocationExpression::bindTemplateImplicitArguments().)&#xA;&#xA;(See also the InvocationExpression::assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="tupleAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A name may be assigned in at most one argument expression of a tuple."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="The argument expressions from this tuple, matched to the input parameters&#xA;(direction in and inout) of the invocation. An empty sequence construction&#xA;expression is included for any input parameter that is not explicitly&#xA;matched in the tuple."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.inputCached()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="invocation" lowerBound="1"
- eType="#//InvocationExpression" eOpposite="#//InvocationExpression/tuple">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The invocation expression of which this tuple is a part."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="output" ordered="false"
- upperBound="-1" eType="#//OutputNamedExpression" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument expressions from this tuple, matched to the output parameters&#xA;(direction inout and out) of the invocation. An empty sequence construction&#xA;expression is included for any output parameter that is not explicitly&#xA;matched in the tuple."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.outputCached()"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="NamedExpression" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A pairing of a parameter name and an argument expression in a named tuple."/>
- </eAnnotations>
- <eOperations name="actualName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="NameBinding{name = self.name}.toName()"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The parameter name."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument expression."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="index" eType="#//Expression"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression whose value gives an index into an ordered parameter.&#xA;(This is only used in link operation expressions.)"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="InputNamedExpression" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A pairing of an input parameter name and an argument expression."/>
- </eAnnotations>
- <eOperations name="tuple" lowerBound="1" eType="#//Tuple">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.owner().oclAsType(_'Tuple')"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="namedExpressionIsCollectionConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Collection conversion is required if the type of the corresponding&#xA;parameter is a collection class and the type of the argument expression&#xA;is not."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="namedExpressionIsBitStringConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Bit string conversion is required if the type of the type of the&#xA;corresponding parameter is BitString, or a collection class instantiated&#xA;with a BitString type, and the type of the argument expression is not&#xA;BitString."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The parameter name."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
- eType="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument expression."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="index" eType="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression whose value gives an index into an ordered parameter.&#xA;(This is only used in link operation expressions.)"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCollectionConversion"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the argument expression requires collection conversion."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#xA; let parameter = self.tuple().invocation.parameterNamed(self.name) in&#xA; &#x9;parameter &lt;> null and&#xA; &#x9;let parameterType = parameter.type() in&#xA;&#x9; parameterType &lt;> null and self.expression.type &lt;> null and&#xA;&#x9; self.isCollectionClass(parameterType) and &#xA;&#x9; not self.isCollectionClass(self.expression.type)"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the argument expression requires bit string conversion."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#xA; let parameter = self.tuple().invocation.parameterNamed(self.name) in&#xA; &#x9;parameter &lt;> null and&#xA; &#x9;let parameterType = parameter.type() in&#xA;&#x9; parameterType &lt;> null and self.expression &lt;> null and&#xA;&#x9; (self.isBitStringType(parameterType) or &#xA;&#x9; self.isBitStringCollectionClass(parameterType)) and &#xA;&#x9; not self.isBitStringType(self.expression.type)"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="InvocationExpression" abstract="true"
- eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression denoting the invocation of a behavior or operation, or the&#xA;sending of a signal."/>
- </eAnnotations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="If collection conversion would be required, return the toSequence&#xA;return type, rather than the expression type."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="Returns references to the elements that act as the parameters of the&#xA;referent. If the referent is a behavior or operation, these are the owned&#xA;parameters, in order. If the referent is an association end, then the&#xA;parameters are the other association ends of the association of the&#xA;referent end, which are treated as if they were in parameters. Otherwise&#xA;(by default), they are any properties of the referent (e.g., signal&#xA;attributes), which are treated as if they were in parameters. (This is&#xA;defined as a helper operation, so that it can be overridden by subclasses&#xA;of InvocationExpression, if necessary.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="InvocationExpression_parameterElements()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="InvocationExpression_parameterElements" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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.associationEnds()->reject(equals(referent))->&#xA; collect(p | self.parameterFromPropertyWithMultiplicity(p, '1', '1'))->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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An invocation expression is a behavior invocation if its referent is a&#xA;behavior."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="invocationExpressionIsAssociationEndDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An invocation expression is an association end read if its referent is an&#xA;association end."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="invocationExpressionIsOperationDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An invocation expression is an operation call if its referent is an&#xA;operation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="invocationExpressionIsDestructorDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An invocation expression is a destructor call either implicitly or if it&#xA;is an explicit operation call to a destructor operation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="invocationExpressionIsImplicitDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An invocation expression is an implicit object destruction if it has a&#xA;feature with the name &quot;destroy&quot; and no explicit referents."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="invocationExpressionIsSignalDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An invocation expression is a signal send if its referent is a signal."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="invocationExpressionParameterDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The parameters of an invocation expression are given by the result of the&#xA;parameterElements helper operation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="invocationExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the referent of an invocationExpression is an operation or behavior&#xA;with a return parameter, then the type of the expression is that of the&#xA;return parameter (if any). If the referent is a classifier, then the type&#xA;is the referent. If the referent is a property, then the type is that of&#xA;the property. Otherwise the expression has no type.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="invocationExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the referent of an invocationExpression is an operation or behavior&#xA;with a return parameter, then the upper bound of the expression is that&#xA;of the return parameter. If the referent is a classifier, then the upper&#xA;bound is 1. If the referent is a property, then the upper bound is that&#xA;of the property. Otherwise the upper bound is 0.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="invocationExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the referent of an invocationExpression is an operation or behavior&#xA;with a return parameter, then the lower bound of the expression is that&#xA;of the return parameter. If the referent is a classifier, then the lower&#xA;bound is 1. If the referent is a property, then the lower bound is that&#xA;of the property. Otherwise the lower bound is 0.&#xA;(see the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="invocationExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the target expression of the feature reference of&#xA;an invocation expression (if any) are the same as the assignments before&#xA;the invocation expression.&#xA;(See the SyntaxElement::assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after an invocation expression are the same as those&#xA;after the tuple of the expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.tuple.assignmentsAfter()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="invocationExpressionTemplateParameters" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="TODO: Add this constraint to the standard.&#xA;if the referent is an implicit template binding, then all the template&#xA;parameters must be for classifiers and the actuals conform to any&#xA;constraining classifiers."/>
- </eAnnotations>
- <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://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this is a behavior invocation or not."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="OutputNamedExpression"/>
- <details key="unique" value="false"/>
- <details key="upper" value="*"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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/GenModel">
- <details key="documentation" value="Whether this is an association read or not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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/GenModel">
- <details key="documentation" value="For an invocation of a feature, the reference to that feature. This&#xA;property is set for a feature invocation expression or for an expression&#xA;initially parsed as a behavior invocation expression that disambiguates&#xA;to a feature invocation expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.feature()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isOperation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this is an operation call or not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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/GenModel">
- <details key="documentation" value="If this is an operation call, whether the operation is a destructor."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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/GenModel">
- <details key="documentation" value="Whether this is an implicit object destruction."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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/GenModel">
- <details key="documentation" value="The behavior, operation or signal being invoked. The derivation of this&#xA;property is specific to each kind of invocation expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="referentCached()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="parameter" upperBound="-1"
- eType="#//ElementReference" volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Element references to the parameters of the referent, in order."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.parameterElements()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isSignal" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this is a signal send or not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The tuple for the invocation expression."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="OutputNamedExpression" eSuperTypes="#//InputNamedExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A named argument expression for an output parameter."/>
- </eAnnotations>
- <eOperations name="outputNamedExpressionLeftHandSideDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The equivalent left-hand side for an output named expression depends on&#xA;the kind of expression. If the expression is a name expression with no&#xA;disambiguation, then the left-hand side is a name left-hand side with the&#xA;name from the name expression. If the expression is a name expression&#xA;that disambiguates to a feature reference, then the left-hand side is a&#xA;feature left-hand side for that feature reference. If the expression is a&#xA;property access expression, then the left-hand side is a feature left-hand&#xA;side for the feature reference of the property access expression. If the&#xA;expression is a sequence access expression, then the left-hand side is a&#xA;name left-hand side or feature left-hand side, as above, depending on&#xA;whether the primary expression of the sequence access expression is a&#xA;name expression or property access expression, and an index given by the&#xA;index expression of the sequence access expression. Otherwise the left-&#xA;hand side is empty."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="outputNamedExpressionForm" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument for an output parameter must be either be null, a name&#xA;expression, a property access expression, or a sequence access expression&#xA;whose primary expression is a name expression or a property access&#xA;expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression = null or self.hasLegalExpression()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="hasLegalExpression" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="The argument expression considered as an assignment left-hand side."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The left-hand side of an assignment expression. NOTE: The derivations for&#xA;the derived properties of LeftHandSide are specific to its various subclasses.&#xA;"/>
- </eAnnotations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="If a left-hand side has an index, then the index expression must have a&#xA;multiplicity upper bound no greater than 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.index() &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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An optional expression that evaluates to an index into the values of an&#xA;ordered sequence.&#xA;property index : Expression[?] { composes };"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentBefore" ordered="false"
- upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the left-hand side."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.assignmentsBefore()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentAfter" ordered="false"
- upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after the left-hand side."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.assignmentsAfter()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="referent" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reference to the assignable element denoted by this left-hand side, if&#xA;one exists (i.e., the left-hand side is not for the first assignment of a&#xA;local name)."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.referent()"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SequenceAccessExpression" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression used to access a specific element of a sequence."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.primary.type"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="0"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a sequence access expression is the same as the type of its&#xA;primary expression.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceAccessExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity lower bound of a sequence access expression is 0.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceAccessExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity upper bound of a sequence access expression is 1.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceAccessExpressionIndexType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of the index of a sequence access expression must be Integer."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="The multiplicity upper bound of the index of a sequence access expression&#xA;must be 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.index.upper = 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="primary" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression whose value is the sequence being accessed."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="index" lowerBound="1" eType="#//Expression"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression whose value is the index of the element being accessed in&#xA;the sequence."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="StringLiteralExpression" eSuperTypes="#//LiteralExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression that comprises a String literal."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.stringType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="stringLiteralExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a string literal expression is String.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="image" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The textual image of the literal token for this expression, with quote characters removed and escaped sequences resolved to the denoted special character."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="LiteralExpression" abstract="true" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression that comprises a primitive literal."/>
- </eAnnotations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="literalExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity upper bound of a literal expression is always 1.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="literalExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity lower bound of a literal expression is always 1.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SequenceOperationExpression" eSuperTypes="#//InvocationExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression used to invoke a behavior as if it was an operation on a target sequence as a whole."/>
- </eAnnotations>
- <eOperations name="feature" eType="#//FeatureReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="null"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="referent" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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="firstArgument" lowerBound="1" eType="#//OutputNamedExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA;&#x9;&#x9;&#x9;&#x9;let firstParameter = self.firstParameter() in&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;OutputNamedExpression{&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;name = if firstParameter = null then null else firstParameter.name() endif,&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;expression = self.primary.expression,&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;index = null,&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;owner = self.tuple&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="sequenceOperationExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referent for a sequence operation expression is the behavior named by&#xA;the operation for the expression.&#xA;(See the referent() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceOperationExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="There is no feature for a sequence operation expression.&#xA;(See the feature() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceOperationExpressionOperationReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="There must be a single behavior that is a resolution of the operation&#xA;qualified name of a sequence operation expression with a least one&#xA;parameter, whose first parameter has direction in or inout, has&#xA;multiplicity [0..*] and to which the target primary expression is&#xA;assignable."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="If the first parameter of the referent has direction inout, then the&#xA;parameter type must have the same type as the primary expression, the&#xA;primary expression must have the form of a left-hand side and, if the&#xA;equivalent left-hand side is for a local name, that name must already&#xA;exist."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="The type of an input argument expression of a sequence operation&#xA;parameter must be assignable to its corresponding parameter. The type of&#xA;an output parameter must be assignable to its corresponding argument&#xA;expression. (Note that this implies that the type of an argument&#xA;expression for an inout parameter must be the same as the type of that&#xA;parameter.)"/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the primary expression of a sequence operation&#xA;expression are the same as the assignments before the sequence operation&#xA;expression.&#xA;(See the InvocationExpression::assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceOperationExpressionIsCollectionConversionDerivation"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Collection conversion is required if the type of the primary expression&#xA;of a sequence operation expression is a collection class and the&#xA;multiplicity upper bound of the primary expression is 1."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceOperationExpressionIsBitStringConversionDerivation"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="BitString conversion is required if type of the first parameter of the&#xA;referent of a sequence operation expression is BitString and either the&#xA;type of its primary expression is Integer or collection conversion is&#xA;required and the type of its primary expression is a collection class&#xA;whose argument type is Integer."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceOperationExpressionAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A local name that is assigned in the primary expression of a sequence&#xA;operation expression may not be assigned in any expression in the tuple&#xA;of the sequence operation expression."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the operation of a sequence operation expression has a first&#xA;parameter whose direction is inout, then the effective left-hand side for&#xA;the expression is constructed as follows: If the primary is a name&#xA;expression, then the left-hand side is a name left-hand side with the&#xA;name from the name expression as its target. If the primary is a property&#xA;access expression, then the left-hand side is a feature left hand side&#xA;with the feature reference from the property access expression as its&#xA;feature. If the primary is a sequence access expression whose primary is&#xA;a name expression or a property access expression, then the left-hand&#xA;side is constructed from the primary of the sequence access expression as&#xA;given previously and the index of the sequence access expression becomes&#xA;the index of the left-hand side."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a sequence operation expression include those made&#xA;in the primary expression and those made in the tuple and, for an &quot;in&#xA;place&quot; operation (one whose first parameter is inout), that made by the&#xA;sequence operation expression itself."/>
- </eAnnotations>
- <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" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns the list of parameter elements from the superclass operation,&#xA;with the first parameter removed (since the argument for the first&#xA;parameter is given by the primary expression of a sequence operation&#xA;expression, not in its tuple)."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression or class name whose value is gives the sequence to be&#xA;operated on."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="operation" eType="#//QualifiedName"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The qualified name of the behavior being invoked."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCollectionConversion"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the primary expression requires collection conversion."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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/GenModel">
- <details key="documentation" value="Whether type primary expression requires BitString conversion."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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/GenModel">
- <details key="documentation" value="The effective left-hand side corresponding to the primary expression, if&#xA;the sequence operation is ?in place? (that is, has a first parameter with&#xA;direction inout)."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A sequence expansion expression with a select or reject operation."/>
- </eAnnotations>
- <eOperations name="selectOrRejectExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A select or reject expression has the same type as its primary expression."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="selectOrRejectExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A select or reject expression has a multiplicity lower bound of 0."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="selectOrRejectExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A select or reject expression has a multiplicity upper bound of *."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="selectOrRejectExpressionArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument of a select or reject expression must have type Boolean and a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ClassExtentExpression" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression used to obtain the objects in the extent of a class."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a class extent expression is the given class.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classExtentExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity upper bound of a class expression is *.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classExtentExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity lower bound of a class extent expression is 0.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classExtentExpressionExtentType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The given type name must resolve to a non-template class."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.validateClassExtentExpressionExtentType()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="validateClassExtentExpressionExtentType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.type &lt;> null and not self.type.isTemplate()"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="className" lowerBound="1"
- eType="#//QualifiedName" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the class whose extent is to be obtained."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="PositionalTemplateBinding" eSuperTypes="#//TemplateBinding">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A template binding in which the arguments are matched to formal template parameters in order by position."/>
- </eAnnotations>
- <eOperations name="toString" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA; '&lt;' + &#xA; self.argumentName->iterate(name : QualifiedName; s : 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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The arguments for this template binding, to be matched by position to the template parameters."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ConditionalLogicalExpression" eSuperTypes="#//BinaryExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A binary expression with a conditional logical expression, for which the&#xA;evaluation of the second operand expression is conditioned on the result of&#xA;evaluating the first operand expression."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.booleanType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A conditional logical expression has type Boolean.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="conditionalLogicalExpressionLower" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A conditional logical expression has a multiplicity lower bound of 0 if&#xA;the lower bound if either operand expression is 0 and 1 otherwise.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="conditionalLogicalExpressionUpper" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A conditional logical expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="conditionalLogicalExpressionOperands" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The operands of a conditional logical expression must have type Boolean."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.isBooleanType(self.operand1.type) and self.isBooleanType(self.operand2.type)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="validateAssignments" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the first operand expression of a conditional&#xA;logical expression are the same as those before the conditional logical&#xA;expression. The assignments before the second operand expression are the&#xA;same as those after the first operand expression.&#xA;(See the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="true"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="If a name has the same assigned source after the second operand&#xA;expression as before it, then that is its assigned source after the&#xA;conditional logical expression. If a name is unassigned before the&#xA;second operand expression, then it is considered unassigned after the&#xA;conditional logical expression, even if it has an assigned source after&#xA;the second operand expression. Otherwise its assigned source after the&#xA;conditional logical expression is the conditional logical expression itself."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression used to create or destroy the links of an association."/>
- </eAnnotations>
- <eOperations name="referent" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A link operation expression is for link creation if its operation is&#xA;&quot;createLink&quot;."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="linkOperationExpressionIsClearDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A link operation expression is for clearing an association if the&#xA;operation is &quot;clearAssoc&quot;."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="linkOperationExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referent for a link operation expression is the named association.&#xA;(See the referent() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="linkOperationExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="There is no feature for a link operation expression.&#xA;(See the feature() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="linkOperationExpressionAssociationReference" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The qualified name of a link operation expression must resolve to a&#xA;single association."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA;&#x9;self.referent &lt;> null and &#xA;&#x9;-- Also check that the association owns all its ends.&#xA;&#x9;self.referent.properties()->forAll(isAssociationEnd())"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="linkOperationExpressionArgumentCompatibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Each argument expression must be assignable to its corresponding&#xA;expression."/>
- </eAnnotations>
- <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" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="For a clear association operation, returns a single, typeless parameter.&#xA;Otherwise, returns the ends of the named association."/>
- </eAnnotations>
- <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.associationEnds()->collect(property | &#xA; -- NOTE: Arguments for a link operation have multiplicity 1..1.&#xA; parameterFromPropertyWithMultiplicity(property, '1', '1')&#xA; )->asOrderedSet()&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the link operation."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCreation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the operation is for link creation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operation = 'createLink'"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isClear" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the operation is clearing the association."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operation = 'clearAssoc'"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="associationName" lowerBound="1"
- eType="#//QualifiedName" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The qualified name of the association whose links are being acted on."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="EqualityExpression" eSuperTypes="#//BinaryExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A binary expression that tests the equality of its operands."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.booleanType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="equalityExpressionIsNegatedDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An equality expression is negated if its operator is &quot;!=&quot;."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="equalityExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An equality expression has type Boolean.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="equalityExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An equality expression has a multiplicity lower bound of 1.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="equalityExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An equality expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="noNullArguments" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns false for an equality expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isNegated" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the test is for being not equal."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operator = '!='"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="AssignmentExpression" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression used to assign a value to a local name, parameter or property."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An assignment expression is a simple assignment if the assignment&#xA;operator is &quot;=&quot;."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionIsArithmeticDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An assignment expression is an arithmetic assignment if its operator is a&#xA;compound assignment operator for an arithmetic operation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionIsDefinitionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An assignment expression is a definition if it is a simple assignment and&#xA;its left hand side is a local name for which there is no assignment&#xA;before the expression."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The left hand side of an assignment expression is a feature if it is a&#xA;kind of FeatureLeftHandSide."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionIsIndexedDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The left hand side of an assignment expression is indexed if it has an index."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionIsDataValueUpdateDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An assignment expression is a data value update if its left hand side is&#xA;an attribute of a data value held in a local name or parameter."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionAssignmentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The new assigned source for an assignment to a local name is the&#xA;assignment expression. If the assignment is a definition, then the type&#xA;is given by the right hand side, the multiplicity upper bound is 1 if the&#xA;upper bound of the right hand side is 1 and otherwise * and the&#xA;multiplicity lower bound is 0. Otherwise, the type is the same as the&#xA;left-hand side and the multiplicity is also the same as the left-hand&#xA;side, if the left-hand side is not indexed, and is * if it is indexed."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the left-hand side of an assignment expression is a feature, then the&#xA;feature of the assignment is the referent of the left-hand side."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionExpressionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="For a compound assignment, the effective expression is the left-hand side&#xA;treated as a name expression, property access expression or sequence&#xA;access expression, as appropriate for evaluation to obtain the original&#xA;value to be updated."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A simple assignment expression has the same type as its right-hand side&#xA;expression. A compound assignment expression has the same type as its&#xA;left-hand side.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An assignment expression has the same multiplicity upper bound as its&#xA;right-hand side expression.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A simple assignment expression has the same multiplicity lower bound as&#xA;its right-hand side expression. A compound assignment expression has the&#xA;same multiplicity as its left-hand side.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionSimpleAssignmentTypeConformance" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the left-hand side of a simple assignment is not a new local name, and&#xA;the right-hand side is not null, then the left-hand side must either be&#xA;untyped or have a type that conforms to the type of the right-hand side&#xA;expression."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="If the left-hand side of a simple assignment is not a new local name and&#xA;the multiplicity upper bound of the left-hand side is less than or equal&#xA;to 1, then the multiplicity upper bound of the right-hand side cannot be&#xA;greater than that of the left-hand side."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="For a compound assignment, if the operator is an arithmetic operator,&#xA;then either the left-hand side and the right-hand side both have type&#xA;Integer or they both have type String and the operator is +. If the&#xA;operator is a logical operator, then either the left-hand side and the&#xA;right-hand side both have type Boolean or Bit String or the left-hand&#xA;side has type Bit String and the right-hand side has type Integer. If the&#xA;operator is a shift operator, then the left-hand side must have type&#xA;BitString and the right-hand side must have type Integer."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="For a compound assignment, both the left-hand and right-hand sides must&#xA;have a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="(not self.isSimple) implies &#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assigned source of a name before the right-hand side expression of an&#xA;assignment expression is the same as the assigned source before the&#xA;assignment expression. The assigned source of a name before the left-hand&#xA;side is the assigned source after the right-hand side expression.&#xA;(See the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionIsCollectionConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An assignment requires collection conversion if the type of the&#xA;right-hand side is a collection class and its multiplicity upper bound&#xA;is 1, and the type of the left-hand side is not a collection class."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionIsBitStringConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An assignment requires BitString conversion if the type of the left-hand&#xA;side is BitString and either the type of the right-hand side is Integer&#xA;or collection conversion is required and the type of the right-hand side&#xA;is a collection class whose argument type is Integer."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="assignmentExpressionDataValueUpdateLegality" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If an assignment expression has a feature with a primary expression whose&#xA;type is a data type, then the assignment expression must be a data value&#xA;update."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="The assignments after an assignment expression are the assignments after&#xA;the left-hand side, updated by the assignment from the assignment&#xA;expression, if any."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The image of the assignment operator used in the expression."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="leftHandSide" lowerBound="1"
- eType="#//LeftHandSide" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The left-hand side of the assignment, to which a value is to be assigned."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="rightHandSide" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The right-hand side expression of the assignment, which produces the value being assigned."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="assignment" eType="#//AssignedSource"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the left-hand side is a name, then the new assigned source for that name.&#xA;(Note: This also includes assignments to parameters and local names that&#xA;are the source of data value updates.)"/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="If the left-hand side is a feature, then the referent for that feature."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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/GenModel">
- <details key="documentation" value="If the left-hand side is a feature, whether it has an index or not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.leftHandSide.index() &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/GenModel">
- <details key="documentation" value="If this is a compound assignment, whether the compound assignment&#xA;operator is arithmetic or not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="Set{'+=', '-=', '*=', '/=', '%='}->includes(self.operator)"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isLogical" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="Set{'&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/GenModel">
- <details key="documentation" value="Whether this assignment is the definition of a new local name or not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.isSimple and not self.isIndexed and &#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/GenModel">
- <details key="documentation" value="Whether this is a simple assignment or not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operator = '='"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If this is a compound assignment, then the effective expression used to&#xA;obtain the original value of the left-hand side to be updated."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.leftHandSide.expression()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isFeature" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the left-hand side is a feature or not."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDataValueUpdate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this assignment updates an attribute of a data value held in a&#xA;local name or parameter."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.leftHandSide.isDataValueUpdate()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCollectionConversion"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether collection conversion is required for this assignment."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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/GenModel">
- <details key="documentation" value="Whether BitString conversion is required for this assignment."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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 self.isBitStringType(lhsType) 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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A binary expression with a logical operator."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A logical expression has type Boolean if it is not bit-wise and type&#xA;BitString if it is bit-wise.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="logicalExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A logical expression has a multiplicity lower bound of 0 if the lower&#xA;bound if either operand expression is 0 and 1 otherwise.annotation&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="logicalExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A logical expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="logicalExpressionOperands" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The operands of a logical expression must have type Boolean, Integer or&#xA;BitString. However, if one of the operands is Boolean, then the other&#xA;must also be Boolean."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="BitString conversion is required if the first operand expression of a&#xA;logical expression has type Integer."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="logicalExpressionIsBitStringConversion2Derivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="BitString conversion is required if the second operand expression of a&#xA;logical expression has type Integer."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="logicalExpressionIsBitWiseDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A logical expression is bit-wise if the type of its first operand is not&#xA;Boolean."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitWise" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this is a bit-wise logical operation on bit strings."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="SequenceConstructionExpression"/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="SequenceConstructionExpression"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="not self.isBooleanType(self.operand1.type)"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the first operand expression requires BitString conversion."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.isIntegerType(self.operand1.type)"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion2"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the second operand expression requires BitString conversion."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="SequenceConstructionExpression"/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="SequenceConstructionExpression"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.isIntegerType(self.operand2.type)"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SequenceConstructionExpression" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression used to construct a sequence of values."/>
- </eAnnotations>
- <eOperations name="collectionType" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If this expression is contained in the element list of a sequence&#xA;construction expression with a collection type, then return that type&#xA;name. Otherwise return null."/>
- </eAnnotations>
- <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="constructorReference" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA;&#x9;&#x9;&#x9;&#x9;if self.type = null then null&#xA;&#x9;&#x9;&#x9;&#x9;else&#xA;&#x9;&#x9; let name = self.type.name() in&#xA;&#x9;&#x9; let operationReferents = type.ownedMembers()->select(name() = name and isOperation()) in&#xA;&#x9;&#x9; if operationReferents->size() &lt;> 1 then null&#xA;&#x9;&#x9; else operationReferents->any(true).constructorReference()&#xA;&#x9;&#x9; endif&#xA;&#x9;&#x9;&#x9; 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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the type name of a sequence construction expression is not empty,&#xA;then the type of the expression is the classifier to which the type name&#xA;resolves."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceConstructionExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a sequence construction expression has multiplicity, then its&#xA;multiplicity upper bound is given by its elements, if this is not empty,&#xA;and zero otherwise. If a sequence construction expression does not have&#xA;multiplicity, then its multiplicity upper bound is one."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceConstructionExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a sequence construction expression has multiplicity, then its&#xA;multiplicity lower bound is given by its elements, if this is not empty,&#xA;and zero otherwise. If a sequence construction expression does not have&#xA;multiplicity, then its multiplicity lower bound is one."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceConstructionExpressionType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the type name of a sequence construction expression is not empty, then&#xA;it must resolve to a non-template classifier. If the expression does not&#xA;have multiplicity, then the type name must not be empty and the&#xA;classifier to which it resolves must be the instantiation of a collection&#xA;class."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="If the elements of a sequence construction expression are given by a&#xA;sequence range, then the expression must have type Integer. If the&#xA;elements are given by a sequence element list, and the sequence&#xA;construction expression has a non-empty type, then each expression in the&#xA;list must have a type that either conforms to the type of the sequence&#xA;construction expression or is convertible to it by bit string conversion."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the elements of a sequence construction expression are given by a&#xA;sequence expression list, then the assignments before the first&#xA;expression in the list are the same as the assignments before the&#xA;sequence construction expression, and the assignments before each&#xA;subsequent expression are the assignments after the previous expression.&#xA;If the elements are given by a sequence range, the assignments before&#xA;both expressions in the range are the same as the assignments before the&#xA;sequence construction expression.&#xA;(See the SyntaxElement::assignmentsBefore(element) operation. See also&#xA;the SequenceExpressionList::assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the elements of the sequence construction expression are given by a&#xA;sequence expression list, then return the assignments after the last&#xA;expression in the list (if the list is empty, then return the assignments&#xA;before the sequence construction expression). If the elements are given&#xA;by a sequence range, then return the union of the assignments after each&#xA;of the expressions in the range."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The specification of the elements in the sequence."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="hasMultiplicity" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the sequence construction expression has a multiplicity indicator."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" eType="#//QualifiedName"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the type of the elements in the sequence."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAny" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the sequence construction expression has an empty type."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SequenceElements" abstract="true" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A specification of the elements of a sequence."/>
- </eAnnotations>
- <eOperations name="conformsTo" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eParameters name="type" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource"/>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity upper bound of the elements of the sequence. The&#xA;derivation for this property is given in the subclasses of SequenceElements."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.upper()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity lower bound of the elements of the sequence. The derivation&#xA;for this property is given in the subclasses of SequenceElements."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.lower()"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="CollectOrIterateExpression" eSuperTypes="#//SequenceExpansionExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A sequence expansion expression with a collect or iterate operation."/>
- </eAnnotations>
- <eOperations name="collectOrIterateExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A collect or iterate expression has the same type as its argument expression."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="collectOrIterateExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A collect or iterate expression has a multiplicity lower bound that is the product of the bounds of its primary and argument expressions."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="collectOrIterateExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A collect or iterate expression has a multiplicity upper bound that is the product of the bounds of its primary and argument expressions."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="IsUniqueExpression" eSuperTypes="#//SequenceExpansionExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A sequence expansion expression with a isUnique."/>
- </eAnnotations>
- <eOperations name="isUniqueExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An isUnique expression has the type Boolean."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="isUniqueExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An isUnique expression has a multiplicity lower bound of 1."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="isUniqueExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An isUnique expression has a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="isUniqueExpressionExpressionArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument of an isUnique expression must have a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ArithmeticExpression" eSuperTypes="#//BinaryExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A binary expression with an arithmetic operator."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand1.type"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An arithmetic expression is a string concatenation expression if its type&#xA;is String."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="arithmeticExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of an arithmetic expression is the same as the type of its operands.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="arithmeticExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An arithmetic expression has a multiplicity lower bound of 0 if the lower&#xA;bound if either operand expression is 0 and 1 otherwise.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="arithmeticExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An arithmetic expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="arithmeticExpressionOperandTypes" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The operands of an arithmetic expression must both have type Integer,&#xA;unless the operator is +, in which case they may also both have type String."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this is a string concatenation expression."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="FeatureLeftHandSide"/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="FeatureLeftHandSide"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.isStringType(self.type)"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="FeatureLeftHandSide" eSuperTypes="#//LeftHandSide">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A left-hand side that is a property reference."/>
- </eAnnotations>
- <eOperations name="referent" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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="expression" eType="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="index" eType="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the expression of the feature reference of a&#xA;feature left-hand side are the assignments before the feature left-hand&#xA;side.&#xA;(And the assignments before an index are those after the feature reference.)&#xA;(See the LeftHandSide::assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="featureLeftHandSideAssignmentAfterDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a feature left-hand side are the assignments after&#xA;the expression of the feature reference or, if there is an index, those&#xA;after the index expression.&#xA;(See the LeftHandSide::assignmentsAfter() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="featureLeftHandSideFeatureExpression" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression of the feature reference of a feature left-hand side must&#xA;have a multiplicity upper bound of 1."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a feature left-hand side has an index, then the assignments before the&#xA;index expression are the assignments after the expression of the feature&#xA;reference.&#xA;(See the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="featureLeftHandSideReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referent of a feature left-hand side is the structural feature to&#xA;which the feature reference of the left-hand side resolves.&#xA;(See the referent() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="featureLeftHandSideTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a feature left-hand side is the type of its referent.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="featureLeftHandSideLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a feature left-hand side is indexed, then its lower bound is 1.&#xA;Otherwise, its lower bound is that of its referent.&#xA;(see the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="featureLeftHandSideUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a feature left-hand side is indexed, then its upper bound is 1.&#xA;Otherwise, its upper bound is that of its referent.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="featureLeftHandSideReferentConstraint" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The feature of a feature-left hand side must have a single referent that&#xA;is a structural feature."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="If a feature left-hand side has an index, then the referent of the&#xA;feature must be ordered and non-unique."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The structural feature being assigned.&#xA;property feature : FeatureReference { composes };&#xA;&#xA;The actual expression parsed for this feature left-hand side."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ConditionalTestExpression" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression that uses the value of one operand expression to condition&#xA;the evaluation of one of two other operand expressions."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.commonAncestor(Set{self.operand2.type, self.operand3.type})"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand2.lower.min(self.operand3.lower)"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a conditional-test operator expression is the effective&#xA;common ancestor (if one exists) of the types of its second and third&#xA;operand expressions.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="conditionalTestExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity lower bound of a conditional-test operator expression is&#xA;the minimum of the multiplicity lower bounds of its second and third&#xA;operand expressions.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="conditionalTestExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity upper bound of a conditional-test operator expression is&#xA;the maximum of the multiplicity upper bounds of its second and third&#xA;operand expressions.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="conditionalTestExpressionCondition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The first operand expression of a conditional-test expression must be of&#xA;type Boolean and have a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.isBooleanType(self.operand1.type) and self.operand1.upper = 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="conditionalTestExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the first operand expression of a conditional-test&#xA;expression are the same as those before the conditional-test expression.&#xA;The assignments before the second and third operand expressions are the&#xA;same as those after the first operand expression.&#xA;(See the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="conditionalTestExpressionAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a name is unassigned after the first operand expression and has an&#xA;assigned source after one of the other operand expression, then it must&#xA;have an assigned source after both of those expressions."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Returns the assignments after the first operand expression, plus&#xA;assignments for any newly defined local names in the second and&#xA;third operand expressions. Local names that exist after the first operand&#xA;expression but are reassigned in the second or third operand expressions&#xA;are adjusted to have the conditional-test expression as their assigned&#xA;source. Local names that are newly defined in the second and third&#xA;operand expressions have the conditional-text expression as their source&#xA;and a type that is the effective common ancestor (if one exists) of the&#xA;types from the assignments after each of the second and third operands."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The first operand expression, which provides the condition to be tested."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="operand2" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The second operand expression, to be evaluated if the condition is true."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="operand3" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The third operand expression, to be evaluated if the condition is false."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="InstanceCreationExpression" eSuperTypes="#//InvocationExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression used to create a new instance of a class or data type."/>
- </eAnnotations>
- <eOperations name="referent" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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; operationReferents->any(true).constructorReference()&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An instance creation expression is an object creation if its referent is&#xA;not a data type."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="instanceCreationExpressionIsConstructorlessDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An instance creation expression is constructorless if its referent is a&#xA;class."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="instanceCreationExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referent of an instance creation expression is normally the&#xA;constructor operation, class or data type to which the constructor name&#xA;resolves. However, if the referent is an operation whose class is&#xA;abstract or is a class that is itself abstract, and there is an&#xA;associated Impl class constructor, then the referent is the Impl class&#xA;constructor."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="instanceCreationExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="There is no feature for an instance creation expression."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="instanceCreationExpressionConstructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The constructor name must resolve to a constructor operation (that is&#xA;compatible with the tuple argument expressions), a class or a data type,&#xA;but not both a class and a data type."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="If the expression is constructorless, then its tuple must be empty and&#xA;the referent class must not have any owned operations that are constructors."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="If an instance creation expression is a data value creation (not an&#xA;object creation), then the tuple argument expressions are matched with&#xA;the attributes of the named type."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="If the referent of an instance creation expression is an operation, then&#xA;the class of that operation must not be abstract. Otherwise, the referent&#xA;is a class or data type, which must not be abstract."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Returns the parameters of a constructor operation or the attributes of a&#xA;data type, or an empty set for a constructorless instance creation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA; if self.isConstructorless then OrderedSet(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://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this is a constructorless object creation expression."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="PropertyAccessExpression"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this is an object creation expression or a data value creation&#xA;expression."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="PropertyAccessExpression"/>
- <details key="unique" value="false"/>
- <details key="upper" value="*"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the class constructor operation to be invoked or the name of&#xA;a class or data type."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="PropertyAccessExpression" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression comprising a reference to a structural feature."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The feature of a property access expression is the structural feature to&#xA;which its feature reference resolves."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="propertyAccessExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a property access expression is the type of the referenced&#xA;feature.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="propertyAccessExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity upper bound of a property access expression is given by&#xA;the product of the multiplicity upper bounds of the referenced feature&#xA;and the target expression.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="propertyAccessExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity lower bound of a property access expression is given by&#xA;the product of the multiplicity lower bounds of the referenced feature&#xA;and the target expression.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="propertyAccessExpressionFeatureResolution" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The feature reference for a property access expression must resolve to a&#xA;single structural feature."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the expression of the feature reference of a&#xA;property access expression are the same as before the property access&#xA;expression."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a property access expression are the same as those&#xA;after the target expression of its feature reference."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.featureReference.expression.assignmentAfter"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="featureReference" lowerBound="1"
- eType="#//FeatureReference" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reference to a structural feature."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="feature" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referenced structural feature."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression that comprises a name reference."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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 1 -- Note: This ensures a name defined as an &quot;out&quot; argument is not considered null.&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the source of a local name is a For Statement, it must be a @parallel&#xA;local name and it is only legal if this name expression is the target of&#xA;a CollectionFunctions::add invocation."/>
- </eAnnotations>
- <eParameters name="localName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="assignmentFor_" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA; let assignments = self.assignmentBefore->select(name = localName) in&#xA; if assignments->isEmpty() or &#xA; assignments->forAll(isParallelLocalName) and not self.isAddTargetName()&#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="isAddTargetName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the name in a name expression is a local or parameter name, then its&#xA;assignment is its assigned source before the expression."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameExpressionEnumerationLiteralDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the name in a name expression resolves to an enumeration literal name,&#xA;then that is the enumeration literal for the expression."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameExpressionPropertyAccessDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the name in a name expression disambiguates to a feature reference,&#xA;then the equivalent property access expression has the disambiguation of&#xA;the name as its feature. The assignments before the property access&#xA;expression are the same as those before the name expression.&#xA;(See also the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a name expression is determined by its name. If the name is a&#xA;local name or parameter with an assignment, then the type of the name&#xA;expression is the type of that assignment. If the name is an enumeration&#xA;literal, then the type of the name expression is the corresponding&#xA;enumeration. If the name disambiguates to a feature reference, then the&#xA;type of the name expression is the type of the equivalent property access&#xA;expression.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity upper bound of a name expression is determined by its&#xA;name.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity lower bound of a name expression is determined by its&#xA;name.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameExpressionResolution" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the name referenced by this expression is not a disambiguated feature&#xA;reference or a local or parameter name, then it must resolve to exactly&#xA;one enumeration literal."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.validateNameExpressionResolution()"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="validateNameExpressionResolution" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="If propertyAccess is not empty (i.e., if the referenced name disambiguates&#xA;to a feature reference), then return the assignments after the&#xA;property access expression. Otherwise, return the result of the superclass&#xA;updateAssignments operation."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="The identified enumeration literal, if the referenced name is for an enumeration literal."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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/GenModel">
- <details key="documentation" value="The assigned source for the referenced name, if the name is a local or&#xA;parameter name."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="The equivalent property access expression, if the referenced name&#xA;disambiguates to a feature reference."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The qualified name referenced in this expression. (For a local name, this&#xA;will actually have no qualification.)"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="BitStringUnaryExpression" eSuperTypes="#//UnaryExpression">
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.bitStringType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand.lower"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="bitStringUnaryExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A BitString unary expression has type BitString.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="bitStringUnaryExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A BitString unary expression has the same multiplicity lower bound as its&#xA;operand expression.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="bitStringUnaryExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A BitString unary expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="bitStringUnaryExpressionOperand" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The operand expression of a BitString unary expression must have type&#xA;BitString or Integer and a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="BitString conversion is required if the operand expression of a BitString&#xA;unary expression has type Integer."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether BitString conversion is required on the operand expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.isIntegerType(self.operand.type)"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="FeatureInvocationExpression" eSuperTypes="#//InvocationExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An invocation of a feature referenced on a sequence of instances."/>
- </eAnnotations>
- <eOperations name="feature" eType="#//FeatureReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a feature invocation expression is an implicit object destruction, it&#xA;has no referent. Otherwise, its referent is the operation or signal being&#xA;invoked.&#xA;(See the referent() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="featureInvocationExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a feature invocation expression has an explicit target, then that is&#xA;its feature. Otherwise, it is an alternative constructor call with&#xA;its feature determined implicitly.&#xA;(See the feature() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="featureInvocationExpressionReferentExists" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a feature invocation expression is not an implicit destructor call,&#xA;then it must be possible to determine a single valid referent for it&#xA;according to the overloading resolution rules."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA; self.isImplicit or 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>
- <eOperations name="featureInvocationExpressionAlternativeConstructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An alternative constructor invocation may only occur in an expression&#xA;statement as the first statement in the definition for the method of a&#xA;constructor operation."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="If there is no target feature expression, then the implicit feature with&#xA;the same name as the target type must be a constructor."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A feature reference to the target feature to be invoked."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="BehaviorInvocationExpression" eSuperTypes="#//InvocationExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An invocation of a behavior referenced by name."/>
- </eAnnotations>
- <eOperations name="isAddTarget" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the target of a behavior invocation expression resolves to a behavior,&#xA;then the referent of the expression is that behavior. If the target&#xA;disambiguates to a feature reference, then the reference is the operation&#xA;or signal being invoked. Otherwise, if the target resolves to a property&#xA;that is an association end, then the referent is that property.&#xA;(See the referent() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="behaviorInvocationExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the target qualified name disambiguates to a feature reference, then&#xA;the feature of a behavior invocation expression is that feature reference.&#xA;(See the feature() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="behaviorInvocationExpressionReferentConstraint" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the target qualified name does not disambiguate to a feature reference,&#xA;then it must resolve to a behavior or an association end. Otherwise it&#xA;must resolve to a single feature referent according to the overloading&#xA;resolution rules, unless it is an implicit destructor call (in which case&#xA;it has no referent)."/>
- </eAnnotations>
- <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() and&#xA; -- Also check that the association owns all its ends.&#xA; referent.isAssociationEnd() implies&#xA; &#x9;referent.association().properties()->forAll(isAssociationEnd())"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="behaviorInvocationExpressionArgumentCompatibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the target qualified name does not disambiguate to a feature reference,&#xA;then each input argument expression must be assignable to its corresponding&#xA;parameter and each output argument expression must be assignable from its&#xA;corresponding parameter. (Note that this implies that the type of an&#xA;argument expression for an inout parameter must be the same as the type&#xA;of that parameter.)"/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="The referent may only be a constructor (as a result of the target&#xA;disambiguating to a feature reference) if this behavior invocation&#xA;expression is the expression of an expression statement that is the first&#xA;statement in the definition for the method of a constructor operation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The qualified name of the behavior to be invoked."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ShiftExpression" eSuperTypes="#//BinaryExpression">
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.bitStringType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A shift expression has type BitString.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="shiftExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A shift expression has a multiplicity lower bound of 0 if the lower bound&#xA;if either operand expression is 0 and 1 otherwise.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="shiftExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A shift expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="shiftExpressionOperands" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The first operand expression of a shift expression must have the type&#xA;BitString or Integer. The second operand expression must have the type&#xA;Integer."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="BitString conversion is required if the first operand expression of a&#xA;shift expression has type Integer."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the first operand expression requires BitString conversion."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.isIntegerType(self.operand1.type)"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="UnboundedLiteralExpression" eSuperTypes="#//LiteralExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression that comprises an unbounded value literal."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.unlimitedNaturalType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="unboundedLiteralExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of an unbounded literal expression is UnlimitedNatural.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ThisExpression" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression comprising the keyword ?this?."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA; let currentScope = self.currentScope() in&#xA; if currentScope = null then &#xA; null&#xA; else if currentScope.isOperation() or currentScope.isMethod() then&#xA; currentScope.namespace()&#xA; else if currentScope.isBehavior() then&#xA; let context = currentScope.context() in&#xA; if context = null then currentScope else context endif&#xA; else if currentScope.isClass() then&#xA; currentScope&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The static type of a this expression is the statically determined context&#xA;classifier for the context in which the this expression occurs.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="thisExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity upper bound of a this expression is always 1.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="thisExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity lower bound of a this expression is always 1.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ClassificationExpression" eSuperTypes="#//UnaryExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression used to test the dynamic type of its operand."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.booleanType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand.lower"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="classificationExpressionIsDirectDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A classification expression is direct if its operator is &quot;hastype&quot;."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classificationExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referent of a classification expression is the classifier to which&#xA;the type name resolves."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classificationExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A classification expression has type Boolean.&#xA;(see the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classificationExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A classification expression has a multiplicity lower bound that is the&#xA;same as the lower bound of its operand expression.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classificationExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A classification expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classificationExpressionTypeName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type name in a classification expression must resolve to a non-template classifier."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent &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/GenModel">
- <details key="documentation" value="The operand expression of a classification expression must have a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand.upper = 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="referent" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The classifier to which the type name of the expression resolves."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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/GenModel">
- <details key="documentation" value="Whether the test is for the operand to have the given type directly or to only conform to the given type."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operator = 'hastype'"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" lowerBound="1"
- eType="#//QualifiedName" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the type that the operand is to be tested against."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SuperInvocationExpression" eSuperTypes="#//InvocationExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An invocation expression used to invoke an operation of a superclass."/>
- </eAnnotations>
- <eOperations name="referent" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referent of a super invocation expression is the method behavior of&#xA;the operation identified using the overloading resolution rules.&#xA;(See the referent() operation. Actually returns the operation, not the&#xA;method.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="superInvocationExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="There is no feature for a super invocation.&#xA;(See the feature() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="superInvocationExpressionQualification" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the target has a qualification, then this must resolve to one of the&#xA;superclasses of the current context class."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="If the target is empty, the referent must be the method for a constructor&#xA;operation and the context class for the behavior containing the super&#xA;invocation expression must have exactly one superclass."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="If the referent is the method of a constructor operation, the super&#xA;invocation expression must occur in an expression statement at the start&#xA;of the definition for the method of a constructor operation, such that&#xA;any statements preceding it are also super constructor invocations."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="If the referent is the method of a destructor operation, the super&#xA;invocation expression must occur within the method of a destructor&#xA;operation."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="It must be possible to identify a single valid operation denoted by the&#xA;target of a super invocation expression that satisfies the overloading&#xA;resolution rules."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the operation to be invoked, optionally qualified with the&#xA;name of the appropriate superclass."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="IncrementOrDecrementExpression" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A unary expression with either an increment or decrement operator."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.integerType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.operand.lower"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="incrementOrDecrementExpressionAssignmentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the operand of an increment or decrement expression is a name, then&#xA;the assignment for the expression is a new assigned source for the name&#xA;with the expression as the source."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="incrementOrDecrementExpressionIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An increment or decrement expression has a feature as its operand if the&#xA;operand is a kind of FeatureLeftHandSide."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="incrementOrDecrementExpressionIsIndexedDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An increment or decrement expression is indexed if its operand is indexed."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="incrementOrDecrementExpressionIsDataValueUpdateDerivation"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An increment or decrement expression is a data value update if its&#xA;operand is an attribute of a data value held in a local name or parameter."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="incrementOrDecrementExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the operand of an increment or decrement expression is a feature,&#xA;then the referent for the operand."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="incrementOrDecrementExpressionExpressionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The effective expression for the operand of an increment or decrement&#xA;expression is the operand treated as a name expression, property access&#xA;expression or sequence access expression, as appropriate for evaluation&#xA;to obtain the original value to be updated."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="incrementOrDecrementExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An increment or decrement expression has type Integer.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="incrementOrDecrementExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An increment or decrement expression has the same multiplicity lower&#xA;bound as its operand expression.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="incrementOrDecrementExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An increment or decrement expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="incrementOrDecrementExpressionOperand" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The operand expression must have type Integer and a multiplicity upper bound of 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.isIntegerType(self.operand.type) and self.operand.upper = 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="incrementOrDecrementExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the operand of an increment or decrement&#xA;expression are the same as those before the increment or decrement&#xA;expression.&#xA;(See the SyntaxElement::assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after an increment and decrement expression include all&#xA;those after its operand expression. Further, if the operand expression,&#xA;considered as a left hand side, is a local name, then this is reassigned."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="If the operand is a name, then the new assigned source for that name."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The operand, which must have the form of an assignment left-hand side."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The effective expression used to obtain the original value of the operand&#xA;to be updated."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operand.expression()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="feature" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the operand is a feature, then the referent for that feature."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the operator is being used as a prefix or a postfix."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isFeature" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the operand is a feature or not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operand.feature() &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/GenModel">
- <details key="documentation" value="Whether the operand has an index or not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operand.index() &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/GenModel">
- <details key="documentation" value="Whether this expression updates an attribute of a data value held in a&#xA;local name or parameter."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.operand.isDataValueUpdate()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The increment (&quot;++&quot;) or decrement (&quot;--&quot;) operator for this expression."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="BooleanLiteralExpression" eSuperTypes="#//LiteralExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression that comprises a Boolean literal."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.booleanType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="booleanLiteralExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a boolean literal expression is Boolean.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="image" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The textual image of the literal token for this expression."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="NamedTuple"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="NamedTuple" eSuperTypes="#//Tuple">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A tuple in which the arguments are matched to parameters by name."/>
- </eAnnotations>
- <eOperations name="size" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.namedExpression->size()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="inputFor" ordered="false" upperBound="-1" eType="#//InputNamedExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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; owner = self&#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="outputForExpression" eType="#//OutputNamedExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA;&#x9;&#x9;&#x9;&#x9;let arguments = self.namedExpression->select(a | a.expression = expression) in&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;if arguments->isEmpty() then null&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;else&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;let argument = arguments->any(true) in&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;OutputNamedExpression{&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;name = argument.name,&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;index = argument.index,&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;expression = expression,&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;owner = self&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;endif"/>
- </eAnnotations>
- <eParameters name="expression" lowerBound="1" eType="#//Expression"/>
- </eOperations>
- <eOperations name="namedTupleArgumentNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of a named expression of a named tuple must be the name of a&#xA;parameter of the invocation the tuple is for. No two named expressions&#xA;may have the same name."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The argument expressions for this tuple paired with the corresponding&#xA;parameter names."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="NaturalLiteralExpression" eSuperTypes="#//LiteralExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression that comprises a natural literal."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.naturalType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="naturalLiteralExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a natural literal is the Alf library type Natural. NOTE: If&#xA;the context of a natural literal expression unambiguously requires either&#xA;an Integer or an UnlimitedNatural value, then the result of the literal&#xA;expression is implicitly downcast to the required type. If the context is&#xA;ambiguous, however, than an explicit cast to Integer or UnlimitedNatural&#xA;must be used.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="image" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The textual image of the literal token for this expression."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="SequenceRange"/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="SequenceRange"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SequenceRange" eSuperTypes="#//SequenceElements">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A specification of the elements of a sequence as a range of integers."/>
- </eAnnotations>
- <eOperations name="conformsTo" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The lower and upper range expressions must have type Integer."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity lower bound of a sequence range is 0.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceRangeUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity upper bound of a sequence range is * (since it is not&#xA;possible, in general, to statically determine a more constrained upper&#xA;bound).&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceRangeExpressionMultiplicity" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Both expressions in a sequence range must have a multiplicity upper bound&#xA;of 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.rangeLower.upper = 1 and self.rangeUpper.upper = 1"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceRangeAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A local name may be defined or reassigned in at most one of the&#xA;expressions of a sequence range."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression whose value gives the lower bound for the range."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="rangeUpper" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression whose value gives the upper bound for the range."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="NameLeftHandSide" eSuperTypes="#//LeftHandSide">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A left-hand side that is a name."/>
- </eAnnotations>
- <eOperations name="target" eType="#//QualifiedName">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.target"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="index" eType="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.index"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="referent" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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="expression" lowerBound="1" eType="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA;&#x9;&#x9;&#x9;&#x9;let expression = self.primary() in&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;if self.index = null then expression&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;else&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;SequenceAccessExpression{&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;primary = expression,&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;index = index.reference(),&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;owner = self&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;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;&#x9;&#x9;&#x9;&#x9;let feature = self.feature() in&#xA;&#x9;&#x9;&#x9;&#x9;if feature = null then&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;NameExpression{&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;name = self.target.copy(),&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;owner = self&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;else&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;PropertyAccessExpression{&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;feature = feature,&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;owner = self&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;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="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a name left-hand side has an index, then the assignments after the&#xA;left-hand side are the same as the assignments after the index. If the&#xA;left-hand side has no index, but its target disambiguates to a feature&#xA;reference, then the assignments after the left-hand side are the&#xA;assignments after the feature expression. Otherwise the assignments&#xA;after the left-hand side are the same as the assignments before the&#xA;left-hand side.&#xA;(See the LeftHandSide::assignmentsAfter() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameLeftHandSideTargetAssignment" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The target of a name left hand side may not already have an assigned&#xA;source that is a loop variable definition, an annotation, a sequence&#xA;expansion expression or a parameter that is an in parameter."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="If the target of a name left-hand side disambiguates to a feature&#xA;reference, then the assignments before the expression of the feature&#xA;reference are the assignments before the left-hand side. If a name&#xA;left-hand side has an index, then the target must either disambiguate&#xA;to a feature reference or already have an assigned source, and the&#xA;assignments before the index expression are the assignments before the&#xA;left-hand side or, if the target disambiguates to a feature reference,&#xA;the assignments after the expression of the feature reference.&#xA;(See also the LeftHandSide::assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.index &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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the target of a name left-hand side disambiguates to a structural&#xA;feature, then the referent of the left-hand side is that feature. If the&#xA;target resolves to a parameter, then the referent is that parameter. If&#xA;the target resolves to a local name, then the referent is the assigned&#xA;source for that local name, if it has one.&#xA;(See the referent() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameLeftHandSideLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a name left-hand side is indexed, then its lower bound is 1.&#xA;Otherwise, if the left-hand side is for a local name with an assignment,&#xA;than its lower bound is that of the assignment, else, if it has a&#xA;referent, then its lower bound is that of the referent.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameLeftHandSideUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a name left-hand side is indexed, then its upper bound is 1.&#xA;Otherwise, if the left-hand side is for a local name with an assignment,&#xA;than its upper bound is that of the assignment, else, if it has a&#xA;referent, then its upper bound is that of the referent.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameLeftHandSideTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a name left-hand side is for a local name with an assignment, then its&#xA;type is that of that assignment. Otherwise, if the left-hand side has a&#xA;referent, then its type is the type of that referent.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nameLeftHandSideTargetResolution" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the target of a name left-hand side is qualified, then, if it does not&#xA;disambiguate to a feature, it must have a referent that is a parameter of&#xA;an operation or behavior that is the current scope the left-hand is in,&#xA;and, if it does disambiguate to a feature, it must have a single referent&#xA;that is a structural feature."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="If the target of a name left-hand side disambiguates to a feature&#xA;reference, and the left-hand side has an index, then the referent of the&#xA;feature reference must be ordered and non-unique."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="The target of a name left-hand side must not have a template binding."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.target.templateName = null"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="target" eType="#//QualifiedName"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name that is the target of the assignment."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="index" eType="#//Expression"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An optional expression that evaluates to an index into the values of an&#xA;ordered sequence."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="EffectiveLeftHandSide" eSuperTypes="#//NameLeftHandSide">
- <eOperations name="target" eType="#//QualifiedName">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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>
- <eOperations name="expression" eType="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
- eType="#//Expression"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SequenceReductionExpression" eSuperTypes="#//Expression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An expression used to reduce a sequence of values effectively by inserting&#xA;a binary operation between the values."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.primary.expression.type"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="1"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="sequenceReductionExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referent for a sequence reduction expression is the behavior denoted&#xA;by the behavior name of the expression."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceReductionExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A sequence reduction expression has the same type as its primary&#xA;expression.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceReductionExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A sequence reduction expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceReductionExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A sequence reduction expression has a multiplicity lower bound of 1.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceReductionExpressionBehavior" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The behavior name in a sequence reduction expression must denote a behavior."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="The referent behavior must have two in parameters, a return parameter and&#xA;no other parameters. The parameters must all have the same type as the&#xA;argument expression and multiplicity [1..1]."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the target expression of a sequence reduction&#xA;expression are the same as the assignments before the sequence reduction&#xA;expression.&#xA;(See the SyntaxElement::assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a sequence reduction expression are the same as&#xA;after its primary expression."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.primary.expression.assignmentAfter"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="referent" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reference to the behavior to be used as the reducer."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this is an ordered reduction or not."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="primary" lowerBound="1"
- eType="#//ExtentOrExpression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The target class name or primary expression for the reduction."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="behaviorName" lowerBound="1"
- eType="#//QualifiedName" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the behavior to be used as the reducer."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SequenceExpressionList" eSuperTypes="#//SequenceElements">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A specification of the elements of a sequence using a list of expressions."/>
- </eAnnotations>
- <eOperations name="conformsTo" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Each expression in the list must have a multiplicity upper bound of no&#xA;more than 1. The type of each expression in the list must conform to&#xA;the given type (with allowance for bit string conversion)."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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 upperBounds = self.element.upper in&#xA; if upperBounds->includes(-1) then -1&#xA; else upperBounds->sum()&#xA; endif"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="sequenceExpressionListLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity lower bound of the elements of a sequence expression&#xA;list is given by the sum of the lower bounds of each of the expressions&#xA;in the list.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="sequenceExpressionListUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The multiplicity upper bound of the elements of a sequence expression&#xA;list is given by the sum of the upper bounds of each of the expressions&#xA;in the list. If any of the expressions in the list have an unbounded&#xA;upper bound, then the sequence expression list also has an unbounded&#xA;upper bound.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="element" lowerBound="1"
- upperBound="-1" eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The list of expressions whose values determine the elements of the sequence."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="RelationalExpression" eSuperTypes="#//BinaryExpression">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A binary expression with a relational operator."/>
- </eAnnotations>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.booleanType()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A relational expression is an UnlimitedNatural comparison if either one&#xA;of its operands has type UnlimitedNatural."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="relationalExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a relational expression is Boolean.&#xA;(See the type() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="relationalExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A relational expression has a multiplicity lower bound of 0 if the lower&#xA;bound if either operand expression is 0 and 1 otherwise.&#xA;(See the lower() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="relationalExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A relational expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="relationalExpressionOperandTypes" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The operand expressions for a comparison operator must have type Integer,&#xA;UnlimitedNatural or Natural. However, it is not allowed to have one&#xA;operand expression be Integer and the other be UnlimitedNatural."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Whether this is an UnlimitedNatural comparison."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#xA;&#x9;&#x9;&#x9;&#x9;let type1 = self.operand1.type in&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;self.isUnlimitedNaturalType(type1) and not self.isNaturalType(type1) or &#xA;&#x9;&#x9;&#x9;&#x9;let type2 = self.operand2.type in&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;self.isUnlimitedNaturalType(type2) and not self.isNaturalType(type2)"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="LocalNameDeclarationStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A statement that declares the type of a local name and assigns it an&#xA;initial value."/>
- </eAnnotations>
- <eOperations name="actualName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="NameBinding{name = self.name}.toName()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the expression of a local name declaration&#xA;statement are the same as the assignments before the statement.&#xA;(See SyntaxElement::assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="localNameDeclarationStatementType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the type name in a local name declaration statement is not empty, then&#xA;it must resolve to a non-template classifier and the expression must be&#xA;assignable to that classifier."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="The local name in a local name declaration statement must be unassigned&#xA;before the statement and before the expression in the statement.&#xA;It must remain unassigned after the expression."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a local name declaration statement are the&#xA;assignments after the expression of the statement plus a new assignment&#xA;for the local name defined by the statement. The assigned source for the&#xA;local name is the local name declaration statement. The local name has&#xA;the type denoted by the type name if this is not empty and is untyped&#xA;otherwise. If the statement has multiplicity, then the multiplicity of&#xA;the local name is [0..*], otherwise it is [0..1].&#xA;(See assignmentsAfter() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="localNameDeclarationStatementExpressionMultiplicity" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a local name declaration statement does not have multiplicity, then&#xA;the multiplicity of upper bound of the assigned expression must not be&#xA;greater than 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="(not self.hasMultiplicity) implies self.expression.upper &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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a local name declaration statement with a type name is the&#xA;single classifier referent of the type name. Otherwise the type is empty."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="typeCached" eType="#//ElementReference"/>
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The local name being declared."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="AssignableLocalNameDeclaration"/>
- <details key="unique" value="false"/>
- <details key="upper" value="*"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression to be evaluated to provide the initial value to be assigned to the local name."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="hasMultiplicity" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the local name is to have a multiplicity upper bound of * rather than 1."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" eType="#//QualifiedName"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The declared type of the local name."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type declared for the given local name."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.typeCached()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAny" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the local name is being declared with an empty type.&#xA;(Added solely to allow proper Xtext re-serialization.)"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="AssignableLocalNameDeclaration" eSuperTypes="#//AssignableElement">
- <eOperations name="type" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.localNameDeclaration.type"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="0"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="if self.localNameDeclaration.hasMultiplicity then -1 else 1 endif"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="localNameDeclaration" lowerBound="1"
- eType="#//LocalNameDeclarationStatement"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="Statement" abstract="true" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A model of an Alf statement."/>
- </eAnnotations>
- <eOperations name="enclosingLoopStatement" eType="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the nearest enclosing loop statement, or this statement, if it is&#xA;a loop statement. (This operation is overridden for loop statements.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="let enclosingStatement = self.enclosingStatement() in&#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/GenModel">
- <details key="documentation" value="Returns true if the given annotation is allowed for this kind of statement.&#xA;By default, only an @isolated annotation is allowed, with no arguments.&#xA;This operation is redefined only in subclasses of Statement for kinds of&#xA;statements that allow different annotations than this default."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.Statement_annotationAllowed(annotation)"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//Annotation"/>
- </eOperations>
- <eOperations name="Statement_annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="annotation.identifier = 'isolated' and annotation.argument->isEmpty()"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//Annotation"/>
- </eOperations>
- <eOperations name="annotation" ordered="false" upperBound="-1" eType="#//Annotation">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Get the assigned sources for assignments made within this statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Return the source of the given local name in the assignments before this&#xA;statement, if any."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="By default, the assignments after are the same as the assignments&#xA;before."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.Statement_assignmentsAfter()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="Statement_assignmentsAfter" ordered="false" upperBound="-1"
- eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.assignmentBefore"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="assignmentsAfterCached" ordered="false" upperBound="-1" eType="#//AssignedSource"/>
- <eOperations name="mergeAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Merge the assignments made in a collection of blocks, such as occur in an&#xA;accept or if statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA; let newAssignments = blocks->collect(b | &#xA; if b = null then Set(AssignedSource){}&#xA; else b.assignmentAfter->select(isNew(b.assignmentBefore))&#xA; endif&#xA; )->asSet() 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/GenModel">
- <details key="documentation" value="All the annotations of a statement must be allowed, as given by the annotationAllowed operation for the statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.annotation()->forAll(a | self.annotationAllowed(a))"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="statementUniqueAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="No name may be assigned more than once before or after a statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.assignmentBefore->isUnique(name) and self.assignmentAfter->isUnique(name)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="statementIsIsolatedDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A statement is isolated if it has an @isolated annotation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentBefore" ordered="false"
- upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assigned sources for local names available lexically before this statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.assignmentsBefore()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentAfter" ordered="false"
- upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assigned sources for local names available lexically after this statement.&#xA;This includes not only any assignments made within the statement, but also&#xA;any assignments that are unchanged from before the statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.assignmentsAfterCached()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="enclosingStatement" eType="#//Statement"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The statement immediately enclosing this statement, if any."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.enclosingStatement()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isIsolated" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this statement should be executed in isolation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.hasAnnotation('isolated')"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="Annotation" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An identified modification to the behavior of an annotated statement."/>
- </eAnnotations>
- <eOperations name="identifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- <eOperations name="arguments" ordered="false" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="text" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The text line for the annotation."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="identifier" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the annotation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.identifier()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="argument" ordered="false"
- upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If permitted by the annotation, an optional list of local names relevant to the annotation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.arguments()->collect(n | NameBinding{name = n}.toName())->asSet()"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="QualifiedNameList" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A group of qualified names."/>
- </eAnnotations>
- <eOperations name="currentScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Handle specially the cases of a specialization list and a redefinition list."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The names in the group."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="NonFinalClause" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A clause of an if statement with a conditional expression and a sequence of&#xA;statements that may be executed if the condition is true."/>
- </eAnnotations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="The assignments before a non-final clause are the assignments before the&#xA;condition of the clause."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.SyntaxElement_assignmentsBefore()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a non-final clause are the assignments after the&#xA;block of the clause."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.body.assignmentAfter"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="nonFinalClauseAssignmentsBeforeBody" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the body of a non-final clause are the assignments&#xA;after the condition.&#xA;(See the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="nonFinalClauseConditionLocalNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a name is unassigned before the condition expression of a non-final&#xA;clause, then it must be unassigned after that expression (i.e., new local&#xA;names may not be defined in the condition)."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="The condition of a non-final clause must have type Boolean and a&#xA;multiplicity upper bound no greater than 1."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression that is evaluated to determine whether the clause body may&#xA;be executed."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="body" lowerBound="1" eType="#//Block"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The sequence of statements that may be executed if the condition evaluates&#xA;to true."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="Block" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A grouped sequence of statements."/>
- </eAnnotations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Get the assigned sources for assignments made within this block."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before each statement in a block other than the first are&#xA;the same as the assignments after the previous statement."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="blockAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the first statement of a block are the same as the&#xA;assignments before the block."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="blockAssignmentAfterDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a block is not empty, then the assignments after the block are the same&#xA;as the assignments after the last statement of the block. Otherwise they&#xA;are the same as the assignments before the block."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="statement" upperBound="-1"
- eType="#//AnnotatedStatement" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The ordered sequence of statements in the block."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentAfter" ordered="false"
- upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assigned sources for local names available lexically after this block.&#xA;This includes not only any assignments made within the block, but also&#xA;any assignments that are unchanged from before the block."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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/GenModel">
- <details key="documentation" value="The assigned sources for local names available lexically before this block."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.assignmentsBefore()"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="BlockStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A statement that executes a block."/>
- </eAnnotations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.block.assignmentAfter"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="blockStatementParallelAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="In a parallel block statement, any name assigned in one statement of the&#xA;block may not be further assigned in any subsequent statement in the same&#xA;block."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the block of a block statement are the same as the&#xA;assignments before the block statement."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="blockStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a block statement are the same as the assignments&#xA;after the block of the block statement."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="blockStatementEnclosedStatements" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The enclosing statement for all the statements in the block of a block&#xA;statement is the block statement."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="blockStatementIsParallelDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A block statement is parallel if it has a @parallel annotation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="In addition to an @isolated annotation, a block statement may have a&#xA;@parallel annotation. It may not have any arguments."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.Statement_annotationAllowed(annotation) or &#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The block to be executed."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isParallel" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the statements in the block of this block statement should be&#xA;executed concurrently."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="DoStatement"/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="DoStatement"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.hasAnnotation('parallel')"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="DoStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A looping statement for which the continuation condition is first tested&#xA;after the first iteration."/>
- </eAnnotations>
- <eOperations name="enclosingLoopStatement" eType="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the block of a do statement are the same as the&#xA;assignments before the do statement. The assignments before the condition&#xA;expression of a do statement are the same assignments after the block.&#xA;(See assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="doStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the assigned source for a name after the condition expression is&#xA;different than before the do statement, then the assigned source of the&#xA;name after the do statement is the do statement. Otherwise it is the same&#xA;as before the do statement.&#xA;(See assignmentsAfter() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="doStatementCondition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The condition expression of a do statement must have type Boolean and a&#xA;multiplicity upper bound of 1."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The enclosing statement for all statements in the body of a do statement&#xA;are the do statement.&#xA;(See SyntaxElement::enclosingStatement() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="condition" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression to be evaluated to determine whether to continue looping."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="body" lowerBound="1" eType="#//Block"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The sequence of statements to be iteratively executed."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ConcurrentClauses" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A grouping of non-final conditional clauses to be tested concurrently."/>
- </eAnnotations>
- <eOperations name="concurrentClausesAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before each of the clauses in a set of concurrent clauses&#xA;are the same as the assignments before the concurrent clauses.&#xA;(See the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="concurrentClausesConditionAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The same name may not be assigned in more than one conditional expression&#xA;within the same concurrent set of clauses."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.clause.condition.newAssignments()->isUnique(name)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="clause" ordered="false"
- lowerBound="1" upperBound="-1" eType="#//NonFinalClause" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The conditional clauses in the group."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="BreakStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A statement that causes the termination of execution of an immediately&#xA;enclosing block."/>
- </eAnnotations>
- <eOperations name="breakStatementTargetDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The target of a break statement is the innermost switch, while, do or for&#xA;statement enclosing the break statement."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="The target of a break statement may not have a @parallel annotation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.target &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/GenModel">
- <details key="documentation" value="A break statement may not have any annotations."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.annotation()->isEmpty()"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//Annotation"/>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="target" eType="#//Statement"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The enclosing statement that is terminated by this break statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.enclosingLoopStatement()"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ExpressionStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A statement that evaluates an expression when executed."/>
- </eAnnotations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the expression of an expression statement are the same as the assignments before the statement."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="expressionStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after an expression statement are the same as the assignments after its expression."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression to be evaluated."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ClassifyStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A statement that changes the classification of an object."/>
- </eAnnotations>
- <eOperations name="assignmentAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression.assignmentAfter"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="classifyStatementExpression" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression in a classify statement must have a class as its type and&#xA;multiplicity upper bound of 1."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="All qualified names listed in the from or to lists of a classify&#xA;statement must resolve to classes."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="All the from and to classes of a classify statement must be subclasses of&#xA;the type of the target expression and none of them may have a common&#xA;superclass that is a subclass of the type of the target expression (that&#xA;is, they must be disjoint subclasses)."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the expression of a classify statement are the&#xA;same as the assignments before the statement.&#xA;(See the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classifyStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a classify statement are the same as the&#xA;assignments after its expression.&#xA;(See the assignmentAfter() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classifyStatementFromClassDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The from classes of a classify statement are the class referents of the&#xA;qualified names in the from list for the statement."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classifyStatementToClassDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The to classes of a classify statement are the class referents of the&#xA;qualified names in the to list for the statement."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression to be evaluated to obtain the object to be reclassified."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="fromList" eType="#//QualifiedNameList"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A list of names of classes to be removed as types of the object."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="toList" eType="#//QualifiedNameList"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A list of names of classes to be added as types of the object."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="fromClass" ordered="false"
- upperBound="-1" eType="#//ElementReference" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The classes denoted by the names in the from list."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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/GenModel">
- <details key="documentation" value="The classes denoted by the names in the to list."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this classify statement reclassifies all types of the target&#xA;object."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ForStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A looping statement that gives successive values to one or more loop variables on each iteration."/>
- </eAnnotations>
- <eOperations name="enclosingLoopStatement" eType="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before a loop variable definition in a for statement are&#xA;the same as before the for statement. The assignments before the body of&#xA;the statement include all the assignments before the statement plus any&#xA;new assignments from the loop variable definitions, except that, if the&#xA;statement is parallel, the assigned sources of any names given in @parallel&#xA;annotations are changed to be the for statement itself.&#xA;(See the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The loop variables are unassigned after a for statement. Other than the&#xA;loop variables, if the assigned source for a name after the body of a for&#xA;statement is the same as after the for variable definitions, then the&#xA;assigned source for the name after the for statement is the same as after&#xA;the for variable definitions. If a name is unassigned after the for&#xA;variable definitions, then it is unassigned after the for statement (even&#xA;if it is assigned in the body of the for statement). If, after the loop&#xA;variable definitions, a name has an assigned source, and it has a&#xA;different assigned source after the body of the for statement, then the&#xA;assigned source after the for statement is the for statement itself.&#xA;(See the assignmentsAfter() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forStatementParallelAnnotationNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A @parallel annotation of a for statement may include a list of names.&#xA;Each such name must be already assigned after the loop variable definitions&#xA;of the for statement, with a multiplicity of [0..*]. These names may only&#xA;be used within the body of the for statement as the first argument to for&#xA;the CollectionFunctions::add behavior.&#xA;(Note: Checking that @parallel annotation names are only used with add&#xA;behaviors is done in NameExpression, BehaviorInvocationExpression and&#xA;SequenceOperationExpression.)"/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="If, after the loop variable definitions of a parallel for statement, a&#xA;name has an assigned source, then it must have the same assigned source&#xA;after the block of the for statement. Other than for names defined in the&#xA;@parallel annotation of the for statement, the assigned source for such&#xA;names is the same after the for statement as before it. Any names defined&#xA;in the @parallel annotation have the for statement itself as their assigned&#xA;source after the for statement. Other than names given in the @parallel&#xA;annotation, if a name is unassigned after the loop variable definitions,&#xA;then it is considered unassigned after the for statement, even if it is&#xA;assigned in the block of the for statement.&#xA;(See also the assignmentsAfter() operation.)"/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The isFirst attribute of the first loop variable definition for a for&#xA;statement is true while the isFirst attribute is false for any other&#xA;definitions.&#xA;(See derivation of VariableDefinition::isFirst.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forStatementLoopVariables" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assigned sources for loop variables after the body of a for statement&#xA;must be the for statement (the same as before the body).&#xA;(See the assignmentAfter() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forStatementIsParallelDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A for statement is parallel if it has a @parallel annotation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="forStatementEnclosedStatements" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The enclosing statement for all statements in the body of a for statement&#xA;are the for statement.&#xA;(See the SyntaxElement::enclosingStatement() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="In addition to an @isolated annotation, a for statement may have a&#xA;@parallel annotation."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The sequence of statements to be iteratively executed."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="variableDefinition" lowerBound="1"
- upperBound="-1" eType="#//LoopVariableDefinition" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A list of definitions of one or more loop variables."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isParallel" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the for statement is parallel."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="LoopVariableDefinition"/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="LoopVariableDefinition"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.hasAnnotation('parallel')"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="LoopVariableDefinition" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of a loop variable in a for statement."/>
- </eAnnotations>
- <eOperations name="actualName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="NameBinding{name=self.variable}.toName()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="newAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Get the assignments made within this loop variable definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a loop variable definition include the assignments&#xA;after the expression (or expressions) of the definition plus a new&#xA;assigned source for the loop variable itself. The assigned source for the&#xA;loop variable is the loop variable definition. The multiplicity upper&#xA;bound for the variable is 1. The multiplicity lower bound is 1 if the&#xA;loop variable definition is the first in a for statement and 0 otherwise.&#xA;If collection conversion is not required, then the variable has the&#xA;inferred or declared type from the definition. If collection conversion&#xA;is required, then the variable has the argument type of the collection&#xA;class."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="loopVariableDefinitionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the expressions of a loop variable definition are&#xA;the assignments before the loop variable definition.&#xA;(See the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="loopVariableDefinitionRangeExpressions" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a loop variable definition has two expressions, then both expressions&#xA;must have type Integer and a multiplicity upper bound of 1, and no name&#xA;may be newly assigned or reassigned in more than one of the expressions."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="If a loop variable definition has a type name, then this name must&#xA;resolve to a non-template classifier."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the type of a loop variable is not inferred, then the variable has the&#xA;type denoted by the type name, if it is not empty, and is untyped&#xA;otherwise. If the type is inferred, them the variable has the same type&#xA;as the expression in its definition."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="loopVariableDefinitionDeclaredType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the type of a loop variable definition is not inferred, then the first&#xA;expression of the definition must have a type that conforms to the&#xA;declared type."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Collection conversion is required for a loop variable definition if the&#xA;type for the definition is the instantiation of a collection class and&#xA;the multiplicity upper bound of the first expression is no greater than 1."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="loopVariableDefinitionVariable" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The variable name given in a loop variable definition must be unassigned&#xA;after the expression or expressions in the definition."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the loop variable."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression1" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If there is only one expression, then this expression is evaluated to produce a sequence of values to be assigned to the loop variable on successive iterations. Otherwise it is evaluated to provide the first value of a range of values to be assigned to the loop variable."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression2" eType="#//Expression"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression to be evaluated to give the second value in a range of values to be assigned to the loop variable."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" eType="#//QualifiedName"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The declared type of the loop variable."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="typeIsInferred" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the type of the variable is inferred or declared explicitly.&#xA;NOTE: This flag is necessary to because a variable that is explicitly&#xA;declared to have type &quot;any&quot; will have an empty typeName,&#xA;just like a variable whose type is to be inferred, but, in the former&#xA;case, the type is actually intended to be empty, not inferred."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCollectionConversion"
- lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether collection conversion is required."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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/GenModel">
- <details key="documentation" value="The declared or inferred type of the loop variable."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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/GenModel">
- <details key="documentation" value="Whether this definition is the first in the list of definitions in the&#xA;enclosing for statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.enclosingStatement().oclAsType(ForStatement).variableDefinition->at(1) = self"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentBefore" ordered="false"
- upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assigned sources for local names available lexically before this loop&#xA;variable definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.assignmentsBefore()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentAfter" ordered="false"
- upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assigned sources for local names available lexically after this loop&#xA;variable definition. This includes not only any assignments made within&#xA;the statement, but also any assignments that are unchanged from before&#xA;the statement."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the loop variable has an empty type."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="IfStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A conditional statement that executes (at most) one of a set of clauses based on boolean conditions."/>
- </eAnnotations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before all the non-final clauses of an if statement are&#xA;the same as the assignments before the if statement. If the statement has&#xA;a final clause, then the assignments before that clause are also the same&#xA;as the assignments before the if statement.&#xA;(See assignmentBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="ifStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If an if statement does not have a final else clause, then any name that&#xA;is not an out parameter and is unassigned before the if statement is&#xA;unassigned after the if statement. If an if statement does have a final&#xA;else clause, then any name that is unassigned before the if statement and&#xA;is assigned after any one clause of the if statement must also be assigned&#xA;after every other clause. The type of such names after the if statement is&#xA;the effective common ancestor of the types of the name in each clause with&#xA;a multiplicity lower bound that is the minimum of the lower bound for the&#xA;name in each clause and a multiplicity upper bound that is the maximum for&#xA;the name in each clause. For a name that has an assigned source after any&#xA;clause of an if statement that is different than before that clause, then&#xA;the assigned source after the if statement is the if statement. Otherwise,&#xA;the assigned source of a name after the if statement is the same as before&#xA;the if statement.&#xA;(See assignmentsAfter() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="ifStatementEnclosedStatements" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The enclosing statement of all the statements in the bodies of all&#xA;non-final clauses and in the final clause (if any) of an if statement is&#xA;the if statement.&#xA;(See SyntaxElement::enclosingStatement() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="ifStatementIsAssuredDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An if statement is assured if it has an @assured annotation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="ifStatementIsDeterminateDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An if statement is determinate if it has an @determinate annotation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="In addition to an @isolated annotation, an if statement may have @assured&#xA;and @determinate annotations. They may not have arguments."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.Statement_annotationAllowed(annotation) or&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A list of groupings of concurrent clauses that are to be checked&#xA;sequentially for a successful condition."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="finalClause" eType="#//Block"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A sequence of statements to be executed if no other clause has a&#xA;successful condition."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAssured" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether at least one condition in the if statement is assured to evaluate&#xA;to true."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="SwitchStatement"/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="SwitchStatement"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.hasAnnotation('assured')"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDeterminate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether at most one condition in the if statement will ever to evaluate&#xA;to true."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.hasAnnotation('determinate')"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SwitchStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A statement that executes (at most) one of a set of statement sequences&#xA;based on matching a switch value to a set of test cases."/>
- </eAnnotations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before all clauses of a switch statement are the same as&#xA;the assignments after the expression of the switch statement.&#xA;(See assignmentBefore(element) expression.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="switchStatementCaseAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The same local name may not be assigned in more than one case expression&#xA;in a switch statement."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a name has an assigned source after any clause of a switch statement&#xA;that is different than before that clause (including newly defined names),&#xA;the assigned source after the switch statement is the switch statement.&#xA;Otherwise, the assigned source of a name after the switch statement is&#xA;the same as before the switch statement.&#xA;(See assignmentsAfter() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="switchStatementAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a switch statement does not have a final default clause, then any name&#xA;that is not an out parameter and is unassigned before the switch statement&#xA;is unassigned after the switch statement. If a switch statement does have&#xA;a final default clause, then any name that is unassigned before the switch&#xA;statement and is assigned after any one clause of the switch statement&#xA;must also be assigned after every other clause. The type of such names&#xA;after the switch statement is the effective common ancestor of the types&#xA;of the name in each clause with a multiplicity lower bound that is the&#xA;minimum of the lower bound for the name in each clause and a multiplicity&#xA;upper bound that is the maximum for the name in each clause.&#xA;(See also assignmentsAfter() operation.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA; let newNames = self.assignmentAfter.name->excludingAll(self.assignmentBefore.name) in&#xA;&#x9; if self.defaultClause = null then&#xA;&#x9; newNames->isEmpty()&#xA;&#x9; else&#xA;&#x9; self.nonDefaultClause.block->including(self.defaultClause)->forAll(&#xA;&#x9; &#x9;assignmentAfter.name->includesAll(newNames)&#xA;&#x9; )&#xA;&#x9; endif"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="switchStatementExpression" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A switch statement expression must have a multiplicity no greater than 1."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.expression.upper &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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A switch statement is the enclosing statement for the statements in all&#xA;of its switch clauses.&#xA;(See SyntaxElement::enclosingStatement() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="switchStatementIsDeterminateDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A switch statement is determinate if it has a @determinate annotation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="switchStatementIsAssuredDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A switch statement is assured if it has an @assured annotation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="In addition to an @isolated annotation, a switch statement may have&#xA;@assured and @determinate annotations. They may not have arguments."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.Statement_annotationAllowed(annotation) or&#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"
- upperBound="-1" eType="#//SwitchClause" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The set of switch clauses whose cases are to be tested against the switch&#xA;value."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression to be evaluated to provide the switch value."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="defaultClause" eType="#//Block"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A sequence of statements to be executed if no switch clause case matches&#xA;the switch value."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAssured" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether at least one case in the switch statement is assured to match."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.hasAnnotation('assured')"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDeterminate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether at most one case in the if statement will ever to match."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.hasAnnotation('determinate')"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SwitchClause" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A clause in a switch statement with a set of cases and a sequence of&#xA;statements that may be executed if one of the cases matches the switch value."/>
- </eAnnotations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="The assignments before a switch clause are the assignments before any&#xA;case expression of the clause."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.SyntaxElement_assignmentsBefore()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a switch clause are the assignments after the block&#xA;of the switch clause."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.block.assignmentAfter"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="switchClauseAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before any case expression of a switch clause are the&#xA;same as the assignments before the clause. The assignments before the&#xA;block of a switch clause are the assignments after all case expressions.&#xA;(See assignmentsBefore(element) operation.)&#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="switchClauseCaseLocalNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a name is unassigned before a switch clause, then it must be&#xA;unassigned after all case expressions of the clause (i.e., new local&#xA;names may not be defined in case expressions)."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.assignmentsBefore().name->includesAll(self.case.assignmentAfter.name)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="switchClauseCases" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="All the case expressions of a switch clause must have a multiplicity&#xA;no greater than 1."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expressions to be evaluated to provide values to test against the switch value."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="block" lowerBound="1" eType="#//Block"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The sequence of statements that may be executed if one of the cases matches the switch value."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="WhileStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A looping statement for which the continuation condition is first tested&#xA;before the first iteration."/>
- </eAnnotations>
- <eOperations name="enclosingLoopStatement" eType="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the condition expression of a while statement&#xA;are the same as the assignments before the while statement. The&#xA;assignments before the block of the while statement are the same as the&#xA;assignments after the condition expression.&#xA;(See assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="whileStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a name is assigned before the block, but the assigned source for the&#xA;name after the block is different than before the block, then the assigned&#xA;source of the name after the while statement is the while statement.&#xA;Otherwise it is the same as before the block. If a name is unassigned&#xA;before the block of a while statement, then it is unassigned after the&#xA;while statement, even if it is assigned after the block.&#xA;(See assignmentsAfter() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="whileStatementCondition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The condition expression of a while statement must have type Boolean and&#xA;a multiplicity upper bound of 1."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The enclosing statement for all statements in the body of a while&#xA;statement are the while statement.&#xA;(See the SyntaxElement::enclosingStatement() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="body" lowerBound="1" eType="#//Block"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The sequence of statements to be iteratively executed."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="condition" lowerBound="1"
- eType="#//Expression" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression to be evaluated to determine whether to continue looping."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ReturnStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A statement that provides a value for the return parameter of an activity."/>
- </eAnnotations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="If the behavior containing the return statement has a return parameter,&#xA;then the return statement must have an expression, and the expression&#xA;must be assignable to that return parameter.&#xA;(And, if the behavior does not have a return parameter, then the return&#xA;statement must not have an expression.)"/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the expression of a return statement are the same&#xA;as the assignments before the statement.&#xA;(See the assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="returnStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after a return statement are the same as the assignments&#xA;after the expression of the return statement.&#xA;(Or, if the statement has no expression, the same as the assignments&#xA;before the statement.)&#xA;(See the assignmentsAfter() operation.)"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression to be evaluated to provide the returned value."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="behavior" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reference to the enclosing behavior for this return statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.currentScope()"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="InLineStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A statement that executes code in a language other than Alf."/>
- </eAnnotations>
- <eOperations name="inLineStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after an in-line statement are the same as the assignments&#xA;before the statement."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="language" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the language in which the code is written."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="AcceptStatement"/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="AcceptStatement"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="code" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The in-line code to be executed."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="AcceptStatement"/>
- <details key="unique" value="false"/>
- <details key="upper" value="*"/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="AcceptStatement"/>
- <details key="unique" value="false"/>
- <details key="upper" value="*"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="AcceptStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A statement used to accept the receipt of instances of one or more signals."/>
- </eAnnotations>
- <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="let assignmentsAfter = self.Statement_assignmentsAfter() in&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the behavior for this accept statement is a subunit, then return the&#xA;corresponding stub. Note that, if the original behavior is an Alf&#xA;activity definition, the &quot;stub&quot; may be an external operation or activity."/>
- </eAnnotations>
- </eOperations>
- <eOperations name="effectiveBehavior_" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="An accept statement can only be used within the definition of an active&#xA;behavior or the classifier behavior of an active class."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="The containing behavior of an accept statement must have receptions for&#xA;all signals from all accept blocks of the accept statement. No signal may&#xA;be referenced in more than one accept block of an accept statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Any name defined in an accept block of an accept statement must be&#xA;unassigned before the accept statement."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A local name specified in the accept block of a simple accept statement&#xA;has the accept statement as its assigned source after the accept statement.&#xA;The type of the local name is the effective common ancestor of the specified&#xA;signals, if one exists, and it is untyped otherwise."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="acceptStatementCompoundAcceptLocalName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="For a compound accept statement, a local name defined in an accept block&#xA;has the accept block as its assigned source before the block associated&#xA;with the accept block. The type of the local name is the effective common&#xA;ancestor of the specified signals for that accept clause, if one exists,&#xA;and it is untyped otherwise. However, the local name is considered&#xA;unassigned after the accept statement."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="acceptStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before any block of an accept statement are the assignments&#xA;before the accept statement."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="acceptStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a name is assigned in any block of an accept statement, then the&#xA;assigned source of the name after the accept statement is the accept&#xA;statement itself."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="acceptStatementNewAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a name is unassigned before an accept statement and assigned in any&#xA;block of an accept statement, then it must be assigned in every block."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An accept statement is simple if it has exactly one accept block and that&#xA;accept block does not have a block."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="acceptStatementEnclosedStatements" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The enclosing statement for all statements in the blocks of all accept&#xA;blocks of an accept statement is the accept statement."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="acceptBlock" ordered="false"
- lowerBound="1" upperBound="-1" eType="#//AcceptBlock" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="One or more blocks for accepting alternate groups of signals."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="behavior" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The behavior containing the accept statement."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.currentScope()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isSimple" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the accept statement is simple or not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="let acceptBlocks = self.acceptBlock in&#xA; acceptBlocks->size() = 1 and acceptBlocks->forAll(block = null)"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="AcceptBlock" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A block of an accept statement that accepts one or more signals."/>
- </eAnnotations>
- <eOperations name="actualName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="NameBinding{name = self.name}.toName()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="For a compound accept statement, a local name defined in an accept block&#xA;has the accept block as its assigned source before the block associated&#xA;with the accept block. The type of the local name is the effective common&#xA;ancestor of the specified signals for that accept clause, if one exists,&#xA;and it is untyped otherwise.&#xA;&#xA;Otherwise, the assignments before any block of an accept statement are the&#xA;assignments before the accept statement.&#xA;"/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The signals of an accept block are the referents of the signal names of the accept block."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="acceptBlockSignalNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="All signal names in an accept block must resolve to signals."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The local name to which an accepted signal instance will be assigned."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="block" eType="#//Block"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The body of the accept block, executed if one of the named signals is received."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="signalNames" lowerBound="1"
- eType="#//QualifiedNameList" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A list of names of the signals accepted by this accept block."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="signal" ordered="false"
- upperBound="-1" eType="#//ElementReference" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The signals denoted by the signal names of the accept block."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#xA; self.signalNames.name.referent->select(isSignal())->asSet()"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="EmptyStatement" eSuperTypes="#//Statement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A statement that has no affect when executed."/>
- </eAnnotations>
- <eOperations name="emptyStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments after and empty statement are the same as the assignments before the statement."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ModelNamespace" eSuperTypes="#//PackageDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A namespace to represent model scope."/>
- </eAnnotations>
- <eOperations name="context" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="EXTERNAL"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="outerScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="null"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="modelScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.toReference()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="qualifiedName" eType="#//QualifiedName">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="QualifiedName{nameBinding = OrderedSet(NameBinding){}}"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="resolveInScope" ordered="false" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.resolveInRoot(name)"/>
- </eAnnotations>
- <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="resolveInRoot" ordered="false" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="EXTERNAL"/>
- </eAnnotations>
- <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="resolvePathName" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="EXTERNAL"/>
- </eAnnotations>
- <eParameters name="pathName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="resolveAssociationEnd" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="Set(ElementReference){}"/>
- </eAnnotations>
- <eParameters name="oppositeEndType" lowerBound="1" eType="#//ElementReference"/>
- <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="ModelNamespace_appliedProfiles()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="stubFor" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.context().stubFor(unit)"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="ModelNamespace_appliedProfiles" ordered="false" upperBound="-1"
- eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="EXTERNAL"/>
- </eAnnotations>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="NamespaceDefinition" eSuperTypes="#//MemberDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A model of the common properties of the definition of a namespace in Alf."/>
- </eAnnotations>
- <eOperations name="currentScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A namespace definition is its own current scope."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.toReference()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="outerScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The outer scope of a namespace definition is either the namespace&#xA;definition that owns it as a member or the declared namespace of the&#xA;unit that owns it or, if it has neither of these, then model scope."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.NamespaceDefinition_outerScope()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="NamespaceDefinition_outerScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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)->asSet()"/>
- </eAnnotations>
- <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eOperations>
- <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.NamespaceDefinition_appliedProfiles()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="NamespaceDefinition_appliedProfiles" ordered="false" upperBound="-1"
- eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Returns any owned members that are formal parameters, excluding return parameters."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Returns an owned member that is a return parameter, if any."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.NamespaceDefinition_returnParameter()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="NamespaceDefinition_returnParameter" eType="#//FormalParameter">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Returns true if the annotation is @external."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="NamespaceDefinition_annotationAllowed(annotation)"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
- </eOperations>
- <eOperations name="NamespaceDefinition_annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Returns the members of this namespace definition that are template parameters."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA; self.ownedMember.definition->select(oclIsKindOf(ClassifierTemplateParameter)).&#xA; oclAsType(ClassifierTemplateParameter)->asOrderedSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="membersCached" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return all the members of this namespace (at least all the owned and imported members)."/>
- </eAnnotations>
- </eOperations>
- <eOperations name="members" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.NamespaceDefinition_members()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="NamespaceDefinition_members" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.ownedMember->includingAll(self.importedMembers())->asOrderedSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="importedMembers" ordered="false" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns the members imported into this namespace."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Return the subset of the given imported members that are actually imported into the namespace.&#xA;This excludes hidden ones, i.e., those that have names that conflict with names of owned members,&#xA;and also excludes elements that would have the same name when imported."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Return the subset of the given imported members that excludes any that would not be&#xA;distinguishable from each other in this namespace."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="Remove duplicate imported members that have the same referent&#xA;(but leave one of them)."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Cache an intermediate value for member before caling includingDistinguishable,&#xA;in order to avoid an infinite loop."/>
- </eAnnotations>
- <eParameters name="importedMembers" ordered="false" upperBound="-1" eType="#//Member"/>
- </eOperations>
- <eOperations name="includeDistinguishable" ordered="false" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the subset of the given imported members that would be distinguishable&#xA;from all owned members of this namespace."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="Return the stub member the subunit for which has this namespace&#xA;definition as its definition, if any. Note that, for an activity&#xA;definition, the &quot;stub&quot; may be an external operation or activity."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The members of a namespace definition include references to all owned members.&#xA;Also, if the namespace definition has a unit with imports, then the members&#xA;include imported members with referents to all imported elements.&#xA;The imported elements and their visibility are determined as given in the&#xA;UML Superstructure. The name of an imported member is the name of the&#xA;imported element or its alias, if one has been given for it.&#xA;Elements that would be indistinguishable from each other or from an owned&#xA;member (as determined by the Member::isDistinguishableFrom operation) are not imported. .&#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="namespaceDefinitionMemberDistinguishability" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The members of a namespace must be distinguishable as determined by the Member::isDistinguishableFrom operation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definitions of owned members of the namespace."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="unit" eType="#//UnitDefinition"
- eOpposite="#//UnitDefinition/definition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The unit for which this namespace is a definition, if any."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="member" upperBound="-1"
- eType="#//Member" volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The owned and imported members of a namespace definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.membersCached()"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="MemberDefinition" abstract="true" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A model of the common properties of the definition of a member of a namespace in Alf."/>
- </eAnnotations>
- <eOperations name="annotation" ordered="false" upperBound="-1" eType="#//StereotypeAnnotation">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="EXTERNAL"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true of the given stereotype annotation is allowed for this kind&#xA;of element."/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
- </eOperations>
- <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true of the given unit definition is a legal match for this&#xA;member as a stub. By default, always returns false."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="isDistinguishableFrom" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if this member is distinguishable from the given member. Two&#xA;members are distinguishable if their names are different or the they are of&#xA;different kinds (as determined by the isSameKindAs operation). However, in&#xA;any case that the UML Superstructure considers two names to be distinguishable&#xA;if they are different, an Alf implementation may instead impose the stronger&#xA;requirement that the names not be conflicting."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="MemberDefinition_isDistinguishableFrom(member)"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//MemberDefinition"/>
- </eOperations>
- <eOperations name="MemberDefinition_isDistinguishableFrom" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.actualName() &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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if this member is of the same kind as the given member."/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="templateParameters" upperBound="-1" eType="#//ClassifierTemplateParameter">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The template parameters associated with this member. (Only a namespace&#xA;definition can actually have template parameters.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="OrderedSet{}"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isTemplate" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if this member is a template."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.templateParameters()->notEmpty()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if this member is a feature. By default is is not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="memberAnnotations" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="All stereotype annotations for a member must be allowed, as determined using the stereotypeAllowed operation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A member is primitive if it has a @primitive annotation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="memberIsExternalDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A member is external if it has an @external derivation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="memberExternal" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a member is external then it must be a stub."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a member is a stub and is not external, then there must be a single subunit with the same qualified name as the stub that matches the stub, as determined by the matchForStub operation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="memberSubunitDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the member is a stub and is not external, then its corresponding subunit is a unit definition with the same fully qualified name as the stub."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="memberStubStereotypes" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a member is a stub, then the it must not have any stereotype annotations that are the same as its subunit. Two stereotype annotations are the same if they are for the same stereotype."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="memberPrimitive" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a member is primitive, then it may not be a stub and it may not have any owned members that are template parameters."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="This is a workaround for an Xtext editor problem in which a reparsed&#xA;subtree may be put in the wrong container."/>
- </eAnnotations>
- <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://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the member."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="StereotypeAnnotation"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isStub" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this member definition is a stub for a subunit."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="StereotypeAnnotation"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isFeature" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this member is a feature of a classifier."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="StereotypeAnnotation"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.isFeature()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isPrimitive" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this member is a primitive or not."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="StereotypeAnnotation"/>
- <details key="unique" value="false"/>
- <details key="upper" value="*"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.annotation().stereotypeName->exists(pathName = 'primitive')"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isExternal" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this member is external or not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.annotation().stereotypeName->exists(pathName = 'external')"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="subunit" eType="#//UnitDefinition"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The subunit corresponding to the member, if the member is a stub."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="null"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="StereotypeAnnotation" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An annotation of a member definition indicating the application of a stereotype (or one of a small number of special-case annotations)."/>
- </eAnnotations>
- <eOperations name="stereotypeAnnotationStereotypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Unless the stereotype name is &quot;apply&quot;, &quot;primitive&quot; or &quot;external&quot; then the stereotype for a stereotype annotation is the stereotype denoted by the stereotype name."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="stereotypeAnnotationStereotypeName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The stereotype name of a stereotype annotation must either be one of &quot;apply&quot;,&#xA;&quot;primitive&quot; or &quot;external&quot;, or it must denote a single stereotype from a profile&#xA;applied to an enclosing package. The stereotype name does not need to be qualified&#xA;if there is only one applied profile with a stereotype of that name or if the&#xA;there is a standard UML profile with the name."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="If the stereotype name of a stereotype annotation is &quot;apply&quot;, then it must have a name list and all of the names in the list must resolve to profiles."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="If the stereotype name of a stereotype annotation is &quot;primitive&quot;, then it may not have tagged values or names."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="If the stereotype name of a stereotype annotation is &quot;external&quot;, then it may optionally have a single tagged value with the name &quot;file&quot; and no operator."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a stereotype annotation has a stereotype and tagged values, then the each tagged value must have the name of an attribute of the stereotype and a value that is legally interpretable for the type of that attribute."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="stereotypeAnnotationNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a stereotype annotation has a stereotype and a list of names, then all the names in the list must resolve to visible model elements and the stereotype must have a single attribute with a (metaclass) type and multiplicity that are consistent with the types and number of the elements denoted by the given names."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A set of tagged values for the applied stereotype."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="names" eType="#//QualifiedNameList"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A set of references to model elements required for the stereotype being applied."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="stereotypeName" lowerBound="1"
- eType="#//QualifiedName" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the stereotype being applied."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="stereotype" lowerBound="1"
- eType="#//ElementReference" volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The stereotype denoted by the stereotype name."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A set of tagged values for a stereotype application."/>
- </eAnnotations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="taggedValue" ordered="false"
- lowerBound="1" upperBound="-1" eType="#//TaggedValue" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The tagged values in the set."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="TaggedValue" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An assignment of a value to an attribute of an applied stereotype."/>
- </eAnnotations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the stereotype attribute to be assigned a value."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="UnitDefinition"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The string image of a literal value to be assigned to the stereotype attribute."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="For a numeric value, an optional unary plus or minus operator."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="UnitDefinition" eSuperTypes="#//DocumentedElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of a namespace as an Alf unit."/>
- </eAnnotations>
- <eOperations name="imports" ordered="false" upperBound="-1" eType="#//ImportReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a unit definition has a declared namespace name, then the containing&#xA;namespace for the unit is the referent for that name."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="unitDefinitionNamespace" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The declared namespace name for a unit definition, if any, must resolve&#xA;to a UML namespace or an Alf unit definition. If it is an Alf unit&#xA;definition, then it must have a stub for this unit definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A unit definition is for a model library if its associated namespace&#xA;definition has a stereotype annotation for the UML standard stereotype&#xA;ModelLibrary."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="unitDefinitionImplicitImports" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Unless the unit definition is a model library, it has private package&#xA;import references for all the sub-packages of the Alf::Library package."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="unitDefinitionAppliedProfileDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The profiles applied to a unit definition include any profiles applied&#xA;to the containing namespace of the unit definition. If the unit&#xA;definition is for a package, then the applied profiles for the unit&#xA;definition also include the applied profiles for its associated package&#xA;definition."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="namespaceName" eType="#//QualifiedName"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A declaration of the name of the namespace that contains this unit as a&#xA;subunit."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="definition" lowerBound="1"
- eType="#//NamespaceDefinition" containment="true" eOpposite="#//NamespaceDefinition/unit">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of the unit as a namespace."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="import" ordered="false"
- upperBound="-1" eType="#//ImportReference" containment="true" eOpposite="#//ImportReference/unit">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The set of references to imported elements or packages."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="namespace" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reference to the namespace denoted by the declared namespace name for&#xA;the unit, if any."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="Whether this unit definition is for a model library or not."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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/GenModel">
- <details key="documentation" value="The profiles applied to this unit."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.definition.appliedProfiles()"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="annotation" ordered="false"
- upperBound="-1" eType="#//StereotypeAnnotation" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The stereotype annotations on this unit definition."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ImportReference" abstract="true" eSuperTypes="#//SyntaxElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reference to an element or package to be imported into a unit."/>
- </eAnnotations>
- <eOperations name="importedMembers" ordered="false" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the set of all imported members."/>
- </eAnnotations>
- </eOperations>
- <eOperations name="importReferenceReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referent of an import reference is the element denoted by the&#xA;referent name."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="importReferenceReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The referent name of an import reference must resolve to a single element&#xA;with public or empty visibility."/>
- </eAnnotations>
- <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://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An indication of the visibility of the import."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="ImportedMember"/>
- <details key="unique" value="false"/>
- <details key="upper" value="*"/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="ImportedMember"/>
- <details key="unique" value="false"/>
- <details key="upper" value="*"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="referentName" lowerBound="1"
- eType="#//QualifiedName" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the element or package to be imported."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="referent" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reference to the imported element denoted by the given qualified name."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The unit that is making this import reference."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ImportedMember" eSuperTypes="#//MemberDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value=""/>
- </eAnnotations>
- <eOperations name="actualName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.name"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="toReference" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns false. (Imported members do not have annotations.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
- </eOperations>
- <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the given member is not an imported member, then return the result of&#xA;checking whether the given member is the same kind as this member. Else,&#xA;if the element of the referent for this member is an Alf member, then&#xA;return the result of checking whether that element is the same kind as the&#xA;given member. Else, if the element of the referent for the given member is&#xA;an Alf member, then return the result of checking whether that element is&#xA;the same kind as this member. Else, the referents for both this and the&#xA;given member are UML elements, so return the result of checking their&#xA;distinguishability according to the rules of the UML superstructure."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isSameKindAs(member)"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if the referent of this imported member is a feature."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.referent.isFeature()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="importedMemberNotStub" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An imported element is not a stub."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="not self.isStub"/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="importedMemberIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An imported element is a feature if its referent is a feature."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="referent" lowerBound="1"
- eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value=""/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="EnumerationLiteralName" eSuperTypes="#//MemberDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of an enumeration literal, as a member of an enumeration definition."/>
- </eAnnotations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns false. (Enumeration literal name cannot have annotations.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="OperationDefinition" eSuperTypes="#//NamespaceDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of an operation, with any formal parameters defined as owned members."/>
- </eAnnotations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the body of an operation definition include an&#xA;assigned source for each parameter of the activity definition. The&#xA;source for out parameters is actually null, however, to indicate that it&#xA;has not been assigned yet (but that the name should not otherwise be used&#xA;as a local name)."/>
- </eAnnotations>
- <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; )->asSet()&#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/GenModel">
- <details key="documentation" value="Returns true if the annotation is for a stereotype that has a metaclass consistent with Operation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="The namespace definition associated with the given unit definition must be&#xA;an activity definition with no template parameters. In addition, the subunit&#xA;definition must have formal parameters that match each of the formal parameters&#xA;of the stub definition, in order. Two formal parameters match if they have&#xA;the same direction, name, multiplicity bounds, ordering, uniqueness and type&#xA;reference. If this operation definition is a constructor, then it is considered&#xA;to have an implicit return parameter, following any other formal parameters,&#xA;with the same type as the class of the operation definition and a multiplicity of 1..1.&#xA;"/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="Return true if the given member is either an OperationDefinition or an&#xA;imported member whose referent is an OperationDefinition or an Operation,&#xA;and the formal parameters of this operation definition match, in order,&#xA;the parameters of the other operation definition or operation. In this&#xA;context, matching means the same name and type (per UML Superstructure,&#xA;Subclause 7.3.5). A constructor operation without an explicit return parameter&#xA;is considered to implicitly have a return parameter, following any other&#xA;formal parameters, of the same type as the owner of the constructor operation."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Returns whether the parameters of this operation definition match the parameters of another operation&#xA;in direction, name, multiplicity bounds, ordering, uniqueness and type."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Returns whether the parameters of this operation definition match the parameters of another operation&#xA;in name and type only."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="Returns the return parameter for this operation. If the operation is a constructor, a&#xA;formal parameter is created to represent its implicit return parameter."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Returns the specialization referents for the owning class definition of this operation definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#xA; let namespace = self.containingMember().namespace in &#xA; if namespace.oclIsKindOf(ClassDefinition) then &#xA; namespace.oclAsType(ClassDefinition).specializationReferent->asSet()&#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/GenModel">
- <details key="documentation" value="The namespace for an operation definition must be a class definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If an operation definition has a redefinition list, its redefined operations&#xA;are the referent operations of the names in the redefinition list for the&#xA;operation definition. Otherwise, the redefined operations are any operations&#xA;that would otherwise be indistinguishable from the operation being defined&#xA;in this operation definition."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="operationDefinitionRedefinition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Each name in the redefinition list of an operation definition must have a&#xA;single referent that is an operation. This operation must be a non-private&#xA;operation that is a member of a specialization referent of the class&#xA;definition of the operation definition."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="The redefined operations of an operation definition must have formal parameters&#xA;that match each of the formal parameters of this operation definition, in order.&#xA;Two formal parameters match if they have the same direction, name, multiplicity&#xA;bounds, ordering, uniqueness and type reference."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An operation definition is a feature."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="operationDefinitionIsConstructorDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An operation definition is a constructor if it has a @Create annotation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="operationDefinitionIsDestructorDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An operation definition is a destructor if it has a @Destroy annotation."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="operationDefinitionConstructorDestructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An operation definition cannot be both a constructor and a destructor."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="If an operation definition is a constructor, any redefined operation for it must also be a constructor.&#xA;The body of a constructor may contain an alternative constructor invocation for another constructor&#xA;in the same class or super constructor invocations for constructors in immediate superclasses."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="If an operation definition is a destructor, any redefined operation for it must also be a destructor."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The names of other operations that are redefined by the operation being defined."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAbstract" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the operation being defined is abstract."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="body" eType="#//Block"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The sequence of statements that defines the behavior of the operation (empty for a stub)."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="redefinedOperation" ordered="false"
- upperBound="-1" eType="#//ElementReference" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value=""/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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/GenModel">
- <details key="documentation" value="Whether this operation definition is for a constructor."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.annotation()->exists(stereotypeName.pathName = 'Create')"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDestructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this operation definition is for a destructor."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="self.annotation()->exists(stereotypeName.pathName = 'Destroy')"/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="AssociationDefinition" eSuperTypes="#//ClassifierDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of an association, whose members must all be properties."/>
- </eAnnotations>
- <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if the given unit definition matches this association definition&#xA;considered as a classifier definition and the subunit is for an association definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="In addition to the annotations allowed for classifiers in general, an association&#xA;definition allows an annotation for any stereotype whose metaclass is consistent with Association."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Return true if the given member is either an AssociationDefinition or an&#xA;imported member whose referent is an AssociationDefinition or an Association."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="member.isAssociation()"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="associationDefinitionSpecializationReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The specialization referents of an association definition must all be associations."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of a classifier."/>
- </eAnnotations>
- <eOperations name="ClassifierDefinition_annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="NamespaceDefinition_annotationAllowed(annotation)"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
- </eOperations>
- <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The namespace definition associated with the given unit definition must&#xA;be a classifier definition. The subunit classifier definition may be abstract&#xA;if and only if the subunit classifier definition is abstract. The subunit&#xA;classifier definition must have the same specialization referents as the&#xA;stub classifier definition. (Note that it is the referents that must match,&#xA;not the exact names or the ordering of those names in the specialization list.)&#xA;The subunit classifier definition must also have a matching classifier&#xA;template parameter for each classifier template parameter of the stub classifier&#xA;definition. Two template parameters match if they have same names and the same&#xA;specialization referents."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="ClassifierDefinition_matchForStub(unit)"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="ClassifierDefinition_matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Returns the members of a classifier definition including its inherited members."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.NamespaceDefinition_members()->&#xA; includingAll(self.inheritedMembers())->asOrderedSet()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="inheritedMembers" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns all of the inherited members of this classifier definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Define how to inherit a set of members. Here the operation is defined to inherit them all.&#xA;It is intended to be redefined in circumstances where inheritance is affected by redefinition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="members"/>
- </eAnnotations>
- <eParameters name="members" upperBound="-1" eType="#//Member"/>
- </eOperations>
- <eOperations name="classifierDefinitionSpecialization" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Each name listed in the specialization list for a classifier definition must&#xA;have a single classifier referent. None of these referents may be templates."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The specialization referents of a classifier definition are the classifiers denoted by the&#xA;names in the specialization list for the classifier definition."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="classifierDefinitionInheritedMembers" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The members of a classifier definition include non-private members inherited from the classifiers it specializes.&#xA;The visibility of inherited members is as specified in the UML Superstructure, Subclause 7.3.8."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAbstract" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the classifier is abstract or not."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="specialization" eType="#//QualifiedNameList"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The names of classifiers specialized by the classifier being defined."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="specializationReferent"
- upperBound="-1" eType="#//ElementReference" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="References to the classifiers to which the names in the specialization list resolve."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of a class, whose members may be properties, operations, signals or signal receptions."/>
- </eAnnotations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="In addition to the annotations allowed for classifiers in general, a class definition allows an&#xA;annotation for any stereotype whose metaclass is consistent with Class."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Returns true if the given unit definition matches this class definition considered as a&#xA;classifier definition and the subunit is for a class definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Return true if the given member is either a ClassDefinition or an imported member whose referent is a ClassDefinition or a Class."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="member.isClass()"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="needsDefaultConstructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Checks whether this class needs to have a default constructor added."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Checks whether this class needs to have a default destructor added."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="EXTERNAL: Caches intermediate members computation to avoid infinite loops."/>
- </eAnnotations>
- <eParameters name="inheritableMembers" upperBound="-1" eType="#//Member"/>
- </eOperations>
- <eOperations name="ClassDefinition_inherit" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="The specialization referents of a class definition must all be classes.&#xA;A class definition may not have any referents that are active classes unless&#xA;this is an active class definition."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="If a class definition is not abstract, then no member operations (owned or inherited)&#xA;of the class definition may be abstract."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The common properties of the definitions of typed elements."/>
- </eAnnotations>
- <eOperations name="isOrdered" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.isOrdered or self.isSequence"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="isNonunique" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.isNonunique or self.isSequence"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="typedElementDefinitionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If the lower bound string image of a typed element definition is not empty,&#xA;then the integer lower bound is the integer value of the lower bound string.&#xA;Otherwise the lower bound is equal to the upper bound, unless the upper bound&#xA;is unbounded, in which case the lower bound is 0."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="typedElementDefinitionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The unlimited natural upper bound value is the unlimited natural value of&#xA;the upper bound string (with &quot;*&quot; representing the unbounded value)."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="typedElementDefinitionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type of a typed element definition is the single classifier referent&#xA;of the type name."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="typedElementDefinitionTypeName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The type name of a typed element definition must have a single classifier&#xA;referent. This referent may not be a template."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The string image of the literal given to specify the lower bound of the&#xA;multiplicity of the element being defined."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="upperBound" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" defaultValueLiteral="1">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The string image of the literal given to specify the upper bound of the&#xA;multiplicity of the element being defined."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isOrdered" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the element being defined is ordered."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isNonunique" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the element being defined is non-unique."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isSequence" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the element being defined is a sequence (and hence both ordered&#xA;and non-unique)."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" eType="#//QualifiedName"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the type of the element being defined."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="actualType" eType="#//ElementReference"/>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAny" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the element being defined has an empty type."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isMultiplicity" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the element being defined has multiplicity specified as 0..*&#xA;using the shortand multiplicity indicator &quot;[]&quot;."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="DataTypeDefinition" eSuperTypes="#//ClassifierDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of a data type, whose members must all be properties."/>
- </eAnnotations>
- <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if the given unit definition matches this data type definition&#xA;considered as a classifier definition and the subunit is for a data type&#xA;definition."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="In addition to the annotations allowed for classifiers in general, a data type&#xA;definition allows @primitive annotations plus any stereotype whose metaclass is consistent with DataType."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Return true if the given member is either a DataTypeDefinition or an imported member&#xA;whose referent is a DataTypeDefinition or a DataType."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="member.isDataType()"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="dataTypeDefinitionPrimitive" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a data type is primitive, then it may not have any owned members."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="The specialization referents of a data type definition must all be data types."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of a package, all of whose members must be packageable elements."/>
- </eAnnotations>
- <eOperations name="allowPackageOnly" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="In addition to the annotations allowed on any namespace definition, a package definition&#xA;allows @apply annotations plus any stereotype whose metaclass is consistent with Package."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Returns true of the namespace definition associated with the given unit definition is a package definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="unit.definition.oclIsKindOf(PackageDefinition)"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return true if the given member is either a PackageDefinition or an imported member whose referent is a PackageDefinition or a Package."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="member.isPackage()"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="packageDefinitionAppliedProfileDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The applied profiles of a package definition are the profiles listed in any @apply annotations on the package."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return all profiles applied in this package, any containing package or in the model scope."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.appliedProfile->union(self.NamespaceDefinition_appliedProfiles())"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="appliedProfile" ordered="false"
- upperBound="-1" eType="#//ElementReference" volatile="true" transient="true"
- derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The profiles applied (directly) to this package."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A typed element definition for a property (attribute or association end)."/>
- </eAnnotations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="Set(AssignedSource){}"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if the annotation is for a stereotype that has a metaclass&#xA;consistent with Property."/>
- </eAnnotations>
- <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/GenModel">
- <details key="documentation" value="Return true if the given member is either a PropertyDefinition or an&#xA;imported member whose referent is a PropertyDefinition or a Property."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="member.isProperty()"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="true"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="propertyDefinitionInitializer" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="If a property definition has an initializer, then the initializer expression&#xA;must be assignable to the property definition. There are no assignments before&#xA;an initializer expression.&#xA;(See also assignmentsBefore(element) operation.)"/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A property definition requires collection conversion if its initializer has&#xA;a collection class as its type and the property definition does not."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="propertyDefinitionIsBitStringConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A property definition requires BitString conversion if its type is BitString and&#xA;the type of its initializer is Integer or a collection class whose argument type is Integer."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="propertyDefinitionIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A property definition is a feature."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isComposite" lowerBound="1"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether the property being defined has composite aggregation."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="initializer" eType="#//Expression"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The expression to be evaluated to initialize the property."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCollectionConversion"
- eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
- transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether collection conversion is required for the initialization of this property."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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/GenModel">
- <details key="documentation" value="Whether BitString conversion is required for the initialization of this property."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value=""/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SignalDefinition" eSuperTypes="#//ClassifierDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of a signal, whose members must all be properties."/>
- </eAnnotations>
- <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if the given unit definition matches this signal definition considered&#xA;as a classifier definition and the subunit is for a signal definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="In addition to the annotations allowed for classifiers in general, a signal definition&#xA;allows an annotation for any stereotype whose metaclass is consistent with Signal."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Return true if the given member is either a SignalDefinition or an imported member&#xA;whose referent is a SignalDefinition or a Signal (where signal reception definitions are&#xA;considered to be kinds of signal definitions)."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="member.isSignal()"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="signalDefinitionSpecializationReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The specialization referents of a signal definition must all be signals."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of an active class."/>
- </eAnnotations>
- <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if the given unit definition matches this active class definition&#xA;considered as a class definition and the subunit is for an active class definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="If an active class definition is not abstract, then it must have a classifier behavior."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of an activity (which may be a stub) to act as the classifier behavior of the active class."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ActivityDefinition" eSuperTypes="#//ClassifierDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of an activity, with any formal parameters defined as owned members."/>
- </eAnnotations>
- <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The assignments before the body of an activity definition include an&#xA;assigned source for each parameter of the activity definition. The&#xA;source for out parameters is actually null, however, to indicate that it&#xA;has not been assigned yet (but that the name should not otherwise be used&#xA;as a local name)."/>
- </eAnnotations>
- <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; )->asSet()&#xA; endif"/>
- </eAnnotations>
- <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
- </eOperations>
- <eOperations name="outerScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="This is necessary because, for Xtext parsing, ActiveClassDefinition::classifierBehavior is&#xA;composite and the classifierBehavior is not also added as a member of its active class."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="In addition to the annotations allowed for classifiers in general, an activity definition allows&#xA;@primitive annotations and any stereotype whose metaclass is consistent with Activity."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Returns true if the given unit definition matches this activity definition considered&#xA;as a classifier definition and the subunit is for an activity definition. In addition,&#xA;the subunit definition must have formal parameters that match each of the formal parameters&#xA;of the stub definition, in order. Two formal parameters match if they have the same&#xA;direction, name, multiplicity bounds, ordering, uniqueness and type reference."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Return true if the given member is either an ActivityDefinition or an&#xA;imported member whose referent is an ActivityDefinition or an Activity."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="member.isActivity()"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="activityDefinitionSpecialization" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An activity definition may not have a specialization list."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="If an activity definition is primitive, then it must have a body that is empty."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The sequence of statements that defines the behavior of the activity (empty for a stub)."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ElementImportReference" eSuperTypes="#//ImportReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An import reference to a single element to be imported into a unit."/>
- </eAnnotations>
- <eOperations name="importedMembers" ordered="false" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the set of all imported members."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="The referent of an element import reference must be a packageable element."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The alias to be used as the name for the imported element in the importing unit?s namespace."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="SignalReceptionDefinition" eSuperTypes="#//SignalDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of both a signal and a reception of that signal as a feature of the containing active class."/>
- </eAnnotations>
- <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="true"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="signalReceptionDefinitionIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A signal reception definition is a feature."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="EnumerationDefinition" eSuperTypes="#//ClassifierDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of an enumeration, whose members must all be enumeration literal names."/>
- </eAnnotations>
- <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if the given unit definition matches this enumeration definition considered&#xA;as a classifier definition and the subunit is for an enumeration definition."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="In addition to the annotations allowed for classifiers in general, an enumeration definition&#xA;allows an annotation for any stereotype whose metaclass is consistent with Enumeration."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Return true if the given member is either an EnumerationDefinition or an imported member&#xA;whose referent is an EnumerationDefinition or an Enumeration."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="member.isEnumeration()"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="enumerationDefinitionSpecializationReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The specialization referents of an enumeration definition must all be enumerations."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An import reference to a package all of whose public members are to be imported."/>
- </eAnnotations>
- <eOperations name="importedMembers" ordered="false" upperBound="-1" eType="#//Member">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return the visible members of the referent package."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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; )->asSet()&#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/GenModel">
- <details key="documentation" value="The referent of a package import must be a package."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The definition of a classifier template parameter, which acts as a classifier within the definition of the template."/>
- </eAnnotations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Annotations are not allowed on classifier template parameters."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="false"/>
- </eAnnotations>
- <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
- </eOperations>
- <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns false. (Classifier template parameters cannot be stubs.)"/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="not self.isStub"/>
- </eAnnotations>
- <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
- </eOperations>
- <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Return true if the given member is a classifier template parameter."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="member.isClassifierTemplateParameter()"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="matches" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Two template parameters match if they have same names and the same&#xA;specialization referents."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A typed element definition for the formal parameter of an activity or operation."/>
- </eAnnotations>
- <eOperations name="currentScope" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The current scope for a formal parameter is the outer scope&#xA;of the namespace definition that owns it."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.oclContainer().oclContainer().oclAsType(NamespaceDefinition).toReference()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if the annotation is for a stereotype that has a metaclass consistent with Parameter."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Return true if the given member is a FormalParameter."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="member.isParameter()"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="matches" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Two formal parameters match if they have the same direction, name,&#xA;multiplicity bounds, ordering, uniqueness and type reference."/>
- </eAnnotations>
- <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://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An indication of the direction of the parameter being defined."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="ReceptionDefinition"/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="ReceptionDefinition"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="typePart" eType="#//TypedElementDefinition"
- containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value=""/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="ReceptionDefinition" eSuperTypes="#//MemberDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The declaration of the ability of an active class to receive a signal."/>
- </eAnnotations>
- <eOperations name="actualName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="self.signalName.unqualifiedName.toName()"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Returns true if the annotation is for a stereotype that has a metaclass consistent with Reception."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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/GenModel">
- <details key="documentation" value="Return true if the given member is either a ReceptionDefinition, a SignalReceptionDefinition or an&#xA;imported member whose referent is a ReceptionDefinition, a SignalReceptionDefinition or a Reception."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="member.isReception()"/>
- </eAnnotations>
- <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
- </eOperations>
- <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="true"/>
- </eAnnotations>
- </eOperations>
- <eOperations name="receptionDefinitionSignalName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The signal name for a reception definition must have a single referent that is a signal. This referent must not be a template."/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The signal for a reception definition is the signal referent of the signal name for the reception definition."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eOperations name="receptionDefinitionIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A reception definition is a feature."/>
- </eAnnotations>
- <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
- <eParameters name="context">
- <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
- </eGenericType>
- </eParameters>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EReference" name="signalName" lowerBound="1"
- eType="#//QualifiedName" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The name of the signal to be received."/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="signal" eType="#//ElementReference"
- volatile="true" transient="true" derived="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value=""/>
- </eAnnotations>
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="derivation" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value=""/>
- </eAnnotations>
- <eOperations name="toReference" lowerBound="1" eType="#//ElementReference">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="&#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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value=""/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="visibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="An indication of the visibility of the member outside of its namespace."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="AnnotatedStatement"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="namespace" eType="#//NamespaceDefinition"
- eOpposite="#//NamespaceDefinition/ownedMember">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The namespace definition within which this member definition is nested, if any.&#xA;(The namespace definitions for units are not physically nested within another&#xA;Alf namespace definition.)"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="annotation" ordered="false"
- upperBound="-1" eType="#//StereotypeAnnotation" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The stereotype annotations on this member definition."/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="AnnotatedStatement" eSuperTypes="#//DocumentedElement">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value=""/>
- </eAnnotations>
- <eOperations name="annotations" ordered="false" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="External"/>
- </eAnnotations>
- </eOperations>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="annotation" ordered="false"
- upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="The annotations applied to this statement."/>
- </eAnnotations>
- <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
- <details key="body" value="BoundClassifier"/>
- <details key="unique" value="false"/>
- <details key="upper" value="*"/>
- </eAnnotations>
- </eStructuralFeatures>
- <eStructuralFeatures xsi:type="ecore:EReference" name="statement" lowerBound="1"
- eType="#//Statement" containment="true">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value=""/>
- </eAnnotations>
- </eStructuralFeatures>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="BoundClassifier" eSuperTypes="#//ClassifierDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A classifier resulting from the binding of a template to its actual&#xA;parameters."/>
- </eAnnotations>
- <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">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A formal parameter representing a return parameter."/>
- </eAnnotations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="NonReturnParameter" eSuperTypes="#//FormalParameter">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A formal parameter representing a parameter that is not a return parameter."/>
- </eAnnotations>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="AnyType" eSuperTypes="#//ClassifierDefinition">
- <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="A classifier representing the null &quot;any&quot; type in a list of&#xA;template paraemter actuals."/>
- </eAnnotations>
- <eOperations name="actualName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
- <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
- <details key="body" value="'any'"/>
- </eAnnotations>
- </eOperations>
- </eClassifiers>
-</ecore:EPackage>
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="alf" nsURI="http://www.omg.org/spec/ALF/20120827" nsPrefix="alf">
+ <eAnnotations source="http://www.eclipse.org/OCL/Import">
+ <details key="ecore" value="http://www.eclipse.org/emf/2002/Ecore"/>
+ <details key="types" value="http://www.eclipse.org/uml2/5.0.0/Types"/>
+ <details key="uml" value="http://www.eclipse.org/uml2/5.0.0/UML"/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+ <details key="invocationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
+ <details key="settingDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
+ <details key="validationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
+ </eAnnotations>
+ <eClassifiers xsi:type="ecore:EClass" name="AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An assignment of a source element that gives the value of a local name, along with a record of the defined type (if any) and multiplicity of the local name."/>
+ </eAnnotations>
+ <eOperations name="isNew" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The local name for which this is the assigned source."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="source" lowerBound="1"
+ eType="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The syntax element that is to be the source for the assigned value of the given local name."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EIntegerObject">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The multiplicity upper bound for the local name."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EIntegerObject">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The multiplicity lower bound for the name."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A reference to the element that gives the type for the local name (if any)."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isParallelLocalName" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An indication whether this assignment is for a local name listed in a&#xA;@parallel annotation of a for statement."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SyntaxElement" abstract="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A syntax element synthesized in an abstract syntax tree, along with any additional information determined during static semantic analysis."/>
+ </eAnnotations>
+ <eOperations name="toReference" lowerBound="1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Return a reference to this element."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="InternalElementReference{element = self}"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="owner" eType="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Return the owner of this element."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="SyntaxElement_owner()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="SyntaxElement_owner" eType="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Return the current scope for this element. By default, this is the current&#xA;scope of the owner of this element, if any."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.SyntaxElement_currentScope()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="SyntaxElement_currentScope" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Return the enclosing statement for this element, if there is one."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Return the enclosing expression for this element, if there is one."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Return the assignments before this element, as appropriate."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.SyntaxElement_assignmentsBefore()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="SyntaxElement_assignmentsBefore" ordered="false" upperBound="-1"
+ eType="#//AssignedSource"/>
+ <eOperations name="SyntaxElement_assignmentsBefore_base" ordered="false" upperBound="-1"
+ eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Return the assignments before the given subelement of this element,&#xA;if any, as appropriate. (By default, by default they are are the&#xA;assignments before this element.)"/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.assignmentsBefore()"/>
+ </eAnnotations>
+ <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
+ </eOperations>
+ <eOperations name="updateAll" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Update the initial set of assignments with all the assigned sources in&#xA;newAssignments."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="Return the effective common ancestor of a set of classifiers."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The element to consider the owner of this element, if this element&#xA;does not have a composite container."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ElementReference" abstract="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A reference to a model element, either directly or via its Alf abstract&#xA;syntax representation. (NOTE: The definitions of all the helper operations&#xA;of ElementReference are specific to its subclasses.)"/>
+ </eAnnotations>
+ <eOperations name="isUml" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="false"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="isAlf" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="false"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="asUml" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="null"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="asAlf" eType="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="null"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="asMember" eType="#//Member"/>
+ <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
+ </eOperations>
+ <eOperations name="isNamedElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isNamespace" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isNamespaceFor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
+ </eOperations>
+ <eOperations name="isModelNamespace" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isPackage" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isProfile" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isPackageableElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isClassifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isAbstractClassifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isAssociation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isDataType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isActiveClass" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isSignal" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isEnumeration" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isBehavior" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isActivity" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isMethod" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isPrimitiveType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isReception" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isOperation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isConstructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isDestructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isProperty" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isAssociationEnd" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isTemplate" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isTemplateParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isClassifierTemplateParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isParameteredElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isTemplateBinding" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isStereotype" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isEnumerationLiteral" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isLoopVariable" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isAnnotation" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isSequenceExpansionExpression" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isAnyType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="false"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="isDistinguishableFrom" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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')->asSet()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="nestedClassifiers" upperBound="-1" eType="#//ElementReference"/>
+ <eOperations name="properties" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.members()->select(isProperty())"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="associationEnds" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.members()->select(isAssociationEnd())"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="opposite" eType="#//ElementReference"/>
+ <eOperations name="receptions" ordered="false" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.members()->select(isReception())->asSet()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="signal" eType="#//ElementReference"/>
+ <eOperations name="parameters" upperBound="-1" eType="#//ElementReference"/>
+ <eOperations name="returnParameter" eType="#//ElementReference"/>
+ <eOperations name="specification" eType="#//ElementReference"/>
+ <eOperations name="redefinedOperations" ordered="false" upperBound="-1" eType="#//ElementReference"/>
+ <eOperations name="namespace" eType="#//ElementReference"/>
+ <eOperations name="template" eType="#//ElementReference"/>
+ <eOperations name="templateParameters" upperBound="-1" eType="#//ElementReference"/>
+ <eOperations name="parameteredElements" upperBound="-1" eType="#//ElementReference"/>
+ <eOperations name="templateActuals" upperBound="-1" eType="#//ElementReference"/>
+ <eOperations name="direction" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eOperations name="association" eType="#//ElementReference"/>
+ <eOperations name="type" eType="#//ElementReference"/>
+ <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
+ <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
+ <eOperations name="isOrdered" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="isNonunique" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eOperations name="parents" ordered="false" upperBound="-1" eType="#//ElementReference"/>
+ <eOperations name="allParents" ordered="false" upperBound="-1" eType="#//ElementReference"/>
+ <eOperations name="classifierBehavior" eType="#//ElementReference"/>
+ <eOperations name="context" eType="#//ElementReference"/>
+ <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference"/>
+ <eOperations name="base" lowerBound="1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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 : 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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Return the active class corresponding to an activity, if any.&#xA;This is either the activity itself, if it is active, or the class that&#xA;has the activity as a classifier behavior."/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="isActiveBehavior" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.activeClass() &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; )->asSet()&#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" eType="#//ElementReference"/>
+ </eOperations>
+ <eOperations name="allowPackageOnly" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="not self.isPackage()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="stub" eType="#//ElementReference"/>
+ <eOperations name="stubFor" eType="#//ElementReference">
+ <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
+ </eOperations>
+ <eOperations name="constructorReference" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA;&#x9;&#x9;&#x9;&#x9;if not self.isConstructor() then null&#xA;&#x9;&#x9;&#x9;&#x9;else&#xA; let classReferent = self.namespace() in&#xA; if not classReferent.isAbstractClassifier() then&#xA; self&#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 = self.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;&#x9;&#x9;&#x9;&#x9;endif"/>
+ </eAnnotations>
+ </eOperations>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="InternalElementReference" eSuperTypes="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A direct reference to a UML model element."/>
+ </eAnnotations>
+ <eOperations name="isAlf" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="true"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="asAlf" eType="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.element"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="asMember" eType="#//Member">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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="nestedClassifiers" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA;&#x9;&#x9;if not self.element.oclIsKindOf(ModelNamespace) then OrderedSet(ElementReference){}&#xA;&#x9;&#x9;else&#xA;&#x9;&#x9;&#x9;self.element.oclAsType(ModelNamespace).context().nestedClassifiers()&#xA;&#x9;&#x9;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()->asOrderedSet()&#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.isModelNamespace() then&#xA; &#x9;self.element.oclAsType(ModelNamespace).context().namespace()&#xA; else if self.element.oclIsKindOf(MemberDefinition) then&#xA; self.element.oclAsType(MemberDefinition).outerScope()&#xA; else&#xA; null&#xA; endif 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()->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="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->asSet()&#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(ElementReference){}&#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; &#x9;let stub = self.stub() in&#xA; &#x9;&#x9;-- This will also work is the stub is external.&#xA;&#x9; &#x9;if stub &lt;> null then stub.activeClass()&#xA;&#x9; &#x9;else&#xA;&#x9; &#x9;let namespace = self.namespace() in&#xA;&#x9;&#x9;&#x9; if namespace = null or &#xA;&#x9;&#x9;&#x9; not self.equals(namespace.classifierBehavior()) then null&#xA;&#x9;&#x9;&#x9; else namespace&#xA;&#x9;&#x9;&#x9; endif&#xA;&#x9;&#x9;&#x9; endif&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="context" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA;&#x9;&#x9;if not self.isActivity() then null&#xA;&#x9;&#x9;else&#xA;&#x9;&#x9;&#x9;let stub = self.stub() in&#xA;&#x9;&#x9;&#x9;let namespace = if stub = null then self.namespace() else stub.namespace() endif in&#xA;&#x9;&#x9;&#x9;&#x9;if namespace = null or &#xA;&#x9;&#x9;&#x9;&#x9;&#x9;namespace.nestedClassifiers()->exists(name() = self.name()) then null&#xA;&#xA;&#x9;&#x9;&#x9;&#x9;-- Note: This can only happen for a namespace that is an&#xA;&#x9;&#x9;&#x9;&#x9;-- external element reference.&#xA;&#x9;&#x9;&#x9;&#x9;else if namespace.isBehavior() then namespace.context()&#xA;&#xA;&#x9;&#x9;&#x9;&#x9;else namespace&#xA;&#x9;&#x9;&#x9;&#x9;endif endif&#xA;&#x9;&#x9;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="&#xA;&#x9;&#x9;other &lt;> null and (other.asAlf() = self.element or &#xA;&#x9;&#x9;&#x9;self.isModelNamespace() and other.asUml() = self.element.oclAsType(ModelNamespace).context().asUml())"/>
+ </eAnnotations>
+ <eParameters name="other" eType="#//ElementReference"/>
+ </eOperations>
+ <eOperations name="copy" lowerBound="1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="InternalElementReference{element = self.element}"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="modelScope" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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()->asSet()&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The Alf syntax element that represents the referenced model element."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ExternalElementReference" eSuperTypes="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A direct reference to a UML model element."/>
+ </eAnnotations>
+ <eOperations name="isUml" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="true"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="asUml" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.element"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="asMember" lowerBound="1" eType="#//Member">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="EXTERNAL&#xA;(Workaround for a seeming OCL bug &quot;unboxing&quot; enumeration literals.)"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="members" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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;&#x9; namespace.member-> &#xA;&#x9; collect(m | &#xA;&#x9; let names = namespace.getNamesOfMember(m) in&#xA;&#x9; if names->isEmpty() then&#xA;&#x9; Bag{ExternalElementReference{element = m}}&#xA;&#x9; else&#xA;&#x9; names->collect(name | &#xA;&#x9; ExternalElementReference{alias = name, element = m}&#xA;&#x9; )&#xA;&#x9; endif&#xA;&#x9; )&#xA; endif->asOrderedSet() in&#xA; let additionalMembers = self.additionalMembers() in&#xA; additionalMembers->appendAll(members)->&#xA; appendAll(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="nestedClassifiers" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA;&#x9;&#x9;if not self.element.oclIsKindOf(uml::Class) then OrderedSet(ElementReference){}&#xA;&#x9;&#x9;else&#xA;&#x9; self.element.oclAsType(uml::Class).nestedClassifier->collect(e |&#xA;&#x9; ExternalElementReference{element = e}&#xA;&#x9; )->asOrderedSet()&#xA;&#x9; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="properties" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if not self.isClassifier() then OrderedSet(ElementReference){}&#xA; else if self.isAssociation() then &#xA; &#x9;self.members()->select(isProperty())&#xA; else&#xA; self.element.oclAsType(uml::Classifier).allAttributes()->&#xA; collect(a | ExternalElementReference{element = a})->&#xA; asOrderedSet()&#xA; endif endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="associationEnds" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA;&#x9;&#x9;if not self.isAssociation() then OrderedSet(ElementReference){}&#xA;&#x9;&#x9;else &#xA;&#x9;&#x9;&#x9;self.element.oclAsType(uml::Association).ownedEnd->&#xA; collect(e | ExternalElementReference{element = e})->&#xA; asOrderedSet()&#xA;&#x9;&#x9;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="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA;&#x9;&#x9;&#x9;&#x9;let ownedParameters = &#xA;&#x9; if self.isBehavior() then&#xA;&#x9; self.element.oclAsType(uml::Behavior).ownedParameter&#xA;&#x9; else if self.isOperation() then&#xA;&#x9; self.element.oclAsType(uml::Operation).ownedParameter&#xA;&#x9; else&#xA;&#x9; OrderedSet{}&#xA;&#x9; endif endif&#xA;&#x9; in&#xA;&#x9; &#x9;ownedParameters->&#xA;&#x9; &#x9;&#x9;collect(parameter | ExternalElementReference{element = parameter})->&#xA;&#x9; &#x9;&#x9;asOrderedSet()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="parameters" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.ownedParameters()->reject(direction() = 'return')"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="returnParameter" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let returnParameters = self.ownedParameters()->select(direction() = 'return') &#xA; in&#xA; if returnParameters->isEmpty() then&#xA; null&#xA; else&#xA; 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})->asSet()&#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.asUml().oclAsType(uml::TemplateBinding).signature = null then&#xA; null&#xA; else&#xA; ExternalElementReference{&#xA; element = templateBinding.asUml().oclAsType(uml::TemplateBinding).signature.template&#xA; }&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="umlTemplateBinding" eType="#//ElementReference">
+ <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; ExternalElementReference{element = 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; ExternalElementReference{element = 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.asUml().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.isAssociationEnd() then null&#xA; -- Note: Only owned ends are treated as association ends.&#xA; else ExternalElementReference{element = 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.oclAsType(Integer)&#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(ElementReference){}&#xA; else&#xA; self.element.oclAsType(uml::Namespace).getNearestPackage().&#xA; getAllAppliedProfiles()->&#xA; collect(e | ExternalElementReference{element = e})->asSet()&#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&#xA; let context = self.element.oclAsType(uml::Behavior).context in&#xA; &#x9;if context &lt;> null then ExternalElementReference{element = context}&#xA; &#x9;else if self.element.oclAsType(uml::Behavior).isActive then self&#xA; &#x9;else null&#xA; &#x9;endif endif &#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="context" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA;&#x9;&#x9;if not self.isBehavior() then null&#xA;&#x9;&#x9;else&#xA;&#x9;&#x9;&#x9;let context = self.element.oclAsType(uml::Behavior).context in&#xA;&#x9;&#x9;&#x9;&#x9;if context = null then self &#xA;&#x9;&#x9;&#x9;&#x9;else ExternalElementReference{element = context} &#xA;&#x9;&#x9;&#x9;&#x9;endif&#xA;&#x9;&#x9;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; &#x9;(other.asUml() = self.element and other.name() = self.name() or&#xA; &#x9; other.isModelNamespace() and other.asAlf().oclAsType(ModelNamespace).context().asUml() = self.element)"/>
+ </eAnnotations>
+ <eParameters name="other" eType="#//ElementReference"/>
+ </eOperations>
+ <eOperations name="copy" lowerBound="1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="ExternalElementReference{element = self.element}"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="modelScope" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="EXTERNAL"/>
+ </eAnnotations>
+ <eParameters name="pathName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eOperations>
+ <eOperations name="resolveInScope" ordered="false" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.members()->select(name() = name)->asSet()"/>
+ </eAnnotations>
+ <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eOperations>
+ <eOperations name="resolveStereotype" ordered="false" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.isProfile() then&#xA; self.element.oclAsType(uml::Package).ownedElement->&#xA; select(oclIsKindOf(uml::Stereotype) and oclAsType(uml::Stereotype).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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The referenced model element."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="alias" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The alias for the model element, if this is a reference to an imported&#xA;element with multiple names within a namespace."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ExternalEnumerationLiteralReference"
+ eSuperTypes="#//ExternalElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Workaround for apparent bug in Eclipse OCL handling of enumeration literals."/>
+ </eAnnotations>
+ <eOperations name="isNamedEement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="true"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="isClassifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="false"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="isParameter" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="false"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="isEnumerationLiteral" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="true"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="ExternalEnumerationLiteralReference_visibility" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eOperations name="visibility" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="ExternalEnumerationLiteralReference_visibility()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="ExternalEnumerationLiteralReference_type" lowerBound="1" eType="#//ElementReference"/>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="ExternalEnumerationLiteralReference_type()"/>
+ </eAnnotations>
+ </eOperations>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="BoundElementReference" eSuperTypes="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A reference to an element as bound within a template instantiation."/>
+ </eAnnotations>
+ <eOperations name="isUml" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="false"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="isAlf" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="true"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="asUml" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="null"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="asAlf" eType="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.asMember()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="asMember" eType="#//Member">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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; )->asOrderedSet()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="members" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.boundReferencesTo(&#xA; self.referent.members()->reject(isTemplateParameter())&#xA; )->asOrderedSet()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="nestedClassifiers" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.boundReferencesTo(self.referent.nestedClassifiers())->asOrderedSet()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="properties" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.boundReferencesTo(self.referent.properties())->asOrderedSet()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="associationEnds" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.boundReferencesTo(self.referent.associationEnds())->asOrderedSet()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="opposite" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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())->asOrderedSet()"/>
+ </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())->asSet()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="allParents" ordered="false" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.boundReferencesTo(self.referent.allParents()->asOrderedSet())->asSet()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="classifierBehavior" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.referent.classifierBehavior()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.referent.appliedProfiles()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="reference" lowerBound="1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.referent"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="templateBinding" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.templateBinding"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="activeClass" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.isActivity() then self&#xA; else null&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="context" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.boundReferenceTo(self.referent.context())"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="isActiveBehavior" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.activeClass() &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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A syntax element that has documentation comments associated with it."/>
+ </eAnnotations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="documentation" ordered="false"
+ upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The documentation text to be associated with a syntax element. Each string is intended to be mapped to the body of a comment element in the target UML model."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SequenceExpansionExpression" eSuperTypes="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression used to carry out one of a predefined set of operations over each of the elements in a sequence."/>
+ </eAnnotations>
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assigned source for the expansion variable of a sequence expansion&#xA;expression is the expression itself. The type for the assignment is the&#xA;type of the primary expression of the sequence expansion expression and&#xA;the multiplicity lower and upper bounds are 1."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="sequenceExpansionExpressionAssignmentsBeforePrimary" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before the primary expression of a sequence expansion&#xA;expression are the same as the assignments before the sequence expansion&#xA;expression.&#xA;(See the assignmentsBefore(element) operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="sequenceExpansionExpressionAssignmentsBeforeArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before the argument expression of a sequence expansion&#xA;expression include those after the primary expression plus one for the&#xA;expansion variable.&#xA;(See the assignmentsBefore(element) operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="sequenceExpansionExpressionVariableName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The expansion variable name may not conflict with any name already&#xA;assigned after the primary expression."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="The assignments after the argument expression of a sequence expansion&#xA;expression must be the same as the assignments before the argument&#xA;expression."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A select or reject expression has the same type as its primary expression.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="selectOrRejectExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A select or reject expression has a multiplicity lower bound of 0.&#xA;(See the lower operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="selectOrRejectExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A select or reject expression has a multiplicity upper bound of *.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="selectOrRejectExpressionArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The argument of a select or reject expression must have type Boolean and&#xA;a multiplicity upper bound of 1."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A collect or iterate expression has the same type as its argument&#xA;expression.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="collectOrIterateExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A collect or iterate expression has a multiplicity lower bound that is&#xA;the product of the bounds of its primary and argument expressions.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="collectOrIterateExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A collect or iterate expression has a multiplicity upper bound that is&#xA;the product of the bounds of its primary and argument expressions.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="forAllOrExistsOrOneExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A forAll, exists or one expression has the type Boolean.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="forAllOrExistsOrOneExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A forAll, exists or one expression has a multiplicity lower bound of 1.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="forAllOrExistsOrOneExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A forAll, exists or one expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="forAllOrExistsOrOneExpressionArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The argument of a forAll, exists or one expression must have type Boolean&#xA;and a multiplicity upper bound of 1."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An isUnique expression has the type Boolean.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="isUniqueExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An isUnique expression has a multiplicity lower bound of 1.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="isUniqueExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An isUnique expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="isUniqueExpressionExpressionArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The argument of an isUnique expression must have a multiplicity upper&#xA;bound of 1."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="The assignments after a sequence expansion expression are the same as&#xA;after its primary expression."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.assignmentsAfterPrimary()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="sequenceExpansionExpressionOperation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The name of the operation to be carried out."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="variable" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The name of the expansion variable available as a local name within the&#xA;argument expression."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="variableSource" eType="#//AssignedSource"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assigned source for the expansion variable within the argument&#xA;expression. The source is actually the sequence expansion expression&#xA;itself."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The argument expression. The exact form required for this expression&#xA;depends on which expansion operation is being carried out."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="primary" lowerBound="1"
+ eType="#//ExtentOrExpression" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The class name or primary expression that evaluates to the sequence to&#xA;be acted on."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isSelectOrReject" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
+ transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.operation = 'select' or self.operation = 'reject'"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCollectOrIterate" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
+ transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.operation = 'collect' or self.operation = 'iterate'"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isForAllOrExistsOrOne"
+ lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.operation = 'forAll' or self.operation = 'exists' or self.operation = 'one'"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isIsUnique" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
+ transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.operation = 'isUnique'"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="AssignableElement" abstract="true" eSuperTypes="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An element that is or has an assignable value."/>
+ </eAnnotations>
+ <eOperations name="typeCached" eType="#//ElementReference"/>
+ <eOperations name="type" eType="#//ElementReference"/>
+ <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
+ <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
+ <eOperations name="isNull" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.type = null and self.lower = 0 and self.upper = 0"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="isAssignableFromElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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" eType="ecore: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 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/GenModel">
+ <details key="documentation" value="The statically determined upper bound of the multiplicity of this&#xA;element."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.upper()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="lower" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The statically determined lower bound of the multiplicity of this&#xA;element."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.lower()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//ElementReference"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A reference to the element that specifies the statically determined&#xA;type for this element (if any)."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.typeCached()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="AssignableElementReference" eSuperTypes="#//AssignableElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A wrapper for treating an element reference as an assignable element.&#xA;This is necessary to tie into the ownership hierarchy, so library&#xA;type resolution works correctly."/>
+ </eAnnotations>
+ <eOperations name="type" lowerBound="1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.reference.type()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.reference.lower()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.reference.upper()"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="reference" lowerBound="1"
+ eType="#//ElementReference"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Expression" abstract="true" eSuperTypes="#//AssignableElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A model of the common properties derived for any Alf expression.&#xA;NOTE: The derivations for all properties of Expression except&#xA;AssignmentsAfter are specific to its various subclasses.&#xA;"/>
+ </eAnnotations>
+ <eOperations name="reference" lowerBound="1" eType="#//ExpressionReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="ExpressionReference{expression = self}"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="newAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Get the assigned sources for assignments made within this expression."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Returns the assignments from before this expression updated for any&#xA;assignments made in the expression. By default, this is the same set as&#xA;the assignments before the expression. This operation is redefined only&#xA;in subclasses of Expression for kinds of expressions that make assignments."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.Expression_updateAssignments()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="Expression_updateAssignments" ordered="false" upperBound="-1"
+ eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.assignmentBefore"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="updateAssignmentsCached" ordered="false" upperBound="-1" eType="#//AssignedSource"/>
+ <eOperations name="resolve" eType="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Return the assigned source element for the given name before this&#xA;expression, if any."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="Return whether the given expression is the first argument of an&#xA;invocation of CollectionFunctions::add. This is false by default and&#xA;is overidden for relevant invocation expressions."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="false"/>
+ </eAnnotations>
+ <eParameters name="targetExpression" lowerBound="1" eType="#//Expression"/>
+ </eOperations>
+ <eOperations name="expressionAssignmentAfterDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments after an expression are given by the result of the&#xA;updateAssignments helper operation."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="expressionUniqueAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="No name may be assigned more than once before or after an expression."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.assignmentBefore->isUnique(name) and self.assignmentAfter->isUnique(name)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentBefore" ordered="false"
+ upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
+ derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assigned sources for local names available lexically before this&#xA;expression."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="The assigned sources for local names available lexically after this&#xA;expression. This includes not only any assignments made within the&#xA;expression, but also any assignments that are unchanged from before the&#xA;expression."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.updateAssignmentsCached()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ExpressionReference" eSuperTypes="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Provides a non-composition reference to an expression that is owned elsewhere."/>
+ </eAnnotations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.expression.type"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.expression.lower"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.expression.upper"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="isAddTarget" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.expression.isAddTarget(targetExpression)"/>
+ </eAnnotations>
+ <eParameters name="targetExpression" lowerBound="1" eType="#//Expression"/>
+ </eOperations>
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.expression.assignmentBefore"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.expression.assignmentAfter"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
+ eType="#//Expression"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ExtentOrExpression" eSuperTypes="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The target of a sequence operation, reduction or expansion expression,&#xA;which may be either a primary expression or a class name denoting the class&#xA;extent."/>
+ </eAnnotations>
+ <eOperations name="isAddTarget" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.enclosingExpression().isAddTarget(targetExpression)"/>
+ </eAnnotations>
+ <eParameters name="targetExpression" lowerBound="1" eType="#//Expression"/>
+ </eOperations>
+ <eOperations name="extentOrExpressionExpressionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The effective expression for the target is the parsed primary expression,&#xA;if the target is not a qualified name, a name expression, if the target&#xA;is a qualified name other than a class name, or a class extent expression,&#xA;if the target is the qualified name of a class."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="extentOrExpressionExtentType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the target is a qualified name, then that name, before it is&#xA;disambiguated into either a name expression or a class name."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The effective expression for the target."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The target primary expression, if it is not a qualified name."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="QualifiedName" eSuperTypes="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The representation of a qualified name as a sequence of individual simple&#xA;names."/>
+ </eAnnotations>
+ <eOperations name="copy" lowerBound="1" eType="#//QualifiedName">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="QualifiedName{&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="EXTERNAL&#xA;Get the referents for this qualified name as a fully qualified name in&#xA;model scope."/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="qualifiedNameUnqualifiedNameDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The unqualified name of a qualified name is the last name binding.&#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="qualifiedNamePathNameDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The path name for a qualified name consists of the string representation&#xA;of each of the name bindings, separated by &quot;::&quot; punctuation. The string&#xA;representation of a name binding is its name followed by the&#xA;representation of its template binding, if it has one. The string&#xA;representation of a positional template binding consists of an ordered&#xA;list of the path names of its argument qualified names separated by&#xA;commas, all surrounded by the angle brackets &quot;&lt;&quot; and &quot;>&quot;.&#xA;The string representation of a named template binding consists of an&#xA;ordered list of its template parameter substitutions, each consisting of&#xA;the formal parameter name followed by &quot;=>&quot; followed by the path name of&#xA;the argument qualified name, separated by commas, all surrounded by the&#xA;angle brackets &quot;&lt;&quot; and &quot;>&quot;."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="qualifiedNameIsFeatureReferenceDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A qualified name is a feature reference if its disambiguation is not&#xA;empty."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="qualifiedNameQualificationDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The qualification of a qualified name is a empty if the qualified name&#xA;has only one name binding. Otherwise it is the qualified name consisting&#xA;of all the name bindings of the original qualified name except for the&#xA;last one. The qualification of a qualified name is considered ambiguous&#xA;if the qualified name is ambiguous and has more than two name bindings."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="qualifiedNameDisambiguationDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a qualified name is not ambiguous or it has a qualification that resolves&#xA;to a namespace, then it is has no disambiguation. Otherwise, its&#xA;disambiguation is a feature reference with a name given by the unqualified&#xA;name of the qualified name and a target expression determined by the&#xA;disambiguation of the qualification of the qualified name."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="qualifiedNameReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The referents of a qualified name are the elements to which the name may&#xA;resolve in the current scope, according to the UML rules for namespaces&#xA;and named elements."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="qualifiedNameLocalName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a qualified name is a local name, then the reference must be within&#xA;the same local scope as the definition of the named element."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="qualifiedNameNonLocalUnqualifiedName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a qualified name is an unqualified, non-local name, then it must be&#xA;visible in the current scope of the use of the name."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="qualifiedNameQualifiedResolution" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a qualified name has a qualification, then its unqualified name must&#xA;name an element of the namespace named by the qualification, where the&#xA;first name in the qualification must name an element of the current scope."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="qualifiedNameTemplateBinding" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the unqualified name of a qualified name has a template binding, then&#xA;the template name must resolve to a template. The template binding must&#xA;have an argument name for each of the template parameters and each argument&#xA;name must resolve to a classifier. If the template parameter has constraining&#xA;classifiers, then the referent of the corresponding argument name must conform&#xA;to all those constraining classifiers."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the last name binding in a qualified name has a template binding, then&#xA;the template name is a qualified name with the same template bindings as&#xA;the original qualified name, but with the template binding removed on the&#xA;last name binding."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="disambiguationCached" eType="#//FeatureReference"/>
+ <eOperations name="disambiguation" eType="#//FeatureReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether this qualified name is ambiguous."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="pathName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The complete path name for the qualified name, with individual name&#xA;bindings separated by &quot;::&quot; punctuation."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="Indicates whether this qualified name has been disambiguated to a&#xA;feature reference."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="The qualified name corresponding to the qualification part of this&#xA;qualified name, if any."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="The disambiguation into a feature reference of a syntactic element&#xA;initially parsed as a qualified name."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.disambiguationCached()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="nameBinding" upperBound="-1"
+ eType="#//NameBinding" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The sequence of individual name bindings in this qualified name."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="referent" ordered="false"
+ upperBound="-1" eType="#//ElementReference" volatile="true" transient="true"
+ derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The possible referents to which this qualified name may resolve.&#xA;(Note that the UML rules for namespaces in general allow a namespace to&#xA;contain elements of different kinds with the same name.) If the qualified&#xA;name is for a template instantiation, then the referent is the equivalent&#xA;bound element."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.referentCached()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="unqualifiedName" eType="#//NameBinding"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The rightmost individual name binding in the qualified name, without the&#xA;qualification."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.nameBinding->last()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="templateName" eType="#//QualifiedName"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If this qualified name is for a template binding, then the name of the&#xA;template for which this qualified name is a binding."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A reference to a structural or behavioral feature of the type of its target&#xA;expression or a binary association end the opposite end of which is typed&#xA;by the type of its target expression."/>
+ </eAnnotations>
+ <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.expression.assignmentAfter"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="behavioralFeatureReferent" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The features referenced by a feature reference include the features of&#xA;the type of the target expression and the association ends of any binary&#xA;associations whose opposite ends are typed by the type of the target&#xA;expression."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="featureReferenceTargetType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The target expression of the feature reference may not be untyped, nor&#xA;may it have a primitive or enumeration type."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The target expression."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="referent" ordered="false"
+ upperBound="-1" eType="#//ElementReference" volatile="true" transient="true"
+ derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The features referenced by this feature reference."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.referentCached()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="nameBinding" eType="#//NameBinding"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The name of the feature."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="NameBinding" eSuperTypes="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An unqualified name, optionally with a template binding."/>
+ </eAnnotations>
+ <eOperations name="toString" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The template binding to be used, if the name denotes a template."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An unqualified name. For names that appeared as unrestricted names in the input text, the string value here excludes the surrounding single quote characters and has any escape sequences resolved to the denoted special characters."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="TemplateBinding" abstract="true" eSuperTypes="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A list of type names used to provide arguments for the parameters of a template."/>
+ </eAnnotations>
+ <eOperations name="toString" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eOperations name="matches" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="template" lowerBound="1" eType="#//ElementReference"/>
+ </eOperations>
+ <eOperations name="copy" lowerBound="1" eType="#//TemplateBinding"/>
+ <eOperations name="bindTo" unique="false" upperBound="-1" eType="#//ElementReference">
+ <eParameters name="template" lowerBound="1" eType="#//ElementReference"/>
+ </eOperations>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="NamedTemplateBinding" eSuperTypes="#//TemplateBinding">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A template binding in which the arguments are matched to formal template parameters by name."/>
+ </eAnnotations>
+ <eOperations name="toString" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; '&lt;' + &#xA; self.substitution->iterate(substitution : TemplateParameterSubstitution; s : 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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The substitutions of arguments for template parameters."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="TemplateParameterSubstitution" eSuperTypes="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A specification of the substitution of an argument type name for a template parameter."/>
+ </eAnnotations>
+ <eOperations name="actualParameterName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="NameBinding{name = self.parameterName}.toName()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="toString" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.parameterName + '=>' + argumentName.pathName"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="copy" lowerBound="1" eType="#//TemplateParameterSubstitution">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="TemplateParameterSubstitution{&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The name of the template parameter."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="argumentName" lowerBound="1"
+ eType="#//QualifiedName" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The name of the argument type."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="referent" eType="#//ElementReference"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A unary expression with a numeric operator."/>
+ </eAnnotations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.integerType()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.operand.lower"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="1"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="numericUnaryExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A numeric unary expression must have type Integer.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="numericUnaryExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A numeric unary expression has the same multiplicity lower bound as its&#xA;operand expression.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="numericUnaryExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A numeric unary expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="numericUnaryExpressionOperand" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The operand expression must have type Integer and a multiplicity upper&#xA;bound of 1."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.isIntegerType(self.operand.type) and self.operand.upper = 1"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="UnaryExpression" abstract="true" eSuperTypes="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression consisting of an operator acting on a single operand expression."/>
+ </eAnnotations>
+ <eOperations name="unaryExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before the operand of a unary expression are the same as&#xA;those before the unary expression."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="By default, the assignments after a unary expression are the same as&#xA;those after its operand expression."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.operand.assignmentAfter"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The symbol representing the operator."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="operand" lowerBound="1"
+ eType="#//Expression" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The expression giving the operand."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ForAllOrExistsOrOneExpression" eSuperTypes="#//SequenceExpansionExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A sequence expansion expression with a forAll, exists or one operation."/>
+ </eAnnotations>
+ <eOperations name="forAllOrExistsOrOneExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A forAll, exists or one expression has the type Boolean."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="forAllOrExistsOrOneExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A forAll, exists or one expression has a multiplicity lower bound of 1."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="forAllOrExistsOrOneExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A forAll, exists or one expression has a multiplicity upper bound of 1."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="forAllOrExistsOrOneExpressionArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The argument of a forAll, exists or one expression must have type Boolean and a multiplicity upper bound of 1."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="IsolationExpression" eSuperTypes="#//UnaryExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression used to evaluate its operand expression in isolation."/>
+ </eAnnotations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.operand.type"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.operand.lower"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.operand.upper"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="isolationExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An isolation expression has the type of its operand expression.&#xA;(See the type() expression.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="isolationExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An isolation expression has the multiplicity lower bound of its&#xA;operand expression.&#xA;(see the lower() expression.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="isolationExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An isolation expression has the multiplicity upper bound of its&#xA;operand expression.&#xA;(See the upper() expression.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="BinaryExpression" abstract="true" eSuperTypes="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression consisting of an operator acting on two operand expressions."/>
+ </eAnnotations>
+ <eOperations name="validateAssignments" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="In general the assignments before the operand expressions of a binary&#xA;expression are the same as those before the binary expression and, if an&#xA;assignment for a name is changed in one operand expression, then the&#xA;assignment for that name may not change in the other operand expression.&#xA;(This is overridden for conditional logical expressions.)"/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.operand1.newAssignments().name->excludesAll(self.operand2.newAssignments().name)"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="noNullArguments" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="By default, null arguments are not allowed for binary expressions.&#xA;(This is overridden for equality expressions.)"/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="true"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="binaryExpressionOperandMultiplicity" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The operands of a binary expression must both have a multiplicity upper&#xA;bound no greater than 1. If null arguments are not allowed (as given by&#xA;the noNullArguments helper operation), then the upper bounds must be&#xA;exactly 1."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="The assignments in the operand expressions of a binary expression must be&#xA;valid (as determined by the validateAssignments helper operation)."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.validateAssignments()"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments after a binary expression include all the assignments&#xA;before the expression that are not reassigned in either operand&#xA;expression, plus the new assignments from each of the operand expressions."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The expression giving the first operand."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="operand2" lowerBound="1"
+ eType="#//Expression" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The expression giving the second operand."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The symbol representing the operator."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="BooleanUnaryExpression" eSuperTypes="#//UnaryExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A unary expression with a Boolean operator."/>
+ </eAnnotations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.booleanType()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.operand.lower"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="1"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="booleanUnaryExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A Boolean unary expression has type Boolean.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="booleanUnaryExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A Boolean unary expression has the same multiplicity lower bound&#xA;as its operand expression.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="booleanUnaryExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A Boolean unary expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="booleanUnaryExpressionOperand" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The operand expression of a Boolean unary expression must have type&#xA;Boolean and a multiplicity upper bound of 1."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.isBooleanType(self.operand.type) and self.operand.upper = 1"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="CastExpression" eSuperTypes="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression used to filter values by type."/>
+ </eAnnotations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The type of a cast expression is the referent of the given type name (if&#xA;there is one).&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="castExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A cast expression has a multiplicity lower bound of 0.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="castExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A cast expression has a multiplicity upper bound that is the same as the&#xA;upper bound of its operand expression.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="castExpressionTypeResolution" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the cast expression has a type name, then it must resolve to a&#xA;non-template classifier."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before the operand of a cast expression are the same as&#xA;those before the cast expression."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments after a cast expression are the same as those after its&#xA;operand expression."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.operand.assignmentAfter"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="operand" lowerBound="1"
+ eType="#//Expression" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The operand expression of the cast expression."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" eType="#//QualifiedName"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The named type of the cast expression (if any)"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAny" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the cast expression has an empty type."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="PositionalTuple" eSuperTypes="#//Tuple">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A tuple in which the arguments are matched to parameters in order by position."/>
+ </eAnnotations>
+ <eOperations name="size" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.expression->size()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="inputFor" ordered="false" upperBound="-1" eType="#//InputNamedExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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="outputForExpression" eType="#//OutputNamedExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;if self.expression->excludes(expression) then null&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;else&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;let i = self.expression->indexOf(expression) in&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;let parameter = self.invocation.parameter->at(i) in&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;OutputNamedExpression{&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;name = parameter.name(),&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;expression = expression,&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;owner = self&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;endif"/>
+ </eAnnotations>
+ <eParameters name="expression" lowerBound="1" eType="#//Expression"/>
+ </eOperations>
+ <eOperations name="positionalTupleArguments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A positional tuple must not have more arguments than the invocation it is for has parameters."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.size() &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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The argument expressions for this tuple, to be matched by position to the invocation parameters."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Tuple" abstract="true" eSuperTypes="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A list of expressions used to provide the arguments for an invocation."/>
+ </eAnnotations>
+ <eOperations name="size" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
+ <eOperations name="inputCached" ordered="false" upperBound="-1" eType="#//InputNamedExpression"/>
+ <eOperations name="input" ordered="false" upperBound="-1" eType="#//InputNamedExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.inputFor(self.invocation.parameter)"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="inputFor" ordered="false" upperBound="-1" eType="#//InputNamedExpression">
+ <eParameters name="parameters" upperBound="-1" eType="#//ElementReference"/>
+ </eOperations>
+ <eOperations name="outputCached" ordered="false" upperBound="-1" eType="#//OutputNamedExpression"/>
+ <eOperations name="output" ordered="false" upperBound="-1" eType="#//OutputNamedExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.outputFor(self.invocation.parameter)"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="outputFor" ordered="false" upperBound="-1" eType="#//OutputNamedExpression">
+ <eParameters name="parameters" upperBound="-1" eType="#//ElementReference"/>
+ </eOperations>
+ <eOperations name="outputForExpression" eType="#//OutputNamedExpression">
+ <eParameters name="expression" lowerBound="1" eType="#//Expression"/>
+ </eOperations>
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA;-- let assignmentsBefore = self.assignmentsBefore() in&#xA;-- if not element.oclIsKindOf(NameExpression) then assignmentsBefore&#xA;-- else&#xA;-- let output = self.outputForExpression(element.oclAsType(NameExpression)) in&#xA;-- if output = null then assignmentsBefore&#xA;-- else self.updateFor(assignmentsBefore, output)&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A tuple has the same number of inputs as its invocation has input&#xA;parameters. For each input parameter, the tuple has a corresponding input&#xA;with the same name as the parameter and an expression that is the&#xA;matching argument from the tuple, or an empty sequence construction&#xA;expression if there is no matching argument."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="tupleOutputDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A tuple has the same number of outputs as its invocation has output&#xA;parameters. For each output parameter, the tuple has a corresponding&#xA;output with the same name as the parameter and an expression that is the&#xA;matching argument from the tuple, or an empty sequence construction&#xA;expression if there is no matching argument."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="tupleNullInputs" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An input parameter may only have a null argument if it has a multiplicity&#xA;lower bound of 0."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="An output parameter may only have a null argument if it is an out parameter."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before each expression in a tuple are the same as the&#xA;assignments before the tuple, except in the case of a name expression&#xA;that defines a new local name, in which case the assigned source for the&#xA;new name is included in the assignments before the name expression. (Note&#xA;that the assigned source for a new name is included before the name&#xA;expression so that the nameExpressionResolution constraint is not&#xA;violated.) The assignments before the tuple are the same as the&#xA;assignments after the feature reference of the invocation of the tuple,&#xA;if the invocation has one, or otherwise the assignments before the&#xA;invocation.&#xA;&#xA;CHANGE: An assignment before is NOT given to a name expression that&#xA;that defines a local name. Instead the nameExpressionResolution&#xA;constraint has been modified. (This avoids a potential infinite recursion&#xA;in InvocationExpression::bindTemplateImplicitArguments().)&#xA;&#xA;(See also the InvocationExpression::assignmentsBefore(element) operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="tupleAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A name may be assigned in at most one argument expression of a tuple."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="The argument expressions from this tuple, matched to the input parameters&#xA;(direction in and inout) of the invocation. An empty sequence construction&#xA;expression is included for any input parameter that is not explicitly&#xA;matched in the tuple."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.inputCached()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="invocation" lowerBound="1"
+ eType="#//InvocationExpression" eOpposite="#//InvocationExpression/tuple">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The invocation expression of which this tuple is a part."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="output" ordered="false"
+ upperBound="-1" eType="#//OutputNamedExpression" volatile="true" transient="true"
+ derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The argument expressions from this tuple, matched to the output parameters&#xA;(direction inout and out) of the invocation. An empty sequence construction&#xA;expression is included for any output parameter that is not explicitly&#xA;matched in the tuple."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.outputCached()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="NamedExpression" eSuperTypes="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A pairing of a parameter name and an argument expression in a named tuple."/>
+ </eAnnotations>
+ <eOperations name="actualName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="NameBinding{name = self.name}.toName()"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The parameter name."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
+ eType="#//Expression" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The argument expression."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="index" eType="#//Expression"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression whose value gives an index into an ordered parameter.&#xA;(This is only used in link operation expressions.)"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="InputNamedExpression" eSuperTypes="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A pairing of an input parameter name and an argument expression."/>
+ </eAnnotations>
+ <eOperations name="tuple" lowerBound="1" eType="#//Tuple">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.owner().oclAsType(_'Tuple')"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="namedExpressionIsCollectionConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Collection conversion is required if the type of the corresponding&#xA;parameter is a collection class and the type of the argument expression&#xA;is not."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="namedExpressionIsBitStringConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Bit string conversion is required if the type of the type of the&#xA;corresponding parameter is BitString, or a collection class instantiated&#xA;with a BitString type, and the type of the argument expression is not&#xA;BitString."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The parameter name."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
+ eType="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The argument expression."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="index" eType="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression whose value gives an index into an ordered parameter.&#xA;(This is only used in link operation expressions.)"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCollectionConversion"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
+ transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the argument expression requires collection conversion."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let parameter = self.tuple().invocation.parameterNamed(self.name) in&#xA; &#x9;parameter &lt;> null and&#xA; &#x9;let parameterType = parameter.type() in&#xA;&#x9; parameterType &lt;> null and self.expression.type &lt;> null and&#xA;&#x9; self.isCollectionClass(parameterType) and &#xA;&#x9; not self.isCollectionClass(self.expression.type)"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
+ transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the argument expression requires bit string conversion."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; let parameter = self.tuple().invocation.parameterNamed(self.name) in&#xA; &#x9;parameter &lt;> null and&#xA; &#x9;let parameterType = parameter.type() in&#xA;&#x9; parameterType &lt;> null and self.expression &lt;> null and&#xA;&#x9; (self.isBitStringType(parameterType) or &#xA;&#x9; self.isBitStringCollectionClass(parameterType)) and &#xA;&#x9; not self.isBitStringType(self.expression.type)"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="InvocationExpression" abstract="true"
+ eSuperTypes="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression denoting the invocation of a behavior or operation, or the&#xA;sending of a signal."/>
+ </eAnnotations>
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="If collection conversion would be required, return the toSequence&#xA;return type, rather than the expression type."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="Returns references to the elements that act as the parameters of the&#xA;referent. If the referent is a behavior or operation, these are the owned&#xA;parameters, in order. If the referent is an association end, then the&#xA;parameters are the other association ends of the association of the&#xA;referent end, which are treated as if they were in parameters. Otherwise&#xA;(by default), they are any properties of the referent (e.g., signal&#xA;attributes), which are treated as if they were in parameters. (This is&#xA;defined as a helper operation, so that it can be overridden by subclasses&#xA;of InvocationExpression, if necessary.)"/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="InvocationExpression_parameterElements()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="InvocationExpression_parameterElements" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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.associationEnds()->reject(equals(referent))->&#xA; collect(p | self.parameterFromPropertyWithMultiplicity(p, '1', '1'))->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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An invocation expression is a behavior invocation if its referent is a&#xA;behavior."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="invocationExpressionIsAssociationEndDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An invocation expression is an association end read if its referent is an&#xA;association end."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="invocationExpressionIsOperationDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An invocation expression is an operation call if its referent is an&#xA;operation."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="invocationExpressionIsDestructorDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An invocation expression is a destructor call either implicitly or if it&#xA;is an explicit operation call to a destructor operation."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="invocationExpressionIsImplicitDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An invocation expression is an implicit object destruction if it has a&#xA;feature with the name &quot;destroy&quot; and no explicit referents."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="invocationExpressionIsSignalDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An invocation expression is a signal send if its referent is a signal."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="invocationExpressionParameterDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The parameters of an invocation expression are given by the result of the&#xA;parameterElements helper operation."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="invocationExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the referent of an invocationExpression is an operation or behavior&#xA;with a return parameter, then the type of the expression is that of the&#xA;return parameter (if any). If the referent is a classifier, then the type&#xA;is the referent. If the referent is a property, then the type is that of&#xA;the property. Otherwise the expression has no type.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="invocationExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the referent of an invocationExpression is an operation or behavior&#xA;with a return parameter, then the upper bound of the expression is that&#xA;of the return parameter. If the referent is a classifier, then the upper&#xA;bound is 1. If the referent is a property, then the upper bound is that&#xA;of the property. Otherwise the upper bound is 0.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="invocationExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the referent of an invocationExpression is an operation or behavior&#xA;with a return parameter, then the lower bound of the expression is that&#xA;of the return parameter. If the referent is a classifier, then the lower&#xA;bound is 1. If the referent is a property, then the lower bound is that&#xA;of the property. Otherwise the lower bound is 0.&#xA;(see the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="invocationExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before the target expression of the feature reference of&#xA;an invocation expression (if any) are the same as the assignments before&#xA;the invocation expression.&#xA;(See the SyntaxElement::assignmentsBefore(element) operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments after an invocation expression are the same as those&#xA;after the tuple of the expression."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.tuple.assignmentsAfter()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="invocationExpressionTemplateParameters" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="TODO: Add this constraint to the standard.&#xA;if the referent is an implicit template binding, then all the template&#xA;parameters must be for classifiers and the actuals conform to any&#xA;constraining classifiers."/>
+ </eAnnotations>
+ <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://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether this is a behavior invocation or not."/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="OutputNamedExpression"/>
+ <details key="unique" value="false"/>
+ <details key="upper" value="*"/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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/GenModel">
+ <details key="documentation" value="Whether this is an association read or not."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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/GenModel">
+ <details key="documentation" value="For an invocation of a feature, the reference to that feature. This&#xA;property is set for a feature invocation expression or for an expression&#xA;initially parsed as a behavior invocation expression that disambiguates&#xA;to a feature invocation expression."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.feature()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isOperation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether this is an operation call or not."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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/GenModel">
+ <details key="documentation" value="If this is an operation call, whether the operation is a destructor."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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/GenModel">
+ <details key="documentation" value="Whether this is an implicit object destruction."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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/GenModel">
+ <details key="documentation" value="The behavior, operation or signal being invoked. The derivation of this&#xA;property is specific to each kind of invocation expression."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="referentCached()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="parameter" upperBound="-1"
+ eType="#//ElementReference" volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Element references to the parameters of the referent, in order."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.parameterElements()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isSignal" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether this is a signal send or not."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The tuple for the invocation expression."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="OutputNamedExpression" eSuperTypes="#//InputNamedExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A named argument expression for an output parameter."/>
+ </eAnnotations>
+ <eOperations name="outputNamedExpressionLeftHandSideDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The equivalent left-hand side for an output named expression depends on&#xA;the kind of expression. If the expression is a name expression with no&#xA;disambiguation, then the left-hand side is a name left-hand side with the&#xA;name from the name expression. If the expression is a name expression&#xA;that disambiguates to a feature reference, then the left-hand side is a&#xA;feature left-hand side for that feature reference. If the expression is a&#xA;property access expression, then the left-hand side is a feature left-hand&#xA;side for the feature reference of the property access expression. If the&#xA;expression is a sequence access expression, then the left-hand side is a&#xA;name left-hand side or feature left-hand side, as above, depending on&#xA;whether the primary expression of the sequence access expression is a&#xA;name expression or property access expression, and an index given by the&#xA;index expression of the sequence access expression. Otherwise the left-&#xA;hand side is empty."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="outputNamedExpressionForm" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The argument for an output parameter must be either be null, a name&#xA;expression, a property access expression, or a sequence access expression&#xA;whose primary expression is a name expression or a property access&#xA;expression."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.expression = null or self.hasLegalExpression()"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="hasLegalExpression" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="The argument expression considered as an assignment left-hand side."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The left-hand side of an assignment expression. NOTE: The derivations for&#xA;the derived properties of LeftHandSide are specific to its various subclasses.&#xA;"/>
+ </eAnnotations>
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="If a left-hand side has an index, then the index expression must have a&#xA;multiplicity upper bound no greater than 1."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.index() &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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An optional expression that evaluates to an index into the values of an&#xA;ordered sequence.&#xA;property index : Expression[?] { composes };"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentBefore" ordered="false"
+ upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
+ derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before the left-hand side."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.assignmentsBefore()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentAfter" ordered="false"
+ upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
+ derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments after the left-hand side."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.assignmentsAfter()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="referent" eType="#//ElementReference"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A reference to the assignable element denoted by this left-hand side, if&#xA;one exists (i.e., the left-hand side is not for the first assignment of a&#xA;local name)."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.referent()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SequenceAccessExpression" eSuperTypes="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression used to access a specific element of a sequence."/>
+ </eAnnotations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.primary.type"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="lower" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="0"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="upper" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="1"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The type of a sequence access expression is the same as the type of its&#xA;primary expression.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="sequenceAccessExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The multiplicity lower bound of a sequence access expression is 0.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="sequenceAccessExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The multiplicity upper bound of a sequence access expression is 1.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="sequenceAccessExpressionIndexType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The type of the index of a sequence access expression must be Integer."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="The multiplicity upper bound of the index of a sequence access expression&#xA;must be 1."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.index.upper = 1"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="primary" lowerBound="1"
+ eType="#//Expression" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The expression whose value is the sequence being accessed."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="index" lowerBound="1" eType="#//Expression"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The expression whose value is the index of the element being accessed in&#xA;the sequence."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="StringLiteralExpression" eSuperTypes="#//LiteralExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression that comprises a String literal."/>
+ </eAnnotations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.stringType()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="stringLiteralExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The type of a string literal expression is String.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="image" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The textual image of the literal token for this expression, with quote characters removed and escaped sequences resolved to the denoted special character."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="LiteralExpression" abstract="true" eSuperTypes="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression that comprises a primitive literal."/>
+ </eAnnotations>
+ <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="1"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="1"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="literalExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The multiplicity upper bound of a literal expression is always 1.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="literalExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The multiplicity lower bound of a literal expression is always 1.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SequenceOperationExpression" eSuperTypes="#//InvocationExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression used to invoke a behavior as if it was an operation on a target sequence as a whole."/>
+ </eAnnotations>
+ <eOperations name="feature" eType="#//FeatureReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="null"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="referent" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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="firstArgument" lowerBound="1" eType="#//OutputNamedExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA;&#x9;&#x9;&#x9;&#x9;let firstParameter = self.firstParameter() in&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;OutputNamedExpression{&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;name = if firstParameter = null then null else firstParameter.name() endif,&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;expression = self.primary.expression,&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;index = null,&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;owner = self.tuple&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="sequenceOperationExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The referent for a sequence operation expression is the behavior named by&#xA;the operation for the expression.&#xA;(See the referent() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="sequenceOperationExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="There is no feature for a sequence operation expression.&#xA;(See the feature() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="sequenceOperationExpressionOperationReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="There must be a single behavior that is a resolution of the operation&#xA;qualified name of a sequence operation expression with a least one&#xA;parameter, whose first parameter has direction in or inout, has&#xA;multiplicity [0..*] and to which the target primary expression is&#xA;assignable."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="If the first parameter of the referent has direction inout, then the&#xA;parameter type must have the same type as the primary expression, the&#xA;primary expression must have the form of a left-hand side and, if the&#xA;equivalent left-hand side is for a local name, that name must already&#xA;exist."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="The type of an input argument expression of a sequence operation&#xA;parameter must be assignable to its corresponding parameter. The type of&#xA;an output parameter must be assignable to its corresponding argument&#xA;expression. (Note that this implies that the type of an argument&#xA;expression for an inout parameter must be the same as the type of that&#xA;parameter.)"/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before the primary expression of a sequence operation&#xA;expression are the same as the assignments before the sequence operation&#xA;expression.&#xA;(See the InvocationExpression::assignmentsBefore(element) operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="sequenceOperationExpressionIsCollectionConversionDerivation"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Collection conversion is required if the type of the primary expression&#xA;of a sequence operation expression is a collection class and the&#xA;multiplicity upper bound of the primary expression is 1."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="sequenceOperationExpressionIsBitStringConversionDerivation"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="BitString conversion is required if type of the first parameter of the&#xA;referent of a sequence operation expression is BitString and either the&#xA;type of its primary expression is Integer or collection conversion is&#xA;required and the type of its primary expression is a collection class&#xA;whose argument type is Integer."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="sequenceOperationExpressionAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A local name that is assigned in the primary expression of a sequence&#xA;operation expression may not be assigned in any expression in the tuple&#xA;of the sequence operation expression."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the operation of a sequence operation expression has a first&#xA;parameter whose direction is inout, then the effective left-hand side for&#xA;the expression is constructed as follows: If the primary is a name&#xA;expression, then the left-hand side is a name left-hand side with the&#xA;name from the name expression as its target. If the primary is a property&#xA;access expression, then the left-hand side is a feature left hand side&#xA;with the feature reference from the property access expression as its&#xA;feature. If the primary is a sequence access expression whose primary is&#xA;a name expression or a property access expression, then the left-hand&#xA;side is constructed from the primary of the sequence access expression as&#xA;given previously and the index of the sequence access expression becomes&#xA;the index of the left-hand side."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments after a sequence operation expression include those made&#xA;in the primary expression and those made in the tuple and, for an &quot;in&#xA;place&quot; operation (one whose first parameter is inout), that made by the&#xA;sequence operation expression itself."/>
+ </eAnnotations>
+ <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" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Returns the list of parameter elements from the superclass operation,&#xA;with the first parameter removed (since the argument for the first&#xA;parameter is given by the primary expression of a sequence operation&#xA;expression, not in its tuple)."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The expression or class name whose value is gives the sequence to be&#xA;operated on."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="operation" eType="#//QualifiedName"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The qualified name of the behavior being invoked."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCollectionConversion"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
+ transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the primary expression requires collection conversion."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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/GenModel">
+ <details key="documentation" value="Whether type primary expression requires BitString conversion."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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/GenModel">
+ <details key="documentation" value="The effective left-hand side corresponding to the primary expression, if&#xA;the sequence operation is ?in place? (that is, has a first parameter with&#xA;direction inout)."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A sequence expansion expression with a select or reject operation."/>
+ </eAnnotations>
+ <eOperations name="selectOrRejectExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A select or reject expression has the same type as its primary expression."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="selectOrRejectExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A select or reject expression has a multiplicity lower bound of 0."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="selectOrRejectExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A select or reject expression has a multiplicity upper bound of *."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="selectOrRejectExpressionArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The argument of a select or reject expression must have type Boolean and a multiplicity upper bound of 1."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ClassExtentExpression" eSuperTypes="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression used to obtain the objects in the extent of a class."/>
+ </eAnnotations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The type of a class extent expression is the given class.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="classExtentExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The multiplicity upper bound of a class expression is *.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="classExtentExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The multiplicity lower bound of a class extent expression is 0.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="classExtentExpressionExtentType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The given type name must resolve to a non-template class."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.validateClassExtentExpressionExtentType()"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="validateClassExtentExpressionExtentType" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.type &lt;> null and not self.type.isTemplate()"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="className" lowerBound="1"
+ eType="#//QualifiedName" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The name of the class whose extent is to be obtained."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="PositionalTemplateBinding" eSuperTypes="#//TemplateBinding">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A template binding in which the arguments are matched to formal template parameters in order by position."/>
+ </eAnnotations>
+ <eOperations name="toString" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; '&lt;' + &#xA; self.argumentName->iterate(name : QualifiedName; s : 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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The arguments for this template binding, to be matched by position to the template parameters."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ConditionalLogicalExpression" eSuperTypes="#//BinaryExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A binary expression with a conditional logical expression, for which the&#xA;evaluation of the second operand expression is conditioned on the result of&#xA;evaluating the first operand expression."/>
+ </eAnnotations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.booleanType()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A conditional logical expression has type Boolean.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="conditionalLogicalExpressionLower" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A conditional logical expression has a multiplicity lower bound of 0 if&#xA;the lower bound if either operand expression is 0 and 1 otherwise.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="conditionalLogicalExpressionUpper" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A conditional logical expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="conditionalLogicalExpressionOperands" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The operands of a conditional logical expression must have type Boolean."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.isBooleanType(self.operand1.type) and self.isBooleanType(self.operand2.type)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="validateAssignments" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before the first operand expression of a conditional&#xA;logical expression are the same as those before the conditional logical&#xA;expression. The assignments before the second operand expression are the&#xA;same as those after the first operand expression.&#xA;(See the assignmentsBefore(element) operation.)"/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="true"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="If a name has the same assigned source after the second operand&#xA;expression as before it, then that is its assigned source after the&#xA;conditional logical expression. If a name is unassigned before the&#xA;second operand expression, then it is considered unassigned after the&#xA;conditional logical expression, even if it has an assigned source after&#xA;the second operand expression. Otherwise its assigned source after the&#xA;conditional logical expression is the conditional logical expression itself."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression used to create or destroy the links of an association."/>
+ </eAnnotations>
+ <eOperations name="referent" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A link operation expression is for link creation if its operation is&#xA;&quot;createLink&quot;."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="linkOperationExpressionIsClearDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A link operation expression is for clearing an association if the&#xA;operation is &quot;clearAssoc&quot;."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="linkOperationExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The referent for a link operation expression is the named association.&#xA;(See the referent() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="linkOperationExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="There is no feature for a link operation expression.&#xA;(See the feature() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="linkOperationExpressionAssociationReference" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The qualified name of a link operation expression must resolve to a&#xA;single association."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA;&#x9;self.referent &lt;> null and &#xA;&#x9;-- Also check that the association owns all its ends.&#xA;&#x9;self.referent.properties()->forAll(isAssociationEnd())"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="linkOperationExpressionArgumentCompatibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Each argument expression must be assignable to its corresponding&#xA;expression."/>
+ </eAnnotations>
+ <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" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="For a clear association operation, returns a single, typeless parameter.&#xA;Otherwise, returns the ends of the named association."/>
+ </eAnnotations>
+ <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.associationEnds()->collect(property | &#xA; -- NOTE: Arguments for a link operation have multiplicity 1..1.&#xA; parameterFromPropertyWithMultiplicity(property, '1', '1')&#xA; )->asOrderedSet()&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The name of the link operation."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCreation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the operation is for link creation."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.operation = 'createLink'"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isClear" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the operation is clearing the association."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.operation = 'clearAssoc'"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="associationName" lowerBound="1"
+ eType="#//QualifiedName" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The qualified name of the association whose links are being acted on."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="EqualityExpression" eSuperTypes="#//BinaryExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A binary expression that tests the equality of its operands."/>
+ </eAnnotations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.booleanType()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="1"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="1"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="equalityExpressionIsNegatedDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An equality expression is negated if its operator is &quot;!=&quot;."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="equalityExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An equality expression has type Boolean.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="equalityExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An equality expression has a multiplicity lower bound of 1.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="equalityExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An equality expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="noNullArguments" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Returns false for an equality expression."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="false"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isNegated" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the test is for being not equal."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.operator = '!='"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="AssignmentExpression" eSuperTypes="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression used to assign a value to a local name, parameter or property."/>
+ </eAnnotations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An assignment expression is a simple assignment if the assignment&#xA;operator is &quot;=&quot;."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="assignmentExpressionIsArithmeticDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An assignment expression is an arithmetic assignment if its operator is a&#xA;compound assignment operator for an arithmetic operation."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="assignmentExpressionIsDefinitionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An assignment expression is a definition if it is a simple assignment and&#xA;its left hand side is a local name for which there is no assignment&#xA;before the expression."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="assignmentExpressionIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The left hand side of an assignment expression is a feature if it is a&#xA;kind of FeatureLeftHandSide."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="assignmentExpressionIsIndexedDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The left hand side of an assignment expression is indexed if it has an index."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="assignmentExpressionIsDataValueUpdateDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An assignment expression is a data value update if its left hand side is&#xA;an attribute of a data value held in a local name or parameter."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="assignmentExpressionAssignmentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The new assigned source for an assignment to a local name is the&#xA;assignment expression. If the assignment is a definition, then the type&#xA;is given by the right hand side, the multiplicity upper bound is 1 if the&#xA;upper bound of the right hand side is 1 and otherwise * and the&#xA;multiplicity lower bound is 0. Otherwise, the type is the same as the&#xA;left-hand side and the multiplicity is also the same as the left-hand&#xA;side, if the left-hand side is not indexed, and is * if it is indexed."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="assignmentExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the left-hand side of an assignment expression is a feature, then the&#xA;feature of the assignment is the referent of the left-hand side."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="assignmentExpressionExpressionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="For a compound assignment, the effective expression is the left-hand side&#xA;treated as a name expression, property access expression or sequence&#xA;access expression, as appropriate for evaluation to obtain the original&#xA;value to be updated."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="assignmentExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A simple assignment expression has the same type as its right-hand side&#xA;expression. A compound assignment expression has the same type as its&#xA;left-hand side.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="assignmentExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An assignment expression has the same multiplicity upper bound as its&#xA;right-hand side expression.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="assignmentExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A simple assignment expression has the same multiplicity lower bound as&#xA;its right-hand side expression. A compound assignment expression has the&#xA;same multiplicity as its left-hand side.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="assignmentExpressionSimpleAssignmentTypeConformance" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the left-hand side of a simple assignment is not a new local name, and&#xA;the right-hand side is not null, then the left-hand side must either be&#xA;untyped or have a type that conforms to the type of the right-hand side&#xA;expression."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="If the left-hand side of a simple assignment is not a new local name and&#xA;the multiplicity upper bound of the left-hand side is less than or equal&#xA;to 1, then the multiplicity upper bound of the right-hand side cannot be&#xA;greater than that of the left-hand side."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="For a compound assignment, if the operator is an arithmetic operator,&#xA;then either the left-hand side and the right-hand side both have type&#xA;Integer or they both have type String and the operator is +. If the&#xA;operator is a logical operator, then either the left-hand side and the&#xA;right-hand side both have type Boolean or Bit String or the left-hand&#xA;side has type Bit String and the right-hand side has type Integer. If the&#xA;operator is a shift operator, then the left-hand side must have type&#xA;BitString and the right-hand side must have type Integer."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="For a compound assignment, both the left-hand and right-hand sides must&#xA;have a multiplicity upper bound of 1."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="(not self.isSimple) implies &#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assigned source of a name before the right-hand side expression of an&#xA;assignment expression is the same as the assigned source before the&#xA;assignment expression. The assigned source of a name before the left-hand&#xA;side is the assigned source after the right-hand side expression.&#xA;(See the assignmentsBefore(element) operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="assignmentExpressionIsCollectionConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An assignment requires collection conversion if the type of the&#xA;right-hand side is a collection class and its multiplicity upper bound&#xA;is 1, and the type of the left-hand side is not a collection class."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="assignmentExpressionIsBitStringConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An assignment requires BitString conversion if the type of the left-hand&#xA;side is BitString and either the type of the right-hand side is Integer&#xA;or collection conversion is required and the type of the right-hand side&#xA;is a collection class whose argument type is Integer."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="assignmentExpressionDataValueUpdateLegality" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If an assignment expression has a feature with a primary expression whose&#xA;type is a data type, then the assignment expression must be a data value&#xA;update."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="The assignments after an assignment expression are the assignments after&#xA;the left-hand side, updated by the assignment from the assignment&#xA;expression, if any."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The image of the assignment operator used in the expression."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="leftHandSide" lowerBound="1"
+ eType="#//LeftHandSide" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The left-hand side of the assignment, to which a value is to be assigned."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="rightHandSide" lowerBound="1"
+ eType="#//Expression" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The right-hand side expression of the assignment, which produces the value being assigned."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="assignment" eType="#//AssignedSource"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the left-hand side is a name, then the new assigned source for that name.&#xA;(Note: This also includes assignments to parameters and local names that&#xA;are the source of data value updates.)"/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="If the left-hand side is a feature, then the referent for that feature."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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/GenModel">
+ <details key="documentation" value="If the left-hand side is a feature, whether it has an index or not."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.leftHandSide.index() &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/GenModel">
+ <details key="documentation" value="If this is a compound assignment, whether the compound assignment&#xA;operator is arithmetic or not."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="Set{'+=', '-=', '*=', '/=', '%='}->includes(self.operator)"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isLogical" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="Set{'&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/GenModel">
+ <details key="documentation" value="Whether this assignment is the definition of a new local name or not."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.isSimple and not self.isIndexed and &#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/GenModel">
+ <details key="documentation" value="Whether this is a simple assignment or not."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.operator = '='"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If this is a compound assignment, then the effective expression used to&#xA;obtain the original value of the left-hand side to be updated."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.leftHandSide.expression()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isFeature" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the left-hand side is a feature or not."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDataValueUpdate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether this assignment updates an attribute of a data value held in a&#xA;local name or parameter."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.leftHandSide.isDataValueUpdate()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCollectionConversion"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
+ transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether collection conversion is required for this assignment."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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/GenModel">
+ <details key="documentation" value="Whether BitString conversion is required for this assignment."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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 self.isBitStringType(lhsType) 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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A binary expression with a logical operator."/>
+ </eAnnotations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A logical expression has type Boolean if it is not bit-wise and type&#xA;BitString if it is bit-wise.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="logicalExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A logical expression has a multiplicity lower bound of 0 if the lower&#xA;bound if either operand expression is 0 and 1 otherwise.annotation&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="logicalExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A logical expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="logicalExpressionOperands" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The operands of a logical expression must have type Boolean, Integer or&#xA;BitString. However, if one of the operands is Boolean, then the other&#xA;must also be Boolean."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="BitString conversion is required if the first operand expression of a&#xA;logical expression has type Integer."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="logicalExpressionIsBitStringConversion2Derivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="BitString conversion is required if the second operand expression of a&#xA;logical expression has type Integer."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="logicalExpressionIsBitWiseDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A logical expression is bit-wise if the type of its first operand is not&#xA;Boolean."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitWise" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether this is a bit-wise logical operation on bit strings."/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="SequenceConstructionExpression"/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="SequenceConstructionExpression"/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="not self.isBooleanType(self.operand1.type)"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
+ transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the first operand expression requires BitString conversion."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.isIntegerType(self.operand1.type)"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion2"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
+ transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the second operand expression requires BitString conversion."/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="SequenceConstructionExpression"/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="SequenceConstructionExpression"/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.isIntegerType(self.operand2.type)"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SequenceConstructionExpression" eSuperTypes="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression used to construct a sequence of values."/>
+ </eAnnotations>
+ <eOperations name="collectionType" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If this expression is contained in the element list of a sequence&#xA;construction expression with a collection type, then return that type&#xA;name. Otherwise return null."/>
+ </eAnnotations>
+ <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="constructorReference" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA;&#x9;&#x9;&#x9;&#x9;if self.type = null then null&#xA;&#x9;&#x9;&#x9;&#x9;else&#xA;&#x9;&#x9; let name = self.type.name() in&#xA;&#x9;&#x9; let operationReferents = type.ownedMembers()->select(name() = name and isOperation()) in&#xA;&#x9;&#x9; if operationReferents->size() &lt;> 1 then null&#xA;&#x9;&#x9; else operationReferents->any(true).constructorReference()&#xA;&#x9;&#x9; endif&#xA;&#x9;&#x9;&#x9; 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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the type name of a sequence construction expression is not empty,&#xA;then the type of the expression is the classifier to which the type name&#xA;resolves."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="sequenceConstructionExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a sequence construction expression has multiplicity, then its&#xA;multiplicity upper bound is given by its elements, if this is not empty,&#xA;and zero otherwise. If a sequence construction expression does not have&#xA;multiplicity, then its multiplicity upper bound is one."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="sequenceConstructionExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a sequence construction expression has multiplicity, then its&#xA;multiplicity lower bound is given by its elements, if this is not empty,&#xA;and zero otherwise. If a sequence construction expression does not have&#xA;multiplicity, then its multiplicity lower bound is one."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="sequenceConstructionExpressionType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the type name of a sequence construction expression is not empty, then&#xA;it must resolve to a non-template classifier. If the expression does not&#xA;have multiplicity, then the type name must not be empty and the&#xA;classifier to which it resolves must be the instantiation of a collection&#xA;class."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="If the elements of a sequence construction expression are given by a&#xA;sequence range, then the expression must have type Integer. If the&#xA;elements are given by a sequence element list, and the sequence&#xA;construction expression has a non-empty type, then each expression in the&#xA;list must have a type that either conforms to the type of the sequence&#xA;construction expression or is convertible to it by bit string conversion."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the elements of a sequence construction expression are given by a&#xA;sequence expression list, then the assignments before the first&#xA;expression in the list are the same as the assignments before the&#xA;sequence construction expression, and the assignments before each&#xA;subsequent expression are the assignments after the previous expression.&#xA;If the elements are given by a sequence range, the assignments before&#xA;both expressions in the range are the same as the assignments before the&#xA;sequence construction expression.&#xA;(See the SyntaxElement::assignmentsBefore(element) operation. See also&#xA;the SequenceExpressionList::assignmentsBefore(element) operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the elements of the sequence construction expression are given by a&#xA;sequence expression list, then return the assignments after the last&#xA;expression in the list (if the list is empty, then return the assignments&#xA;before the sequence construction expression). If the elements are given&#xA;by a sequence range, then return the union of the assignments after each&#xA;of the expressions in the range."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The specification of the elements in the sequence."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="hasMultiplicity" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the sequence construction expression has a multiplicity indicator."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" eType="#//QualifiedName"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The name of the type of the elements in the sequence."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAny" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the sequence construction expression has an empty type."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SequenceElements" abstract="true" eSuperTypes="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A specification of the elements of a sequence."/>
+ </eAnnotations>
+ <eOperations name="conformsTo" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eParameters name="type" eType="#//ElementReference"/>
+ </eOperations>
+ <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource"/>
+ <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
+ <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The multiplicity upper bound of the elements of the sequence. The&#xA;derivation for this property is given in the subclasses of SequenceElements."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.upper()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The multiplicity lower bound of the elements of the sequence. The derivation&#xA;for this property is given in the subclasses of SequenceElements."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.lower()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="CollectOrIterateExpression" eSuperTypes="#//SequenceExpansionExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A sequence expansion expression with a collect or iterate operation."/>
+ </eAnnotations>
+ <eOperations name="collectOrIterateExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A collect or iterate expression has the same type as its argument expression."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="collectOrIterateExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A collect or iterate expression has a multiplicity lower bound that is the product of the bounds of its primary and argument expressions."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="collectOrIterateExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A collect or iterate expression has a multiplicity upper bound that is the product of the bounds of its primary and argument expressions."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="IsUniqueExpression" eSuperTypes="#//SequenceExpansionExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A sequence expansion expression with a isUnique."/>
+ </eAnnotations>
+ <eOperations name="isUniqueExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An isUnique expression has the type Boolean."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="isUniqueExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An isUnique expression has a multiplicity lower bound of 1."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="isUniqueExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An isUnique expression has a multiplicity upper bound of 1."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="isUniqueExpressionExpressionArgument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The argument of an isUnique expression must have a multiplicity upper bound of 1."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ArithmeticExpression" eSuperTypes="#//BinaryExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A binary expression with an arithmetic operator."/>
+ </eAnnotations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.operand1.type"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An arithmetic expression is a string concatenation expression if its type&#xA;is String."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="arithmeticExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The type of an arithmetic expression is the same as the type of its operands.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="arithmeticExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An arithmetic expression has a multiplicity lower bound of 0 if the lower&#xA;bound if either operand expression is 0 and 1 otherwise.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="arithmeticExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An arithmetic expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="arithmeticExpressionOperandTypes" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The operands of an arithmetic expression must both have type Integer,&#xA;unless the operator is +, in which case they may also both have type String."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether this is a string concatenation expression."/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="FeatureLeftHandSide"/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="FeatureLeftHandSide"/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.isStringType(self.type)"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="FeatureLeftHandSide" eSuperTypes="#//LeftHandSide">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A left-hand side that is a property reference."/>
+ </eAnnotations>
+ <eOperations name="referent" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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="expression" eType="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.expression"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="index" eType="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before the expression of the feature reference of a&#xA;feature left-hand side are the assignments before the feature left-hand&#xA;side.&#xA;(And the assignments before an index are those after the feature reference.)&#xA;(See the LeftHandSide::assignmentsBefore(element) operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="featureLeftHandSideAssignmentAfterDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments after a feature left-hand side are the assignments after&#xA;the expression of the feature reference or, if there is an index, those&#xA;after the index expression.&#xA;(See the LeftHandSide::assignmentsAfter() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="featureLeftHandSideFeatureExpression" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The expression of the feature reference of a feature left-hand side must&#xA;have a multiplicity upper bound of 1."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a feature left-hand side has an index, then the assignments before the&#xA;index expression are the assignments after the expression of the feature&#xA;reference.&#xA;(See the assignmentsBefore(element) operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="featureLeftHandSideReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The referent of a feature left-hand side is the structural feature to&#xA;which the feature reference of the left-hand side resolves.&#xA;(See the referent() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="featureLeftHandSideTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The type of a feature left-hand side is the type of its referent.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="featureLeftHandSideLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a feature left-hand side is indexed, then its lower bound is 1.&#xA;Otherwise, its lower bound is that of its referent.&#xA;(see the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="featureLeftHandSideUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a feature left-hand side is indexed, then its upper bound is 1.&#xA;Otherwise, its upper bound is that of its referent.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="featureLeftHandSideReferentConstraint" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The feature of a feature-left hand side must have a single referent that&#xA;is a structural feature."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="If a feature left-hand side has an index, then the referent of the&#xA;feature must be ordered and non-unique."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The structural feature being assigned.&#xA;property feature : FeatureReference { composes };&#xA;&#xA;The actual expression parsed for this feature left-hand side."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ConditionalTestExpression" eSuperTypes="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression that uses the value of one operand expression to condition&#xA;the evaluation of one of two other operand expressions."/>
+ </eAnnotations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.commonAncestor(Set{self.operand2.type, self.operand3.type})"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.operand2.lower.min(self.operand3.lower)"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The type of a conditional-test operator expression is the effective&#xA;common ancestor (if one exists) of the types of its second and third&#xA;operand expressions.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="conditionalTestExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The multiplicity lower bound of a conditional-test operator expression is&#xA;the minimum of the multiplicity lower bounds of its second and third&#xA;operand expressions.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="conditionalTestExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The multiplicity upper bound of a conditional-test operator expression is&#xA;the maximum of the multiplicity upper bounds of its second and third&#xA;operand expressions.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="conditionalTestExpressionCondition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The first operand expression of a conditional-test expression must be of&#xA;type Boolean and have a multiplicity upper bound of 1."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.isBooleanType(self.operand1.type) and self.operand1.upper = 1"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="conditionalTestExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before the first operand expression of a conditional-test&#xA;expression are the same as those before the conditional-test expression.&#xA;The assignments before the second and third operand expressions are the&#xA;same as those after the first operand expression.&#xA;(See the assignmentsBefore(element) operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="conditionalTestExpressionAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a name is unassigned after the first operand expression and has an&#xA;assigned source after one of the other operand expression, then it must&#xA;have an assigned source after both of those expressions."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Returns the assignments after the first operand expression, plus&#xA;assignments for any newly defined local names in the second and&#xA;third operand expressions. Local names that exist after the first operand&#xA;expression but are reassigned in the second or third operand expressions&#xA;are adjusted to have the conditional-test expression as their assigned&#xA;source. Local names that are newly defined in the second and third&#xA;operand expressions have the conditional-text expression as their source&#xA;and a type that is the effective common ancestor (if one exists) of the&#xA;types from the assignments after each of the second and third operands."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The first operand expression, which provides the condition to be tested."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="operand2" lowerBound="1"
+ eType="#//Expression" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The second operand expression, to be evaluated if the condition is true."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="operand3" lowerBound="1"
+ eType="#//Expression" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The third operand expression, to be evaluated if the condition is false."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="InstanceCreationExpression" eSuperTypes="#//InvocationExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression used to create a new instance of a class or data type."/>
+ </eAnnotations>
+ <eOperations name="referent" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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; operationReferents->any(true).constructorReference()&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An instance creation expression is an object creation if its referent is&#xA;not a data type."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="instanceCreationExpressionIsConstructorlessDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An instance creation expression is constructorless if its referent is a&#xA;class."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="instanceCreationExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The referent of an instance creation expression is normally the&#xA;constructor operation, class or data type to which the constructor name&#xA;resolves. However, if the referent is an operation whose class is&#xA;abstract or is a class that is itself abstract, and there is an&#xA;associated Impl class constructor, then the referent is the Impl class&#xA;constructor."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="instanceCreationExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="There is no feature for an instance creation expression."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="instanceCreationExpressionConstructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The constructor name must resolve to a constructor operation (that is&#xA;compatible with the tuple argument expressions), a class or a data type,&#xA;but not both a class and a data type."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="If the expression is constructorless, then its tuple must be empty and&#xA;the referent class must not have any owned operations that are constructors."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="If an instance creation expression is a data value creation (not an&#xA;object creation), then the tuple argument expressions are matched with&#xA;the attributes of the named type."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="If the referent of an instance creation expression is an operation, then&#xA;the class of that operation must not be abstract. Otherwise, the referent&#xA;is a class or data type, which must not be abstract."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Returns the parameters of a constructor operation or the attributes of a&#xA;data type, or an empty set for a constructorless instance creation."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; if self.isConstructorless then OrderedSet(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://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether this is a constructorless object creation expression."/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="PropertyAccessExpression"/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether this is an object creation expression or a data value creation&#xA;expression."/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="PropertyAccessExpression"/>
+ <details key="unique" value="false"/>
+ <details key="upper" value="*"/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The name of the class constructor operation to be invoked or the name of&#xA;a class or data type."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="PropertyAccessExpression" eSuperTypes="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression comprising a reference to a structural feature."/>
+ </eAnnotations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The feature of a property access expression is the structural feature to&#xA;which its feature reference resolves."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="propertyAccessExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The type of a property access expression is the type of the referenced&#xA;feature.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="propertyAccessExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The multiplicity upper bound of a property access expression is given by&#xA;the product of the multiplicity upper bounds of the referenced feature&#xA;and the target expression.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="propertyAccessExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The multiplicity lower bound of a property access expression is given by&#xA;the product of the multiplicity lower bounds of the referenced feature&#xA;and the target expression.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="propertyAccessExpressionFeatureResolution" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The feature reference for a property access expression must resolve to a&#xA;single structural feature."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before the expression of the feature reference of a&#xA;property access expression are the same as before the property access&#xA;expression."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments after a property access expression are the same as those&#xA;after the target expression of its feature reference."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.featureReference.expression.assignmentAfter"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="featureReference" lowerBound="1"
+ eType="#//FeatureReference" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A reference to a structural feature."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="feature" eType="#//ElementReference"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The referenced structural feature."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression that comprises a name reference."/>
+ </eAnnotations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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 1 -- Note: This ensures a name defined as an &quot;out&quot; argument is not considered null.&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the source of a local name is a For Statement, it must be a @parallel&#xA;local name and it is only legal if this name expression is the target of&#xA;a CollectionFunctions::add invocation."/>
+ </eAnnotations>
+ <eParameters name="localName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eOperations>
+ <eOperations name="assignmentFor_" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let assignments = self.assignmentBefore->select(name = localName) in&#xA; if assignments->isEmpty() or &#xA; assignments->forAll(isParallelLocalName) and not self.isAddTargetName()&#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="isAddTargetName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the name in a name expression is a local or parameter name, then its&#xA;assignment is its assigned source before the expression."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="nameExpressionEnumerationLiteralDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the name in a name expression resolves to an enumeration literal name,&#xA;then that is the enumeration literal for the expression."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="nameExpressionPropertyAccessDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the name in a name expression disambiguates to a feature reference,&#xA;then the equivalent property access expression has the disambiguation of&#xA;the name as its feature. The assignments before the property access&#xA;expression are the same as those before the name expression.&#xA;(See also the assignmentsBefore(element) operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="nameExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The type of a name expression is determined by its name. If the name is a&#xA;local name or parameter with an assignment, then the type of the name&#xA;expression is the type of that assignment. If the name is an enumeration&#xA;literal, then the type of the name expression is the corresponding&#xA;enumeration. If the name disambiguates to a feature reference, then the&#xA;type of the name expression is the type of the equivalent property access&#xA;expression.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="nameExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The multiplicity upper bound of a name expression is determined by its&#xA;name.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="nameExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The multiplicity lower bound of a name expression is determined by its&#xA;name.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="nameExpressionResolution" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the name referenced by this expression is not a disambiguated feature&#xA;reference or a local or parameter name, then it must resolve to exactly&#xA;one enumeration literal."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.validateNameExpressionResolution()"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="validateNameExpressionResolution" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="If propertyAccess is not empty (i.e., if the referenced name disambiguates&#xA;to a feature reference), then return the assignments after the&#xA;property access expression. Otherwise, return the result of the superclass&#xA;updateAssignments operation."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="The identified enumeration literal, if the referenced name is for an enumeration literal."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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/GenModel">
+ <details key="documentation" value="The assigned source for the referenced name, if the name is a local or&#xA;parameter name."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="The equivalent property access expression, if the referenced name&#xA;disambiguates to a feature reference."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The qualified name referenced in this expression. (For a local name, this&#xA;will actually have no qualification.)"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="BitStringUnaryExpression" eSuperTypes="#//UnaryExpression">
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.bitStringType()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.operand.lower"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="1"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="bitStringUnaryExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A BitString unary expression has type BitString.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="bitStringUnaryExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A BitString unary expression has the same multiplicity lower bound as its&#xA;operand expression.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="bitStringUnaryExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A BitString unary expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="bitStringUnaryExpressionOperand" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The operand expression of a BitString unary expression must have type&#xA;BitString or Integer and a multiplicity upper bound of 1."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="BitString conversion is required if the operand expression of a BitString&#xA;unary expression has type Integer."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
+ transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether BitString conversion is required on the operand expression."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.isIntegerType(self.operand.type)"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="FeatureInvocationExpression" eSuperTypes="#//InvocationExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An invocation of a feature referenced on a sequence of instances."/>
+ </eAnnotations>
+ <eOperations name="feature" eType="#//FeatureReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a feature invocation expression is an implicit object destruction, it&#xA;has no referent. Otherwise, its referent is the operation or signal being&#xA;invoked.&#xA;(See the referent() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="featureInvocationExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a feature invocation expression has an explicit target, then that is&#xA;its feature. Otherwise, it is an alternative constructor call with&#xA;its feature determined implicitly.&#xA;(See the feature() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="featureInvocationExpressionReferentExists" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a feature invocation expression is not an implicit destructor call,&#xA;then it must be possible to determine a single valid referent for it&#xA;according to the overloading resolution rules."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.isImplicit or 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>
+ <eOperations name="featureInvocationExpressionAlternativeConstructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An alternative constructor invocation may only occur in an expression&#xA;statement as the first statement in the definition for the method of a&#xA;constructor operation."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="If there is no target feature expression, then the implicit feature with&#xA;the same name as the target type must be a constructor."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A feature reference to the target feature to be invoked."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="BehaviorInvocationExpression" eSuperTypes="#//InvocationExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An invocation of a behavior referenced by name."/>
+ </eAnnotations>
+ <eOperations name="isAddTarget" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the target of a behavior invocation expression resolves to a behavior,&#xA;then the referent of the expression is that behavior. If the target&#xA;disambiguates to a feature reference, then the reference is the operation&#xA;or signal being invoked. Otherwise, if the target resolves to a property&#xA;that is an association end, then the referent is that property.&#xA;(See the referent() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="behaviorInvocationExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the target qualified name disambiguates to a feature reference, then&#xA;the feature of a behavior invocation expression is that feature reference.&#xA;(See the feature() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="behaviorInvocationExpressionReferentConstraint" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the target qualified name does not disambiguate to a feature reference,&#xA;then it must resolve to a behavior or an association end. Otherwise it&#xA;must resolve to a single feature referent according to the overloading&#xA;resolution rules, unless it is an implicit destructor call (in which case&#xA;it has no referent)."/>
+ </eAnnotations>
+ <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() and&#xA; -- Also check that the association owns all its ends.&#xA; referent.isAssociationEnd() implies&#xA; &#x9;referent.association().properties()->forAll(isAssociationEnd())"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="behaviorInvocationExpressionArgumentCompatibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the target qualified name does not disambiguate to a feature reference,&#xA;then each input argument expression must be assignable to its corresponding&#xA;parameter and each output argument expression must be assignable from its&#xA;corresponding parameter. (Note that this implies that the type of an&#xA;argument expression for an inout parameter must be the same as the type&#xA;of that parameter.)"/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="The referent may only be a constructor (as a result of the target&#xA;disambiguating to a feature reference) if this behavior invocation&#xA;expression is the expression of an expression statement that is the first&#xA;statement in the definition for the method of a constructor operation."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The qualified name of the behavior to be invoked."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ShiftExpression" eSuperTypes="#//BinaryExpression">
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.bitStringType()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A shift expression has type BitString.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="shiftExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A shift expression has a multiplicity lower bound of 0 if the lower bound&#xA;if either operand expression is 0 and 1 otherwise.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="shiftExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A shift expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="shiftExpressionOperands" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The first operand expression of a shift expression must have the type&#xA;BitString or Integer. The second operand expression must have the type&#xA;Integer."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="BitString conversion is required if the first operand expression of a&#xA;shift expression has type Integer."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isBitStringConversion"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
+ transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the first operand expression requires BitString conversion."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.isIntegerType(self.operand1.type)"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="UnboundedLiteralExpression" eSuperTypes="#//LiteralExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression that comprises an unbounded value literal."/>
+ </eAnnotations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.unlimitedNaturalType()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="unboundedLiteralExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The type of an unbounded literal expression is UnlimitedNatural.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ThisExpression" eSuperTypes="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression comprising the keyword ?this?."/>
+ </eAnnotations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let currentScope = self.currentScope() in&#xA; if currentScope = null then &#xA; null&#xA; else if currentScope.isOperation() or currentScope.isMethod() then&#xA; currentScope.namespace()&#xA; else if currentScope.isBehavior() then&#xA; let context = currentScope.context() in&#xA; if context = null then currentScope else context endif&#xA; else if currentScope.isClass() then&#xA; currentScope&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The static type of a this expression is the statically determined context&#xA;classifier for the context in which the this expression occurs.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="thisExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The multiplicity upper bound of a this expression is always 1.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="thisExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The multiplicity lower bound of a this expression is always 1.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ClassificationExpression" eSuperTypes="#//UnaryExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression used to test the dynamic type of its operand."/>
+ </eAnnotations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.booleanType()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.operand.lower"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="1"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="classificationExpressionIsDirectDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A classification expression is direct if its operator is &quot;hastype&quot;."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="classificationExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The referent of a classification expression is the classifier to which&#xA;the type name resolves."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="classificationExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A classification expression has type Boolean.&#xA;(see the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="classificationExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A classification expression has a multiplicity lower bound that is the&#xA;same as the lower bound of its operand expression.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="classificationExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A classification expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="classificationExpressionTypeName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The type name in a classification expression must resolve to a non-template classifier."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.referent &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/GenModel">
+ <details key="documentation" value="The operand expression of a classification expression must have a multiplicity upper bound of 1."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.operand.upper = 1"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="referent" eType="#//ElementReference"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The classifier to which the type name of the expression resolves."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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/GenModel">
+ <details key="documentation" value="Whether the test is for the operand to have the given type directly or to only conform to the given type."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.operator = 'hastype'"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" lowerBound="1"
+ eType="#//QualifiedName" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The name of the type that the operand is to be tested against."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SuperInvocationExpression" eSuperTypes="#//InvocationExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An invocation expression used to invoke an operation of a superclass."/>
+ </eAnnotations>
+ <eOperations name="referent" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The referent of a super invocation expression is the method behavior of&#xA;the operation identified using the overloading resolution rules.&#xA;(See the referent() operation. Actually returns the operation, not the&#xA;method.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="superInvocationExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="There is no feature for a super invocation.&#xA;(See the feature() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="superInvocationExpressionQualification" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the target has a qualification, then this must resolve to one of the&#xA;superclasses of the current context class."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="If the target is empty, the referent must be the method for a constructor&#xA;operation and the context class for the behavior containing the super&#xA;invocation expression must have exactly one superclass."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="If the referent is the method of a constructor operation, the super&#xA;invocation expression must occur in an expression statement at the start&#xA;of the definition for the method of a constructor operation, such that&#xA;any statements preceding it are also super constructor invocations."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="If the referent is the method of a destructor operation, the super&#xA;invocation expression must occur within the method of a destructor&#xA;operation."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="It must be possible to identify a single valid operation denoted by the&#xA;target of a super invocation expression that satisfies the overloading&#xA;resolution rules."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The name of the operation to be invoked, optionally qualified with the&#xA;name of the appropriate superclass."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="IncrementOrDecrementExpression" eSuperTypes="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A unary expression with either an increment or decrement operator."/>
+ </eAnnotations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.integerType()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.operand.lower"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="1"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="incrementOrDecrementExpressionAssignmentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the operand of an increment or decrement expression is a name, then&#xA;the assignment for the expression is a new assigned source for the name&#xA;with the expression as the source."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="incrementOrDecrementExpressionIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An increment or decrement expression has a feature as its operand if the&#xA;operand is a kind of FeatureLeftHandSide."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="incrementOrDecrementExpressionIsIndexedDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An increment or decrement expression is indexed if its operand is indexed."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="incrementOrDecrementExpressionIsDataValueUpdateDerivation"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An increment or decrement expression is a data value update if its&#xA;operand is an attribute of a data value held in a local name or parameter."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="incrementOrDecrementExpressionFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the operand of an increment or decrement expression is a feature,&#xA;then the referent for the operand."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="incrementOrDecrementExpressionExpressionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The effective expression for the operand of an increment or decrement&#xA;expression is the operand treated as a name expression, property access&#xA;expression or sequence access expression, as appropriate for evaluation&#xA;to obtain the original value to be updated."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="incrementOrDecrementExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An increment or decrement expression has type Integer.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="incrementOrDecrementExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An increment or decrement expression has the same multiplicity lower&#xA;bound as its operand expression.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="incrementOrDecrementExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An increment or decrement expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="incrementOrDecrementExpressionOperand" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The operand expression must have type Integer and a multiplicity upper bound of 1."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.isIntegerType(self.operand.type) and self.operand.upper = 1"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="incrementOrDecrementExpressionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before the operand of an increment or decrement&#xA;expression are the same as those before the increment or decrement&#xA;expression.&#xA;(See the SyntaxElement::assignmentsBefore(element) operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments after an increment and decrement expression include all&#xA;those after its operand expression. Further, if the operand expression,&#xA;considered as a left hand side, is a local name, then this is reassigned."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="If the operand is a name, then the new assigned source for that name."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The operand, which must have the form of an assignment left-hand side."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The effective expression used to obtain the original value of the operand&#xA;to be updated."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.operand.expression()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="feature" eType="#//ElementReference"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the operand is a feature, then the referent for that feature."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the operator is being used as a prefix or a postfix."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isFeature" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the operand is a feature or not."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.operand.feature() &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/GenModel">
+ <details key="documentation" value="Whether the operand has an index or not."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.operand.index() &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/GenModel">
+ <details key="documentation" value="Whether this expression updates an attribute of a data value held in a&#xA;local name or parameter."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.operand.isDataValueUpdate()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The increment (&quot;++&quot;) or decrement (&quot;--&quot;) operator for this expression."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="BooleanLiteralExpression" eSuperTypes="#//LiteralExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression that comprises a Boolean literal."/>
+ </eAnnotations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.booleanType()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="booleanLiteralExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The type of a boolean literal expression is Boolean.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="image" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The textual image of the literal token for this expression."/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="NamedTuple"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="NamedTuple" eSuperTypes="#//Tuple">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A tuple in which the arguments are matched to parameters by name."/>
+ </eAnnotations>
+ <eOperations name="size" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.namedExpression->size()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="inputFor" ordered="false" upperBound="-1" eType="#//InputNamedExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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; owner = self&#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="outputForExpression" eType="#//OutputNamedExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA;&#x9;&#x9;&#x9;&#x9;let arguments = self.namedExpression->select(a | a.expression = expression) in&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;if arguments->isEmpty() then null&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;else&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;let argument = arguments->any(true) in&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;OutputNamedExpression{&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;name = argument.name,&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;index = argument.index,&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;expression = expression,&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;owner = self&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;endif"/>
+ </eAnnotations>
+ <eParameters name="expression" lowerBound="1" eType="#//Expression"/>
+ </eOperations>
+ <eOperations name="namedTupleArgumentNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The name of a named expression of a named tuple must be the name of a&#xA;parameter of the invocation the tuple is for. No two named expressions&#xA;may have the same name."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The argument expressions for this tuple paired with the corresponding&#xA;parameter names."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="NaturalLiteralExpression" eSuperTypes="#//LiteralExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression that comprises a natural literal."/>
+ </eAnnotations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.naturalType()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="naturalLiteralExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The type of a natural literal is the Alf library type Natural. NOTE: If&#xA;the context of a natural literal expression unambiguously requires either&#xA;an Integer or an UnlimitedNatural value, then the result of the literal&#xA;expression is implicitly downcast to the required type. If the context is&#xA;ambiguous, however, than an explicit cast to Integer or UnlimitedNatural&#xA;must be used.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="image" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The textual image of the literal token for this expression."/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="SequenceRange"/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="SequenceRange"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SequenceRange" eSuperTypes="#//SequenceElements">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A specification of the elements of a sequence as a range of integers."/>
+ </eAnnotations>
+ <eOperations name="conformsTo" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The lower and upper range expressions must have type Integer."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The multiplicity lower bound of a sequence range is 0.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="sequenceRangeUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The multiplicity upper bound of a sequence range is * (since it is not&#xA;possible, in general, to statically determine a more constrained upper&#xA;bound).&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="sequenceRangeExpressionMultiplicity" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Both expressions in a sequence range must have a multiplicity upper bound&#xA;of 1."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.rangeLower.upper = 1 and self.rangeUpper.upper = 1"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="sequenceRangeAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A local name may be defined or reassigned in at most one of the&#xA;expressions of a sequence range."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The expression whose value gives the lower bound for the range."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="rangeUpper" lowerBound="1"
+ eType="#//Expression" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The expression whose value gives the upper bound for the range."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="NameLeftHandSide" eSuperTypes="#//LeftHandSide">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A left-hand side that is a name."/>
+ </eAnnotations>
+ <eOperations name="target" eType="#//QualifiedName">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.target"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="index" eType="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.index"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="referent" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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="expression" lowerBound="1" eType="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA;&#x9;&#x9;&#x9;&#x9;let expression = self.primary() in&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;if self.index = null then expression&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;else&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;SequenceAccessExpression{&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;primary = expression,&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;index = index.reference(),&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;owner = self&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;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;&#x9;&#x9;&#x9;&#x9;let feature = self.feature() in&#xA;&#x9;&#x9;&#x9;&#x9;if feature = null then&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;NameExpression{&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;name = self.target.copy(),&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;owner = self&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;else&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;PropertyAccessExpression{&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;feature = feature,&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;owner = self&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;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="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a name left-hand side has an index, then the assignments after the&#xA;left-hand side are the same as the assignments after the index. If the&#xA;left-hand side has no index, but its target disambiguates to a feature&#xA;reference, then the assignments after the left-hand side are the&#xA;assignments after the feature expression. Otherwise the assignments&#xA;after the left-hand side are the same as the assignments before the&#xA;left-hand side.&#xA;(See the LeftHandSide::assignmentsAfter() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="nameLeftHandSideTargetAssignment" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The target of a name left hand side may not already have an assigned&#xA;source that is a loop variable definition, an annotation, a sequence&#xA;expansion expression or a parameter that is an in parameter."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="If the target of a name left-hand side disambiguates to a feature&#xA;reference, then the assignments before the expression of the feature&#xA;reference are the assignments before the left-hand side. If a name&#xA;left-hand side has an index, then the target must either disambiguate&#xA;to a feature reference or already have an assigned source, and the&#xA;assignments before the index expression are the assignments before the&#xA;left-hand side or, if the target disambiguates to a feature reference,&#xA;the assignments after the expression of the feature reference.&#xA;(See also the LeftHandSide::assignmentsBefore(element) operation.)"/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.index &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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the target of a name left-hand side disambiguates to a structural&#xA;feature, then the referent of the left-hand side is that feature. If the&#xA;target resolves to a parameter, then the referent is that parameter. If&#xA;the target resolves to a local name, then the referent is the assigned&#xA;source for that local name, if it has one.&#xA;(See the referent() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="nameLeftHandSideLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a name left-hand side is indexed, then its lower bound is 1.&#xA;Otherwise, if the left-hand side is for a local name with an assignment,&#xA;than its lower bound is that of the assignment, else, if it has a&#xA;referent, then its lower bound is that of the referent.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="nameLeftHandSideUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a name left-hand side is indexed, then its upper bound is 1.&#xA;Otherwise, if the left-hand side is for a local name with an assignment,&#xA;than its upper bound is that of the assignment, else, if it has a&#xA;referent, then its upper bound is that of the referent.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="nameLeftHandSideTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a name left-hand side is for a local name with an assignment, then its&#xA;type is that of that assignment. Otherwise, if the left-hand side has a&#xA;referent, then its type is the type of that referent.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="nameLeftHandSideTargetResolution" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the target of a name left-hand side is qualified, then, if it does not&#xA;disambiguate to a feature, it must have a referent that is a parameter of&#xA;an operation or behavior that is the current scope the left-hand is in,&#xA;and, if it does disambiguate to a feature, it must have a single referent&#xA;that is a structural feature."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="If the target of a name left-hand side disambiguates to a feature&#xA;reference, and the left-hand side has an index, then the referent of the&#xA;feature reference must be ordered and non-unique."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="The target of a name left-hand side must not have a template binding."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.target.templateName = null"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="target" eType="#//QualifiedName"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The name that is the target of the assignment."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="index" eType="#//Expression"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An optional expression that evaluates to an index into the values of an&#xA;ordered sequence."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="EffectiveLeftHandSide" eSuperTypes="#//NameLeftHandSide">
+ <eOperations name="target" eType="#//QualifiedName">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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>
+ <eOperations name="expression" eType="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.expression"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
+ eType="#//Expression"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SequenceReductionExpression" eSuperTypes="#//Expression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An expression used to reduce a sequence of values effectively by inserting&#xA;a binary operation between the values."/>
+ </eAnnotations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.primary.expression.type"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="1"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="1"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="sequenceReductionExpressionReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The referent for a sequence reduction expression is the behavior denoted&#xA;by the behavior name of the expression."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="sequenceReductionExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A sequence reduction expression has the same type as its primary&#xA;expression.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="sequenceReductionExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A sequence reduction expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="sequenceReductionExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A sequence reduction expression has a multiplicity lower bound of 1.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="sequenceReductionExpressionBehavior" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The behavior name in a sequence reduction expression must denote a behavior."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="The referent behavior must have two in parameters, a return parameter and&#xA;no other parameters. The parameters must all have the same type as the&#xA;argument expression and multiplicity [1..1]."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before the target expression of a sequence reduction&#xA;expression are the same as the assignments before the sequence reduction&#xA;expression.&#xA;(See the SyntaxElement::assignmentsBefore(element) operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="updateAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments after a sequence reduction expression are the same as&#xA;after its primary expression."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.primary.expression.assignmentAfter"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="referent" eType="#//ElementReference"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A reference to the behavior to be used as the reducer."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether this is an ordered reduction or not."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="primary" lowerBound="1"
+ eType="#//ExtentOrExpression" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The target class name or primary expression for the reduction."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="behaviorName" lowerBound="1"
+ eType="#//QualifiedName" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The name of the behavior to be used as the reducer."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SequenceExpressionList" eSuperTypes="#//SequenceElements">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A specification of the elements of a sequence using a list of expressions."/>
+ </eAnnotations>
+ <eOperations name="conformsTo" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Each expression in the list must have a multiplicity upper bound of no&#xA;more than 1. The type of each expression in the list must conform to&#xA;the given type (with allowance for bit string conversion)."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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 upperBounds = self.element.upper in&#xA; if upperBounds->includes(-1) then -1&#xA; else upperBounds->sum()&#xA; endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="sequenceExpressionListLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The multiplicity lower bound of the elements of a sequence expression&#xA;list is given by the sum of the lower bounds of each of the expressions&#xA;in the list.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="sequenceExpressionListUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The multiplicity upper bound of the elements of a sequence expression&#xA;list is given by the sum of the upper bounds of each of the expressions&#xA;in the list. If any of the expressions in the list have an unbounded&#xA;upper bound, then the sequence expression list also has an unbounded&#xA;upper bound.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="element" lowerBound="1"
+ upperBound="-1" eType="#//Expression" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The list of expressions whose values determine the elements of the sequence."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="RelationalExpression" eSuperTypes="#//BinaryExpression">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A binary expression with a relational operator."/>
+ </eAnnotations>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.booleanType()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A relational expression is an UnlimitedNatural comparison if either one&#xA;of its operands has type UnlimitedNatural."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="relationalExpressionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The type of a relational expression is Boolean.&#xA;(See the type() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="relationalExpressionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A relational expression has a multiplicity lower bound of 0 if the lower&#xA;bound if either operand expression is 0 and 1 otherwise.&#xA;(See the lower() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="relationalExpressionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A relational expression has a multiplicity upper bound of 1.&#xA;(See the upper() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="relationalExpressionOperandTypes" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The operand expressions for a comparison operator must have type Integer,&#xA;UnlimitedNatural or Natural. However, it is not allowed to have one&#xA;operand expression be Integer and the other be UnlimitedNatural."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Whether this is an UnlimitedNatural comparison."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA;&#x9;&#x9;&#x9;&#x9;let type1 = self.operand1.type in&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;self.isUnlimitedNaturalType(type1) and not self.isNaturalType(type1) or &#xA;&#x9;&#x9;&#x9;&#x9;let type2 = self.operand2.type in&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;self.isUnlimitedNaturalType(type2) and not self.isNaturalType(type2)"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="LocalNameDeclarationStatement" eSuperTypes="#//Statement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A statement that declares the type of a local name and assigns it an&#xA;initial value."/>
+ </eAnnotations>
+ <eOperations name="actualName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="NameBinding{name = self.name}.toName()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before the expression of a local name declaration&#xA;statement are the same as the assignments before the statement.&#xA;(See SyntaxElement::assignmentsBefore(element) operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="localNameDeclarationStatementType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the type name in a local name declaration statement is not empty, then&#xA;it must resolve to a non-template classifier and the expression must be&#xA;assignable to that classifier."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="The local name in a local name declaration statement must be unassigned&#xA;before the statement and before the expression in the statement.&#xA;It must remain unassigned after the expression."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments after a local name declaration statement are the&#xA;assignments after the expression of the statement plus a new assignment&#xA;for the local name defined by the statement. The assigned source for the&#xA;local name is the local name declaration statement. The local name has&#xA;the type denoted by the type name if this is not empty and is untyped&#xA;otherwise. If the statement has multiplicity, then the multiplicity of&#xA;the local name is [0..*], otherwise it is [0..1].&#xA;(See assignmentsAfter() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="localNameDeclarationStatementExpressionMultiplicity" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a local name declaration statement does not have multiplicity, then&#xA;the multiplicity of upper bound of the assigned expression must not be&#xA;greater than 1."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="(not self.hasMultiplicity) implies self.expression.upper &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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The type of a local name declaration statement with a type name is the&#xA;single classifier referent of the type name. Otherwise the type is empty."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="typeCached" eType="#//ElementReference"/>
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The local name being declared."/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="AssignableLocalNameDeclaration"/>
+ <details key="unique" value="false"/>
+ <details key="upper" value="*"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
+ eType="#//Expression" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The expression to be evaluated to provide the initial value to be assigned to the local name."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="hasMultiplicity" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the local name is to have a multiplicity upper bound of * rather than 1."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" eType="#//QualifiedName"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The declared type of the local name."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//ElementReference"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The type declared for the given local name."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.typeCached()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAny" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the local name is being declared with an empty type.&#xA;(Added solely to allow proper Xtext re-serialization.)"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="AssignableLocalNameDeclaration" eSuperTypes="#//AssignableElement">
+ <eOperations name="type" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.localNameDeclaration.type"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="lower" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="0"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="upper" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="if self.localNameDeclaration.hasMultiplicity then -1 else 1 endif"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="localNameDeclaration" lowerBound="1"
+ eType="#//LocalNameDeclarationStatement"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Statement" abstract="true" eSuperTypes="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A model of an Alf statement."/>
+ </eAnnotations>
+ <eOperations name="enclosingLoopStatement" eType="#//Statement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Return the nearest enclosing loop statement, or this statement, if it is&#xA;a loop statement. (This operation is overridden for loop statements.)"/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="let enclosingStatement = self.enclosingStatement() in&#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/GenModel">
+ <details key="documentation" value="Returns true if the given annotation is allowed for this kind of statement.&#xA;By default, only an @isolated annotation is allowed, with no arguments.&#xA;This operation is redefined only in subclasses of Statement for kinds of&#xA;statements that allow different annotations than this default."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.Statement_annotationAllowed(annotation)"/>
+ </eAnnotations>
+ <eParameters name="annotation" lowerBound="1" eType="#//Annotation"/>
+ </eOperations>
+ <eOperations name="Statement_annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="annotation.identifier = 'isolated' and annotation.argument->isEmpty()"/>
+ </eAnnotations>
+ <eParameters name="annotation" lowerBound="1" eType="#//Annotation"/>
+ </eOperations>
+ <eOperations name="annotation" ordered="false" upperBound="-1" eType="#//Annotation">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Get the assigned sources for assignments made within this statement."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Return the source of the given local name in the assignments before this&#xA;statement, if any."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="By default, the assignments after are the same as the assignments&#xA;before."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.Statement_assignmentsAfter()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="Statement_assignmentsAfter" ordered="false" upperBound="-1"
+ eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.assignmentBefore"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="assignmentsAfterCached" ordered="false" upperBound="-1" eType="#//AssignedSource"/>
+ <eOperations name="mergeAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Merge the assignments made in a collection of blocks, such as occur in an&#xA;accept or if statement."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let newAssignments = blocks->collect(b | &#xA; if b = null then Set(AssignedSource){}&#xA; else b.assignmentAfter->select(isNew(b.assignmentBefore))&#xA; endif&#xA; )->asSet() 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/GenModel">
+ <details key="documentation" value="All the annotations of a statement must be allowed, as given by the annotationAllowed operation for the statement."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.annotation()->forAll(a | self.annotationAllowed(a))"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="statementUniqueAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="No name may be assigned more than once before or after a statement."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.assignmentBefore->isUnique(name) and self.assignmentAfter->isUnique(name)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="statementIsIsolatedDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A statement is isolated if it has an @isolated annotation."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentBefore" ordered="false"
+ upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
+ derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assigned sources for local names available lexically before this statement."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.assignmentsBefore()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentAfter" ordered="false"
+ upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
+ derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assigned sources for local names available lexically after this statement.&#xA;This includes not only any assignments made within the statement, but also&#xA;any assignments that are unchanged from before the statement."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.assignmentsAfterCached()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="enclosingStatement" eType="#//Statement"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The statement immediately enclosing this statement, if any."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.enclosingStatement()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isIsolated" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether this statement should be executed in isolation."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.hasAnnotation('isolated')"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Annotation" eSuperTypes="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An identified modification to the behavior of an annotated statement."/>
+ </eAnnotations>
+ <eOperations name="identifier" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eOperations name="arguments" ordered="false" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="text" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The text line for the annotation."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="identifier" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The name of the annotation."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.identifier()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="argument" ordered="false"
+ upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If permitted by the annotation, an optional list of local names relevant to the annotation."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.arguments()->collect(n | NameBinding{name = n}.toName())->asSet()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="QualifiedNameList" eSuperTypes="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A group of qualified names."/>
+ </eAnnotations>
+ <eOperations name="currentScope" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Handle specially the cases of a specialization list and a redefinition list."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The names in the group."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="NonFinalClause" eSuperTypes="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A clause of an if statement with a conditional expression and a sequence of&#xA;statements that may be executed if the condition is true."/>
+ </eAnnotations>
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="The assignments before a non-final clause are the assignments before the&#xA;condition of the clause."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.SyntaxElement_assignmentsBefore()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments after a non-final clause are the assignments after the&#xA;block of the clause."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.body.assignmentAfter"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="nonFinalClauseAssignmentsBeforeBody" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before the body of a non-final clause are the assignments&#xA;after the condition.&#xA;(See the assignmentsBefore(element) operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="nonFinalClauseConditionLocalNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a name is unassigned before the condition expression of a non-final&#xA;clause, then it must be unassigned after that expression (i.e., new local&#xA;names may not be defined in the condition)."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="The condition of a non-final clause must have type Boolean and a&#xA;multiplicity upper bound no greater than 1."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The expression that is evaluated to determine whether the clause body may&#xA;be executed."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="body" lowerBound="1" eType="#//Block"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The sequence of statements that may be executed if the condition evaluates&#xA;to true."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Block" eSuperTypes="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A grouped sequence of statements."/>
+ </eAnnotations>
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Get the assigned sources for assignments made within this block."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before each statement in a block other than the first are&#xA;the same as the assignments after the previous statement."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="blockAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before the first statement of a block are the same as the&#xA;assignments before the block."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="blockAssignmentAfterDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a block is not empty, then the assignments after the block are the same&#xA;as the assignments after the last statement of the block. Otherwise they&#xA;are the same as the assignments before the block."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="statement" upperBound="-1"
+ eType="#//AnnotatedStatement" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The ordered sequence of statements in the block."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentAfter" ordered="false"
+ upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
+ derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assigned sources for local names available lexically after this block.&#xA;This includes not only any assignments made within the block, but also&#xA;any assignments that are unchanged from before the block."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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/GenModel">
+ <details key="documentation" value="The assigned sources for local names available lexically before this block."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.assignmentsBefore()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="BlockStatement" eSuperTypes="#//Statement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A statement that executes a block."/>
+ </eAnnotations>
+ <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.block.assignmentAfter"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="blockStatementParallelAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="In a parallel block statement, any name assigned in one statement of the&#xA;block may not be further assigned in any subsequent statement in the same&#xA;block."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before the block of a block statement are the same as the&#xA;assignments before the block statement."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="blockStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments after a block statement are the same as the assignments&#xA;after the block of the block statement."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="blockStatementEnclosedStatements" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The enclosing statement for all the statements in the block of a block&#xA;statement is the block statement."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="blockStatementIsParallelDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A block statement is parallel if it has a @parallel annotation."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="In addition to an @isolated annotation, a block statement may have a&#xA;@parallel annotation. It may not have any arguments."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.Statement_annotationAllowed(annotation) or &#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The block to be executed."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isParallel" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the statements in the block of this block statement should be&#xA;executed concurrently."/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="DoStatement"/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="DoStatement"/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.hasAnnotation('parallel')"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="DoStatement" eSuperTypes="#//Statement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A looping statement for which the continuation condition is first tested&#xA;after the first iteration."/>
+ </eAnnotations>
+ <eOperations name="enclosingLoopStatement" eType="#//Statement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before the block of a do statement are the same as the&#xA;assignments before the do statement. The assignments before the condition&#xA;expression of a do statement are the same assignments after the block.&#xA;(See assignmentsBefore(element) operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="doStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the assigned source for a name after the condition expression is&#xA;different than before the do statement, then the assigned source of the&#xA;name after the do statement is the do statement. Otherwise it is the same&#xA;as before the do statement.&#xA;(See assignmentsAfter() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="doStatementCondition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The condition expression of a do statement must have type Boolean and a&#xA;multiplicity upper bound of 1."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The enclosing statement for all statements in the body of a do statement&#xA;are the do statement.&#xA;(See SyntaxElement::enclosingStatement() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="condition" lowerBound="1"
+ eType="#//Expression" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The expression to be evaluated to determine whether to continue looping."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="body" lowerBound="1" eType="#//Block"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The sequence of statements to be iteratively executed."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ConcurrentClauses" eSuperTypes="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A grouping of non-final conditional clauses to be tested concurrently."/>
+ </eAnnotations>
+ <eOperations name="concurrentClausesAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before each of the clauses in a set of concurrent clauses&#xA;are the same as the assignments before the concurrent clauses.&#xA;(See the assignmentsBefore(element) operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="concurrentClausesConditionAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The same name may not be assigned in more than one conditional expression&#xA;within the same concurrent set of clauses."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.clause.condition.newAssignments()->isUnique(name)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="clause" ordered="false"
+ lowerBound="1" upperBound="-1" eType="#//NonFinalClause" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The conditional clauses in the group."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="BreakStatement" eSuperTypes="#//Statement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A statement that causes the termination of execution of an immediately&#xA;enclosing block."/>
+ </eAnnotations>
+ <eOperations name="breakStatementTargetDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The target of a break statement is the innermost switch, while, do or for&#xA;statement enclosing the break statement."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="The target of a break statement may not have a @parallel annotation."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.target &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/GenModel">
+ <details key="documentation" value="A break statement may not have any annotations."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.annotation()->isEmpty()"/>
+ </eAnnotations>
+ <eParameters name="annotation" lowerBound="1" eType="#//Annotation"/>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="target" eType="#//Statement"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The enclosing statement that is terminated by this break statement."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.enclosingLoopStatement()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ExpressionStatement" eSuperTypes="#//Statement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A statement that evaluates an expression when executed."/>
+ </eAnnotations>
+ <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before the expression of an expression statement are the same as the assignments before the statement."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="expressionStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments after an expression statement are the same as the assignments after its expression."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The expression to be evaluated."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ClassifyStatement" eSuperTypes="#//Statement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A statement that changes the classification of an object."/>
+ </eAnnotations>
+ <eOperations name="assignmentAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.expression.assignmentAfter"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="classifyStatementExpression" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The expression in a classify statement must have a class as its type and&#xA;multiplicity upper bound of 1."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="All qualified names listed in the from or to lists of a classify&#xA;statement must resolve to classes."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="All the from and to classes of a classify statement must be subclasses of&#xA;the type of the target expression and none of them may have a common&#xA;superclass that is a subclass of the type of the target expression (that&#xA;is, they must be disjoint subclasses)."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before the expression of a classify statement are the&#xA;same as the assignments before the statement.&#xA;(See the assignmentsBefore(element) operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="classifyStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments after a classify statement are the same as the&#xA;assignments after its expression.&#xA;(See the assignmentAfter() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="classifyStatementFromClassDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The from classes of a classify statement are the class referents of the&#xA;qualified names in the from list for the statement."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="classifyStatementToClassDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The to classes of a classify statement are the class referents of the&#xA;qualified names in the to list for the statement."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
+ eType="#//Expression" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The expression to be evaluated to obtain the object to be reclassified."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="fromList" eType="#//QualifiedNameList"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A list of names of classes to be removed as types of the object."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="toList" eType="#//QualifiedNameList"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A list of names of classes to be added as types of the object."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="fromClass" ordered="false"
+ upperBound="-1" eType="#//ElementReference" volatile="true" transient="true"
+ derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The classes denoted by the names in the from list."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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/GenModel">
+ <details key="documentation" value="The classes denoted by the names in the to list."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether this classify statement reclassifies all types of the target&#xA;object."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ForStatement" eSuperTypes="#//Statement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A looping statement that gives successive values to one or more loop variables on each iteration."/>
+ </eAnnotations>
+ <eOperations name="enclosingLoopStatement" eType="#//Statement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before a loop variable definition in a for statement are&#xA;the same as before the for statement. The assignments before the body of&#xA;the statement include all the assignments before the statement plus any&#xA;new assignments from the loop variable definitions, except that, if the&#xA;statement is parallel, the assigned sources of any names given in @parallel&#xA;annotations are changed to be the for statement itself.&#xA;(See the assignmentsBefore(element) operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="forStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The loop variables are unassigned after a for statement. Other than the&#xA;loop variables, if the assigned source for a name after the body of a for&#xA;statement is the same as after the for variable definitions, then the&#xA;assigned source for the name after the for statement is the same as after&#xA;the for variable definitions. If a name is unassigned after the for&#xA;variable definitions, then it is unassigned after the for statement (even&#xA;if it is assigned in the body of the for statement). If, after the loop&#xA;variable definitions, a name has an assigned source, and it has a&#xA;different assigned source after the body of the for statement, then the&#xA;assigned source after the for statement is the for statement itself.&#xA;(See the assignmentsAfter() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="forStatementParallelAnnotationNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A @parallel annotation of a for statement may include a list of names.&#xA;Each such name must be already assigned after the loop variable definitions&#xA;of the for statement, with a multiplicity of [0..*]. These names may only&#xA;be used within the body of the for statement as the first argument to for&#xA;the CollectionFunctions::add behavior.&#xA;(Note: Checking that @parallel annotation names are only used with add&#xA;behaviors is done in NameExpression, BehaviorInvocationExpression and&#xA;SequenceOperationExpression.)"/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="If, after the loop variable definitions of a parallel for statement, a&#xA;name has an assigned source, then it must have the same assigned source&#xA;after the block of the for statement. Other than for names defined in the&#xA;@parallel annotation of the for statement, the assigned source for such&#xA;names is the same after the for statement as before it. Any names defined&#xA;in the @parallel annotation have the for statement itself as their assigned&#xA;source after the for statement. Other than names given in the @parallel&#xA;annotation, if a name is unassigned after the loop variable definitions,&#xA;then it is considered unassigned after the for statement, even if it is&#xA;assigned in the block of the for statement.&#xA;(See also the assignmentsAfter() operation.)"/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The isFirst attribute of the first loop variable definition for a for&#xA;statement is true while the isFirst attribute is false for any other&#xA;definitions.&#xA;(See derivation of VariableDefinition::isFirst.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="forStatementLoopVariables" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assigned sources for loop variables after the body of a for statement&#xA;must be the for statement (the same as before the body).&#xA;(See the assignmentAfter() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="forStatementIsParallelDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A for statement is parallel if it has a @parallel annotation."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="forStatementEnclosedStatements" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The enclosing statement for all statements in the body of a for statement&#xA;are the for statement.&#xA;(See the SyntaxElement::enclosingStatement() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="In addition to an @isolated annotation, a for statement may have a&#xA;@parallel annotation."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The sequence of statements to be iteratively executed."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="variableDefinition" lowerBound="1"
+ upperBound="-1" eType="#//LoopVariableDefinition" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A list of definitions of one or more loop variables."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isParallel" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the for statement is parallel."/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="LoopVariableDefinition"/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="LoopVariableDefinition"/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.hasAnnotation('parallel')"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="LoopVariableDefinition" eSuperTypes="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The definition of a loop variable in a for statement."/>
+ </eAnnotations>
+ <eOperations name="actualName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="NameBinding{name=self.variable}.toName()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="newAssignments" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Get the assignments made within this loop variable definition."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments after a loop variable definition include the assignments&#xA;after the expression (or expressions) of the definition plus a new&#xA;assigned source for the loop variable itself. The assigned source for the&#xA;loop variable is the loop variable definition. The multiplicity upper&#xA;bound for the variable is 1. The multiplicity lower bound is 1 if the&#xA;loop variable definition is the first in a for statement and 0 otherwise.&#xA;If collection conversion is not required, then the variable has the&#xA;inferred or declared type from the definition. If collection conversion&#xA;is required, then the variable has the argument type of the collection&#xA;class."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="loopVariableDefinitionAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before the expressions of a loop variable definition are&#xA;the assignments before the loop variable definition.&#xA;(See the assignmentsBefore(element) operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="loopVariableDefinitionRangeExpressions" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a loop variable definition has two expressions, then both expressions&#xA;must have type Integer and a multiplicity upper bound of 1, and no name&#xA;may be newly assigned or reassigned in more than one of the expressions."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="If a loop variable definition has a type name, then this name must&#xA;resolve to a non-template classifier."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the type of a loop variable is not inferred, then the variable has the&#xA;type denoted by the type name, if it is not empty, and is untyped&#xA;otherwise. If the type is inferred, them the variable has the same type&#xA;as the expression in its definition."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="loopVariableDefinitionDeclaredType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the type of a loop variable definition is not inferred, then the first&#xA;expression of the definition must have a type that conforms to the&#xA;declared type."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Collection conversion is required for a loop variable definition if the&#xA;type for the definition is the instantiation of a collection class and&#xA;the multiplicity upper bound of the first expression is no greater than 1."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="loopVariableDefinitionVariable" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The variable name given in a loop variable definition must be unassigned&#xA;after the expression or expressions in the definition."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The name of the loop variable."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="expression1" lowerBound="1"
+ eType="#//Expression" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If there is only one expression, then this expression is evaluated to produce a sequence of values to be assigned to the loop variable on successive iterations. Otherwise it is evaluated to provide the first value of a range of values to be assigned to the loop variable."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="expression2" eType="#//Expression"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The expression to be evaluated to give the second value in a range of values to be assigned to the loop variable."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" eType="#//QualifiedName"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The declared type of the loop variable."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="typeIsInferred" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the type of the variable is inferred or declared explicitly.&#xA;NOTE: This flag is necessary to because a variable that is explicitly&#xA;declared to have type &quot;any&quot; will have an empty typeName,&#xA;just like a variable whose type is to be inferred, but, in the former&#xA;case, the type is actually intended to be empty, not inferred."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCollectionConversion"
+ lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether collection conversion is required."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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/GenModel">
+ <details key="documentation" value="The declared or inferred type of the loop variable."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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/GenModel">
+ <details key="documentation" value="Whether this definition is the first in the list of definitions in the&#xA;enclosing for statement."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.enclosingStatement().oclAsType(ForStatement).variableDefinition->at(1) = self"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentBefore" ordered="false"
+ upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
+ derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assigned sources for local names available lexically before this loop&#xA;variable definition."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.assignmentsBefore()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="assignmentAfter" ordered="false"
+ upperBound="-1" eType="#//AssignedSource" volatile="true" transient="true"
+ derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assigned sources for local names available lexically after this loop&#xA;variable definition. This includes not only any assignments made within&#xA;the statement, but also any assignments that are unchanged from before&#xA;the statement."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the loop variable has an empty type."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="IfStatement" eSuperTypes="#//Statement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A conditional statement that executes (at most) one of a set of clauses based on boolean conditions."/>
+ </eAnnotations>
+ <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before all the non-final clauses of an if statement are&#xA;the same as the assignments before the if statement. If the statement has&#xA;a final clause, then the assignments before that clause are also the same&#xA;as the assignments before the if statement.&#xA;(See assignmentBefore(element) operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="ifStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If an if statement does not have a final else clause, then any name that&#xA;is not an out parameter and is unassigned before the if statement is&#xA;unassigned after the if statement. If an if statement does have a final&#xA;else clause, then any name that is unassigned before the if statement and&#xA;is assigned after any one clause of the if statement must also be assigned&#xA;after every other clause. The type of such names after the if statement is&#xA;the effective common ancestor of the types of the name in each clause with&#xA;a multiplicity lower bound that is the minimum of the lower bound for the&#xA;name in each clause and a multiplicity upper bound that is the maximum for&#xA;the name in each clause. For a name that has an assigned source after any&#xA;clause of an if statement that is different than before that clause, then&#xA;the assigned source after the if statement is the if statement. Otherwise,&#xA;the assigned source of a name after the if statement is the same as before&#xA;the if statement.&#xA;(See assignmentsAfter() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="ifStatementEnclosedStatements" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The enclosing statement of all the statements in the bodies of all&#xA;non-final clauses and in the final clause (if any) of an if statement is&#xA;the if statement.&#xA;(See SyntaxElement::enclosingStatement() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="ifStatementIsAssuredDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An if statement is assured if it has an @assured annotation."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="ifStatementIsDeterminateDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An if statement is determinate if it has an @determinate annotation."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="In addition to an @isolated annotation, an if statement may have @assured&#xA;and @determinate annotations. They may not have arguments."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.Statement_annotationAllowed(annotation) or&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A list of groupings of concurrent clauses that are to be checked&#xA;sequentially for a successful condition."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="finalClause" eType="#//Block"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A sequence of statements to be executed if no other clause has a&#xA;successful condition."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAssured" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether at least one condition in the if statement is assured to evaluate&#xA;to true."/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="SwitchStatement"/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="SwitchStatement"/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.hasAnnotation('assured')"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDeterminate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether at most one condition in the if statement will ever to evaluate&#xA;to true."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.hasAnnotation('determinate')"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SwitchStatement" eSuperTypes="#//Statement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A statement that executes (at most) one of a set of statement sequences&#xA;based on matching a switch value to a set of test cases."/>
+ </eAnnotations>
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before all clauses of a switch statement are the same as&#xA;the assignments after the expression of the switch statement.&#xA;(See assignmentBefore(element) expression.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="switchStatementCaseAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The same local name may not be assigned in more than one case expression&#xA;in a switch statement."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a name has an assigned source after any clause of a switch statement&#xA;that is different than before that clause (including newly defined names),&#xA;the assigned source after the switch statement is the switch statement.&#xA;Otherwise, the assigned source of a name after the switch statement is&#xA;the same as before the switch statement.&#xA;(See assignmentsAfter() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="switchStatementAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a switch statement does not have a final default clause, then any name&#xA;that is not an out parameter and is unassigned before the switch statement&#xA;is unassigned after the switch statement. If a switch statement does have&#xA;a final default clause, then any name that is unassigned before the switch&#xA;statement and is assigned after any one clause of the switch statement&#xA;must also be assigned after every other clause. The type of such names&#xA;after the switch statement is the effective common ancestor of the types&#xA;of the name in each clause with a multiplicity lower bound that is the&#xA;minimum of the lower bound for the name in each clause and a multiplicity&#xA;upper bound that is the maximum for the name in each clause.&#xA;(See also assignmentsAfter() operation.)"/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let newNames = self.assignmentAfter.name->excludingAll(self.assignmentBefore.name) in&#xA;&#x9; if self.defaultClause = null then&#xA;&#x9; newNames->isEmpty()&#xA;&#x9; else&#xA;&#x9; self.nonDefaultClause.block->including(self.defaultClause)->forAll(&#xA;&#x9; &#x9;assignmentAfter.name->includesAll(newNames)&#xA;&#x9; )&#xA;&#x9; endif"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="switchStatementExpression" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A switch statement expression must have a multiplicity no greater than 1."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.expression.upper &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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A switch statement is the enclosing statement for the statements in all&#xA;of its switch clauses.&#xA;(See SyntaxElement::enclosingStatement() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="switchStatementIsDeterminateDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A switch statement is determinate if it has a @determinate annotation."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="switchStatementIsAssuredDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A switch statement is assured if it has an @assured annotation."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="In addition to an @isolated annotation, a switch statement may have&#xA;@assured and @determinate annotations. They may not have arguments."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.Statement_annotationAllowed(annotation) or&#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"
+ upperBound="-1" eType="#//SwitchClause" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The set of switch clauses whose cases are to be tested against the switch&#xA;value."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
+ eType="#//Expression" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The expression to be evaluated to provide the switch value."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="defaultClause" eType="#//Block"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A sequence of statements to be executed if no switch clause case matches&#xA;the switch value."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAssured" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether at least one case in the switch statement is assured to match."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.hasAnnotation('assured')"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDeterminate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether at most one case in the if statement will ever to match."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.hasAnnotation('determinate')"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SwitchClause" eSuperTypes="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A clause in a switch statement with a set of cases and a sequence of&#xA;statements that may be executed if one of the cases matches the switch value."/>
+ </eAnnotations>
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="The assignments before a switch clause are the assignments before any&#xA;case expression of the clause."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.SyntaxElement_assignmentsBefore()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments after a switch clause are the assignments after the block&#xA;of the switch clause."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.block.assignmentAfter"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="switchClauseAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before any case expression of a switch clause are the&#xA;same as the assignments before the clause. The assignments before the&#xA;block of a switch clause are the assignments after all case expressions.&#xA;(See assignmentsBefore(element) operation.)&#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="switchClauseCaseLocalNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a name is unassigned before a switch clause, then it must be&#xA;unassigned after all case expressions of the clause (i.e., new local&#xA;names may not be defined in case expressions)."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.assignmentsBefore().name->includesAll(self.case.assignmentAfter.name)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="switchClauseCases" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="All the case expressions of a switch clause must have a multiplicity&#xA;no greater than 1."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The expressions to be evaluated to provide values to test against the switch value."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="block" lowerBound="1" eType="#//Block"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The sequence of statements that may be executed if one of the cases matches the switch value."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="WhileStatement" eSuperTypes="#//Statement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A looping statement for which the continuation condition is first tested&#xA;before the first iteration."/>
+ </eAnnotations>
+ <eOperations name="enclosingLoopStatement" eType="#//Statement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before the condition expression of a while statement&#xA;are the same as the assignments before the while statement. The&#xA;assignments before the block of the while statement are the same as the&#xA;assignments after the condition expression.&#xA;(See assignmentsBefore(element) operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="whileStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a name is assigned before the block, but the assigned source for the&#xA;name after the block is different than before the block, then the assigned&#xA;source of the name after the while statement is the while statement.&#xA;Otherwise it is the same as before the block. If a name is unassigned&#xA;before the block of a while statement, then it is unassigned after the&#xA;while statement, even if it is assigned after the block.&#xA;(See assignmentsAfter() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="whileStatementCondition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The condition expression of a while statement must have type Boolean and&#xA;a multiplicity upper bound of 1."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The enclosing statement for all statements in the body of a while&#xA;statement are the while statement.&#xA;(See the SyntaxElement::enclosingStatement() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="body" lowerBound="1" eType="#//Block"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The sequence of statements to be iteratively executed."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="condition" lowerBound="1"
+ eType="#//Expression" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The expression to be evaluated to determine whether to continue looping."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ReturnStatement" eSuperTypes="#//Statement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A statement that provides a value for the return parameter of an activity."/>
+ </eAnnotations>
+ <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="If the behavior containing the return statement has a return parameter,&#xA;then the return statement must have an expression, and the expression&#xA;must be assignable to that return parameter.&#xA;(And, if the behavior does not have a return parameter, then the return&#xA;statement must not have an expression.)"/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before the expression of a return statement are the same&#xA;as the assignments before the statement.&#xA;(See the assignmentsBefore(element) operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="returnStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments after a return statement are the same as the assignments&#xA;after the expression of the return statement.&#xA;(Or, if the statement has no expression, the same as the assignments&#xA;before the statement.)&#xA;(See the assignmentsAfter() operation.)"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The expression to be evaluated to provide the returned value."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="behavior" eType="#//ElementReference"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A reference to the enclosing behavior for this return statement."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.currentScope()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="InLineStatement" eSuperTypes="#//Statement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A statement that executes code in a language other than Alf."/>
+ </eAnnotations>
+ <eOperations name="inLineStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments after an in-line statement are the same as the assignments&#xA;before the statement."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="language" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The name of the language in which the code is written."/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="AcceptStatement"/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="AcceptStatement"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="code" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The in-line code to be executed."/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="AcceptStatement"/>
+ <details key="unique" value="false"/>
+ <details key="upper" value="*"/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="AcceptStatement"/>
+ <details key="unique" value="false"/>
+ <details key="upper" value="*"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="AcceptStatement" eSuperTypes="#//Statement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A statement used to accept the receipt of instances of one or more signals."/>
+ </eAnnotations>
+ <eOperations name="assignmentsAfter" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="let assignmentsAfter = self.Statement_assignmentsAfter() in&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the behavior for this accept statement is a subunit, then return the&#xA;corresponding stub. Note that, if the original behavior is an Alf&#xA;activity definition, the &quot;stub&quot; may be an external operation or activity."/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="effectiveBehavior_" lowerBound="1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="An accept statement can only be used within the definition of an active&#xA;behavior or the classifier behavior of an active class."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="The containing behavior of an accept statement must have receptions for&#xA;all signals from all accept blocks of the accept statement. No signal may&#xA;be referenced in more than one accept block of an accept statement."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Any name defined in an accept block of an accept statement must be&#xA;unassigned before the accept statement."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A local name specified in the accept block of a simple accept statement&#xA;has the accept statement as its assigned source after the accept statement.&#xA;The type of the local name is the effective common ancestor of the specified&#xA;signals, if one exists, and it is untyped otherwise."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="acceptStatementCompoundAcceptLocalName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="For a compound accept statement, a local name defined in an accept block&#xA;has the accept block as its assigned source before the block associated&#xA;with the accept block. The type of the local name is the effective common&#xA;ancestor of the specified signals for that accept clause, if one exists,&#xA;and it is untyped otherwise. However, the local name is considered&#xA;unassigned after the accept statement."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="acceptStatementAssignmentsBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before any block of an accept statement are the assignments&#xA;before the accept statement."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="acceptStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a name is assigned in any block of an accept statement, then the&#xA;assigned source of the name after the accept statement is the accept&#xA;statement itself."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="acceptStatementNewAssignments" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a name is unassigned before an accept statement and assigned in any&#xA;block of an accept statement, then it must be assigned in every block."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An accept statement is simple if it has exactly one accept block and that&#xA;accept block does not have a block."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="acceptStatementEnclosedStatements" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The enclosing statement for all statements in the blocks of all accept&#xA;blocks of an accept statement is the accept statement."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="acceptBlock" ordered="false"
+ lowerBound="1" upperBound="-1" eType="#//AcceptBlock" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="One or more blocks for accepting alternate groups of signals."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="behavior" eType="#//ElementReference"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The behavior containing the accept statement."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.currentScope()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isSimple" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the accept statement is simple or not."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="let acceptBlocks = self.acceptBlock in&#xA; acceptBlocks->size() = 1 and acceptBlocks->forAll(block = null)"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="AcceptBlock" eSuperTypes="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A block of an accept statement that accepts one or more signals."/>
+ </eAnnotations>
+ <eOperations name="actualName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="NameBinding{name = self.name}.toName()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="For a compound accept statement, a local name defined in an accept block&#xA;has the accept block as its assigned source before the block associated&#xA;with the accept block. The type of the local name is the effective common&#xA;ancestor of the specified signals for that accept clause, if one exists,&#xA;and it is untyped otherwise.&#xA;&#xA;Otherwise, the assignments before any block of an accept statement are the&#xA;assignments before the accept statement.&#xA;"/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The signals of an accept block are the referents of the signal names of the accept block."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="acceptBlockSignalNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="All signal names in an accept block must resolve to signals."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The local name to which an accepted signal instance will be assigned."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="block" eType="#//Block"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The body of the accept block, executed if one of the named signals is received."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="signalNames" lowerBound="1"
+ eType="#//QualifiedNameList" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A list of names of the signals accepted by this accept block."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="signal" ordered="false"
+ upperBound="-1" eType="#//ElementReference" volatile="true" transient="true"
+ derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The signals denoted by the signal names of the accept block."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#xA; self.signalNames.name.referent->select(isSignal())->asSet()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="EmptyStatement" eSuperTypes="#//Statement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A statement that has no affect when executed."/>
+ </eAnnotations>
+ <eOperations name="emptyStatementAssignmentsAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments after and empty statement are the same as the assignments before the statement."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ModelNamespace" eSuperTypes="#//PackageDefinition">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A namespace to represent model scope."/>
+ </eAnnotations>
+ <eOperations name="context" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="EXTERNAL"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="outerScope" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="null"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="modelScope" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.toReference()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="qualifiedName" eType="#//QualifiedName">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="QualifiedName{nameBinding = OrderedSet(NameBinding){}}"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="resolveInScope" ordered="false" upperBound="-1" eType="#//Member">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.resolveInRoot(name)"/>
+ </eAnnotations>
+ <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eOperations>
+ <eOperations name="resolveInRoot" ordered="false" upperBound="-1" eType="#//Member">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="EXTERNAL"/>
+ </eAnnotations>
+ <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eOperations>
+ <eOperations name="resolvePathName" ordered="false" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="EXTERNAL"/>
+ </eAnnotations>
+ <eParameters name="pathName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eOperations>
+ <eOperations name="resolveAssociationEnd" ordered="false" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="Set(ElementReference){}"/>
+ </eAnnotations>
+ <eParameters name="oppositeEndType" lowerBound="1" eType="#//ElementReference"/>
+ <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eOperations>
+ <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="ModelNamespace_appliedProfiles()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="stubFor" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.context().stubFor(unit)"/>
+ </eAnnotations>
+ <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
+ </eOperations>
+ <eOperations name="ModelNamespace_appliedProfiles" ordered="false" upperBound="-1"
+ eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="EXTERNAL"/>
+ </eAnnotations>
+ </eOperations>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="NamespaceDefinition" eSuperTypes="#//MemberDefinition">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A model of the common properties of the definition of a namespace in Alf."/>
+ </eAnnotations>
+ <eOperations name="currentScope" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A namespace definition is its own current scope."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.toReference()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="outerScope" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The outer scope of a namespace definition is either the namespace&#xA;definition that owns it as a member or the declared namespace of the&#xA;unit that owns it or, if it has neither of these, then model scope."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.NamespaceDefinition_outerScope()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="NamespaceDefinition_outerScope" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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)->asSet()"/>
+ </eAnnotations>
+ <eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eOperations>
+ <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.NamespaceDefinition_appliedProfiles()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="NamespaceDefinition_appliedProfiles" ordered="false" upperBound="-1"
+ eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Returns any owned members that are formal parameters, excluding return parameters."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Returns an owned member that is a return parameter, if any."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.NamespaceDefinition_returnParameter()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="NamespaceDefinition_returnParameter" eType="#//FormalParameter">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Returns true if the annotation is @external."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="NamespaceDefinition_annotationAllowed(annotation)"/>
+ </eAnnotations>
+ <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
+ </eOperations>
+ <eOperations name="NamespaceDefinition_annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Returns the members of this namespace definition that are template parameters."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; self.ownedMember.definition->select(oclIsKindOf(ClassifierTemplateParameter)).&#xA; oclAsType(ClassifierTemplateParameter)->asOrderedSet()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="membersCached" upperBound="-1" eType="#//Member">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Return all the members of this namespace (at least all the owned and imported members)."/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="members" upperBound="-1" eType="#//Member">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.NamespaceDefinition_members()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="NamespaceDefinition_members" upperBound="-1" eType="#//Member">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.ownedMember->includingAll(self.importedMembers())->asOrderedSet()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="importedMembers" ordered="false" upperBound="-1" eType="#//Member">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Returns the members imported into this namespace."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Return the subset of the given imported members that are actually imported into the namespace.&#xA;This excludes hidden ones, i.e., those that have names that conflict with names of owned members,&#xA;and also excludes elements that would have the same name when imported."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Return the subset of the given imported members that excludes any that would not be&#xA;distinguishable from each other in this namespace."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="Remove duplicate imported members that have the same referent&#xA;(but leave one of them)."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Cache an intermediate value for member before caling includingDistinguishable,&#xA;in order to avoid an infinite loop."/>
+ </eAnnotations>
+ <eParameters name="importedMembers" ordered="false" upperBound="-1" eType="#//Member"/>
+ </eOperations>
+ <eOperations name="includeDistinguishable" ordered="false" upperBound="-1" eType="#//Member">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Return the subset of the given imported members that would be distinguishable&#xA;from all owned members of this namespace."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="Return the stub member the subunit for which has this namespace&#xA;definition as its definition, if any. Note that, for an activity&#xA;definition, the &quot;stub&quot; may be an external operation or activity."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The members of a namespace definition include references to all owned members.&#xA;Also, if the namespace definition has a unit with imports, then the members&#xA;include imported members with referents to all imported elements.&#xA;The imported elements and their visibility are determined as given in the&#xA;UML Superstructure. The name of an imported member is the name of the&#xA;imported element or its alias, if one has been given for it.&#xA;Elements that would be indistinguishable from each other or from an owned&#xA;member (as determined by the Member::isDistinguishableFrom operation) are not imported. .&#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="namespaceDefinitionMemberDistinguishability" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The members of a namespace must be distinguishable as determined by the Member::isDistinguishableFrom operation."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The definitions of owned members of the namespace."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="unit" eType="#//UnitDefinition"
+ eOpposite="#//UnitDefinition/definition">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The unit for which this namespace is a definition, if any."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="member" upperBound="-1"
+ eType="#//Member" volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The owned and imported members of a namespace definition."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.membersCached()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="MemberDefinition" abstract="true" eSuperTypes="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A model of the common properties of the definition of a member of a namespace in Alf."/>
+ </eAnnotations>
+ <eOperations name="annotation" ordered="false" upperBound="-1" eType="#//StereotypeAnnotation">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="EXTERNAL"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Returns true of the given stereotype annotation is allowed for this kind&#xA;of element."/>
+ </eAnnotations>
+ <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
+ </eOperations>
+ <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Returns true of the given unit definition is a legal match for this&#xA;member as a stub. By default, always returns false."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="false"/>
+ </eAnnotations>
+ <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
+ </eOperations>
+ <eOperations name="isDistinguishableFrom" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Returns true if this member is distinguishable from the given member. Two&#xA;members are distinguishable if their names are different or the they are of&#xA;different kinds (as determined by the isSameKindAs operation). However, in&#xA;any case that the UML Superstructure considers two names to be distinguishable&#xA;if they are different, an Alf implementation may instead impose the stronger&#xA;requirement that the names not be conflicting."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="MemberDefinition_isDistinguishableFrom(member)"/>
+ </eAnnotations>
+ <eParameters name="member" lowerBound="1" eType="#//MemberDefinition"/>
+ </eOperations>
+ <eOperations name="MemberDefinition_isDistinguishableFrom" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.actualName() &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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Returns true if this member is of the same kind as the given member."/>
+ </eAnnotations>
+ <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
+ </eOperations>
+ <eOperations name="templateParameters" upperBound="-1" eType="#//ClassifierTemplateParameter">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The template parameters associated with this member. (Only a namespace&#xA;definition can actually have template parameters.)"/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="OrderedSet{}"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="isTemplate" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Returns true if this member is a template."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.templateParameters()->notEmpty()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Returns true if this member is a feature. By default is is not."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="false"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="memberAnnotations" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="All stereotype annotations for a member must be allowed, as determined using the stereotypeAllowed operation."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A member is primitive if it has a @primitive annotation."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="memberIsExternalDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A member is external if it has an @external derivation."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="memberExternal" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a member is external then it must be a stub."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a member is a stub and is not external, then there must be a single subunit with the same qualified name as the stub that matches the stub, as determined by the matchForStub operation."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="memberSubunitDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the member is a stub and is not external, then its corresponding subunit is a unit definition with the same fully qualified name as the stub."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="memberStubStereotypes" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a member is a stub, then the it must not have any stereotype annotations that are the same as its subunit. Two stereotype annotations are the same if they are for the same stereotype."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="memberPrimitive" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a member is primitive, then it may not be a stub and it may not have any owned members that are template parameters."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="This is a workaround for an Xtext editor problem in which a reparsed&#xA;subtree may be put in the wrong container."/>
+ </eAnnotations>
+ <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://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The name of the member."/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="StereotypeAnnotation"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isStub" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether this member definition is a stub for a subunit."/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="StereotypeAnnotation"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isFeature" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether this member is a feature of a classifier."/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="StereotypeAnnotation"/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.isFeature()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isPrimitive" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether this member is a primitive or not."/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="StereotypeAnnotation"/>
+ <details key="unique" value="false"/>
+ <details key="upper" value="*"/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.annotation().stereotypeName->exists(pathName = 'primitive')"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isExternal" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether this member is external or not."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.annotation().stereotypeName->exists(pathName = 'external')"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="subunit" eType="#//UnitDefinition"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The subunit corresponding to the member, if the member is a stub."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="null"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="StereotypeAnnotation" eSuperTypes="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An annotation of a member definition indicating the application of a stereotype (or one of a small number of special-case annotations)."/>
+ </eAnnotations>
+ <eOperations name="stereotypeAnnotationStereotypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Unless the stereotype name is &quot;apply&quot;, &quot;primitive&quot; or &quot;external&quot; then the stereotype for a stereotype annotation is the stereotype denoted by the stereotype name."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="stereotypeAnnotationStereotypeName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The stereotype name of a stereotype annotation must either be one of &quot;apply&quot;,&#xA;&quot;primitive&quot; or &quot;external&quot;, or it must denote a single stereotype from a profile&#xA;applied to an enclosing package. The stereotype name does not need to be qualified&#xA;if there is only one applied profile with a stereotype of that name or if the&#xA;there is a standard UML profile with the name."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="If the stereotype name of a stereotype annotation is &quot;apply&quot;, then it must have a name list and all of the names in the list must resolve to profiles."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="If the stereotype name of a stereotype annotation is &quot;primitive&quot;, then it may not have tagged values or names."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="If the stereotype name of a stereotype annotation is &quot;external&quot;, then it may optionally have a single tagged value with the name &quot;file&quot; and no operator."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a stereotype annotation has a stereotype and tagged values, then the each tagged value must have the name of an attribute of the stereotype and a value that is legally interpretable for the type of that attribute."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="stereotypeAnnotationNames" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a stereotype annotation has a stereotype and a list of names, then all the names in the list must resolve to visible model elements and the stereotype must have a single attribute with a (metaclass) type and multiplicity that are consistent with the types and number of the elements denoted by the given names."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A set of tagged values for the applied stereotype."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="names" eType="#//QualifiedNameList"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A set of references to model elements required for the stereotype being applied."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="stereotypeName" lowerBound="1"
+ eType="#//QualifiedName" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The name of the stereotype being applied."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="stereotype" lowerBound="1"
+ eType="#//ElementReference" volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The stereotype denoted by the stereotype name."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A set of tagged values for a stereotype application."/>
+ </eAnnotations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="taggedValue" ordered="false"
+ lowerBound="1" upperBound="-1" eType="#//TaggedValue" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The tagged values in the set."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="TaggedValue" eSuperTypes="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An assignment of a value to an attribute of an applied stereotype."/>
+ </eAnnotations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The name of the stereotype attribute to be assigned a value."/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="UnitDefinition"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The string image of a literal value to be assigned to the stereotype attribute."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="For a numeric value, an optional unary plus or minus operator."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="UnitDefinition" eSuperTypes="#//DocumentedElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The definition of a namespace as an Alf unit."/>
+ </eAnnotations>
+ <eOperations name="imports" ordered="false" upperBound="-1" eType="#//ImportReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a unit definition has a declared namespace name, then the containing&#xA;namespace for the unit is the referent for that name."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="unitDefinitionNamespace" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The declared namespace name for a unit definition, if any, must resolve&#xA;to a UML namespace or an Alf unit definition. If it is an Alf unit&#xA;definition, then it must have a stub for this unit definition."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A unit definition is for a model library if its associated namespace&#xA;definition has a stereotype annotation for the UML standard stereotype&#xA;ModelLibrary."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="unitDefinitionImplicitImports" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Unless the unit definition is a model library, it has private package&#xA;import references for all the sub-packages of the Alf::Library package."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="unitDefinitionAppliedProfileDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The profiles applied to a unit definition include any profiles applied&#xA;to the containing namespace of the unit definition. If the unit&#xA;definition is for a package, then the applied profiles for the unit&#xA;definition also include the applied profiles for its associated package&#xA;definition."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="namespaceName" eType="#//QualifiedName"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A declaration of the name of the namespace that contains this unit as a&#xA;subunit."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="definition" lowerBound="1"
+ eType="#//NamespaceDefinition" containment="true" eOpposite="#//NamespaceDefinition/unit">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The definition of the unit as a namespace."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="import" ordered="false"
+ upperBound="-1" eType="#//ImportReference" containment="true" eOpposite="#//ImportReference/unit">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The set of references to imported elements or packages."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="namespace" eType="#//ElementReference"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A reference to the namespace denoted by the declared namespace name for&#xA;the unit, if any."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="Whether this unit definition is for a model library or not."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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/GenModel">
+ <details key="documentation" value="The profiles applied to this unit."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.definition.appliedProfiles()"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="annotation" ordered="false"
+ upperBound="-1" eType="#//StereotypeAnnotation" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The stereotype annotations on this unit definition."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ImportReference" abstract="true" eSuperTypes="#//SyntaxElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A reference to an element or package to be imported into a unit."/>
+ </eAnnotations>
+ <eOperations name="importedMembers" ordered="false" upperBound="-1" eType="#//Member">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Return the set of all imported members."/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="importReferenceReferentDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The referent of an import reference is the element denoted by the&#xA;referent name."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="importReferenceReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The referent name of an import reference must resolve to a single element&#xA;with public or empty visibility."/>
+ </eAnnotations>
+ <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://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An indication of the visibility of the import."/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="ImportedMember"/>
+ <details key="unique" value="false"/>
+ <details key="upper" value="*"/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="ImportedMember"/>
+ <details key="unique" value="false"/>
+ <details key="upper" value="*"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="referentName" lowerBound="1"
+ eType="#//QualifiedName" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The name of the element or package to be imported."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="referent" eType="#//ElementReference"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A reference to the imported element denoted by the given qualified name."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The unit that is making this import reference."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ImportedMember" eSuperTypes="#//MemberDefinition">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value=""/>
+ </eAnnotations>
+ <eOperations name="actualName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.name"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="toReference" lowerBound="1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.referent"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Returns false. (Imported members do not have annotations.)"/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="false"/>
+ </eAnnotations>
+ <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
+ </eOperations>
+ <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the given member is not an imported member, then return the result of&#xA;checking whether the given member is the same kind as this member. Else,&#xA;if the element of the referent for this member is an Alf member, then&#xA;return the result of checking whether that element is the same kind as the&#xA;given member. Else, if the element of the referent for the given member is&#xA;an Alf member, then return the result of checking whether that element is&#xA;the same kind as this member. Else, the referents for both this and the&#xA;given member are UML elements, so return the result of checking their&#xA;distinguishability according to the rules of the UML superstructure."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.referent.isSameKindAs(member)"/>
+ </eAnnotations>
+ <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
+ </eOperations>
+ <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Returns true if the referent of this imported member is a feature."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.referent.isFeature()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="importedMemberNotStub" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An imported element is not a stub."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="not self.isStub"/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="importedMemberIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An imported element is a feature if its referent is a feature."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="referent" lowerBound="1"
+ eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value=""/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="EnumerationLiteralName" eSuperTypes="#//MemberDefinition">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The definition of an enumeration literal, as a member of an enumeration definition."/>
+ </eAnnotations>
+ <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Returns false. (Enumeration literal name cannot have annotations.)"/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="false"/>
+ </eAnnotations>
+ <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
+ </eOperations>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="OperationDefinition" eSuperTypes="#//NamespaceDefinition">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The definition of an operation, with any formal parameters defined as owned members."/>
+ </eAnnotations>
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before the body of an operation definition include an&#xA;assigned source for each parameter of the activity definition. The&#xA;source for out parameters is actually null, however, to indicate that it&#xA;has not been assigned yet (but that the name should not otherwise be used&#xA;as a local name)."/>
+ </eAnnotations>
+ <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; )->asSet()&#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/GenModel">
+ <details key="documentation" value="Returns true if the annotation is for a stereotype that has a metaclass consistent with Operation."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="The namespace definition associated with the given unit definition must be&#xA;an activity definition with no template parameters. In addition, the subunit&#xA;definition must have formal parameters that match each of the formal parameters&#xA;of the stub definition, in order. Two formal parameters match if they have&#xA;the same direction, name, multiplicity bounds, ordering, uniqueness and type&#xA;reference. If this operation definition is a constructor, then it is considered&#xA;to have an implicit return parameter, following any other formal parameters,&#xA;with the same type as the class of the operation definition and a multiplicity of 1..1.&#xA;"/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="Return true if the given member is either an OperationDefinition or an&#xA;imported member whose referent is an OperationDefinition or an Operation,&#xA;and the formal parameters of this operation definition match, in order,&#xA;the parameters of the other operation definition or operation. In this&#xA;context, matching means the same name and type (per UML Superstructure,&#xA;Subclause 7.3.5). A constructor operation without an explicit return parameter&#xA;is considered to implicitly have a return parameter, following any other&#xA;formal parameters, of the same type as the owner of the constructor operation."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Returns whether the parameters of this operation definition match the parameters of another operation&#xA;in direction, name, multiplicity bounds, ordering, uniqueness and type."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Returns whether the parameters of this operation definition match the parameters of another operation&#xA;in name and type only."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="Returns the return parameter for this operation. If the operation is a constructor, a&#xA;formal parameter is created to represent its implicit return parameter."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Returns the specialization referents for the owning class definition of this operation definition."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#xA; let namespace = self.containingMember().namespace in &#xA; if namespace.oclIsKindOf(ClassDefinition) then &#xA; namespace.oclAsType(ClassDefinition).specializationReferent->asSet()&#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/GenModel">
+ <details key="documentation" value="The namespace for an operation definition must be a class definition."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If an operation definition has a redefinition list, its redefined operations&#xA;are the referent operations of the names in the redefinition list for the&#xA;operation definition. Otherwise, the redefined operations are any operations&#xA;that would otherwise be indistinguishable from the operation being defined&#xA;in this operation definition."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="operationDefinitionRedefinition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Each name in the redefinition list of an operation definition must have a&#xA;single referent that is an operation. This operation must be a non-private&#xA;operation that is a member of a specialization referent of the class&#xA;definition of the operation definition."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="The redefined operations of an operation definition must have formal parameters&#xA;that match each of the formal parameters of this operation definition, in order.&#xA;Two formal parameters match if they have the same direction, name, multiplicity&#xA;bounds, ordering, uniqueness and type reference."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An operation definition is a feature."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="operationDefinitionIsConstructorDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An operation definition is a constructor if it has a @Create annotation."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="operationDefinitionIsDestructorDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An operation definition is a destructor if it has a @Destroy annotation."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="operationDefinitionConstructorDestructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An operation definition cannot be both a constructor and a destructor."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="If an operation definition is a constructor, any redefined operation for it must also be a constructor.&#xA;The body of a constructor may contain an alternative constructor invocation for another constructor&#xA;in the same class or super constructor invocations for constructors in immediate superclasses."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="If an operation definition is a destructor, any redefined operation for it must also be a destructor."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The names of other operations that are redefined by the operation being defined."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAbstract" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the operation being defined is abstract."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="body" eType="#//Block"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The sequence of statements that defines the behavior of the operation (empty for a stub)."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="redefinedOperation" ordered="false"
+ upperBound="-1" eType="#//ElementReference" volatile="true" transient="true"
+ derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value=""/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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/GenModel">
+ <details key="documentation" value="Whether this operation definition is for a constructor."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.annotation()->exists(stereotypeName.pathName = 'Create')"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDestructor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether this operation definition is for a destructor."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="self.annotation()->exists(stereotypeName.pathName = 'Destroy')"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="AssociationDefinition" eSuperTypes="#//ClassifierDefinition">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The definition of an association, whose members must all be properties."/>
+ </eAnnotations>
+ <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Returns true if the given unit definition matches this association definition&#xA;considered as a classifier definition and the subunit is for an association definition."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="In addition to the annotations allowed for classifiers in general, an association&#xA;definition allows an annotation for any stereotype whose metaclass is consistent with Association."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Return true if the given member is either an AssociationDefinition or an&#xA;imported member whose referent is an AssociationDefinition or an Association."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="member.isAssociation()"/>
+ </eAnnotations>
+ <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
+ </eOperations>
+ <eOperations name="associationDefinitionSpecializationReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The specialization referents of an association definition must all be associations."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The definition of a classifier."/>
+ </eAnnotations>
+ <eOperations name="ClassifierDefinition_annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="NamespaceDefinition_annotationAllowed(annotation)"/>
+ </eAnnotations>
+ <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
+ </eOperations>
+ <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The namespace definition associated with the given unit definition must&#xA;be a classifier definition. The subunit classifier definition may be abstract&#xA;if and only if the subunit classifier definition is abstract. The subunit&#xA;classifier definition must have the same specialization referents as the&#xA;stub classifier definition. (Note that it is the referents that must match,&#xA;not the exact names or the ordering of those names in the specialization list.)&#xA;The subunit classifier definition must also have a matching classifier&#xA;template parameter for each classifier template parameter of the stub classifier&#xA;definition. Two template parameters match if they have same names and the same&#xA;specialization referents."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="ClassifierDefinition_matchForStub(unit)"/>
+ </eAnnotations>
+ <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
+ </eOperations>
+ <eOperations name="ClassifierDefinition_matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Returns the members of a classifier definition including its inherited members."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.NamespaceDefinition_members()->&#xA; includingAll(self.inheritedMembers())->asOrderedSet()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="inheritedMembers" upperBound="-1" eType="#//Member">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Returns all of the inherited members of this classifier definition."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Define how to inherit a set of members. Here the operation is defined to inherit them all.&#xA;It is intended to be redefined in circumstances where inheritance is affected by redefinition."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="members"/>
+ </eAnnotations>
+ <eParameters name="members" upperBound="-1" eType="#//Member"/>
+ </eOperations>
+ <eOperations name="classifierDefinitionSpecialization" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Each name listed in the specialization list for a classifier definition must&#xA;have a single classifier referent. None of these referents may be templates."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The specialization referents of a classifier definition are the classifiers denoted by the&#xA;names in the specialization list for the classifier definition."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="classifierDefinitionInheritedMembers" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The members of a classifier definition include non-private members inherited from the classifiers it specializes.&#xA;The visibility of inherited members is as specified in the UML Superstructure, Subclause 7.3.8."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAbstract" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the classifier is abstract or not."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="specialization" eType="#//QualifiedNameList"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The names of classifiers specialized by the classifier being defined."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="specializationReferent"
+ upperBound="-1" eType="#//ElementReference" volatile="true" transient="true"
+ derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="References to the classifiers to which the names in the specialization list resolve."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The definition of a class, whose members may be properties, operations, signals or signal receptions."/>
+ </eAnnotations>
+ <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="In addition to the annotations allowed for classifiers in general, a class definition allows an&#xA;annotation for any stereotype whose metaclass is consistent with Class."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Returns true if the given unit definition matches this class definition considered as a&#xA;classifier definition and the subunit is for a class definition."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Return true if the given member is either a ClassDefinition or an imported member whose referent is a ClassDefinition or a Class."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="member.isClass()"/>
+ </eAnnotations>
+ <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
+ </eOperations>
+ <eOperations name="needsDefaultConstructor" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Checks whether this class needs to have a default constructor added."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Checks whether this class needs to have a default destructor added."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="EXTERNAL: Caches intermediate members computation to avoid infinite loops."/>
+ </eAnnotations>
+ <eParameters name="inheritableMembers" upperBound="-1" eType="#//Member"/>
+ </eOperations>
+ <eOperations name="ClassDefinition_inherit" upperBound="-1" eType="#//Member">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="The specialization referents of a class definition must all be classes.&#xA;A class definition may not have any referents that are active classes unless&#xA;this is an active class definition."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="If a class definition is not abstract, then no member operations (owned or inherited)&#xA;of the class definition may be abstract."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The common properties of the definitions of typed elements."/>
+ </eAnnotations>
+ <eOperations name="isOrdered" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.isOrdered or self.isSequence"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="isNonunique" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.isNonunique or self.isSequence"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="typedElementDefinitionLowerDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If the lower bound string image of a typed element definition is not empty,&#xA;then the integer lower bound is the integer value of the lower bound string.&#xA;Otherwise the lower bound is equal to the upper bound, unless the upper bound&#xA;is unbounded, in which case the lower bound is 0."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="typedElementDefinitionUpperDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The unlimited natural upper bound value is the unlimited natural value of&#xA;the upper bound string (with &quot;*&quot; representing the unbounded value)."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="typedElementDefinitionTypeDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The type of a typed element definition is the single classifier referent&#xA;of the type name."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="typedElementDefinitionTypeName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The type name of a typed element definition must have a single classifier&#xA;referent. This referent may not be a template."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The string image of the literal given to specify the lower bound of the&#xA;multiplicity of the element being defined."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="upperBound" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" defaultValueLiteral="1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The string image of the literal given to specify the upper bound of the&#xA;multiplicity of the element being defined."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isOrdered" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the element being defined is ordered."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isNonunique" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the element being defined is non-unique."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isSequence" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the element being defined is a sequence (and hence both ordered&#xA;and non-unique)."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="typeName" eType="#//QualifiedName"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The name of the type of the element being defined."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="actualType" eType="#//ElementReference"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAny" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the element being defined has an empty type."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isMultiplicity" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the element being defined has multiplicity specified as 0..*&#xA;using the shortand multiplicity indicator &quot;[]&quot;."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="DataTypeDefinition" eSuperTypes="#//ClassifierDefinition">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The definition of a data type, whose members must all be properties."/>
+ </eAnnotations>
+ <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Returns true if the given unit definition matches this data type definition&#xA;considered as a classifier definition and the subunit is for a data type&#xA;definition."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="In addition to the annotations allowed for classifiers in general, a data type&#xA;definition allows @primitive annotations plus any stereotype whose metaclass is consistent with DataType."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Return true if the given member is either a DataTypeDefinition or an imported member&#xA;whose referent is a DataTypeDefinition or a DataType."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="member.isDataType()"/>
+ </eAnnotations>
+ <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
+ </eOperations>
+ <eOperations name="dataTypeDefinitionPrimitive" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a data type is primitive, then it may not have any owned members."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="The specialization referents of a data type definition must all be data types."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The definition of a package, all of whose members must be packageable elements."/>
+ </eAnnotations>
+ <eOperations name="allowPackageOnly" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="false"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="In addition to the annotations allowed on any namespace definition, a package definition&#xA;allows @apply annotations plus any stereotype whose metaclass is consistent with Package."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Returns true of the namespace definition associated with the given unit definition is a package definition."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="unit.definition.oclIsKindOf(PackageDefinition)"/>
+ </eAnnotations>
+ <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
+ </eOperations>
+ <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Return true if the given member is either a PackageDefinition or an imported member whose referent is a PackageDefinition or a Package."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="member.isPackage()"/>
+ </eAnnotations>
+ <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
+ </eOperations>
+ <eOperations name="packageDefinitionAppliedProfileDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The applied profiles of a package definition are the profiles listed in any @apply annotations on the package."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="appliedProfiles" ordered="false" upperBound="-1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Return all profiles applied in this package, any containing package or in the model scope."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.appliedProfile->union(self.NamespaceDefinition_appliedProfiles())"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="appliedProfile" ordered="false"
+ upperBound="-1" eType="#//ElementReference" volatile="true" transient="true"
+ derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The profiles applied (directly) to this package."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A typed element definition for a property (attribute or association end)."/>
+ </eAnnotations>
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="Set(AssignedSource){}"/>
+ </eAnnotations>
+ <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
+ </eOperations>
+ <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Returns true if the annotation is for a stereotype that has a metaclass&#xA;consistent with Property."/>
+ </eAnnotations>
+ <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/GenModel">
+ <details key="documentation" value="Return true if the given member is either a PropertyDefinition or an&#xA;imported member whose referent is a PropertyDefinition or a Property."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="member.isProperty()"/>
+ </eAnnotations>
+ <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
+ </eOperations>
+ <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="true"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="propertyDefinitionInitializer" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If a property definition has an initializer, then the initializer expression&#xA;must be assignable to the property definition. There are no assignments before&#xA;an initializer expression.&#xA;(See also assignmentsBefore(element) operation.)"/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A property definition requires collection conversion if its initializer has&#xA;a collection class as its type and the property definition does not."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="propertyDefinitionIsBitStringConversionDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A property definition requires BitString conversion if its type is BitString and&#xA;the type of its initializer is Integer or a collection class whose argument type is Integer."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="propertyDefinitionIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A property definition is a feature."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isComposite" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the property being defined has composite aggregation."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="initializer" eType="#//Expression"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The expression to be evaluated to initialize the property."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isCollectionConversion"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"
+ transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether collection conversion is required for the initialization of this property."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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/GenModel">
+ <details key="documentation" value="Whether BitString conversion is required for the initialization of this property."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value=""/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SignalDefinition" eSuperTypes="#//ClassifierDefinition">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The definition of a signal, whose members must all be properties."/>
+ </eAnnotations>
+ <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Returns true if the given unit definition matches this signal definition considered&#xA;as a classifier definition and the subunit is for a signal definition."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="In addition to the annotations allowed for classifiers in general, a signal definition&#xA;allows an annotation for any stereotype whose metaclass is consistent with Signal."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Return true if the given member is either a SignalDefinition or an imported member&#xA;whose referent is a SignalDefinition or a Signal (where signal reception definitions are&#xA;considered to be kinds of signal definitions)."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="member.isSignal()"/>
+ </eAnnotations>
+ <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
+ </eOperations>
+ <eOperations name="signalDefinitionSpecializationReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The specialization referents of a signal definition must all be signals."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The definition of an active class."/>
+ </eAnnotations>
+ <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Returns true if the given unit definition matches this active class definition&#xA;considered as a class definition and the subunit is for an active class definition."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="If an active class definition is not abstract, then it must have a classifier behavior."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The definition of an activity (which may be a stub) to act as the classifier behavior of the active class."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ActivityDefinition" eSuperTypes="#//ClassifierDefinition">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The definition of an activity, with any formal parameters defined as owned members."/>
+ </eAnnotations>
+ <eOperations name="assignmentsBefore" ordered="false" upperBound="-1" eType="#//AssignedSource">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The assignments before the body of an activity definition include an&#xA;assigned source for each parameter of the activity definition. The&#xA;source for out parameters is actually null, however, to indicate that it&#xA;has not been assigned yet (but that the name should not otherwise be used&#xA;as a local name)."/>
+ </eAnnotations>
+ <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; )->asSet()&#xA; endif"/>
+ </eAnnotations>
+ <eParameters name="element" lowerBound="1" eType="#//SyntaxElement"/>
+ </eOperations>
+ <eOperations name="outerScope" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="This is necessary because, for Xtext parsing, ActiveClassDefinition::classifierBehavior is&#xA;composite and the classifierBehavior is not also added as a member of its active class."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="In addition to the annotations allowed for classifiers in general, an activity definition allows&#xA;@primitive annotations and any stereotype whose metaclass is consistent with Activity."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Returns true if the given unit definition matches this activity definition considered&#xA;as a classifier definition and the subunit is for an activity definition. In addition,&#xA;the subunit definition must have formal parameters that match each of the formal parameters&#xA;of the stub definition, in order. Two formal parameters match if they have the same&#xA;direction, name, multiplicity bounds, ordering, uniqueness and type reference."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Return true if the given member is either an ActivityDefinition or an&#xA;imported member whose referent is an ActivityDefinition or an Activity."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="member.isActivity()"/>
+ </eAnnotations>
+ <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
+ </eOperations>
+ <eOperations name="activityDefinitionSpecialization" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An activity definition may not have a specialization list."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="If an activity definition is primitive, then it must have a body that is empty."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The sequence of statements that defines the behavior of the activity (empty for a stub)."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ElementImportReference" eSuperTypes="#//ImportReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An import reference to a single element to be imported into a unit."/>
+ </eAnnotations>
+ <eOperations name="importedMembers" ordered="false" upperBound="-1" eType="#//Member">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Return the set of all imported members."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="The referent of an element import reference must be a packageable element."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The alias to be used as the name for the imported element in the importing unit?s namespace."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SignalReceptionDefinition" eSuperTypes="#//SignalDefinition">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The definition of both a signal and a reception of that signal as a feature of the containing active class."/>
+ </eAnnotations>
+ <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="true"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="signalReceptionDefinitionIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A signal reception definition is a feature."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="EnumerationDefinition" eSuperTypes="#//ClassifierDefinition">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The definition of an enumeration, whose members must all be enumeration literal names."/>
+ </eAnnotations>
+ <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Returns true if the given unit definition matches this enumeration definition considered&#xA;as a classifier definition and the subunit is for an enumeration definition."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="In addition to the annotations allowed for classifiers in general, an enumeration definition&#xA;allows an annotation for any stereotype whose metaclass is consistent with Enumeration."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Return true if the given member is either an EnumerationDefinition or an imported member&#xA;whose referent is an EnumerationDefinition or an Enumeration."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="member.isEnumeration()"/>
+ </eAnnotations>
+ <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
+ </eOperations>
+ <eOperations name="enumerationDefinitionSpecializationReferent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The specialization referents of an enumeration definition must all be enumerations."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An import reference to a package all of whose public members are to be imported."/>
+ </eAnnotations>
+ <eOperations name="importedMembers" ordered="false" upperBound="-1" eType="#//Member">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Return the visible members of the referent package."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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; )->asSet()&#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/GenModel">
+ <details key="documentation" value="The referent of a package import must be a package."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The definition of a classifier template parameter, which acts as a classifier within the definition of the template."/>
+ </eAnnotations>
+ <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Annotations are not allowed on classifier template parameters."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="false"/>
+ </eAnnotations>
+ <eParameters name="annotation" lowerBound="1" eType="#//StereotypeAnnotation"/>
+ </eOperations>
+ <eOperations name="matchForStub" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Returns false. (Classifier template parameters cannot be stubs.)"/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="not self.isStub"/>
+ </eAnnotations>
+ <eParameters name="unit" lowerBound="1" eType="#//UnitDefinition"/>
+ </eOperations>
+ <eOperations name="isSameKindAs" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Return true if the given member is a classifier template parameter."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="member.isClassifierTemplateParameter()"/>
+ </eAnnotations>
+ <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
+ </eOperations>
+ <eOperations name="matches" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Two template parameters match if they have same names and the same&#xA;specialization referents."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A typed element definition for the formal parameter of an activity or operation."/>
+ </eAnnotations>
+ <eOperations name="currentScope" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The current scope for a formal parameter is the outer scope&#xA;of the namespace definition that owns it."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.oclContainer().oclContainer().oclAsType(NamespaceDefinition).toReference()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Returns true if the annotation is for a stereotype that has a metaclass consistent with Parameter."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Return true if the given member is a FormalParameter."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="member.isParameter()"/>
+ </eAnnotations>
+ <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
+ </eOperations>
+ <eOperations name="matches" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Two formal parameters match if they have the same direction, name,&#xA;multiplicity bounds, ordering, uniqueness and type reference."/>
+ </eAnnotations>
+ <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://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An indication of the direction of the parameter being defined."/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="ReceptionDefinition"/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="ReceptionDefinition"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="typePart" eType="#//TypedElementDefinition"
+ containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value=""/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ReceptionDefinition" eSuperTypes="#//MemberDefinition">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The declaration of the ability of an active class to receive a signal."/>
+ </eAnnotations>
+ <eOperations name="actualName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="self.signalName.unqualifiedName.toName()"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="annotationAllowed" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Returns true if the annotation is for a stereotype that has a metaclass consistent with Reception."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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/GenModel">
+ <details key="documentation" value="Return true if the given member is either a ReceptionDefinition, a SignalReceptionDefinition or an&#xA;imported member whose referent is a ReceptionDefinition, a SignalReceptionDefinition or a Reception."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="member.isReception()"/>
+ </eAnnotations>
+ <eParameters name="member" lowerBound="1" eType="#//ElementReference"/>
+ </eOperations>
+ <eOperations name="isFeature" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="true"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="receptionDefinitionSignalName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The signal name for a reception definition must have a single referent that is a signal. This referent must not be a template."/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The signal for a reception definition is the signal referent of the signal name for the reception definition."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eOperations name="receptionDefinitionIsFeatureDerivation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A reception definition is a feature."/>
+ </eAnnotations>
+ <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+ <eParameters name="context">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ </eGenericType>
+ </eParameters>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="signalName" lowerBound="1"
+ eType="#//QualifiedName" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The name of the signal to be received."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="signal" eType="#//ElementReference"
+ volatile="true" transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value=""/>
+ </eAnnotations>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="derivation" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value=""/>
+ </eAnnotations>
+ <eOperations name="toReference" lowerBound="1" eType="#//ElementReference">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="&#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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value=""/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="visibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An indication of the visibility of the member outside of its namespace."/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="AnnotatedStatement"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="namespace" eType="#//NamespaceDefinition"
+ eOpposite="#//NamespaceDefinition/ownedMember">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The namespace definition within which this member definition is nested, if any.&#xA;(The namespace definitions for units are not physically nested within another&#xA;Alf namespace definition.)"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="annotation" ordered="false"
+ upperBound="-1" eType="#//StereotypeAnnotation" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The stereotype annotations on this member definition."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="AnnotatedStatement" eSuperTypes="#//DocumentedElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value=""/>
+ </eAnnotations>
+ <eOperations name="annotations" ordered="false" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="External"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="annotation" ordered="false"
+ upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The annotations applied to this statement."/>
+ </eAnnotations>
+ <eAnnotations source="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName">
+ <details key="body" value="BoundClassifier"/>
+ <details key="unique" value="false"/>
+ <details key="upper" value="*"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="statement" lowerBound="1"
+ eType="#//Statement" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value=""/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="BoundClassifier" eSuperTypes="#//ClassifierDefinition">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A classifier resulting from the binding of a template to its actual&#xA;parameters."/>
+ </eAnnotations>
+ <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">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A formal parameter representing a return parameter."/>
+ </eAnnotations>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="NonReturnParameter" eSuperTypes="#//FormalParameter">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A formal parameter representing a parameter that is not a return parameter."/>
+ </eAnnotations>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="AnyType" eSuperTypes="#//ClassifierDefinition">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A classifier representing the null &quot;any&quot; type in a list of&#xA;template paraemter actuals."/>
+ </eAnnotations>
+ <eOperations name="actualName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+ <details key="body" value="'any'"/>
+ </eAnnotations>
+ </eOperations>
+ </eClassifiers>
+</ecore:EPackage>

Back to the top