[jboss-cvs] JBossAS SVN: r59952 - 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
Tue Jan 23 14:32:00 EST 2007
Author: flavia.rainone at jboss.com
Date: 2007-01-23 14:32:00 -0500 (Tue, 23 Jan 2007)
New Revision: 59952
Modified:
projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConByConJoinPointGenerator.java
projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConByMethodJoinPointGenerator.java
projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructionJoinPointGenerator.java
projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructorJoinPointGenerator.java
projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/FieldJoinPointGenerator.java
projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/Instrumentor.java
projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java
projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodByConJoinPointGenerator.java
projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodByMethodJoinPointGenerator.java
projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodJoinPointGenerator.java
projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsAspect.java
projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsTestCase.java
Log:
[JBAOP-325] After advices (and throwing) can now access the arguments array used on around invocations,
and around invocations can now access the arguments array used on before advices.
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-01-23 19:05:12 UTC (rev 59951)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConByConJoinPointGenerator.java 2007-01-23 19:32:00 UTC (rev 59952)
@@ -201,9 +201,6 @@
String ciname;
CtClass jp;
- CtMethod invokeJoinpointMethod;
- CtConstructor publicConstructor;
- CtConstructor protectedConstructor;
CtClass[] params;
CtClass constructorInfoClass;
@@ -267,7 +264,7 @@
*/
private void addPublicConstructor() throws CannotCompileException
{
- publicConstructor = CtNewConstructor.make(
+ CtConstructor publicConstructor = CtNewConstructor.make(
new CtClass[] {constructorInfoClass},
new CtClass[0],
"{super($1, null, $1.getInterceptors()); this." + INFO_FIELD + " = $1;}",
@@ -279,30 +276,41 @@
* This constructor will be called by invokeJoinpoint in the generated subclass when we need to
* instantiate a joinpoint containing target and args
*/
- protected void addProtectedConstructor() throws CannotCompileException
+ protected void addProtectedConstructor()
+ throws CannotCompileException, NotFoundException
{
- CtClass[] ctorParams = new CtClass[params.length + 2];
- ctorParams[0] = jp;
- ctorParams[1] = callingClass;
- System.arraycopy(params, 0, ctorParams, 2, params.length);
-
+ CtClass[] ctorParams1 = new CtClass[params.length + 2];
+ CtClass[] ctorParams2 = new CtClass[3];
+ ctorParams1[0] = ctorParams2[0] = jp;
+ ctorParams1[1] = ctorParams2[1] = callingClass;
+ System.arraycopy(params, 0, ctorParams1, 2, params.length);
+ ctorParams2[2] = instrumentor.forName("java.lang.Object[]");
+
StringBuffer body = new StringBuffer();
body.append("{");
body.append(" this($1." + INFO_FIELD + ");");
body.append(" super.callingObject=$2;");
+ StringBuffer setArguments = new StringBuffer();
int offset = 2;
- for (int i = offset ; i < ctorParams.length ; i++)
+ for (int i = offset ; i < ctorParams1.length ; i++)
{
- body.append(" arg" + (i - offset) + " = $" + (i + 1) + ";");
+ setArguments.append(" arg" + (i - offset) + " = $" + (i + 1) + ";");
}
+ setArguments.append("}");
- body.append("}");
-
+ CtConstructor protectedConstructor = CtNewConstructor.make(
+ ctorParams1,
+ new CtClass[0],
+ body.toString() + setArguments.toString(),
+ jp);
+ protectedConstructor.setModifiers(Modifier.PROTECTED);
+ jp.addConstructor(protectedConstructor);
+
protectedConstructor = CtNewConstructor.make(
- ctorParams,
+ ctorParams2,
new CtClass[0],
- body.toString(),
+ body.toString() + " setArguments($3);}",
jp);
protectedConstructor.setModifiers(Modifier.PROTECTED);
jp.addConstructor(protectedConstructor);
@@ -323,7 +331,7 @@
*/
private CtMethod addInvokeJoinpointMethod() throws CannotCompileException, NotFoundException
{
- invokeJoinpointMethod = CtNewMethod.make(
+ CtMethod invokeJoinpointMethod = CtNewMethod.make(
targetClass,
INVOKE_JOINPOINT,
getInvokeJoinPointParameters(),
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConByMethodJoinPointGenerator.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConByMethodJoinPointGenerator.java 2007-01-23 19:05:12 UTC (rev 59951)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConByMethodJoinPointGenerator.java 2007-01-23 19:32:00 UTC (rev 59952)
@@ -211,9 +211,6 @@
String ciname;
CtClass jp;
- CtMethod invokeJoinpointMethod;
- CtConstructor publicConstructor;
- CtConstructor protectedConstructor;
CtClass[] params;
CtClass constructorInfoClass;
@@ -279,7 +276,7 @@
*/
private void addPublicConstructor() throws CannotCompileException
{
- publicConstructor = CtNewConstructor.make(
+ CtConstructor publicConstructor = CtNewConstructor.make(
new CtClass[] {constructorInfoClass},
new CtClass[0],
"{super($1, null, $1.getInterceptors()); this." + INFO_FIELD + " = $1;}",
@@ -292,18 +289,20 @@
* This constructor will be called by invokeJoinpoint in the generated subclass when we need to
* instantiate a joinpoint containing target and args
*/
- protected void addProtectedConstructor() throws CannotCompileException
+ protected void addProtectedConstructor()
+ throws CannotCompileException, NotFoundException
{
final int offset = (hasCallingObject) ? 2 : 1;
- CtClass[] ctorParams = new CtClass[params.length + offset];
- ctorParams[0] = jp;
-
+ CtClass[] ctorParams1 = new CtClass[params.length + offset];
+ CtClass[] ctorParams2 = new CtClass[offset + 1];
+ ctorParams1[0] = ctorParams2[0] = jp;
if (hasCallingObject)
{
- ctorParams[1] = callingClass;
+ ctorParams1[1] = ctorParams2[1] = callingClass;
}
- System.arraycopy(params, 0, ctorParams, offset, params.length);
-
+ System.arraycopy(params, 0, ctorParams1, offset, params.length);
+ ctorParams2[offset] = instrumentor.forName("java.lang.Object[]");
+
StringBuffer body = new StringBuffer();
body.append("{");
body.append(" this($1." + INFO_FIELD + ");");
@@ -313,21 +312,28 @@
body.append(" super.callingObject=$" + offset + ";");
}
- for (int i = offset ; i < ctorParams.length ; i++)
+ StringBuffer setArguments = new StringBuffer();
+ for (int i = offset ; i < ctorParams1.length ; i++)
{
- body.append(" arg" + (i - offset) + " = $" + (i + 1) + ";");
+ setArguments.append(" arg" + (i - offset) + " = $" + (i + 1) + ";");
}
+ setArguments.append("}");
- body.append("}");
+ CtConstructor protectedConstructor = CtNewConstructor.make(
+ ctorParams1,
+ new CtClass[0],
+ body.toString() + setArguments.toString(),
+ jp);
+ protectedConstructor.setModifiers(Modifier.PROTECTED);
+ jp.addConstructor(protectedConstructor);
+
protectedConstructor = CtNewConstructor.make(
- ctorParams,
+ ctorParams2,
new CtClass[0],
- body.toString(),
+ body.toString() + "setArguments($" + (offset + 1) + ");}",
jp);
protectedConstructor.setModifiers(Modifier.PROTECTED);
-
jp.addConstructor(protectedConstructor);
-
}
private CtClass[] getInvokeJoinPointParams()
@@ -349,7 +355,7 @@
*/
private CtMethod addInvokeJoinpointMethod() throws CannotCompileException, NotFoundException
{
- invokeJoinpointMethod = CtNewMethod.make(
+ CtMethod invokeJoinpointMethod = CtNewMethod.make(
targetClass,
INVOKE_JOINPOINT,
getInvokeJoinPointParams(),
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructionJoinPointGenerator.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructionJoinPointGenerator.java 2007-01-23 19:05:12 UTC (rev 59951)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructionJoinPointGenerator.java 2007-01-23 19:32:00 UTC (rev 59952)
@@ -176,9 +176,6 @@
int index;
CtClass jp;
- CtMethod invokeJoinpointMethod;
- CtConstructor publicConstructor;
- CtConstructor protectedConstructor;
CtField targetField;
CtClass[] originalParams;
CtClass[] params;
@@ -252,7 +249,7 @@
*/
private void addPublicConstructor() throws CannotCompileException
{
- publicConstructor = CtNewConstructor.make(
+ CtConstructor publicConstructor = CtNewConstructor.make(
new CtClass[] {constructionInfoClass},
new CtClass[0],
"{super($1, $1.getInterceptors()); this." + INFO_FIELD + " = $1;}",
@@ -265,12 +262,16 @@
* This constructor will be called by invokeJoinpoint in the generated subclass when we need to
* instantiate a joinpoint containing target and args
*/
- protected void addProtectedConstructor() throws CannotCompileException
+ protected void addProtectedConstructor()
+ throws CannotCompileException, NotFoundException
{
- CtClass[] ctorParams = new CtClass[params.length + 1];
- ctorParams[0] = jp;
- System.arraycopy(params, 0, ctorParams, 1, params.length);
-
+ CtClass[] ctorParams1 = new CtClass[params.length + 1];
+ CtClass[] ctorParams2 = new CtClass[3];
+ ctorParams1[0] = ctorParams2[0] = jp;
+ System.arraycopy(params, 0, ctorParams1, 1, params.length);
+ ctorParams2[1] = params[0];
+ ctorParams2[2] = instrumentor.forName("java.lang.Object[]");
+
StringBuffer body = new StringBuffer();
body.append("{");
body.append(" this($1." + INFO_FIELD + ");");
@@ -279,19 +280,27 @@
body.append(" this." + targetField.getName() + " = $2;");
body.append(" super.setTargetObject($2);");
- for (int i = offset ; i < ctorParams.length ; i++)
+ StringBuffer setArguments = new StringBuffer();
+ for (int i = offset ; i < ctorParams1.length ; i++)
{
- body.append(" arg" + (i - offset) + " = $" + (i + 1) + ";");
+ setArguments.append(" arg" + (i - offset) + " = $" + (i + 1) + ";");
}
-
- body.append("}");
+ setArguments.append("}");
+
+ CtConstructor protectedConstructor = CtNewConstructor.make(
+ ctorParams1,
+ new CtClass[0],
+ body.toString() + setArguments.toString(),
+ jp);
+ protectedConstructor.setModifiers(Modifier.PROTECTED);
+ jp.addConstructor(protectedConstructor);
+
protectedConstructor = CtNewConstructor.make(
- ctorParams,
+ ctorParams2,
new CtClass[0],
- body.toString(),
+ body.toString() + " setArguments($3);}",
jp);
protectedConstructor.setModifiers(Modifier.PROTECTED);
-
jp.addConstructor(protectedConstructor);
}
@@ -301,7 +310,7 @@
*/
private CtMethod addInvokeJoinpointMethod() throws CannotCompileException, NotFoundException
{
- invokeJoinpointMethod = CtNewMethod.make(
+ CtMethod invokeJoinpointMethod = CtNewMethod.make(
CtClass.voidType,
INVOKE_JOINPOINT,
params,
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructorJoinPointGenerator.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructorJoinPointGenerator.java 2007-01-23 19:05:12 UTC (rev 59951)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructorJoinPointGenerator.java 2007-01-23 19:32:00 UTC (rev 59952)
@@ -165,10 +165,6 @@
int index;
CtClass jp;
- CtMethod invokeJoinpointMethod;
- CtConstructor publicConstructor;
- CtConstructor protectedConstructor;
- CtField targetField;
CtClass[] params;
CtClass constructorInfoClass;
@@ -227,7 +223,7 @@
*/
private void addPublicConstructor() throws CannotCompileException
{
- publicConstructor = CtNewConstructor.make(
+ CtConstructor publicConstructor = CtNewConstructor.make(
new CtClass[] {constructorInfoClass},
new CtClass[0],
"{super($1, $1.getInterceptors()); this." + INFO_FIELD + " = $1;}",
@@ -240,31 +236,42 @@
* This constructor will be called by invokeJoinpoint in the generated subclass when we need to
* instantiate a joinpoint containing target and args
*/
- protected void addProtectedConstructor() throws CannotCompileException
+ protected void addProtectedConstructor()
+ throws CannotCompileException, NotFoundException
{
- CtClass[] ctorParams = new CtClass[params.length + 1];
- ctorParams[0] = jp;
- System.arraycopy(params, 0, ctorParams, 1, params.length);
-
+ CtClass[] ctorParams1 = new CtClass[params.length + 1];
+ CtClass[] ctorParams2 = new CtClass[2];
+ ctorParams1[0] = ctorParams2[0] = jp;
+ System.arraycopy(params, 0, ctorParams1, 1, params.length);
+ ctorParams2[1] = instrumentor.forName("java.lang.Object[]");
+
StringBuffer body = new StringBuffer();
body.append("{");
body.append(" this($1." + INFO_FIELD + ");");
int offset = 1;
- for (int i = offset ; i < ctorParams.length ; i++)
+ StringBuffer setArguments = new StringBuffer();
+ for (int i = offset ; i < ctorParams1.length ; i++)
{
- body.append(" arg" + (i - offset) + " = $" + (i + 1) + ";");
+ setArguments.append(" arg" + (i - offset) + " = $" + (i + 1) + ";");
}
+ setArguments.append("}");
- body.append("}");
+ CtConstructor protectedConstructor = CtNewConstructor.make(
+ ctorParams1,
+ new CtClass[0],
+ body.toString() + setArguments.toString(),
+ jp);
+ protectedConstructor.setModifiers(Modifier.PROTECTED);
+ jp.addConstructor(protectedConstructor);
+
protectedConstructor = CtNewConstructor.make(
- ctorParams,
+ ctorParams2,
new CtClass[0],
- body.toString(),
+ body.toString() + " setArguments($2);}",
jp);
protectedConstructor.setModifiers(Modifier.PROTECTED);
jp.addConstructor(protectedConstructor);
-
}
/**
@@ -273,7 +280,7 @@
*/
private CtMethod addInvokeJoinpointMethod() throws CannotCompileException, NotFoundException
{
- invokeJoinpointMethod = CtNewMethod.make(
+ CtMethod invokeJoinpointMethod = CtNewMethod.make(
advisedClass,
INVOKE_JOINPOINT,
params,
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/FieldJoinPointGenerator.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/FieldJoinPointGenerator.java 2007-01-23 19:05:12 UTC (rev 59951)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/FieldJoinPointGenerator.java 2007-01-23 19:32:00 UTC (rev 59952)
@@ -223,14 +223,9 @@
CtClass advisedClass;
CtField advisedField;
String finame;
- int index;
boolean hasTargetObject;
CtClass jp;
- CtMethod invokeJoinpointMethod;
- CtConstructor publicConstructor;
- CtConstructor protectedConstructor;
- CtField targetField;
CtClass fieldType;
CtClass fieldInfoClass;
boolean read;
@@ -293,7 +288,7 @@
private void addTypedTargetField()throws CannotCompileException
{
- targetField = new CtField(advisedClass, TARGET_FIELD, jp);
+ CtField targetField = new CtField(advisedClass, TARGET_FIELD, jp);
jp.addField(targetField);
targetField.setModifiers(Modifier.PROTECTED);
}
@@ -305,7 +300,7 @@
*/
private void addPublicConstructor() throws CannotCompileException
{
- publicConstructor = CtNewConstructor.make(
+ CtConstructor publicConstructor = CtNewConstructor.make(
new CtClass[] {fieldInfoClass},
new CtClass[0],
"{super($1, $1.getInterceptors()); this." + INFO_FIELD + " = $1;}",
@@ -321,7 +316,7 @@
protected void addProtectedConstructor() throws CannotCompileException, NotFoundException
{
- protectedConstructor = CtNewConstructor.make(
+ CtConstructor protectedConstructor = CtNewConstructor.make(
createProtectedCtorParams(),
new CtClass[0],
createProtectedCtorBody(),
@@ -475,7 +470,7 @@
protected CtMethod addInvokeJoinpointMethod() throws CannotCompileException, NotFoundException
{
- invokeJoinpointMethod = CtNewMethod.make(
+ CtMethod invokeJoinpointMethod = CtNewMethod.make(
advisedField.getType(),
INVOKE_JOINPOINT,
getInvokeJoinPointParams(),
@@ -561,7 +556,7 @@
protected CtMethod addInvokeJoinpointMethod() throws CannotCompileException, NotFoundException
{
- invokeJoinpointMethod = CtNewMethod.make(
+ CtMethod invokeJoinpointMethod = CtNewMethod.make(
CtClass.voidType,
JoinPointGenerator.INVOKE_JOINPOINT,
getInvokeJoinPointParams(),
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/Instrumentor.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/Instrumentor.java 2007-01-23 19:05:12 UTC (rev 59951)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/Instrumentor.java 2007-01-23 19:32:00 UTC (rev 59952)
@@ -262,9 +262,6 @@
String initializer = null;
if (mixin.getConstruction() == null)
{
- CtConstructor[] constructors = mixinClass.getConstructors();
- for (int i = 0; i < constructors.length; i++)
- System.out.println("constructors[" + i + "] = " + constructors[i].getSignature());
if (mixinClass.getConstructor("()V") == null)
{
throw new RuntimeException("Default constructor of mixin class '" +
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-01-23 19:05:12 UTC (rev 59951)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java 2007-01-23 19:32:00 UTC (rev 59952)
@@ -64,7 +64,7 @@
{
// TODO replace by enum
protected static class JoinPointParameters {
- public static final JoinPointParameters ONLY_ARGS = new JoinPointParameters(false, -1, false, -1, 0, "");
+ public static final JoinPointParameters ONLY_ARGS = new JoinPointParameters(false, -1, false, -1, 0, null);
public static final JoinPointParameters TARGET_ARGS = new JoinPointParameters(true, 1, false, -1, 1, "$1");
public static final JoinPointParameters CALLER_ARGS = new JoinPointParameters(false, -1, true, 1, 1, "$1");
public static final JoinPointParameters TARGET_CALLER_ARGS = new JoinPointParameters(true, 1, true, 2, 2, "$1, $2");
@@ -75,16 +75,16 @@
private int targetIndex;
private int callerIndex;
private int firstArgIndex;
- private String listPrefix;
+ private String targetCallerList;
- private JoinPointParameters(boolean target, int targetIndex, boolean caller, int callerIndex, int firstArgIndex, String listPrefix)
+ private JoinPointParameters(boolean target, int targetIndex, boolean caller, int callerIndex, int firstArgIndex, String targetCallerList)
{
this.target = target;
this.targetIndex = targetIndex;
this.caller = caller;
this.callerIndex = callerIndex;
this.firstArgIndex = firstArgIndex + 1;
- this.listPrefix = listPrefix;
+ this.targetCallerList = targetCallerList;
}
public final boolean hasTarget()
@@ -114,44 +114,40 @@
public final String declareArgsArray(int totalParameters)
{
+ StringBuffer buffer = new StringBuffer("Object[] ");
+ buffer.append(ARGUMENTS);
if (++totalParameters == firstArgIndex)
{
- return "Object[] " + ARGUMENTS + " = new Object[0];";
+ buffer.append(" = new Object[0];");
}
- StringBuffer buffer = new StringBuffer("Object[] ");
- buffer.append(ARGUMENTS);
- buffer.append(" = new Object[]{($w)$");
- buffer.append(firstArgIndex);
- for (int i = firstArgIndex + 1; i < totalParameters; i++)
+ else
{
- buffer.append(", ($w)$");
- buffer.append(i);
+ buffer.append(" = new Object[]{($w)$");
+ buffer.append(firstArgIndex);
+ for (int i = firstArgIndex + 1; i < totalParameters; i++)
+ {
+ buffer.append(", ($w)$");
+ buffer.append(i);
+ }
+ buffer.append("};");
}
- buffer.append("};");
return buffer.toString();
}
- public final void appendParameterListWithArgs(StringBuffer code, CtClass[] parameterTypes, boolean beginWithComma)
+ public final void appendParameterList(StringBuffer code, CtClass[] parameterTypes)
{
int j = firstArgIndex - 1;
int totalParameters = parameterTypes.length - j;
- if (listPrefix == "" && totalParameters == 0)
+ if (targetCallerList != null)
{
- return;
+ code.append(targetCallerList);
}
-
- if (beginWithComma)
- {
- code.append(", ");
- }
-
- code.append(listPrefix);
if (totalParameters == 0)
{
return;
}
- if (listPrefix.length() != 0)
+ if (targetCallerList != null)
{
code.append(", ");
}
@@ -164,7 +160,19 @@
castArgument(code, parameterTypes[j], i);
}
}
-
+
+ public final void appendParameterListWithArgs(StringBuffer code)
+ {
+ if (targetCallerList != null)
+ {
+ code.append(targetCallerList);
+ code.append(",");
+ }
+
+ code.append(ARGUMENTS);
+ }
+
+
private static final String[][] primitiveExtractions;
static{
@@ -232,33 +240,6 @@
code.append("]");
}
}
-
- public void appendArgsArrayList(StringBuffer code, CtClass[] parameterTypes)
- {
- int j = firstArgIndex - 1;
- int totalParameters = parameterTypes.length - j;
-
- if (totalParameters == 0)
- {
- return;
- }
- code.append("(");
- code.append(parameterTypes[j++].getName());
- code.append(") ");
- code.append(ARGUMENTS);
- code.append("[0]");
-
- for (int i = 1; i < totalParameters; i++, j++)
- {
- code.append(", (");
- code.append(parameterTypes[j].getName());
- code.append(") ");
- code.append(ARGUMENTS);
- code.append("[");
- code.append(i);
- code.append("]");
- }
- }
}
public static final String INFO_FIELD = "info";
@@ -276,6 +257,7 @@
private static final String RETURN_VALUE = "ret";
private static final String THROWABLE = "t";
private static final String ARGUMENTS= " arguments";
+ private static final String GET_ARGUMENTS= " getArguments()";
protected static final CtClass[] EMPTY_CTCLASS_ARRAY = new CtClass[0];
private JoinPointInfo oldInfo;
@@ -755,18 +737,23 @@
}
code.append(" try");
code.append(" {");
- boolean argsFound = addInvokeCode(DefaultAdviceCallStrategy.getInstance(),
+ boolean argsFoundBefore = addInvokeCode(DefaultAdviceCallStrategy.getInstance(),
setups.getBeforeSetups(), code);
- addAroundInvokeCode(code, setups, joinpointClass, argsFound, parameterTypes);
-
- argsFound = addInvokeCode(AfterAdviceCallStrategy.getInstance(),
- setups.getAfterSetups(), code) || argsFound;
-
- code.append(" }");
- code.append(" catch(java.lang.Throwable " + THROWABLE + ")");
- code.append(" {");
- argsFound = addInvokeCode(DefaultAdviceCallStrategy.getInstance(),
- setups.getThrowingSetups(), code) || argsFound;
+ // process after code
+ StringBuffer afterCode = new StringBuffer();
+ boolean argsFoundAfter = addInvokeCode(AfterAdviceCallStrategy.getInstance(),
+ setups.getAfterSetups(), afterCode);
+ afterCode.append(" }");
+ afterCode.append(" catch(java.lang.Throwable " + THROWABLE + ")");
+ afterCode.append(" {");
+ argsFoundAfter = addInvokeCode(DefaultAdviceCallStrategy.getInstance(),
+ setups.getThrowingSetups(), afterCode) || argsFoundAfter;
+ // add around according to whether @Args were found before and/or later
+ addAroundInvokeCode(code, setups, joinpointClass, argsFoundBefore,
+ argsFoundAfter, parameterTypes);
+ // add after code
+ code.append(afterCode.toString());
+ // finish code body
addHandleExceptionCode(code, declaredExceptions);
code.append(" }");
if (!isVoid())
@@ -775,12 +762,13 @@
}
code.append("}");;
- if (argsFound)
+ // declare arguments array if necessary
+ if (argsFoundBefore || argsFoundAfter)
{
code.insert(1, parameters.declareArgsArray(parameterTypes.length));
}
return code.toString();
- }
+ }
private boolean addInvokeCode(AdviceCallStrategy callStrategy, AdviceSetup[] setups, StringBuffer code) throws NotFoundException
{
@@ -800,7 +788,8 @@
private void addAroundInvokeCode(StringBuffer code, AdviceSetupsByType setups,
- CtClass joinpointClass, boolean argsFound, CtClass[] parameterTypes) throws NotFoundException
+ CtClass joinpointClass, boolean argsFoundBefore, boolean argsFoundAfter,
+ CtClass[] parameterTypes) throws NotFoundException
{
if (setups.getAroundSetups() != null)
{
@@ -827,15 +816,15 @@
code.append(" if(" + INFO_FIELD + ".getInterceptors() != null)");
code.append(" {");
- code.append(" " + joinpointFqn + " jp = new " + joinpointClass.getName() + "(this");
- if (argsFound)
+ code.append(" " + joinpointFqn + " jp = new " + joinpointClass.getName() + "(this, ");
+ if (argsFoundBefore)
{
- parameters.appendParameterListWithArgs(code, parameterTypes, true);
+ parameters.appendParameterListWithArgs(code);
}
else
{
- code.append(", $$");
+ code.append("$$");
}
code.append(aspects.toString() + cflows.toString() + ");");
@@ -845,17 +834,23 @@
}
code.append("jp.invokeNext();");
+ if (argsFoundAfter)
+ {
+ code.append(ARGUMENTS);
+ code.append(" = jp.getArguments();");
+ }
+
code.append(" }");
code.append(" else");
code.append(" {");
- addDispatchCode(code, parameterTypes, argsFound);
+ addDispatchCode(code, parameterTypes, argsFoundBefore);
code.append(" }");
}
else
{
- addDispatchCode(code, parameterTypes, argsFound);
+ addDispatchCode(code, parameterTypes, argsFoundBefore);
}
}
@@ -869,7 +864,7 @@
code.append("super.dispatch(");
if (argsFound)
{
- parameters.appendParameterListWithArgs(code, parameterTypes, false);
+ parameters.appendParameterList(code, parameterTypes);
}
else
{
@@ -938,17 +933,23 @@
private void createConstructors(ClassPool pool, CtClass superClass, CtClass clazz, AdviceSetupsByType setups) throws NotFoundException, CannotCompileException
{
CtConstructor[] superCtors = superClass.getDeclaredConstructors();
- if (superCtors.length != 2 && !this.getClass().equals(MethodJoinPointGenerator.class))
+ if (superCtors.length != 3 && !this.getClass().equals(MethodJoinPointGenerator.class)
+ && !FieldJoinPointGenerator.class.isAssignableFrom(this.getClass()))
{
- throw new RuntimeException("JoinPoints should only have 2 and only constructors, not " + superCtors.length);
+ throw new RuntimeException("JoinPoints should only have 3 and only constructors, not " + superCtors.length);
}
- else if (superCtors.length != 3 && this.getClass().equals(MethodJoinPointGenerator.class))
+ else if (superCtors.length != 2 && FieldJoinPointGenerator.class.isAssignableFrom(this.getClass()))
{
- throw new RuntimeException("Method JoinPoints should only have 2 and only constructors, not " + superCtors.length);
+ throw new RuntimeException("Field JoinPoints should only have 2 and only constructors, not " + superCtors.length);
}
+ else if (superCtors.length != 4 && this.getClass().equals(MethodJoinPointGenerator.class))
+ {
+ throw new RuntimeException("Method JoinPoints should only have 4 and only constructors, not " + superCtors.length);
+ }
int publicIndex = -1;
- int protectedIndex = -1;
+ int protectedIndex1 = -1;
+ int protectedIndex2 = -1;
int defaultIndex = -1;
for (int i = 0 ; i < superCtors.length ; i++)
@@ -961,13 +962,20 @@
}
else if (Modifier.isProtected(modifier))
{
- protectedIndex = i;
+ if (protectedIndex1 == -1)
+ {
+ protectedIndex1 = i;
+ }
+ else
+ {
+ protectedIndex2 = i;
+ }
}
}
- if (publicIndex < 0 || protectedIndex < 0)
+ if (publicIndex < 0 || protectedIndex1 < 0)
{
- throw new RuntimeException("One of the JoinPoint constructors should be public, the other protected");
+ throw new RuntimeException("One of the JoinPoint constructors should be public, and at least one of them should be protected");
}
if (defaultIndex >= 0)
@@ -976,7 +984,14 @@
}
createPublicConstructor(superCtors[publicIndex], clazz, setups);
- createProtectedConstructor(pool, superCtors[protectedIndex], clazz, setups);
+ if (protectedIndex2 == -1)
+ {
+ createProtectedConstructors(pool, superCtors[protectedIndex1], null, clazz, setups);
+ }
+ else
+ {
+ createProtectedConstructors(pool, superCtors[protectedIndex1], superCtors[protectedIndex2], clazz, setups);
+ }
createCopyConstructorAndMethod(pool, clazz);
}
@@ -1024,18 +1039,17 @@
}
/**
- * This is the constructor that will be called by the invokeJoinPoint() method, make sure it
- * copies across all the non-per-instance aspects
+ * These are the constructors that will be called by the invokeJoinPoint() method,
+ * make sure it copies across all the non-per-instance aspects
*/
- private void createProtectedConstructor(ClassPool pool, CtConstructor superCtor,
- CtClass clazz, AdviceSetupsByType setups)
+ private void createProtectedConstructors(ClassPool pool, CtConstructor superCtor1,
+ CtConstructor superCtor2, CtClass clazz, AdviceSetupsByType setups)
throws CannotCompileException, NotFoundException
{
- CtClass[] superParams = superCtor.getParameterTypes();
ArrayList<AdviceSetup> aspects = new ArrayList<AdviceSetup>();
ArrayList<Integer> cflows = new ArrayList<Integer>();
- StringBuffer adviceInit = new StringBuffer();
+ StringBuffer adviceInit = new StringBuffer();
AdviceSetup[] allSetups = setups.getAllSetups();
for (int i = 0 ; i < allSetups.length ; i++)
@@ -1062,18 +1076,32 @@
cflows.add(allSetups[i].useCFlowFrom());
}
}
-
- StringBuffer cflowInit = new StringBuffer();
-
- //Set up the parameters
+ createProtectedConstructor(pool, clazz, superCtor1, allSetups, aspects, cflows,
+ adviceInit.toString());
+ if (superCtor2 != null)
+ {
+ createProtectedConstructor(pool, clazz, superCtor2, allSetups, aspects, cflows,
+ adviceInit.toString());
+ }
+ }
+
+ private void createProtectedConstructor(ClassPool pool, CtClass clazz,
+ CtConstructor superCtor, AdviceSetup[] allSetups,
+ ArrayList<AdviceSetup> aspects, ArrayList<Integer> cflows,
+ String aspectInitialization)
+ throws NotFoundException, CannotCompileException
+ {
+ // Set up the parameters
+ CtClass[] superParams = superCtor.getParameterTypes();
CtClass[] params = new CtClass[superParams.length + aspects.size() + cflows.size()];
System.arraycopy(superParams, 0, params, 0, superParams.length);
+ StringBuffer init = new StringBuffer();
for (int i = 0 ; i < aspects.size() ; i++)
{
AdviceSetup setup = (AdviceSetup)aspects.get(i);
params[i + superParams.length] = setup.getAspectCtClass();
- adviceInit.append("this." + setup.getAspectFieldName() + " = $" + (i + superParams.length + 1) + ";");
+ init.append("this." + setup.getAspectFieldName() + " = $" + (i + superParams.length + 1) + ";");
}
final int aspectsLength = superParams.length + aspects.size();
if (cflows.size() > 0 )
@@ -1082,8 +1110,8 @@
for (int i = 0 ; i < cflows.size() ; i++)
{
params[i + aspectsLength] = astCFlowExpr;
- cflowInit.append("cflow" + cflows.get(i) + "= $" + (i + aspectsLength + 1) + ";");
- cflowInit.append("matchesCflow" + cflows.get(i) + " = getCFlow" + allSetups[i].useCFlowFrom() + "();");
+ init.append("cflow" + cflows.get(i) + "= $" + (i + aspectsLength + 1) + ";");
+ init.append("matchesCflow" + cflows.get(i) + " = getCFlow" + allSetups[i].useCFlowFrom() + "();");
}
}
@@ -1098,8 +1126,9 @@
}
body.append(");");
- body.append(adviceInit.toString());
- body.append(cflowInit.toString());
+ body.append(aspectInitialization);
+ body.append(init.toString());
+
body.append("}");
CtConstructor ctor = CtNewConstructor.make(
params,
@@ -1723,7 +1752,14 @@
}
break;
case AdviceMethodProperties.ARGS_ARG:
- code.append(ARGUMENTS);
+ if (isAround)
+ {
+ code.append(GET_ARGUMENTS);
+ }
+ else
+ {
+ code.append(ARGUMENTS);
+ }
// return true when args has been found; false otherwise
return true;
default:
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-01-23 19:05:12 UTC (rev 59951)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodByConJoinPointGenerator.java 2007-01-23 19:32:00 UTC (rev 59952)
@@ -194,10 +194,6 @@
boolean hasTargetObject;
CtClass jp;
- CtMethod invokeJoinpointMethod;
- CtConstructor publicConstructor;
- CtConstructor protectedConstructor;
- CtField targetField;
CtClass[] params;
CtClass methodInfoClass;
@@ -266,7 +262,7 @@
private void addTypedTargetField()throws CannotCompileException
{
- targetField = new CtField(targetClass, TARGET_FIELD, jp);
+ CtField targetField = new CtField(targetClass, TARGET_FIELD, jp);
jp.addField(targetField);
targetField.setModifiers(Modifier.PROTECTED);
}
@@ -277,7 +273,7 @@
*/
private void addPublicConstructor() throws CannotCompileException
{
- publicConstructor = CtNewConstructor.make(
+ CtConstructor publicConstructor = CtNewConstructor.make(
new CtClass[] {methodInfoClass},
new CtClass[0],
"{super($1, null, null, $1.getInterceptors()); this." + INFO_FIELD + " = $1;}",
@@ -290,18 +286,21 @@
* This constructor will be called by invokeJoinpoint in the generated subclass when we need to
* instantiate a joinpoint containing target and args
*/
- protected void addProtectedConstructor() throws CannotCompileException
+ protected void addProtectedConstructor()
+ throws CannotCompileException, NotFoundException
{
final int offset = hasTargetObject ? 3 : 2;
- CtClass[] ctorParams = new CtClass[params.length + offset];
- ctorParams[0] = jp;
- ctorParams[1] = callingClass;
+ CtClass[] ctorParams1 = new CtClass[params.length + offset];
+ CtClass[] ctorParams2 = new CtClass[offset + 1];
+ ctorParams1[0] = ctorParams2[0] = jp;
+ ctorParams1[1] = ctorParams2[1] = callingClass;
if (hasTargetObject)
{
- ctorParams[2] = targetClass;
+ ctorParams1[2] = ctorParams2[2] = targetClass;
}
- System.arraycopy(params, 0, ctorParams, offset, params.length);
-
+ System.arraycopy(params, 0, ctorParams1, offset, params.length);
+ ctorParams2[offset] = instrumentor.forName("java.lang.Object[]");
+
StringBuffer body = new StringBuffer();
body.append("{");
body.append(" this($1." + INFO_FIELD + ");");
@@ -312,23 +311,30 @@
body.append(" super.targetObject=$3;");
body.append(" this.tgt=$3;");
}
-
- for (int i = offset ; i < ctorParams.length ; i++)
+
+ StringBuffer setArguments = new StringBuffer();
+ for (int i = offset ; i < ctorParams1.length ; i++)
{
- body.append(" arg" + (i - offset) + " = $" + (i + 1) + ";");
+ setArguments.append(" arg" + (i - offset) + " = $" + (i + 1) + ";");
}
+ setArguments.append("}");
- body.append("}");
+ CtConstructor protectedConstructor = CtNewConstructor.make(
+ ctorParams1,
+ new CtClass[0],
+ body.toString() + setArguments.toString(),
+ jp);
+ protectedConstructor.setModifiers(Modifier.PROTECTED);
+ jp.addConstructor(protectedConstructor);
protectedConstructor = CtNewConstructor.make(
- ctorParams,
+ ctorParams2,
new CtClass[0],
- body.toString(),
+ body.toString() + "setArguments($" + (offset + 1) + ");}",
jp);
protectedConstructor.setModifiers(Modifier.PROTECTED);
jp.addConstructor(protectedConstructor);
-
}
@@ -354,7 +360,7 @@
*/
private CtMethod addInvokeJoinpointMethod() throws CannotCompileException, NotFoundException
{
- invokeJoinpointMethod = CtNewMethod.make(
+ CtMethod invokeJoinpointMethod = CtNewMethod.make(
targetMethod.getReturnType(),
INVOKE_JOINPOINT,
getInvokeJoinPointParameters(),
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodByMethodJoinPointGenerator.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodByMethodJoinPointGenerator.java 2007-01-23 19:05:12 UTC (rev 59951)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodByMethodJoinPointGenerator.java 2007-01-23 19:32:00 UTC (rev 59952)
@@ -203,10 +203,6 @@
boolean hasTargetObject;
CtClass jp;
- CtMethod invokeJoinpointMethod;
- CtConstructor publicConstructor;
- CtConstructor protectedConstructor;
- CtField targetField;
CtClass[] params;
CtClass methodInfoClass;
@@ -277,7 +273,7 @@
private void addTypedTargetField()throws CannotCompileException
{
- targetField = new CtField(targetClass, TARGET_FIELD, jp);
+ CtField targetField = new CtField(targetClass, TARGET_FIELD, jp);
jp.addField(targetField);
targetField.setModifiers(Modifier.PROTECTED);
}
@@ -288,7 +284,7 @@
*/
private void addPublicConstructor() throws CannotCompileException
{
- publicConstructor = CtNewConstructor.make(
+ CtConstructor publicConstructor = CtNewConstructor.make(
new CtClass[] {methodInfoClass},
new CtClass[0],
"{super($1, null, null, $1.getInterceptors()); this." + INFO_FIELD + " = $1;}",
@@ -301,19 +297,22 @@
* This constructor will be called by invokeJoinpoint in the generated subclass when we need to
* instantiate a joinpoint containing target and args
*/
- protected void addProtectedConstructor() throws CannotCompileException
+ protected void addProtectedConstructor()
+ throws CannotCompileException, NotFoundException
{
int offset = 1;
if (hasTargetObject) offset++;
if (hasCallingObject) offset++;
- CtClass[] ctorParams = new CtClass[params.length + offset];
+ CtClass[] ctorParams1 = new CtClass[params.length + offset];
+ CtClass[] ctorParams2 = new CtClass[offset + 1];
int index = 0;
- ctorParams[index++] = jp;
- if (hasTargetObject) ctorParams[index++] = targetClass;
- if (hasCallingObject) ctorParams[index] = callingClass;
- System.arraycopy(params, 0, ctorParams, offset, params.length);
-
+ ctorParams1[index] = ctorParams2[index++] = jp;
+ if (hasTargetObject) ctorParams1[index] = ctorParams2[index++] = targetClass;
+ if (hasCallingObject) ctorParams1[index] = ctorParams2[index++] = callingClass;
+ System.arraycopy(params, 0, ctorParams1, offset, params.length);
+ ctorParams2[index++] = instrumentor.forName("java.lang.Object[]");
+
StringBuffer body = new StringBuffer();
body.append("{");
body.append(" this($1." + INFO_FIELD + ");");
@@ -323,22 +322,29 @@
body.append(" this.tgt=$2;");
}
if (hasCallingObject) body.append(" super.callingObject=$" + (hasTargetObject ? 3 : 2) + ";");
-
- for (int i = offset ; i < ctorParams.length ; i++)
+
+ StringBuffer setArguments = new StringBuffer();
+ for (int i = offset ; i < ctorParams1.length ; i++)
{
- body.append(" arg" + (i - offset) + " = $" + (i + 1) + ";");
+ setArguments.append(" arg" + (i - offset) + " = $" + (i + 1) + ";");
}
+ setArguments.append("}");
- body.append("}");
+ CtConstructor protectedConstructor = CtNewConstructor.make(
+ ctorParams1,
+ new CtClass[0],
+ body.toString() + setArguments.toString(),
+ jp);
+ protectedConstructor.setModifiers(Modifier.PROTECTED);
+ jp.addConstructor(protectedConstructor);
+
protectedConstructor = CtNewConstructor.make(
- ctorParams,
+ ctorParams2,
new CtClass[0],
- body.toString(),
+ body.toString() + " setArguments($" + index + ");}",
jp);
protectedConstructor.setModifiers(Modifier.PROTECTED);
-
jp.addConstructor(protectedConstructor);
-
}
private CtClass[] getInvokeJoinpointParameters()
@@ -366,7 +372,7 @@
*/
private CtMethod addInvokeJoinpointMethod() throws CannotCompileException, NotFoundException
{
- invokeJoinpointMethod = CtNewMethod.make(
+ CtMethod invokeJoinpointMethod = CtNewMethod.make(
targetMethod.getReturnType(),
INVOKE_JOINPOINT,
getInvokeJoinpointParameters(),
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodJoinPointGenerator.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodJoinPointGenerator.java 2007-01-23 19:05:12 UTC (rev 59951)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodJoinPointGenerator.java 2007-01-23 19:32:00 UTC (rev 59952)
@@ -181,10 +181,7 @@
boolean hasTargetObject;
CtClass jp;
- CtMethod invokeJoinpointMethod;
- CtConstructor publicConstructor;
- CtConstructor protectedConstructor;
- CtField targetField;
+
CtClass[] originalParams;
CtClass[] params;
CtClass methodInfoClass;
@@ -218,7 +215,7 @@
addMethodInfoField();
addDefaultConstructor();
addPublicConstructor();
- addProtectedConstructor();
+ addProtectedConstructors();
addDispatchMethods();
TransformerCommon.compileOrLoadClass(advisedClass, jp);
@@ -252,7 +249,7 @@
private void addTypedTargetField()throws CannotCompileException
{
- targetField = new CtField(advisedClass, TARGET_FIELD, jp);
+ CtField targetField = new CtField(advisedClass, TARGET_FIELD, jp);
jp.addField(targetField);
targetField.setModifiers(Modifier.PROTECTED | Modifier.TRANSIENT);
}
@@ -273,7 +270,7 @@
*/
private void addPublicConstructor() throws CannotCompileException
{
- publicConstructor = CtNewConstructor.make(
+ CtConstructor publicConstructor = CtNewConstructor.make(
new CtClass[] {methodInfoClass},
new CtClass[0],
"{super($1, $1.getInterceptors()); this." + INFO_FIELD + " = $1;}",
@@ -283,14 +280,16 @@
}
/**
- * This constructor will be called by invokeJoinpoint in the generated subclass when we need to
+ * These constructor will be called by invokeJoinpoint in the generated subclass when we need to
* instantiate a joinpoint containing target and args
*/
- protected void addProtectedConstructor() throws CannotCompileException
+ protected void addProtectedConstructors() throws CannotCompileException, NotFoundException
{
- CtClass[] ctorParams = new CtClass[params.length + 1];
- ctorParams[0] = jp;
- System.arraycopy(params, 0, ctorParams, 1, params.length);
+ CtClass[] ctorParams1 = new CtClass[params.length + 1];
+ CtClass[] ctorParams2 = null;
+ ctorParams1[0] = jp;
+ // copy first parameter
+ System.arraycopy(params, 0, ctorParams1, 1, params.length);
StringBuffer body = new StringBuffer();
body.append("{");
@@ -299,26 +298,47 @@
int offset = 1;
if (hasTargetObject)
{
+ offset = 2;
+ // second version of constructor, that receives Arguments array
+ ctorParams2 = new CtClass[3];
+ System.arraycopy(ctorParams1, 0, ctorParams2, 0, 2);
+ ctorParams2[2] = instrumentor.forName("java.lang.Object[]");
+
body.append(" this." + TARGET_FIELD + " = $2;");
body.append(" super.setTargetObject($2);");
- offset = 2;
}
+ else
+ {
+ ctorParams2 = new CtClass[2];
+ ctorParams2[0] = ctorParams1[0];
+ ctorParams2[1] = ctorParams1[0].getClassPool().get("java.lang.Object[]");
+ }
- for (int i = offset ; i < ctorParams.length ; i++)
+
+ StringBuffer setArguments = new StringBuffer();
+ for (int i = offset ; i < ctorParams1.length ; i++)
{
- body.append(" arg" + (i - offset) + " = $" + (i + 1) + ";");
+ setArguments.append(" arg" + (i - offset) + " = $" + (i + 1) + ";");
}
- body.append("}");
- protectedConstructor = CtNewConstructor.make(
- ctorParams,
+ setArguments.append("}");
+
+ CtConstructor protectedConstructor = CtNewConstructor.make(
+ ctorParams1,
new CtClass[0],
- body.toString(),
+ body.toString() + setArguments.toString(),
jp);
protectedConstructor.setModifiers(Modifier.PROTECTED);
jp.addConstructor(protectedConstructor);
-
+
+ protectedConstructor = CtNewConstructor.make(
+ ctorParams2,
+ new CtClass[0],
+ body.toString() + " setArguments($" + (offset + 1) + ");}",
+ jp);
+ protectedConstructor.setModifiers(Modifier.PROTECTED);
+ jp.addConstructor(protectedConstructor);
}
/**
@@ -327,7 +347,7 @@
*/
private CtMethod addInvokeJoinpointMethod() throws CannotCompileException, NotFoundException
{
- invokeJoinpointMethod = CtNewMethod.make(
+ CtMethod invokeJoinpointMethod = CtNewMethod.make(
advisedMethod.getReturnType(),
INVOKE_JOINPOINT,
params,
Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsAspect.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsAspect.java 2007-01-23 19:05:12 UTC (rev 59951)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsAspect.java 2007-01-23 19:32:00 UTC (rev 59952)
@@ -61,8 +61,10 @@
static boolean around1 = false;
static boolean around2 = false;
+ static boolean around3 = false;
static Object[] around1Args = null;
static Object[] around2Args = null;
+ static Object[] around3Args = null;
static boolean throwing = false;
static Object[] throwingArgs = null;
@@ -95,8 +97,10 @@
around1 = false;
around2 = false;
+ around3 = false;
around1Args = null;
around2Args = null;
+ around3Args = null;
throwing = false;
throwingArgs = null;
@@ -219,6 +223,13 @@
return invocation.invokeNext();
}
+ public Object around3(MethodInvocation invocation, @Args Object[] arguments) throws Throwable
+ {
+ around3 = true;
+ around3Args = arguments;
+ return invocation.invokeNext();
+ }
+
public void throwing(@Args Object[] arguments, @Thrown Throwable throwable)
{
throwing = true;
Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsTestCase.java 2007-01-23 19:05:12 UTC (rev 59951)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsTestCase.java 2007-01-23 19:32:00 UTC (rev 59952)
@@ -199,7 +199,7 @@
assertEquals(6, ((Integer) ArgsAspect.before3Args[1]).intValue());
assertEquals(true, ((Boolean) ArgsAspect.before3Args[2]).booleanValue());
assertNull(ArgsAspect.before3Args[3]);
-
+ System.out.println("AROUND ARGS: " + ArgsAspect.around3Args);
assertFalse(ArgsAspect.before1);
assertFalse(ArgsAspect.before2);
assertFalse(ArgsAspect.before6);
@@ -224,6 +224,7 @@
assertNotNull(ArgsAspect.before7Args);
assertSame(ArgsAspect.before7Args, ArgsAspect.after7Args);
+ assertSame(ArgsAspect.before7Args, ArgsAspect.around1Args);
assertEquals(4, ArgsAspect.before7Args.length);
assertEquals("after7", ArgsAspect.before7Args[0]);
assertEquals(14, ((Integer) ArgsAspect.before7Args[1]).intValue());
@@ -233,15 +234,6 @@
assertEquals(1, ((ArgsPOJO[]) ArgsAspect.before7Args[3]).length);
assertNull(((ArgsPOJO[]) ArgsAspect.before7Args[3])[0]);
- assertNotNull(ArgsAspect.around1Args);
- assertEquals(4, ArgsAspect.around1Args.length);
- assertEquals("before7", ArgsAspect.around1Args[0]);
- assertEquals(7, ((Integer) ArgsAspect.around1Args[1]).intValue());
- assertEquals(true, ((Boolean) ArgsAspect.around1Args[2]).booleanValue());
-
- assertNotNull(ArgsAspect.around1Args[3]);
- assertEquals(0, ((ArgsPOJO[]) ArgsAspect.around1Args[3]).length);
-
assertFalse(ArgsAspect.before1);
assertFalse(ArgsAspect.before2);
assertFalse(ArgsAspect.before3);
More information about the jboss-cvs-commits
mailing list