import org.aspectj.testing.Tester;

public class Driver {
    public static void main(String[] args) { test(); }
  
    public static void test() {
        AbstractC aC = new C();
        Tester.checkEqual(aC.foo(), 42, "introduced abstract");
        Tester.checkEqual(((I)aC).bar(), 12, "introduced on interface");
    }
}

interface I {
}

abstract class AbstractC implements I {
}

class C extends AbstractC {
}

aspect A {
    //introduction AbstractC {
    abstract int AbstractC.foo();
    //}

    //introduction C {
    int C.foo() { return 42; }
    //}

    //introduction I {
    public int I.bar() { return 12; }
    //}
}