| modeltype Ecore uses 'http://www.eclipse.org/emf/2002/Ecore'; |
| |
| transformation intermWithExtends(out Ecore); |
| |
| intermediate class MyBase { |
| } |
| |
| intermediate class MyClass extends MyBase, ecore::EClassifier { |
| a : Integer = 5; |
| b : String = 'a'; |
| } |
| |
| intermediate class MyClass2 extends MyClass, ecore::EClass { |
| ab : Sequence(String) = Sequence{'1', '2'} |
| } |
| |
| |
| main() { |
| var v0 := object MyBase{}; |
| assert fatal (v0.oclIsTypeOf(MyBase)); |
| |
| var v1 := object MyClass{}; |
| assert fatal (v1.a = 5); |
| assert fatal (v1.oclIsTypeOf(MyClass)); |
| |
| var v2 := v1.map toMyClass2(); |
| assert fatal (v2.b = 'a'); |
| assert fatal (v2.ab->size() = 2); |
| assert fatal (v2.oclIsTypeOf(MyClass2)); |
| |
| var v3 := v2.map toEClass(); |
| assert fatal (v3.name = 'MyClass2'); |
| } |
| |
| mapping EClassifier::toMyClass2() : MyClass2 { |
| } |
| |
| mapping MyClass2::toEClass() : EClass { |
| name := self.metaClassName(); |
| } |
| |