public void f2(B1 b) { // original is b.foo(0); this is the tagging: Class[] variants = {D.class, C.class, B1.class}; ((B1) TLog.polycall(b, variants)).foo(0); }
public void f1(A a) { // we just want to do a.foo(0); this gives the following tagging: Class[] variants = {D.class, C.class, B1.class, B2.class, A.class}; ((A) TLog.polycall(a, variants)).foo(0); }