| import 'CopyOO.etl'; | |
| rule MergeModel | |
| merge l : Left!Model | |
| with r : Right!Model | |
| into t : Target!Model { | |
| t.name = l.name + ' and ' + r.name; | |
| t.package ::= l.package; | |
| t.annotations ::= l.annotations + r.annotations; | |
| t.contents ::= l.contents + r.contents; | |
| } | |
| rule MergeAnnotation | |
| merge l : Left!Annotation | |
| with r : Right!Annotation | |
| into t : Target!Annotation { | |
| t.key = l.key; | |
| t.value = l.value; | |
| } | |
| rule MergePackage | |
| merge l : Left!Package | |
| with r : Right!Package | |
| into t : Target!Package { | |
| t.name = l.name; | |
| t.package ::= l.package; | |
| t.annotations ::= l.annotations + r.annotations; | |
| t.contents ::= l.contents + r.contents; | |
| } | |
| rule MergeExternalClass | |
| merge l : Left!ExternalClass | |
| with r : Right!ExternalClass | |
| into t : Target!ExternalClass { | |
| t.name = l.name; | |
| t.isAbstract = l.isAbstract; | |
| t.package ::= l.package; | |
| t.`extends` ::= l.`extends`; | |
| t.annotations ::= l.annotations + r.annotations; | |
| t.extendedBy ::= l.extendedBy + r.extendedBy; | |
| t.features ::= l.features + r.features; | |
| } | |
| rule MergeClass | |
| merge l : Left!Class | |
| with r : Right!Class | |
| into t : Target!Class { | |
| t.name = l.name; | |
| t.isAbstract = l.isAbstract; | |
| t.package ::= l.package; | |
| t.`extends` ::= l.`extends`; | |
| t.annotations ::= l.annotations + r.annotations; | |
| t.extendedBy ::= l.extendedBy + r.extendedBy; | |
| t.features ::= l.features + r.features; | |
| } | |
| rule MergeDatatype | |
| merge l : Left!Datatype | |
| with r : Right!Datatype | |
| into t : Target!Datatype { | |
| t.name = l.name; | |
| t.package ::= l.package; | |
| t.annotations ::= l.annotations + r.annotations; | |
| } | |
| rule MergeOperation | |
| merge l : Left!Operation | |
| with r : Right!Operation | |
| into t : Target!Operation { | |
| t.name = l.name; | |
| t.visibility = l.visibility; | |
| t.owner ::= l.owner; | |
| t.type ::= l.type; | |
| t.annotations ::= l.annotations + r.annotations; | |
| t.parameters ::= l.parameters + r.parameters; | |
| } | |
| rule MergeParameter | |
| merge l : Left!Parameter | |
| with r : Right!Parameter | |
| into t : Target!Parameter { | |
| t.name = l.name; | |
| t.type ::= l.type; | |
| t.owner ::= l.owner; | |
| t.annotations ::= l.annotations + r.annotations; | |
| } | |
| rule MergeReference | |
| merge l : Left!Reference | |
| with r : Right!Reference | |
| into t : Target!Reference { | |
| t.name = l.name; | |
| t.visibility = l.visibility; | |
| t.isMany = l.isMany; | |
| t.owner ::= l.owner; | |
| t.type ::= l.type; | |
| t.annotations ::= l.annotations + r.annotations; | |
| } | |
| rule MergeAttribute | |
| merge l : Left!Attribute | |
| with r : Right!Attribute | |
| into t : Target!Attribute { | |
| t.name = l.name; | |
| t.visibility = l.visibility; | |
| t.isMany = l.isMany; | |
| t.owner ::= l.owner; | |
| t.type ::= l.type; | |
| t.annotations ::= l.annotations + r.annotations; | |
| } | |