[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