[jboss-cvs] JBossAS SVN: r63268 - in projects/aop/trunk/aop/src: test/org/jboss/test/aop/beforeafterArgs and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu May 31 00:51:36 EDT 2007


Author: flavia.rainone at jboss.com
Date: 2007-05-31 00:51:35 -0400 (Thu, 31 May 2007)
New Revision: 63268

Modified:
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConByConJoinPointGenerator.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorCallerTransformer.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodByConJoinPointGenerator.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/CallerTestCase.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/TargetCallerPOJO.java
Log:
[JBAOP-407] Bug fixed and tested.

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConByConJoinPointGenerator.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConByConJoinPointGenerator.java	2007-05-30 22:03:52 UTC (rev 63267)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConByConJoinPointGenerator.java	2007-05-31 04:51:35 UTC (rev 63268)
@@ -69,7 +69,7 @@
 
    public ConByConJoinPointGenerator(GeneratedClassAdvisor advisor, JoinPointInfo info)
    {
-      super(advisor, info, JoinPointParameters.ONLY_ARGS,
+      super(advisor, info, JoinPointParameters.CALLER_ARGS,
             ((ConByConInfo) info).getConstructor().getParameterTypes().length);
       returnType = new WeakReference(((ConByConInfo)info).getCalledClass());
    }

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorCallerTransformer.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorCallerTransformer.java	2007-05-30 22:03:52 UTC (rev 63267)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorCallerTransformer.java	2007-05-31 04:51:35 UTC (rev 63268)
@@ -116,8 +116,8 @@
          if (hasTargetObject)
          {
             params = new CtClass[originalLength + 2];
-            params[0] = callingClass;
-            params[1] = instrumentor.forName(cd.classname); //target object
+            params[0] = instrumentor.forName(cd.classname); //target object
+            params[1] = callingClass;
             System.arraycopy(cd.calledMethod.getParameterTypes(), 0, params, 2, originalLength);
          }
          else
@@ -131,7 +131,7 @@
 
          if (hasTargetObject)
          {
-            proceed = MethodExecutionTransformer.getAopReturnStr(cd.calledMethod) + "$2." + cd.calledMethod.getName() + "(" + getArguments(params.length, 2) +");";
+            proceed = MethodExecutionTransformer.getAopReturnStr(cd.calledMethod) + "$1." + cd.calledMethod.getName() + "(" + getArguments(params.length, 2) +");";
          }
          else
          {
@@ -461,7 +461,7 @@
          }
          else
          {
-            args = "this, $0" + ((paramsLength > 0) ? ", $$" : "");
+            args = "$0, this" + ((paramsLength > 0) ? ", $$" : "");
          }
 
          final String ret = (!cd.calledMethod.getReturnType().equals(CtClass.voidType)) ? "$_ = " : "";

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodByConJoinPointGenerator.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodByConJoinPointGenerator.java	2007-05-30 22:03:52 UTC (rev 63267)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodByConJoinPointGenerator.java	2007-05-31 04:51:35 UTC (rev 63268)
@@ -77,9 +77,9 @@
    {
       if (Modifier.isStatic(info.getMethod().getModifiers()))
       {
-         return JoinPointParameters.ONLY_ARGS;
+         return JoinPointParameters.CALLER_ARGS;
       }
-      return JoinPointParameters.TARGET_ARGS;
+      return JoinPointParameters.TARGET_CALLER_ARGS;
    }
 
    protected void initialiseJoinPointNames(JoinPointInfo info)
@@ -286,23 +286,32 @@
          CtClass[] ctorParams1 = new CtClass[params.length + offset];
          CtClass[] ctorParams2 = new CtClass[offset];
          ctorParams1[0] = ctorParams2[0] = jp;
-         ctorParams1[1] = ctorParams2[1] = callingClass;
          if (hasTargetObject)
          {
-            ctorParams1[2] = ctorParams2[2] = targetClass;
+            ctorParams1[1] = ctorParams2[1] = targetClass;
+            ctorParams1[2] = ctorParams2[2] = callingClass;
          }
+         else
+         {
+            ctorParams1[1] = ctorParams2[1] = callingClass;
+         }
          System.arraycopy(params, 0, ctorParams1, offset, params.length);
                   
          StringBuffer body = new StringBuffer();
          body.append("{");
          body.append("   this($1." + INFO_FIELD + ");");
-         body.append("   super.callingObject=$2;");
          
+         
          if (hasTargetObject)
          {
-            body.append("   super.targetObject=$3;");
-            body.append("   this.").append(TARGET_FIELD).append("=$3;");
+            body.append("   super.targetObject=$2;");
+            body.append("   this.").append(TARGET_FIELD).append("=$2;");
+            body.append("   super.callingObject=$3;");
          }
+         else
+         {
+            body.append("   super.callingObject=$2;");
+         }
          
          StringBuffer setArguments = new StringBuffer();
          for (int i = offset ; i < ctorParams1.length ; i++)
@@ -337,8 +346,8 @@
          if (hasTargetObject)
          {
             CtClass[] invokeParams = new CtClass[params.length + 2];
-            invokeParams[0] = callingClass;
-            invokeParams[1] = targetClass;
+            invokeParams[0] = targetClass;
+            invokeParams[1] = callingClass;
             System.arraycopy(params, 0, invokeParams, 2, params.length);
             return invokeParams;
          }
@@ -402,7 +411,7 @@
          }
          else
          {
-            body.append(MethodExecutionTransformer.getAopReturnStr(isVoid) + "$2." + targetMethod.getName() + "(" + parameters + ");");
+            body.append(MethodExecutionTransformer.getAopReturnStr(isVoid) + "$1." + targetMethod.getName() + "(" + parameters + ");");
          }
 
          body.append("}");

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/CallerTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/CallerTestCase.java	2007-05-30 22:03:52 UTC (rev 63267)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/CallerTestCase.java	2007-05-31 04:51:35 UTC (rev 63268)
@@ -171,8 +171,41 @@
       assertAllAdvices(null, thrown);
    }
    
-   public void test12()
+   public void test12() throws POJOException
    {
+      TargetCallerPOJO caller = new TargetCallerPOJO(CallType.CONSTRUCTOR, false);
+      assertAllAdvices(caller, false);
+   }
+   
+   public void test13() throws POJOException
+   {
+      TargetCallerPOJO caller = new TargetCallerPOJO(CallType.METHOD, false);
+      assertAllAdvices(caller, false);
+   }
+   
+   public void test14() throws POJOException
+   {
+      TargetCallerPOJO caller = new TargetCallerPOJO(CallType.STATIC_METHOD, false);
+      assertAllAdvices(caller, false);
+   }
+   
+   public void test15()
+   {
+      testConCallerWithException(CallType.CONSTRUCTOR);
+   }
+   
+   public void test16()
+   {
+      testConCallerWithException(CallType.METHOD);
+   }
+   
+   public void test17()
+   {
+      testConCallerWithException(CallType.STATIC_METHOD);
+   }
+   
+   public void test18()
+   {
       // no call pointcut
       pojo.method1();
       
@@ -191,7 +224,7 @@
       assertFalse(CallerAspect.finally4);
    }
    
-   public void test13()
+   public void test19()
    {
       // no call pointcut
       boolean thrown = false;
@@ -222,6 +255,18 @@
    
    public void assertAllAdvices(Object caller, boolean error)
    {
+      assertAllAdvices(error);
+      assertSame(caller, CallerAspect.before2Caller);
+   }
+   
+   public void assertAllAdvicesNotNull(boolean error)
+   {
+      assertAllAdvices(error);
+      assertNotNull(CallerAspect.before2Caller);
+   }
+   
+   public void assertAllAdvices(boolean error)
+   {
       assertTrue(CallerAspect.before1);
       assertTrue(CallerAspect.before2);
       assertTrue(CallerAspect.before3);
@@ -236,7 +281,6 @@
       assertTrue(CallerAspect.finally2);
       assertTrue(CallerAspect.finally4);
       
-      assertSame(caller, CallerAspect.before2Caller);
       assertSame(CallerAspect.before2Caller, CallerAspect.before3Caller);
       assertSame(CallerAspect.before3Caller, CallerAspect.around2Caller);
       assertSame(CallerAspect.around2Caller, CallerAspect.around4Caller);
@@ -253,4 +297,19 @@
       assertSame(CallerAspect.around4Caller, CallerAspect.finally1Caller);
       assertSame(CallerAspect.finally1Caller, CallerAspect.finally4Caller);
    }
+   
+   private void testConCallerWithException(CallType callType)
+   {
+      boolean thrown = false;
+      try
+      {
+         new TargetCallerPOJO(callType, true);
+      }
+      catch(POJOException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      assertAllAdvices(thrown);
+   }
 }
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/TargetCallerPOJO.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/TargetCallerPOJO.java	2007-05-30 22:03:52 UTC (rev 63267)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/TargetCallerPOJO.java	2007-05-31 04:51:35 UTC (rev 63268)
@@ -21,6 +21,7 @@
  */
 package org.jboss.test.aop.beforeafterArgs;
 
+enum CallType {CONSTRUCTOR, METHOD, STATIC_METHOD}
 
 /**
  * Plain old java object used on both @Target and @Caller parameter tests.
@@ -38,6 +39,36 @@
       throw new POJOException();
    }
    
+   // test constructor calls
+   public TargetCallerPOJO(CallType callType, boolean throwException) throws POJOException
+   {
+      switch(callType)
+      {
+         case CONSTRUCTOR:
+            if (throwException)
+            {
+               new TargetCallerPOJO2(0, null);
+            }
+            new TargetCallerPOJO2(5);
+            break;
+         case METHOD:
+            TargetCallerPOJO2 pojo2 = new TargetCallerPOJO2();
+            if (throwException)
+            {
+               pojo2.method3_();
+            }
+            pojo2.method1_();
+            break;
+         case STATIC_METHOD:
+            if (throwException)
+            {
+               TargetCallerPOJO2.method4_();
+            }
+            TargetCallerPOJO2.method2_();
+            break;
+      }
+   }
+   
    public int field1;
    public static int field2;
    




More information about the jboss-cvs-commits mailing list