diff --git a/plugins/org.etsi.mts.tdl.model/model/tdl.ecore b/plugins/org.etsi.mts.tdl.model/model/tdl.ecore index 7a9763eb4849982510f66e3e50f3b0a9e5a7ff0e..652feee43f142fb8ed2cb616427ff633e4ab24f1 100644 --- a/plugins/org.etsi.mts.tdl.model/model/tdl.ecore +++ b/plugins/org.etsi.mts.tdl.model/model/tdl.ecore @@ -7,6 +7,16 @@ <details key="validationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/> </eAnnotations> <eClassifiers xsi:type="ecore:EClass" name="Element" abstract="true"> + <eOperations name="container" eType="#//Element"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
			if (not self.oclContainer().oclIsUndefined()) then
				self.oclContainer().oclAsType(Element)
			else 
				null
			endif"/> + </eAnnotations> + </eOperations> + <eOperations name="getParentTestDescription" eType="#//TestDescription"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="	
			if (not self.container().oclIsUndefined()) then
				if (self.container().oclIsKindOf(TestDescription)) then
					self.container().oclAsType(TestDescription)
				else
					self.container().getParentTestDescription()
				endif
			else 
				null
			endif"/> + </eAnnotations> + </eOperations> <eStructuralFeatures xsi:type="ecore:EReference" name="comment" upperBound="-1" eType="#//Comment" containment="true" eOpposite="#//Comment/commentedElement"/> <eStructuralFeatures xsi:type="ecore:EReference" name="annotation" upperBound="-1" @@ -24,9 +34,19 @@ <eStructuralFeatures xsi:type="ecore:EReference" name="annotatedElement" lowerBound="1" eType="#//Element" eOpposite="#//Element/annotation"/> </eClassifiers> - <eClassifiers xsi:type="ecore:EClass" name="AnnotationType" eSuperTypes="#//PackageableElement"/> + <eClassifiers xsi:type="ecore:EClass" name="AnnotationType" eSuperTypes="#//PackageableElement"> + <eStructuralFeatures xsi:type="ecore:EReference" name="extension" eType="#//Extension" + containment="true"/> + </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="PackageableElement" abstract="true" - eSuperTypes="#//NamedElement"/> + eSuperTypes="#//NamedElement"> + <eOperations name="conformsTo" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBooleanObject"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
			if (self.oclIsKindOf(AnnotationType)) then
				self.oclAsType(AnnotationType).extension.extending(e)
			else
				if (self.oclIsKindOf(ComponentType)) then
					self.oclAsType(AnnotationType).extension.extending(e)
				else
					if (self.oclIsKindOf(GateType)) then
						self.oclAsType(GateType).extension.extending(e)
					else
						if (self.oclIsKindOf(GateType)) then
							self.oclAsType(StructuredDataType).extension.extending(e)
						else
							false
						endif
					endif
				endif
			endif
			"/> + </eAnnotations> + <eParameters name="e" eType="#//PackageableElement"/> + </eOperations> + </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="NamedElement" abstract="true" eSuperTypes="#//Element"> <eStructuralFeatures xsi:type="ecore:EAttribute" name="qualifiedName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" changeable="false" @@ -86,6 +106,16 @@ <eClassifiers xsi:type="ecore:EClass" name="SimpleDataType" eSuperTypes="#//DataType"/> <eClassifiers xsi:type="ecore:EClass" name="SimpleDataInstance" eSuperTypes="#//DataInstance"/> <eClassifiers xsi:type="ecore:EClass" name="StructuredDataType" eSuperTypes="#//DataType"> + <eOperations name="allMembers" upperBound="-1" eType="#//Member"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
			if (not self.extension.oclIsUndefined()) then
 self.extension.extending.oclAsType(StructuredDataType).allMembers()->union(self.member)->asOrderedSet()
			else 
				self.member
			endif
			"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/OCL/Collection"> + <details key="nullFree" value="false"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="extension" eType="#//Extension" + containment="true"/> <eStructuralFeatures xsi:type="ecore:EReference" name="member" upperBound="-1" eType="#//Member" containment="true"/> </eClassifiers> @@ -106,6 +136,11 @@ </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="StaticDataUse" abstract="true" eSuperTypes="#//DataUse"/> <eClassifiers xsi:type="ecore:EClass" name="DataUse" abstract="true" eSuperTypes="#//Element"> + <eOperations name="resolveDataType" eType="#//DataType"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="null"/> + </eAnnotations> + </eOperations> <eStructuralFeatures xsi:type="ecore:EReference" name="argument" upperBound="-1" eType="#//ParameterBinding" containment="true"/> <eStructuralFeatures xsi:type="ecore:EReference" name="reduction" upperBound="-1" @@ -132,6 +167,11 @@ eType="#//DataType"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="FormalParameterUse" eSuperTypes="#//DynamicDataUse"> + <eOperations name="resolveDataType" eType="#//DataType"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.parameter.dataType"/> + </eAnnotations> + </eOperations> <eStructuralFeatures xsi:type="ecore:EReference" name="parameter" lowerBound="1" eType="#//FormalParameter"/> </eClassifiers> @@ -141,10 +181,20 @@ eType="#//DataType"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="FunctionCall" eSuperTypes="#//DynamicDataUse"> + <eOperations name="resolveDataType" eType="#//DataType"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.function.returnType"/> + </eAnnotations> + </eOperations> <eStructuralFeatures xsi:type="ecore:EReference" name="function" lowerBound="1" eType="#//Function"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="VariableUse" eSuperTypes="#//DynamicDataUse"> + <eOperations name="resolveDataType" eType="#//DataType"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="self.variable.dataType"/> + </eAnnotations> + </eOperations> <eStructuralFeatures xsi:type="ecore:EReference" name="componentInstance" lowerBound="1" eType="#//ComponentInstance"/> <eStructuralFeatures xsi:type="ecore:EReference" name="variable" lowerBound="1" @@ -155,21 +205,57 @@ <eStructuralFeatures xsi:type="ecore:EAttribute" name="role" lowerBound="1" eType="#//ComponentInstanceRole"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="ComponentType" eSuperTypes="#//PackageableElement"> + <eOperations name="allGates" upperBound="-1" eType="#//GateInstance"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
			if (not self.extension.oclIsUndefined()) then
 self.extension.extending.oclAsType(ComponentType).allGates()->union(self.gateInstance)->asOrderedSet()
			else 
				self.gateInstance
			endif
			"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/OCL/Collection"> + <details key="nullFree" value="false"/> + </eAnnotations> + </eOperations> + <eOperations name="allTimers" upperBound="-1" eType="#//Timer"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
			if (not self.extension.oclIsUndefined()) then
 self.extension.extending.oclAsType(ComponentType).allTimers()->union(self.timer)->asOrderedSet()
			else 
				self.timer
			endif
			"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/OCL/Collection"> + <details key="nullFree" value="false"/> + </eAnnotations> + </eOperations> + <eOperations name="allVariables" upperBound="-1" eType="#//Variable"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
			if (not self.extension.oclIsUndefined()) then
 self.extension.extending.oclAsType(ComponentType).allVariables()->union(self.variable)->asOrderedSet()
			else 
				self.variable
			endif
			"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/OCL/Collection"> + <details key="nullFree" value="false"/> + </eAnnotations> + </eOperations> <eStructuralFeatures xsi:type="ecore:EReference" name="gateInstance" lowerBound="1" upperBound="-1" eType="#//GateInstance" containment="true"/> - <eStructuralFeatures xsi:type="ecore:EReference" name="timer" ordered="false" - upperBound="-1" eType="#//Timer" containment="true"/> - <eStructuralFeatures xsi:type="ecore:EReference" name="variable" ordered="false" - upperBound="-1" eType="#//Variable" containment="true"/> + <eStructuralFeatures xsi:type="ecore:EReference" name="timer" upperBound="-1" + eType="#//Timer" containment="true"/> + <eStructuralFeatures xsi:type="ecore:EReference" name="variable" upperBound="-1" + eType="#//Variable" containment="true"/> + <eStructuralFeatures xsi:type="ecore:EReference" name="extension" eType="#//Extension" + containment="true"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="GateInstance" eSuperTypes="#//NamedElement"> <eStructuralFeatures xsi:type="ecore:EReference" name="type" lowerBound="1" eType="#//GateType"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="GateType" eSuperTypes="#//PackageableElement"> - <eStructuralFeatures xsi:type="ecore:EReference" name="dataType" ordered="false" - lowerBound="1" upperBound="-1" eType="#//DataType"/> + <eOperations name="allDataTypes" upperBound="-1" eType="#//DataType"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
			if (not self.extension.oclIsUndefined()) then
 self.extension.extending.oclAsType(GateType).allDataTypes()->union(self.dataType)->asOrderedSet()
			else 
				self.dataType
			endif
			"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/OCL/Collection"> + <details key="nullFree" value="false"/> + </eAnnotations> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="dataType" lowerBound="1" + upperBound="-1" eType="#//DataType"/> <eStructuralFeatures xsi:type="ecore:EAttribute" name="kind" lowerBound="1" eType="#//GateTypeKind" defaultValueLiteral="Message"/> + <eStructuralFeatures xsi:type="ecore:EReference" name="extension" eType="#//Extension" + containment="true"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="Timer" eSuperTypes="#//NamedElement"/> <eClassifiers xsi:type="ecore:EEnum" name="ComponentInstanceRole"> @@ -177,12 +263,23 @@ <eLiterals name="Tester" value="1"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="OmitValue" eSuperTypes="#//SpecialValueUse"/> - <eClassifiers xsi:type="ecore:EClass" name="SpecialValueUse" abstract="true" eSuperTypes="#//StaticDataUse"/> + <eClassifiers xsi:type="ecore:EClass" name="SpecialValueUse" abstract="true" eSuperTypes="#//StaticDataUse"> + <eOperations name="resolveDataType" eType="#//DataType"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
					if (self.container().oclIsTypeOf(MemberAssignment)) then
						self.container().oclAsType(MemberAssignment).member.dataType
					else 
						if (self.container().oclIsTypeOf(ParameterBinding)) then
							self.container().oclAsType(ParameterBinding).parameter.dataType
						else 
							if (self.container().oclIsTypeOf(Interaction) and 
								self.oclIsTypeOf(AnyValue)) then
								self.oclAsType(AnyValue).dataType
							else
								null
							endif
						endif
					endif
				"/> + </eAnnotations> + </eOperations> + </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="AnyValue" eSuperTypes="#//SpecialValueUse"> <eStructuralFeatures xsi:type="ecore:EReference" name="dataType" eType="#//DataType"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="AnyValueOrOmit" eSuperTypes="#//SpecialValueUse"/> <eClassifiers xsi:type="ecore:EClass" name="DataInstanceUse" eSuperTypes="#//StaticDataUse"> + <eOperations name="resolveDataType" eType="#//DataType"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
				if (not self.dataInstance.oclIsUndefined()) then
					self.dataInstance.dataType
				else 
					if (not self.dataType.oclIsUndefined()) then
						self.dataType
					else 
						if (self.container().oclIsTypeOf(MemberAssignment)) then
							self.container().oclAsType(MemberAssignment).member.dataType
						else 
							if (self.container().oclIsTypeOf(ParameterBinding)) then
								self.container().oclAsType(ParameterBinding).parameter.dataType
							else
								null
							endif
						endif
					endif
				endif
				"/> + </eAnnotations> + </eOperations> <eStructuralFeatures xsi:type="ecore:EReference" name="dataInstance" eType="#//DataInstance"/> <eStructuralFeatures xsi:type="ecore:EAttribute" name="unassignedMember" eType="#//UnassignedMemberTreatment"/> <eStructuralFeatures xsi:type="ecore:EReference" name="dataType" eType="#//DataType"/> @@ -195,12 +292,25 @@ eType="#//ComponentInstance"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="AtomicBehaviour" abstract="true" eSuperTypes="#//Behaviour"> + <eOperations name="getParticipatingComponents" upperBound="-1" eType="#//ComponentInstance"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
					OrderedSet{}
				"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/OCL/Collection"> + <details key="nullFree" value="false"/> + </eAnnotations> + </eOperations> <eStructuralFeatures xsi:type="ecore:EReference" name="timeConstraint" ordered="false" upperBound="-1" eType="#//TimeConstraint" containment="true"/> <eStructuralFeatures xsi:type="ecore:EReference" name="timeLabel" eType="#//TimeLabel" containment="true"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="Behaviour" abstract="true" eSuperTypes="#//Element"> + <eOperations name="isTesterInputEvent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBooleanObject"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
				if (self.oclIsKindOf(TimeOut) or 
					self.oclIsKindOf(Quiescence) or
					(self.oclIsKindOf(Interaction) and
						self.oclAsType(Interaction).sourceGate.component.role = ComponentInstanceRole::SUT and
					self.oclAsType(Interaction).target->exists(t | t.targetGate.component.role = ComponentInstanceRole::Tester)
					)
				) then
					true
				else
					false
				endif"/> + </eAnnotations> + </eOperations> <eStructuralFeatures xsi:type="ecore:EReference" name="testObjective" ordered="false" upperBound="-1" eType="#//TestObjective"/> </eClassifiers> @@ -229,6 +339,11 @@ <eStructuralFeatures xsi:type="ecore:EReference" name="gate" lowerBound="1" eType="#//GateInstance"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="TimeLabelUse" eSuperTypes="#//DynamicDataUse"> + <eOperations name="resolveDataType" eType="#//DataType"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="Time.allInstances()->asOrderedSet()->first()"/> + </eAnnotations> + </eOperations> <eStructuralFeatures xsi:type="ecore:EReference" name="timeLabel" lowerBound="1" eType="#//TimeLabel"/> <eStructuralFeatures xsi:type="ecore:EAttribute" name="kind" lowerBound="1" eType="#//TimeLabelUseKind" @@ -261,6 +376,14 @@ eType="#//Behaviour" containment="true"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="Block" eSuperTypes="#//Element"> + <eOperations name="getParticipatingComponents" upperBound="-1" eType="#//ComponentInstance"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
					self.getParentTestDescription().testConfiguration.componentInstance->asOrderedSet()
				"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/OCL/Collection"> + <details key="nullFree" value="false"/> + </eAnnotations> + </eOperations> <eStructuralFeatures xsi:type="ecore:EReference" name="behaviour" lowerBound="1" upperBound="-1" eType="#//Behaviour" containment="true"/> <eStructuralFeatures xsi:type="ecore:EReference" name="guard" upperBound="-1" @@ -300,6 +423,7 @@ <eStructuralFeatures xsi:type="ecore:EReference" name="block" lowerBound="1" eType="#//Block" containment="true"/> </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="OptionalBehaviour" eSuperTypes="#//SingleCombinedBehaviour"/> <eClassifiers xsi:type="ecore:EClass" name="UnboundedLoopBehaviour" eSuperTypes="#//SingleCombinedBehaviour"/> <eClassifiers xsi:type="ecore:EClass" name="ConditionalBehaviour" eSuperTypes="#//MultipleCombinedBehaviour"/> <eClassifiers xsi:type="ecore:EClass" name="CompoundBehaviour" eSuperTypes="#//SingleCombinedBehaviour"/> @@ -316,6 +440,14 @@ </eStructuralFeatures> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="VerdictAssignment" eSuperTypes="#//AtomicBehaviour"> + <eOperations name="getParticipatingComponents" upperBound="-1" eType="#//ComponentInstance"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
					self.getParentTestDescription().testConfiguration.componentInstance->asOrderedSet()
				"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/OCL/Collection"> + <details key="nullFree" value="false"/> + </eAnnotations> + </eOperations> <eStructuralFeatures xsi:type="ecore:EReference" name="verdict" lowerBound="1" eType="#//DataUse" containment="true"/> </eClassifiers> @@ -325,8 +457,26 @@ <eStructuralFeatures xsi:type="ecore:EReference" name="condition" lowerBound="1" eType="#//DataUse" containment="true"/> </eClassifiers> - <eClassifiers xsi:type="ecore:EClass" name="Stop" eSuperTypes="#//AtomicBehaviour"/> - <eClassifiers xsi:type="ecore:EClass" name="Break" eSuperTypes="#//AtomicBehaviour"/> + <eClassifiers xsi:type="ecore:EClass" name="Stop" eSuperTypes="#//AtomicBehaviour"> + <eOperations name="getParticipatingComponents" upperBound="-1" eType="#//ComponentInstance"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
					self.getParentTestDescription().testConfiguration.componentInstance->asOrderedSet()
				"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/OCL/Collection"> + <details key="nullFree" value="false"/> + </eAnnotations> + </eOperations> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="Break" eSuperTypes="#//AtomicBehaviour"> + <eOperations name="getParticipatingComponents" upperBound="-1" eType="#//ComponentInstance"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
					self.getParentTestDescription().testConfiguration.componentInstance->asOrderedSet()
				"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/OCL/Collection"> + <details key="nullFree" value="false"/> + </eAnnotations> + </eOperations> + </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="Assignment" eSuperTypes="#//ActionBehaviour"> <eStructuralFeatures xsi:type="ecore:EReference" name="variable" lowerBound="1" eType="#//VariableUse" containment="true"/> @@ -334,6 +484,14 @@ eType="#//DataUse" containment="true"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="ActionBehaviour" abstract="true" eSuperTypes="#//AtomicBehaviour"> + <eOperations name="getParticipatingComponents" upperBound="-1" eType="#//ComponentInstance"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
					if (not self.componentInstance.oclIsUndefined()) then
						OrderedSet{self.componentInstance}
					else
						self.getParentTestDescription().testConfiguration.componentInstance->asOrderedSet()
					endif
				"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/OCL/Collection"> + <details key="nullFree" value="false"/> + </eAnnotations> + </eOperations> <eStructuralFeatures xsi:type="ecore:EReference" name="componentInstance" eType="#//ComponentInstance"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="InlineAction" eSuperTypes="#//ActionBehaviour"> @@ -346,6 +504,14 @@ eType="#//ParameterBinding" containment="true"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="TestDescriptionReference" eSuperTypes="#//AtomicBehaviour"> + <eOperations name="getParticipatingComponents" upperBound="-1" eType="#//ComponentInstance"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
					self.getParentTestDescription().testConfiguration.componentInstance->asOrderedSet()
				"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/OCL/Collection"> + <details key="nullFree" value="false"/> + </eAnnotations> + </eOperations> <eStructuralFeatures xsi:type="ecore:EReference" name="testDescription" lowerBound="1" eType="#//TestDescription"/> <eStructuralFeatures xsi:type="ecore:EReference" name="componentInstanceBinding" @@ -360,6 +526,14 @@ eType="#//ComponentInstance"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="Interaction" eSuperTypes="#//AtomicBehaviour"> + <eOperations name="getParticipatingComponents" upperBound="-1" eType="#//ComponentInstance"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
					self.target
						->collect(targetGate.component)
						->including(sourceGate.component)
						->asOrderedSet()
				"/> + </eAnnotations> + <eAnnotations source="http://www.eclipse.org/OCL/Collection"> + <details key="nullFree" value="false"/> + </eAnnotations> + </eOperations> <eStructuralFeatures xsi:type="ecore:EReference" name="sourceGate" lowerBound="1" eType="#//GateReference"/> <eStructuralFeatures xsi:type="ecore:EReference" name="target" ordered="false" @@ -443,4 +617,23 @@ </eAnnotations> </eStructuralFeatures> </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="Extension" eSuperTypes="#//Element"> + <eOperations name="transitiveExtending" eType="#//Extension"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
				if (self.extending.oclIsKindOf(AnnotationType)) then
					self.extending.oclAsType(AnnotationType).extension
				else
					if (self.extending.oclIsKindOf(ComponentType)) then
						self.extending.oclAsType(AnnotationType).extension
					else
						if (self.extending.oclIsKindOf(GateType)) then
							self.extending.oclAsType(GateType).extension
						else
							if (self.extending.oclIsKindOf(GateType)) then
								self.extending.oclAsType(StructuredDataType).extension
							else
								null
							endif
						endif
					endif
				endif
				"/> + </eAnnotations> + </eOperations> + <eOperations name="extending" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBooleanObject"> + <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> + <details key="body" value="
				if (self.extending = e) then
				 true
				else
					if (self->closure(transitiveExtending())->includes(e)) then
						true
	 	else
	 		false
	 	endif 
				endif
				"/> + </eAnnotations> + <eParameters name="e" eType="#//PackageableElement"/> + </eOperations> + <eStructuralFeatures xsi:type="ecore:EReference" name="extending" lowerBound="1" + eType="#//PackageableElement"/> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="LiteralValueUse" eSuperTypes="#//StaticDataUse"> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + <eStructuralFeatures xsi:type="ecore:EReference" name="dataType" eType="#//DataType"/> + </eClassifiers> </ecore:EPackage>