From 3fa1bddb79a5e20a38cb39555e932df46f3d4dfa Mon Sep 17 00:00:00 2001 From: aclement Date: Tue, 21 Feb 2006 16:13:44 +0000 Subject: [PATCH] test and fix for 122742 (more @AJ thisJoinPoint problems...) --- .../bugs151/pr122742/AfterReturningTest.java | 52 +++++++++++++++++++ tests/bugs151/pr122742/AfterThrowingTest.java | 50 ++++++++++++++++++ .../systemtest/ajc151/Ajc151Tests.java | 8 +++ .../org/aspectj/systemtest/ajc151/ajc151.xml | 16 +++++- weaver/src/org/aspectj/weaver/Advice.java | 14 +++++ 5 files changed, 138 insertions(+), 2 deletions(-) create mode 100644 tests/bugs151/pr122742/AfterReturningTest.java create mode 100644 tests/bugs151/pr122742/AfterThrowingTest.java diff --git a/tests/bugs151/pr122742/AfterReturningTest.java b/tests/bugs151/pr122742/AfterReturningTest.java new file mode 100644 index 000000000..9ec10a43e --- /dev/null +++ b/tests/bugs151/pr122742/AfterReturningTest.java @@ -0,0 +1,52 @@ +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.Aspect; + +@Aspect +public class AfterReturningTest { + + public static void main(String[] args) { + new B1().start(); + } + + // include "JoinPoint" in the argument list + @AfterReturning(pointcut = "execution(public B1 B1.start())", returning = "r") + public void afterJP(JoinPoint jp, B1 r) { + r.stop(); + } + + // include "JoinPoint.StaticPart" in the argument list + @AfterReturning(pointcut = "execution(public B1 B1.start())", returning = "r") + public void afterJPSP(JoinPoint.StaticPart jp, B1 r) { + r.stop(); + } + + // include "JoinPoint.EnclosingStaticPart" in the argument list + @AfterReturning(pointcut = "execution(public B1 B1.start())", returning = "r") + public void afterJPESP(JoinPoint.EnclosingStaticPart jp, B1 r) { + r.stop(); + } + + // include "JoinPoint and JoinPoint.EnclosingStaticPart" in the argument list + @AfterReturning(pointcut = "execution(public B1 B1.start())", returning = "r") + public void afterJPESP2(JoinPoint jp1, JoinPoint.EnclosingStaticPart jp, B1 r) { + r.stop(); + } + + // make sure it still works if "JoinPoint" is second in the argument list + @AfterReturning(pointcut = "execution(public B1 B1.start())", returning = "r") + public void afterJP2(B1 r, JoinPoint jp) { + r.stop(); + } +} + +class B1 { + + public B1 start() { + return new B1(); + } + + public void stop() { + } + +} diff --git a/tests/bugs151/pr122742/AfterThrowingTest.java b/tests/bugs151/pr122742/AfterThrowingTest.java new file mode 100644 index 000000000..449893e37 --- /dev/null +++ b/tests/bugs151/pr122742/AfterThrowingTest.java @@ -0,0 +1,50 @@ +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Aspect; + +@Aspect +public class AfterThrowingTest { + + public static void main(String[] args) { + try { + new B().start(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + // include "JoinPoint" in the argument list + @AfterThrowing(pointcut = "execution(public void B.start())", throwing = "ex") + public void handleExceptionJP(JoinPoint jp, Exception ex) { + } + + // include "JoinPoint.StaticPart" in the argument list + @AfterThrowing(pointcut = "execution(public void B.start())", throwing = "ex") + public void handleExceptionJPSP(JoinPoint.StaticPart jp, Exception ex) { + } + + // include "JoinPoint.EnclosingStaticPart" in the argument list + @AfterThrowing(pointcut = "execution(public void B.start())", throwing = "ex") + public void handleExceptionJPESP(JoinPoint.EnclosingStaticPart jp, Exception ex) { + } + + // include "JoinPoint" and "JoinPoint.EnclosingStaticPart" in the argument list + @AfterThrowing(pointcut = "execution(public void B.start())", throwing = "ex") + public void handleExceptionJPESP(JoinPoint jp1, JoinPoint.EnclosingStaticPart jp, Exception ex) { + } + + // make sure it still works if "JoinPoint" is second on the argument list + @AfterThrowing(pointcut = "execution(public void B.start())", throwing = "ex") + public void handleExceptionJP2(JoinPoint jp, Exception ex) { + } +} + +class B implements I { + public void start() throws Exception { + throw new IllegalArgumentException(); + } +} + +interface I { + public void start() throws Exception; +} diff --git a/tests/src/org/aspectj/systemtest/ajc151/Ajc151Tests.java b/tests/src/org/aspectj/systemtest/ajc151/Ajc151Tests.java index 2672caa3e..922d278cd 100644 --- a/tests/src/org/aspectj/systemtest/ajc151/Ajc151Tests.java +++ b/tests/src/org/aspectj/systemtest/ajc151/Ajc151Tests.java @@ -87,6 +87,14 @@ public class Ajc151Tests extends org.aspectj.testing.XMLBasedAjcTestCase { runTest("swallowed exceptions"); } + public void testAtAspectVerifyErrorWithAfterThrowingAndthisJoinPoint_pr122742() { + runTest("@AJ VerifyError with @AfterThrowing and thisJoinPoint argument"); + } + + public void testAtAspectVerifyErrorWithAfterReturningAndthisJoinPoint_pr122742() { + runTest("@AJ VerifyError with @AfterReturning and thisJoinPoint argument"); + } + public void testSwallowedExceptionIgnored() { runTest("swallowed exceptions with xlint"); } diff --git a/tests/src/org/aspectj/systemtest/ajc151/ajc151.xml b/tests/src/org/aspectj/systemtest/ajc151/ajc151.xml index d340d0778..9c6a85b45 100644 --- a/tests/src/org/aspectj/systemtest/ajc151/ajc151.xml +++ b/tests/src/org/aspectj/systemtest/ajc151/ajc151.xml @@ -14,8 +14,20 @@ - - + + + + + + + + + + + + + + diff --git a/weaver/src/org/aspectj/weaver/Advice.java b/weaver/src/org/aspectj/weaver/Advice.java index f8b26a41e..4f663de6a 100644 --- a/weaver/src/org/aspectj/weaver/Advice.java +++ b/weaver/src/org/aspectj/weaver/Advice.java @@ -285,6 +285,20 @@ public abstract class Advice extends ShadowMunger { public UnresolvedType getExtraParameterType() { if (!hasExtraParameter()) return ResolvedType.MISSING; if (signature instanceof ResolvedMember) { + if (getConcreteAspect().isAnnotationStyleAspect()) { + // bug 122742 - if we're an annotation style aspect then one + // of the extra parameters could be JoinPoint which we want + // to ignore + int baseParmCnt = getBaseParameterCount(); + UnresolvedType[] genericParameterTypes = ((ResolvedMember)signature).getGenericParameterTypes(); + while ((baseParmCnt + 1 < genericParameterTypes.length) + && (genericParameterTypes[baseParmCnt].equals(AjcMemberMaker.TYPEX_JOINPOINT) + || genericParameterTypes[baseParmCnt].equals(AjcMemberMaker.TYPEX_STATICJOINPOINT) + || genericParameterTypes[baseParmCnt].equals(AjcMemberMaker.TYPEX_ENCLOSINGSTATICJOINPOINT))) { + baseParmCnt++; + } + return ((ResolvedMember)signature).getGenericParameterTypes()[baseParmCnt]; + } return ((ResolvedMember)signature).getGenericParameterTypes()[getBaseParameterCount()]; } else { return signature.getParameterTypes()[getBaseParameterCount()]; -- 2.39.5