[jboss-cvs] JBossAS SVN: r60430 - projects/aop/trunk/aop/src/main/org/jboss/aop/instrument.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Feb 8 13:26:53 EST 2007


Author: flavia.rainone at jboss.com
Date: 2007-02-08 13:26:53 -0500 (Thu, 08 Feb 2007)
New Revision: 60430

Modified:
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java
Log:
[JBAOP-352] Integration of typed args with arguments array, and of arguments array with jp (around) arguments array

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-02-08 18:25:30 UTC (rev 60429)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java	2007-02-08 18:26:53 UTC (rev 60430)
@@ -736,7 +736,6 @@
    private String createJoinpointInvokeBody(CtClass joinpointClass,
          AdviceSetupsByType setups, CtClass[] declaredExceptions, CtClass[] parameterTypes)throws NotFoundException
    {
-
       StringBuffer code = new StringBuffer();
       code.append("{");
       if (!isVoid())
@@ -760,7 +759,12 @@
       code.append("   {");
       boolean argsFoundBefore = DefaultAdviceCallStrategy.getInstance().
          addInvokeCode(this, setups.getBeforeSetups(), code);
-      // process after code
+      
+      // add around according to whether @Args were found before
+      boolean joinPointCreated = addAroundInvokeCode(code, setups, joinpointClass,
+            argsFoundBefore, parameterTypes);
+      
+      // generate after code
       StringBuffer afterCode = new StringBuffer();
       boolean argsFoundAfter = AfterAdviceCallStrategy.getInstance().addInvokeCode(
             this, setups.getAfterSetups(), afterCode);
@@ -769,9 +773,13 @@
       afterCode.append("   {");
       argsFoundAfter = DefaultAdviceCallStrategy.getInstance().addInvokeCode(this,
             setups.getThrowingSetups(), afterCode) || argsFoundAfter;
-      // add around according to whether @Args were found before and/or later
-      addAroundInvokeCode(code, setups, joinpointClass, argsFoundBefore,
-            argsFoundAfter, parameterTypes);
+      
+      if ((argsFoundAfter || argsFoundBefore) && joinPointCreated)
+      {
+         code.append(ARGUMENTS);
+         code.append(" = jp.").append(GET_ARGUMENTS).append(";");
+      }
+      
       // add after code
       code.append(afterCode.toString());
       // finish code body
@@ -791,9 +799,9 @@
       return code.toString();
    }
 
-   private void addAroundInvokeCode(StringBuffer code, AdviceSetupsByType setups,
-         CtClass joinpointClass, boolean argsFoundBefore, boolean argsFoundAfter,
-         CtClass[] parameterTypes) throws NotFoundException
+   private boolean addAroundInvokeCode(StringBuffer code, AdviceSetupsByType setups,
+         CtClass joinpointClass, boolean argsFoundBefore, CtClass[] parameterTypes)
+   throws NotFoundException
    {
       if (setups.getAroundSetups() != null)
       {
@@ -817,10 +825,10 @@
                cflows.append(", cflow" + asetups[i].getIndex());
             }
          }
-
+         code.append(joinpointFqn).append(" jp = null;");
          code.append("      if(" + INFO_FIELD + ".getInterceptors() != null)");
          code.append("      {");
-         code.append("         " + joinpointFqn + " jp = new " + joinpointClass.getName() + "(this");
+         code.append("         jp = new " + joinpointClass.getName() + "(this");
          if (argsFoundBefore)
          {
             parameters.appendParameterListWithoutArgs(code);
@@ -846,12 +854,6 @@
          }
          code.append("jp.invokeNext();");
          
-         if (argsFoundAfter)
-         {
-            code.append(ARGUMENTS);
-            code.append(" = jp.").append(GET_ARGUMENTS).append(";");
-         }
-         
          code.append("      }");
          code.append("      else");
          code.append("      {");
@@ -859,10 +861,16 @@
          addDispatchCode(code, parameterTypes, argsFoundBefore);
          
          code.append("      }");
+         
+         // 'after' code will find all args inconsistent, since we have to update
+         // arguments array according to invocation values
+         inconsistentTypeArgs.get().addAll(joinPointArguments);
+         return true;
       }
       else
       {
          addDispatchCode(code, parameterTypes, argsFoundBefore);
+         return false;
       }
    }
 




More information about the jboss-cvs-commits mailing list