blob: b9048d94fbd91fe8eebd0c0c23bf73162296d675 [file] [log] [blame]
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);
}
}