mirror of
https://github.com/eclipse-aspectj/aspectj.git
synced 2024-08-14 02:10:40 +02:00
76 lines
3.0 KiB
Java
76 lines
3.0 KiB
Java
import org.aspectj.testing.Tester;
|
|
public class MethodIntroductions {
|
|
public static void main(String[] args) {
|
|
new MethodIntroductions().realMain(args);
|
|
}
|
|
public void realMain(String[] args) {
|
|
|
|
AbstractSuper as0 = new AbstractSuper() { public int foo() { return 1; } };
|
|
AbstractSuper as1 = new ExtendsAbstractSuper();
|
|
AbstractSuper as2 = new ExtendsExtendsAbstractSuper();
|
|
ExtendsAbstractSuper eas = new ExtendsAbstractSuper();
|
|
ExtendsExtendsAbstractSuper eeas = new ExtendsExtendsAbstractSuper();
|
|
Tester.checkEqual(as0.foo(), 1, "as0");
|
|
Tester.checkEqual(as1.foo(), 2, "as1");
|
|
Tester.checkEqual(as2.foo(), 3, "as2");
|
|
Tester.checkEqual(eas.foo(), 2, "eas");
|
|
Tester.checkEqual(eeas.foo(), 3, "eeas");
|
|
|
|
Super s0 = new Super() {};
|
|
Super s1 = new ExtendsSuper();
|
|
Super s2 = new ExtendsExtendsSuper();
|
|
ExtendsSuper es = new ExtendsSuper();
|
|
ExtendsExtendsSuper ees = new ExtendsExtendsSuper();
|
|
Tester.checkEqual(s0.foo(), 4, "s0");
|
|
Tester.checkEqual(s1.foo(), 5, "s1");
|
|
Tester.checkEqual(s2.foo(), 6, "s2");
|
|
Tester.checkEqual(es.foo(), 5, "es");
|
|
Tester.checkEqual(ees.foo(), 6, "ees");
|
|
|
|
AbstractSuperNoIntro as0n = new AbstractSuperNoIntro() { public int foo() { return 7; } };
|
|
AbstractSuperNoIntro as1n = new ExtendsAbstractSuperNoIntro();
|
|
AbstractSuperNoIntro as2n = new ExtendsExtendsAbstractSuperNoIntro();
|
|
ExtendsAbstractSuperNoIntro easn = new ExtendsAbstractSuperNoIntro();
|
|
ExtendsExtendsAbstractSuperNoIntro eeasn = new ExtendsExtendsAbstractSuperNoIntro();
|
|
Tester.checkEqual(as0n.foo(), 7, "as0n");
|
|
Tester.checkEqual(as1n.foo(), 8, "as1n");
|
|
Tester.checkEqual(as2n.foo(), 9, "as2n");
|
|
Tester.checkEqual(easn.foo(), 8, "easn");
|
|
Tester.checkEqual(eeasn.foo(), 9, "eeasn");
|
|
}
|
|
}
|
|
|
|
interface I {
|
|
public int foo();
|
|
}
|
|
|
|
abstract class AbstractSuper {}
|
|
class ExtendsAbstractSuper extends AbstractSuper {}
|
|
class ExtendsExtendsAbstractSuper extends ExtendsAbstractSuper {}
|
|
|
|
class Super {}
|
|
class ExtendsSuper extends Super {}
|
|
class ExtendsExtendsSuper extends ExtendsSuper {}
|
|
|
|
abstract class AbstractSuperNoIntro {}
|
|
class ExtendsAbstractSuperNoIntro extends AbstractSuperNoIntro {}
|
|
class ExtendsExtendsAbstractSuperNoIntro extends ExtendsAbstractSuperNoIntro {}
|
|
|
|
aspect Introducer {
|
|
|
|
declare parents: AbstractSuper implements I;
|
|
public int AbstractSuper.foo() { return 1; }
|
|
public int ExtendsAbstractSuper.foo() { return 2; }
|
|
public int ExtendsExtendsAbstractSuper.foo() { return 3; }
|
|
|
|
declare parents: Super implements I;
|
|
public int Super.foo() { return 4; }
|
|
public int ExtendsSuper.foo() { return 5; }
|
|
public int ExtendsExtendsSuper.foo() { return 6; }
|
|
|
|
declare parents: AbstractSuperNoIntro implements I;
|
|
public int ExtendsAbstractSuperNoIntro.foo() { return 8; }
|
|
public int ExtendsExtendsAbstractSuperNoIntro.foo() { return 9; }
|
|
|
|
}
|