[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