[jboss-cvs] JBossAS SVN: r58814 - projects/aop/trunk/aop/src/main/org/jboss/aop/advice

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Dec 1 22:43:01 EST 2006


Author: flaviarnn
Date: 2006-12-01 22:42:57 -0500 (Fri, 01 Dec 2006)
New Revision: 58814

Modified:
   projects/aop/trunk/aop/src/main/org/jboss/aop/advice/PerVmAdvice.java
Log:
[JBAOP-37] Temporary workaround to deal with inverted parameters on around advices.

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/advice/PerVmAdvice.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/advice/PerVmAdvice.java	2006-12-02 01:03:21 UTC (rev 58813)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/advice/PerVmAdvice.java	2006-12-02 03:42:57 UTC (rev 58814)
@@ -151,12 +151,23 @@
             invokeBody.append("{  ");
             if (matches.size() > 1)
             {
+               boolean noArg = false;
                for (int i = 0; i < matches.size(); i++)
                {
                   Method advice = (Method) matches.get(i);
-                  String param = advice.getParameterTypes()[0].getName();
-                  invokeBody.append("   if ($1 instanceof " + param + ") return aspectField." + adviceName + "((" + param + ")$1); ");
+                  if (advice.getParameterTypes().length > 0)
+                  {
+                     String param = advice.getParameterTypes()[0].getName();
+                     invokeBody.append("   if ($1 instanceof " + param + ") return aspectField." + adviceName + "((" + param + ")$1); ");
+                  }
+                  else
+                  {
+                     noArg = true;
+                     invokeBody.append("   return aspectField." + adviceName + "(); ");
+                     break;
+                  }
                }
+               if (!noArg)
                invokeBody.append("   return (org.jboss.aop.joinpoint.Invocation)null; ");
             }
             else
@@ -209,7 +220,8 @@
 
       // invoke
       String invokeBody = null;
-      if (Invocation.class.isAssignableFrom(advice.getParameterTypes()[0]))
+      if (advice.getParameterTypes().length > 0 &&
+         Invocation.class.isAssignableFrom(advice.getParameterTypes()[0]))
       {
          invokeBody = getInvocationBody(optimized, advice, method);
       }
@@ -242,7 +254,8 @@
       boolean first = true;
       if (adviceParams.length > 0)
       {
-         int adviceParam = 0;
+      // TODO review this with Kabir
+         /*int adviceParam = 0;
          for (int i = 0; i < params.length && adviceParam < adviceParams.length; i++)
          {
             if (adviceParams[adviceParam].equals(params[i]))
@@ -258,6 +271,35 @@
                }
                invokeBody += "optimized.arg" + i;
             }
+         }*/
+         boolean[] assignedParams = new boolean[params.length];
+         for (int i = 0; i < adviceParams.length; i++)
+         {
+            int j;
+            for (j = 0; j < params.length; j++)
+            {
+               if (adviceParams[i].equals(params[j]) && !assignedParams[j])
+               {
+                  break;
+               }
+            }
+            if (j == params.length)
+            {
+               for (j = 0; j < params.length; j++)
+               {
+                  if (adviceParams[i].isAssignableFrom(params[j]) && !assignedParams[j])
+                     break;
+               }
+               if (j == params.length)
+                  throw new RuntimeException();
+            }
+            assignedParams[j] = true;
+            if (i != 0)
+            {
+               invokeBody += ", ";
+            }
+            invokeBody += "optimized.arg" + j;
+            
          }
       }
       invokeBody += "); ";




More information about the jboss-cvs-commits mailing list