[jboss-cvs] JBossAS SVN: r61089 - in projects/aop/trunk/aop/src: resources/test/beforeafterArgs and 1 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Mon Mar 5 14:53:56 EST 2007
Author: flavia.rainone at jboss.com
Date: 2007-03-05 14:53:56 -0500 (Mon, 05 Mar 2007)
New Revision: 61089
Modified:
projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java
projects/aop/trunk/aop/src/resources/test/beforeafterArgs/jboss-aop.xml
projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgAspect.java
projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgTestCase.java
projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsPOJO.java
Log:
[JBAOP-352] Bug found on this task.
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java 2007-03-05 19:02:51 UTC (rev 61088)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java 2007-03-05 19:53:56 UTC (rev 61089)
@@ -776,10 +776,19 @@
argsFoundAfter = DefaultAdviceCallStrategy.getInstance().addInvokeCode(this,
setups.getThrowingSetups(), afterCode) || argsFoundAfter;
- if ((argsFoundAfter || argsFoundBefore) && joinPointCreated)
+ // if joinpoint has been created for around,
+ // need to update arguments variable when this variable is used,
+ // which happens in one of both cases
+ // 1.an @Args parameter is found on after code
+ // 2.an @Arg parameter is found on after code (in this case, we need
+ // to update the variable value according to what is contained in joinpoint)
+ if (joinPointCreated && (argsFoundAfter ||
+ inconsistentTypeArgs.get().size() < joinPointArguments.size()))
+ // TODO ((argsFoundAfter || argsFoundBefore) && joinPointCreated) ||
{
code.append(ARGUMENTS);
code.append(" = jp.").append(GET_ARGUMENTS).append(";");
+ argsFoundAfter = true; // force creation of arguments variable
}
// add after code
Modified: projects/aop/trunk/aop/src/resources/test/beforeafterArgs/jboss-aop.xml
===================================================================
--- projects/aop/trunk/aop/src/resources/test/beforeafterArgs/jboss-aop.xml 2007-03-05 19:02:51 UTC (rev 61088)
+++ projects/aop/trunk/aop/src/resources/test/beforeafterArgs/jboss-aop.xml 2007-03-05 19:53:56 UTC (rev 61089)
@@ -89,6 +89,29 @@
<after name="after6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
</bind>
+ <bind pointcut="execution(void org.jboss.test.aop.beforeafterArgs.ArgsPOJO->*(org.jboss.test.aop.beforeafterArgs.Interface))">
+ <before name="beforeInterface1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+ <before name="beforeInterface2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+ <before name="beforeInterface3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+ <before name="beforeInterface4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+ <before name="beforeInterface5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+ <advice name="aroundInterface1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+ <advice name="aroundInterface2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+ <advice name="aroundInterface3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+ <advice name="aroundInterface4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+ <advice name="aroundInterface5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+ <after name="afterInterface1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+ <after name="afterInterface2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+ <after name="afterInterface3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+ <after name="afterInterface4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+ <after name="afterInterface5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+ <throwing name="throwingInterface1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+ <throwing name="throwingInterface2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+ <throwing name="throwingInterface3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+ <throwing name="throwingInterface4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+ <throwing name="throwingInterface5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+ </bind>
+
<!-- @Args test -->
<aspect class="org.jboss.test.aop.beforeafterArgs.ArgsAspect" scope="PER_VM"/>
Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgAspect.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgAspect.java 2007-03-05 19:02:51 UTC (rev 61088)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgAspect.java 2007-03-05 19:53:56 UTC (rev 61089)
@@ -27,6 +27,7 @@
import org.jboss.aop.advice.annotation.Arg;
import org.jboss.aop.advice.annotation.Args;
+import org.jboss.aop.advice.annotation.Thrown;
import org.jboss.aop.joinpoint.CurrentInvocation;
import org.jboss.aop.joinpoint.MethodInvocation;
@@ -70,6 +71,19 @@
static int after4Q = 0;
static Object[] after6Args = null;
+ static boolean beforeInterface1 = false;
+ static boolean beforeInterface2 = false;
+ static boolean beforeInterface3 = false;
+ static boolean aroundInterface1 = false;
+ static boolean aroundInterface2 = false;
+ static boolean aroundInterface3 = false;
+ static boolean afterInterface1 = false;
+ static boolean afterInterface2 = false;
+ static boolean afterInterface3 = false;
+ static boolean throwingInterface1 = false;
+ static boolean throwingInterface2 = false;
+ static boolean throwingInterface3 = false;
+
public static void clear()
{
before1 = false;
@@ -96,6 +110,19 @@
after4X = 0;
after4Q = 0;
after6Args = null;
+
+ beforeInterface1 = false;
+ beforeInterface2 = false;
+ beforeInterface3 = false;
+ aroundInterface1 = false;
+ aroundInterface2 = false;
+ aroundInterface3 = false;
+ afterInterface1 = false;
+ afterInterface2 = false;
+ afterInterface3 = false;
+ throwingInterface1 = false;
+ throwingInterface2 = false;
+ throwingInterface3 = false;
}
public void before1(@Arg(index=0) int x)
@@ -213,4 +240,109 @@
after6 = true;
after6Args = args;
}
+
+ public void beforeInterface1(@Arg Interface param)
+ {
+ beforeInterface1 = true;
+ }
+
+ public void beforeInterface2(@Arg SuperInterface param)
+ {
+ beforeInterface2 = true;
+ }
+
+ public void beforeInterface3(@Arg Object param)
+ {
+ beforeInterface3 = true;
+ }
+
+ public void beforeInterface4(@Arg Implementor param)
+ {
+ Assert.fail("This advice should never be executed");
+ }
+
+ public void beforeInterface5(@Arg SubInterface param)
+ {
+ Assert.fail("This advice should never be executed");
+ }
+
+ public Object aroundInterface1(@Arg Interface param) throws Throwable
+ {
+ aroundInterface1 = true;
+ return CurrentInvocation.proceed();
+ }
+
+ public Object aroundInterface2(@Arg SuperInterface param) throws Throwable
+ {
+ aroundInterface2 = true;
+ return CurrentInvocation.proceed();
+ }
+
+ public Object aroundInterface3(@Arg Object param) throws Throwable
+ {
+ aroundInterface3 = true;
+ return CurrentInvocation.proceed();
+ }
+
+ public Object aroundInterface4(@Arg Implementor param) throws Throwable
+ {
+ Assert.fail("This advice should never be executed");
+ return CurrentInvocation.proceed();
+ }
+
+ public Object aroundInterface5(@Arg SubInterface param) throws Throwable
+ {
+ Assert.fail("This advice should never be executed");
+ return CurrentInvocation.proceed();
+ }
+
+ public void afterInterface1(@Arg Interface param)
+ {
+ afterInterface1 = true;
+ }
+
+ public void afterInterface2(@Arg SuperInterface param)
+ {
+ afterInterface2 = true;
+ }
+
+ public void afterInterface3(@Arg Object param)
+ {
+ afterInterface3 = true;
+ }
+
+ public void afterInterface4(@Arg Implementor param)
+ {
+ Assert.fail("This advice should never be executed");
+ }
+
+ public void afterInterface5(@Arg SubInterface param)
+ {
+ Assert.fail("This advice should never be executed");
+ }
+
+ public void throwingInterface1(@Thrown Throwable thrown, @Arg Interface param)
+ {
+ throwingInterface1 = true;
+ }
+
+ public void throwingInterface2(@Thrown Throwable thrown, @Arg SuperInterface param)
+ {
+ throwingInterface2 = true;
+ }
+
+ public void throwingInterface3(@Thrown Throwable thrown, @Arg Object param)
+ {
+ throwingInterface3 = true;
+ }
+
+ public void throwingInterface4(@Thrown Throwable thrown, @Arg Implementor param)
+ {
+ Assert.fail("This advice should never be executed");
+ }
+
+ public void throwingInterface5(@Thrown Throwable thrown, @Arg SubInterface param)
+ {
+ Assert.fail("This advice should never be executed");
+ }
}
\ No newline at end of file
Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgTestCase.java 2007-03-05 19:02:51 UTC (rev 61088)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgTestCase.java 2007-03-05 19:53:56 UTC (rev 61089)
@@ -259,4 +259,56 @@
assertFalse(ArgAspect.around6);
assertFalse(ArgAspect.after1);
}
+
+ public void test9() throws POJOException
+ {
+ this.pojo.method5(new Implementor());
+
+ assertTrue(ArgAspect.beforeInterface1);
+ assertTrue(ArgAspect.beforeInterface2);
+ assertTrue(ArgAspect.beforeInterface3);
+
+ assertTrue(ArgAspect.aroundInterface1);
+ assertTrue(ArgAspect.aroundInterface2);
+ assertTrue(ArgAspect.aroundInterface3);
+
+ assertTrue(ArgAspect.afterInterface1);
+ assertTrue(ArgAspect.afterInterface2);
+ assertTrue(ArgAspect.afterInterface3);
+
+ assertFalse(ArgAspect.throwingInterface1);
+ assertFalse(ArgAspect.throwingInterface2);
+ assertFalse(ArgAspect.throwingInterface3);
+ }
+
+ public void test10()
+ {
+ boolean thrown = false;
+ try
+ {
+ this.pojo.method6(null);
+ }
+ catch(POJOException e)
+ {
+ thrown = true;
+ }
+
+ assertTrue(thrown); // verify precondition for this test
+
+ assertTrue(ArgAspect.beforeInterface1);
+ assertTrue(ArgAspect.beforeInterface2);
+ assertTrue(ArgAspect.beforeInterface3);
+
+ assertTrue(ArgAspect.aroundInterface1);
+ assertTrue(ArgAspect.aroundInterface2);
+ assertTrue(ArgAspect.aroundInterface3);
+
+ assertFalse(ArgAspect.afterInterface1);
+ assertFalse(ArgAspect.afterInterface2);
+ assertFalse(ArgAspect.afterInterface3);
+
+ assertTrue(ArgAspect.throwingInterface1);
+ assertTrue(ArgAspect.throwingInterface2);
+ assertTrue(ArgAspect.throwingInterface3);
+ }
}
\ No newline at end of file
Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsPOJO.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsPOJO.java 2007-03-05 19:02:51 UTC (rev 61088)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsPOJO.java 2007-03-05 19:53:56 UTC (rev 61089)
@@ -86,4 +86,14 @@
{
this.method3((short) -4, (long) 4);
}
+
+ public void method5(Interface param) throws POJOException
+ {
+
+ }
+
+ public void method6(Interface param) throws POJOException
+ {
+ throw new POJOException();
+ }
}
\ No newline at end of file
More information about the jboss-cvs-commits
mailing list