org.aspectj/tests/new/MethodIntroductions.java
2002-12-16 18:51:06 +00:00

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