зеркало из
https://github.com/eclipse-aspectj/aspectj.git
synced 2024-08-27 05:54:38 +02:00
61 строка
1.4 KiB
Java
61 строка
1.4 KiB
Java
import org.aspectj.testing.Tester;
|
|
public class ParsingSubtypesIntroductions {
|
|
public static void main(String[] args) {
|
|
new ParsingSubtypesIntroductions().realMain(args);
|
|
}
|
|
public void realMain(String[] args) {
|
|
new D().f();
|
|
new C().f();
|
|
((I)new C()).i();
|
|
new E().f();
|
|
((I)new E()).i();
|
|
Tester.checkAllEvents();
|
|
}
|
|
static {
|
|
U.m(D.class, "f");
|
|
U.m(C.class, "f");
|
|
U.m(C.class, "i");
|
|
U.m(E.class, "f");
|
|
U.m(E.class, "i");
|
|
}
|
|
}
|
|
|
|
class U {
|
|
public static void a(Object o, Object m) {
|
|
Tester.event(m + "." + type(o));
|
|
}
|
|
public static void m(Class t, Object m) {
|
|
Tester.expectEvent(m + "." + name(t));
|
|
}
|
|
public static String type(Object o) {
|
|
return name(o.getClass());
|
|
}
|
|
public static String name(Class t) {
|
|
String str = t.getName();
|
|
int i = str.lastIndexOf('.');
|
|
if (i != -1) str = str.substring(i+1);
|
|
return str;
|
|
}
|
|
}
|
|
|
|
class D {
|
|
public void f() { U.a(this, "f"); }
|
|
}
|
|
class C /*extends D implements I*/ {
|
|
/*public void i() { U.a(this, "i"); }*/
|
|
}
|
|
class E extends C {}
|
|
interface I {
|
|
public void i();
|
|
}
|
|
aspect A {
|
|
// subtypes(C) +implements I;
|
|
// subtypes(C) +extends D;
|
|
|
|
declare parents: C+ implements I;
|
|
declare parents: C+ extends D;
|
|
|
|
public void I.i() { U.a(this, "i"); }
|
|
}
|
|
|