As users found out, the type checker does not check whether the parameters of the called pattern have the same (or comparable) types.
E.g. because of the type incompatibility the match set of the eAllContainments pattern is always equivalent to the transitive closure, so the transitive closure operator is entirely ineffective.
pattern test() {
find eAllContainments+(PH_OrigCont,extracts); //There should be a type warning (or possibly error)
}
pattern eAllContainments(This : EClass, Target : EReference){
find eAllReferences(This, Target);
EReference.containment(Target, true);
}
As users found out, the type checker does not check whether the parameters of the called pattern have the same (or comparable) types.
E.g. because of the type incompatibility the match set of the eAllContainments pattern is always equivalent to the transitive closure, so the transitive closure operator is entirely ineffective.