|
|
@@ -0,0 +1,76 @@ |
|
|
|
|
|
|
|
import org.aspectj.testing.Tester; |
|
|
|
import org.aspectj.lang.JoinPoint; |
|
|
|
|
|
|
|
|
|
|
|
/** @testcase PR#41888 call PCD fails when given subtype of defining type */ |
|
|
|
public class CallReference { |
|
|
|
public static void main (String[] args) { |
|
|
|
// don't move these lines without changing expectEvents below |
|
|
|
new Sub().run(); |
|
|
|
new SubSub().run(); |
|
|
|
new SubSubSub().run(); |
|
|
|
((Super) new Sub()).run(); |
|
|
|
((Super) new SubSub()).run(); |
|
|
|
((Super) new SubSubSub()).run(); |
|
|
|
((Sub) new SubSub()).run(); |
|
|
|
((Sub) new SubSubSub()).run(); |
|
|
|
((SubSub) new SubSubSub()).run(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
class Super { void run() {} } |
|
|
|
class Sub extends Super { void run() {} } |
|
|
|
class SubSub extends Sub { } |
|
|
|
class SubSubSub extends SubSub { } |
|
|
|
|
|
|
|
aspect A { |
|
|
|
static { |
|
|
|
// generated from System.out call below |
|
|
|
Tester.expectEvent("Super 1 10"); |
|
|
|
Tester.expectEvent("Sub 2 10"); |
|
|
|
Tester.expectEvent("Super 3 11"); |
|
|
|
Tester.expectEvent("Sub 4 11"); |
|
|
|
Tester.expectEvent("SubSub 5 11"); |
|
|
|
Tester.expectEvent("Super 6 12"); |
|
|
|
Tester.expectEvent("Sub 7 12"); |
|
|
|
Tester.expectEvent("SubSub 8 12"); |
|
|
|
Tester.expectEvent("SubSubSub 9 12"); |
|
|
|
Tester.expectEvent("Super 10 13"); |
|
|
|
Tester.expectEvent("Super 11 14"); |
|
|
|
Tester.expectEvent("Super 12 15"); |
|
|
|
Tester.expectEvent("Super 13 16"); |
|
|
|
Tester.expectEvent("Sub 14 16"); |
|
|
|
Tester.expectEvent("Super 15 17"); |
|
|
|
Tester.expectEvent("Sub 16 17"); |
|
|
|
Tester.expectEvent("Super 17 18"); |
|
|
|
Tester.expectEvent("Sub 18 18"); |
|
|
|
Tester.expectEvent("SubSub 19 18"); |
|
|
|
} |
|
|
|
int count; |
|
|
|
void advice(String s, JoinPoint.StaticPart jp) { |
|
|
|
s = s |
|
|
|
+ " " |
|
|
|
+ ++count |
|
|
|
+ " " |
|
|
|
+ jp.getSourceLocation().getLine(); |
|
|
|
Tester.event(s); |
|
|
|
// use after moving code lines above |
|
|
|
//System.out.println("Tester.expectEvent(\"" + s + "\");"); |
|
|
|
} |
|
|
|
before() : call (void Super.run()) { |
|
|
|
advice("Super ", thisJoinPointStaticPart); |
|
|
|
} |
|
|
|
before() : call (void Sub.run()) { |
|
|
|
advice("Sub ", thisJoinPointStaticPart); |
|
|
|
} |
|
|
|
before() : call (void SubSub.run()) { |
|
|
|
advice("SubSub", thisJoinPointStaticPart); |
|
|
|
} |
|
|
|
before() : call (void SubSubSub.run()) { |
|
|
|
advice("SubSubSub", thisJoinPointStaticPart); |
|
|
|
} |
|
|
|
after() returning : execution(void CallReference.main(String[])) { |
|
|
|
Tester.checkAllEvents(); |
|
|
|
} |
|
|
|
} |