From f2a5093c703790389fa0e72bf7ab73e446440766 Mon Sep 17 00:00:00 2001 From: Ed Willink Date: Tue, 20 Sep 2016 15:44:53 +0100 Subject: [500369] Prepare for Mapping install --- .../model/QVTimperative.ecore | 131 ++++++++++++++++----- .../model/QVTimperative.genmodel | 37 ++++-- .../model/QVTimperative.ocl | 11 +- .../model/QVTimperativeCS.ecore | 62 +++++++--- .../model/QVTimperativeCS.genmodel | 40 +++++-- .../qvtd/xtext/qvtimperative/QVTimperative.xtext | 30 +++-- 6 files changed, 236 insertions(+), 75 deletions(-) (limited to 'plugins') diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/model/QVTimperative.ecore b/plugins/org.eclipse.qvtd.pivot.qvtimperative/model/QVTimperative.ecore index 7959d4ab3..374b32b52 100644 --- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/model/QVTimperative.ecore +++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/model/QVTimperative.ecore @@ -28,6 +28,23 @@
+ + +
+ + + +
+ + + + + +
+ + + -
@@ -57,6 +74,22 @@ + + +
+ + + +
+ + + + +
+ + +
@@ -71,6 +104,22 @@ + + +
+ + + +
+ + + + +
+ + + @@ -89,7 +138,7 @@
+ eType="#//MappingParameterBinding" containment="true" eOpposite="#//MappingParameterBinding/mappingCall">
@@ -100,33 +149,22 @@
- - -
- - - - - -
- - + -
+
- + -
+
- + -
+
@@ -147,6 +185,24 @@
+ + +
+ + + +
+ + + + +
+ + +
@@ -167,13 +223,6 @@ - - -
- - - @@ -193,6 +242,30 @@ eType="ecore:EClass ../../org.eclipse.ocl.pivot/model/Pivot.ecore#//OCLExpression" containment="true"/> + + +
+ + + + + +
+ + + +
+ + + + +
+ + + diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/model/QVTimperative.genmodel b/plugins/org.eclipse.qvtd.pivot.qvtimperative/model/QVTimperative.genmodel index dc4f92475..563c52175 100644 --- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/model/QVTimperative.genmodel +++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/model/QVTimperative.genmodel @@ -24,22 +24,36 @@ + + + + + + - + + + + + + + + + @@ -50,19 +64,20 @@ + + - - - - - + + + + @@ -71,9 +86,6 @@ - - - @@ -81,6 +93,13 @@ + + + + + + + diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/model/QVTimperative.ocl b/plugins/org.eclipse.qvtd.pivot.qvtimperative/model/QVTimperative.ocl index a614fc482..1035f50b8 100644 --- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/model/QVTimperative.ocl +++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/model/QVTimperative.ocl @@ -31,7 +31,7 @@ def: referringNames : Set(String) = binding.boundVariable.name->asSet() inv MatchingCallBindings('Mismatched bindings ' + referredMapping.name + joinNames(referredNames) + ' <= ' + joinNames(referringNames)): referredNames = referringNames inv UniqueCallBindings: binding->isUnique(boundVariable) -context MappingCallBinding +context GuardParameterBinding inv CompatibleBinding: value.type.conformsTo(boundVariable.type) or boundVariable.type.conformsTo(value.type) endpackage @@ -65,8 +65,13 @@ inv NoRealizedVariableNavigations: ownedExpression->closure(oclContents())->sele --inv IsEnforced: let area = oclContainer().oclAsType(GuardPattern).area, mapping = area.mapping in -- if mapping.isToMiddle then area = mapping else area.oclAsType(CoreDomain).isEnforceable endif ---context PredicateVariable ---inv NoVariableAssignmentsInSourceDomain: not bottomPattern.area.isSource +context GuardParameterBinding +inv CheckedTypeIsNotConformant: isCheck implies not value.type.conformsTo(boundVariable.type) +inv UncheckedTypeIsConformant: not isCheck implies value.type.conformsTo(boundVariable.type) + +context SimpleParameterBinding +inv CheckedTypeIsNotConformant: isCheck implies not value.type.conformsTo(boundVariable.type) +inv UncheckedTypeIsConformant: not isCheck implies value.type.conformsTo(boundVariable.type) --inv CompatibleType: ownedInit.type.conformsTo(type) endpackage diff --git a/plugins/org.eclipse.qvtd.xtext.qvtimperative/model/QVTimperativeCS.ecore b/plugins/org.eclipse.qvtd.xtext.qvtimperative/model/QVTimperativeCS.ecore index 010854d25..fd1f8c120 100644 --- a/plugins/org.eclipse.qvtd.xtext.qvtimperative/model/QVTimperativeCS.ecore +++ b/plugins/org.eclipse.qvtd.xtext.qvtimperative/model/QVTimperativeCS.ecore @@ -8,7 +8,16 @@ + + + + + + + - @@ -27,10 +36,24 @@ + + + + + + + + + + @@ -39,20 +62,15 @@ - - - - - + + + upperBound="-1" eType="#//MappingParameterBindingCS" containment="true" eOpposite="#//MappingParameterBindingCS/owningMappingCall"/> + + + @@ -88,10 +111,6 @@ - - - + + + + + + + + + + + + + + + - + + + + + + + + + + + - - - - - + + @@ -57,6 +71,9 @@ + + + @@ -65,9 +82,6 @@ - - - @@ -82,6 +96,14 @@ + + + + + + + + diff --git a/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/QVTimperative.xtext b/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/QVTimperative.xtext index 85627360b..63de34ccc 100644 --- a/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/QVTimperative.xtext +++ b/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/QVTimperative.xtext @@ -27,7 +27,11 @@ TopLevelCS: AddStatementCS: ('observe' observedProperties+=PathNameCS (',' observedProperties+=PathNameCS)*)? 'add' targetVariable=[qvtimperative::ConnectionVariable|UnrestrictedName] '+=' ownedExpression=ExpCS ';'; +AppendParameterBindingCS: referredVariable=[qvtimperative::AppendParameter|UnrestrictedName] 'appendsTo' value=[qvtimperative::ConnectionVariable|UnrestrictedName] ';'; + AppendParameterCS: 'append' name=UnrestrictedName ':' ownedType=TypeExpCS ';'; + +BufferStatementCS: 'buffer' name=UnrestrictedName (':' ownedType=TypeExpCS)? (':=' ownedExpression=ExpCS)? ';'; CommitStatementCS returns StatementCS: NewStatementCS | SetStatementCS; @@ -36,19 +40,23 @@ CheckStatementCS: 'check' ownedCondition=ExpCS ';'; ControlStatementCS returns MappingStatementCS: AddStatementCS | MappingCallCS | MappingLoopCS; DeclareStatementCS: ('observe' observedProperties+=PathNameCS (',' observedProperties+=PathNameCS)*)? - isChecked?='check'? 'var' name=UnrestrictedName (':' ownedType=TypeExpCS)? ':=' ownedExpression=ExpCS ';'; + isCheck?='check'? 'var' name=UnrestrictedName (':' ownedType=TypeExpCS)? ':=' ownedExpression=ExpCS ';'; DirectionCS: {DirectionCS} (isChecked?='check'|isEnforced?='enforce')? name=UnrestrictedName? 'imports' imports+=[pivot::Package|UnrestrictedName] (',' imports+=[pivot::Package|UnrestrictedName])* ; -GuardParameterCS: 'in' ':' referredTypedModel=[qvtimperative::ImperativeTypedModel|UnrestrictedName] name=UnrestrictedName ':' ownedType=TypeExpCS ';'; +GuardParameterBindingCS: isCheck?='check'? referredVariable=[qvtimperative::GuardParameter|UnrestrictedName] 'consumes' value=[qvtimperative::ConnectionVariable|UnrestrictedName] ';'; + +GuardParameterCS: 'guard' ':' referredTypedModel=[qvtimperative::ImperativeTypedModel|UnrestrictedName] name=UnrestrictedName ':' ownedType=TypeExpCS ';'; -GuardStatementCS returns StatementCS: OutVariableCS | DeclareStatementCS | DeclareStatementCS | CheckStatementCS; +GuardStatementCS returns StatementCS: BufferStatementCS | DeclareStatementCS | DeclareStatementCS | CheckStatementCS; ImportCS returns base::ImportCS: 'import' (name=Identifier ':')? ownedPathName=URIPathNameCS (isAll?='::' '*')? ';'; +LoopParameterBindingCS: isCheck?='check'? referredVariable=[qvtimperative::GuardParameter|UnrestrictedName] 'iterates' value=[qvtimperative::LoopVariable|UnrestrictedName] ';'; + MappingCS: {MappingCS} 'map' name=UnrestrictedName ('in' ownedInPathName=PathNameCS)? '{' ownedParameters+=MappingParameterCS* @@ -57,24 +65,22 @@ MappingCS: {MappingCS} 'map' name=UnrestrictedName ('in' ownedInPathName=PathNam ownedStatements+=ControlStatementCS* '}'; -MappingCallCS: {MappingCallCS} isInfinite?='infinite'? 'call' ownedPathName=PathNameCS - '{' ownedBindings+=MappingCallBindingCS* '}'; - -MappingCallBindingCS: referredVariable=[pivot::VariableDeclaration|UnrestrictedName] ':=' ownedValue=ExpCS ';'; +MappingCallCS: {MappingCallCS} isInfinite?='infinite'? ('call'|isInstall?='install'|isInvoke?='invoke') ownedPathName=PathNameCS + '{' ownedBindings+=MappingParameterBindingCS* '}'; MappingLoopCS: ('observe' observedProperties+=PathNameCS (',' observedProperties+=PathNameCS)*)? 'for' ownedIterator=MappingIteratorCS 'in' ownedInExpression=ExpCS '{' ownedMappingStatements+=ControlStatementCS+ '}'; MappingIteratorCS returns essentialocl::VariableCS: name=UnrestrictedName (':' ownedType=TypeExpCS)?; -MappingParameterCS: GuardParameterCS | AppendParameterCS; +MappingParameterBindingCS: AppendParameterBindingCS | GuardParameterBindingCS | LoopParameterBindingCS | SimpleParameterBindingCS; + +MappingParameterCS: AppendParameterCS | GuardParameterCS | SimpleParameterCS; NewStatementCS: ('observe' observedProperties+=PathNameCS (',' observedProperties+=PathNameCS)*)? 'new' ':' referredTypedModel=[qvtimperative::ImperativeTypedModel|UnrestrictedName] name=UnrestrictedName ':' ownedType=TypeExpCS (':=' ownedExpression=ExpCS)? ';' ; -OutVariableCS: 'out' name=UnrestrictedName ':' ownedType=TypeExpCS (':=' ownedExpression=ExpCS)? ';'; - ParamDeclarationCS: name=UnrestrictedName ':' ownedType=TypeExpCS; QualifiedPackageCS returns qvtbasecs::QualifiedPackageCS: @@ -95,6 +101,10 @@ ScopeNameCS returns base::PathNameCS: SetStatementCS: ('observe' observedProperties+=PathNameCS (',' observedProperties+=PathNameCS)*)? (isNotify?='notify')? 'set' referredVariable=[pivot::VariableDeclaration|UnrestrictedName] '.' referredProperty=[pivot::Property|UnrestrictedName] ':=' ownedExpression=ExpCS ';'; + +SimpleParameterBindingCS: isCheck?='check'? referredVariable=[qvtimperative::SimpleParameter|UnrestrictedName] 'uses' ownedValue=ExpCS ';'; + +SimpleParameterCS: 'in' ':' referredTypedModel=[qvtimperative::ImperativeTypedModel|UnrestrictedName] name=UnrestrictedName ':' ownedType=TypeExpCS ';'; TransformationCS: 'transformation' ownedPathName=ScopeNameCS? name=UnreservedName '{' (ownedDirections+=DirectionCS ';')* '}'; -- cgit v1.2.3