| |
| modeltype ECORE uses 'http://www.eclipse.org/emf/2002/Ecore'; |
| |
| transformation multiresultpars(in m : ECORE, out x : ECORE, out y : ECORE); |
| |
| |
| main() { |
| var src := m.rootObjects()![EPackage]; |
| |
| var r1 := src.map merging_fooAB(); |
| var r1Ext := src.map merging_ExtentDirectedFooAB(); |
| |
| var c: Collection(OclAny) := src.resolve(Tuple(a : EModelElement, b : EModelElement)); |
| -- 1 - merging_fooAB, 1 - merging_ExtentDirectedFooAB, |
| -- (2 - merged_fooA, 2 - merged_fooB) called just once, then fetched from traces |
| -- (2 - superMerged_fooB) - called just once, then fetched from traces |
| assert fatal (c->size() = 8); |
| |
| assert (src.resolveIn(EPackage::merging_fooAB, Tuple(a : EModelElement, b : EModelElement))->size() = 1); |
| assert (src.resolveIn(EPackage::merged_fooA, Tuple(a : EModelElement, b : EModelElement))->size() = 2); |
| assert (src.resolveIn(EPackage::merged_fooB, Tuple(a : EModelElement, b : EModelElement))->size() = 2); |
| assert (src.resolveIn(EPackage::merged_fooB, Tuple(a : EClass, b : EPackage))->size() = 2); |
| assert (src.resolveIn(EModelElement::superMerged_fooB, Tuple(a : EModelElement, b : EModelElement))->size() = 2); |
| |
| var r2 := src.map merging_fooAB(); |
| |
| assert fatal (Set{Tuple{a=r2.a, b=r2.b}} = src.resolveIn(EPackage::merging_fooAB, Tuple(a : EClass, b : EPackage))->asSet()); |
| |
| assert fatal (src = r2.invresolveone()); |
| |
| assert fatal (src = r1.invresolveoneIn(EPackage::merging_fooAB, EPackage)); |
| |
| -- check query |
| var fooQueryResult : Tuple(p : EPackage, id : Integer) |
| := src.fooQuery(100); |
| |
| assert fatal (100 = src.fooQuery(100).id); |
| assert fatal (src = src.fooQuery(100).p); |
| } |
| |
| query EPackage::fooQuery(in idValue : Integer) : p : EPackage, id : Integer { |
| p := self; |
| id := idValue; |
| } |
| |
| |
| mapping EPackage::merging_ExtentDirectedFooAB() : a : EClass@y, b : EPackage@x |
| merges EPackage::merged_fooA, EPackage::merged_fooB |
| { |
| population { |
| object a:EClass { name := 'a_merging_ExtentDirectedFooAB'; }; |
| object b:EPackage { name := 'b_merging_ExtentDirectedFooAB'; }; |
| } |
| } |
| |
| mapping EPackage::merging_fooAB() : a : EClass, b : EPackage |
| merges EPackage::merged_fooA, EPackage::merged_fooB |
| { |
| population { |
| object a:EClass { name := 'a_merging_fooAB'; }; |
| object b:EPackage { name := 'b_merging_fooAB'; }; |
| } |
| } |
| |
| mapping EPackage::merged_fooA() : a : EClass, b : EPackage { |
| init { |
| var aRef := a; |
| } |
| population { |
| object a:EClass { name := a.name + '-merged_fooA'; } |
| } |
| end { |
| assert fatal (aRef = a); |
| } |
| } |
| |
| mapping EPackage::merged_fooB() : a : EClass, b : EPackage |
| merges EModelElement::superMerged_fooB |
| { |
| init { |
| assert fatal (b != null); |
| var bRef := b; |
| } |
| population { |
| object b : EPackage { name := b.name + '-merged_fooB'; }; |
| } |
| end { |
| assert fatal (bRef = b); |
| } |
| } |
| |
| mapping EModelElement::superMerged_fooB() : a : EClass, b : EPackage { |
| init { |
| var bRef := b; |
| } |
| population { |
| object b : EPackage { name := b.name + '-superMerged_fooB'; }; |
| } |
| end { |
| assert fatal (bRef = b); |
| } |
| } |