| source qvtocs : 'QVTOperationalCS.ecore#/', |
| basecs : '/resource/org.eclipse.ocl.xtext.base/model/BaseCS.ecore#/' |
| target qvto: '/resource/org.eclipse.qvto.examples.pivot.qvtoperational/model/QVTOperational.ecore#/', |
| ocl: '/resource/org.eclipse.ocl.pivot/model/Pivot.ecore#/' |
| |
| -- NOT SUPPORTED YET extends '/resource/org.eclipse.ocl.xtext.base/model/BaseCS2AS.cs2as' |
| |
| mappings { |
| map ocl::Model from TopLevelCS { |
| ownedPackages := let dummyPackage = ocl::Package { |
| -- NOT SUPPORTED YET name = '', |
| -- NOT SUPPORTED YET ownedClasses = ownedTypes.ast().oclAsType(ocl::Class) -- FIXME |
| } in dummyPackage->includingAll(ownedPackages.resolve); |
| } |
| |
| map ocl::Class from QVToClassCS { |
| name := name; |
| ownedProperties := ownedProperties.resolve.oclAsType(ocl::Property); -- FIXME |
| ownedOperations := ownedOperations.resolve; |
| } |
| |
| -- map qvto::VarParameter from OperationParameterDeclarationCS { |
| -- |
| -- name := name |
| -- --kind = if direction = DirectionKindCS::inout then |
| -- -- qvto::DirectionKind::inout |
| -- -- else if direction = DirectionKindCS::out then |
| -- -- qvto::DirectionKind::out |
| -- -- else |
| -- -- qvto::DirectionKind::_in |
| -- -- endif endif |
| -- --initExpression = if (initPart.oclIsUndefined()) then |
| -- -- null |
| -- -- else |
| -- -- initPart.expression -- FIXME todo .ast() |
| -- -- endif |
| -- } |
| |
| |
| map ocl::Package from MetamodelCS { |
| name := name; |
| nsPrefix := name; -- QVTo spec doesn't provide concrete syntax for nsPrefix |
| URI := name; -- QVTo spec doesn't provide concrete syntax for nsURI. Build an internal protocol |
| ownedClasses := ownedClasses.resolve; |
| -- type = TODO |
| } |
| |
| map qvto::ModelType from ModelTypeCS { |
| name := name; |
| } |
| |
| map ocl::Property from ClassifierPropertyCS { |
| name := name; |
| isComposite := qualifiers->exists(x | x = 'composite'); |
| -- type = TODO |
| } |
| |
| map qvto::MappingOperation from MappingOperationCS { |
| name := name; |
| -- ownedParameter := signature.parameter.ast() |
| ownedParameters := ownedParameters.ast(); |
| } |
| |
| map qvto::OperationalTransformation from TransformationCS { |
| name := name; |
| modelParameter := ownedParameters.resolve.oclAsType(qvto::ModelParameter); |
| ownedOperations := ownedOperations.resolve; |
| isBlackbox := ownedQualifiers->exists(x | x = QualifierKindCS::blackbox); |
| isAbstract := ownedQualifiers->exists(x | x = QualifierKindCS::abstract); |
| -- refined := ast().lookupRelationalTransformation(refines); |
| } |
| |
| |
| map qvto::ModelParameter from ParameterDeclarationCS { |
| when containedInModule; |
| name := name; |
| type := resolve.lookup(ModelType, self.ownedType.oclAsType(TypedTypeRef2CS).ownedPathName); -- FIXME rework this |
| } |
| |
| map qvto::VarParameter from ParameterDeclarationCS { |
| when notContainedInModule; |
| |
| name := name; |
| --kind := if direction = DirectionKindCS::inout then |
| -- qvto::DirectionKind::inout |
| -- else if direction = DirectionKindCS::out then |
| -- qvto::DirectionKind::out |
| -- else |
| -- qvto::DirectionKind::_in |
| -- endif endif |
| --initExpression := if (initPart.oclIsUndefined()) then |
| -- null |
| -- else |
| -- initPart.expression -- FIXME todo .ast() |
| -- endif |
| } |
| |
| map qvto::Library from QVToLibraryCS{ |
| name := name; |
| ownedOperations := ownedOperations.resolve; |
| usedModelType := ownedParameters->collect(x | resolve.lookup(ModelType, x.ownedType.oclAsType(TypedTypeRef2CS).ownedPathName)); -- FIXME rework this |
| -- ownedParameters = ownedParameters.ast(), FIXME specification is wrong. |
| isBlackbox := ownedQualifiers->exists(x | x = QualifierKindCS::blackbox); |
| } |
| } |
| |
| disambiguation { |
| |
| ParameterDeclarationCS { |
| containedInModule := self.oclContainer().oclIsKindOf(ModuleCS); |
| notContainedInModule := not self.oclContainer().oclIsKindOf(ModuleCS); |
| } |
| } |
| |
| |
| nameresolution { |
| |
| -- Module { |
| -- nested-scope |
| -- ownedProperties,ownedOperations,ownedVariable |
| -- occluding |
| -- imported moduleImport.module; |
| -- |
| -- |
| -- } |
| |
| OperationalTransformation { |
| for modelParameter |
| nested-scope |
| ownedProperties, |
| ownedOperations, |
| --ownedOperations->excluding(ownedOperations->any(oclIsKindOf(EntryOperation)))) -- To discuss, can entry main() operation be called ? |
| --ownedClasses No Package anymore |
| --ownedPackages No Package anymore |
| --ownedTag |
| ownedVariable |
| occluding |
| imported moduleImport.module; |
| for all -- remaining |
| nested-scope |
| ownedProperties, |
| ownedOperations, |
| --ownedOperations->excluding(ownedOperations->any(oclIsKindOf(EntryOperation)))) -- To discuss, can entry main() operation be called ? |
| --ownedClasses No Package anymore |
| --ownedPackages No Package anymore |
| --ownedTag |
| ownedVariable, |
| modelParameter |
| occluding |
| imported moduleImport.module; |
| } |
| |
| Library { |
| |
| nested-scope |
| ownedProperties, |
| ownedOperations, |
| --ownedOperations->excluding(ownedOperations->any(oclIsKindOf(EntryOperation)))) -- To discuss, can entry main() operation be called ? |
| --ownedClasses No Package anymore |
| --ownedPackages No Package anymore |
| --ownedTag |
| ownedVariable |
| occluding |
| imported moduleImport.module; |
| } |
| |
| ModelType { |
| named-element; |
| |
| for additionalCondition |
| nested-scope |
| metamodel--, |
| -- ADD SELF VAR FROM WHERE ???? -> OMG fix |
| ; |
| for all --remaining |
| nested-scope |
| metamodel; |
| } |
| |
| ImperativeOperation { |
| |
| for _body |
| nested-scope |
| _context, |
| result, |
| ownedParameters; |
| |
| } |
| |
| MappingOperation { |
| for _body |
| nested-scope |
| _context, |
| result, |
| ownedParameters; |
| for _when |
| nested-scope |
| _context, |
| ownedParameters; |
| for _where |
| nested-scope |
| _context, |
| result, |
| ownedParameters; |
| |
| } |
| |
| OperationBody { |
| for content |
| nested-scope |
| variable, |
| following content->selectByKind(imperativeocl::VariableInitExp).referredVariable; |
| } |
| |
| |
| ConstructorBody { |
| for content |
| nested-scope |
| variable, |
| following content->selectByKind(imperativeocl::VariableInitExp).referredVariable; |
| } |
| |
| MappingBody { |
| for content |
| nested-scope |
| variable, |
| following content->selectByKind(imperativeocl::VariableInitExp).referredVariable; |
| for initSection |
| nested-scope |
| variable, |
| following initSection->selectByKind(imperativeocl::VariableInitExp).referredVariable; |
| for initSection |
| nested-scope |
| variable, |
| following initSection->selectByKind(imperativeocl::VariableInitExp).referredVariable; |
| } |
| |
| ResolveExp { |
| for condition |
| nested-scope |
| _target; |
| } |
| } |