[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