|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- 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; }
-
- }
|