[jboss-cvs] JBossAS SVN: r63268 - 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
Thu May 31 00:51:36 EDT 2007
Author: flavia.rainone at jboss.com
Date: 2007-05-31 00:51:35 -0400 (Thu, 31 May 2007)
New Revision: 63268
Modified:
projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConByConJoinPointGenerator.java
projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorCallerTransformer.java
projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodByConJoinPointGenerator.java
projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/CallerTestCase.java
projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/TargetCallerPOJO.java
Log:
[JBAOP-407] Bug fixed and tested.
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-05-30 22:03:52 UTC (rev 63267)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConByConJoinPointGenerator.java 2007-05-31 04:51:35 UTC (rev 63268)
@@ -69,7 +69,7 @@
public ConByConJoinPointGenerator(GeneratedClassAdvisor advisor, JoinPointInfo info)
{
- super(advisor, info, JoinPointParameters.ONLY_ARGS,
+ super(advisor, info, JoinPointParameters.CALLER_ARGS,
((ConByConInfo) info).getConstructor().getParameterTypes().length);
returnType = new WeakReference(((ConByConInfo)info).getCalledClass());
}
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorCallerTransformer.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorCallerTransformer.java 2007-05-30 22:03:52 UTC (rev 63267)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorCallerTransformer.java 2007-05-31 04:51:35 UTC (rev 63268)
@@ -116,8 +116,8 @@
if (hasTargetObject)
{
params = new CtClass[originalLength + 2];
- params[0] = callingClass;
- params[1] = instrumentor.forName(cd.classname); //target object
+ params[0] = instrumentor.forName(cd.classname); //target object
+ params[1] = callingClass;
System.arraycopy(cd.calledMethod.getParameterTypes(), 0, params, 2, originalLength);
}
else
@@ -131,7 +131,7 @@
if (hasTargetObject)
{
- proceed = MethodExecutionTransformer.getAopReturnStr(cd.calledMethod) + "$2." + cd.calledMethod.getName() + "(" + getArguments(params.length, 2) +");";
+ proceed = MethodExecutionTransformer.getAopReturnStr(cd.calledMethod) + "$1." + cd.calledMethod.getName() + "(" + getArguments(params.length, 2) +");";
}
else
{
@@ -461,7 +461,7 @@
}
else
{
- args = "this, $0" + ((paramsLength > 0) ? ", $$" : "");
+ args = "$0, this" + ((paramsLength > 0) ? ", $$" : "");
}
final String ret = (!cd.calledMethod.getReturnType().equals(CtClass.voidType)) ? "$_ = " : "";
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-05-30 22:03:52 UTC (rev 63267)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodByConJoinPointGenerator.java 2007-05-31 04:51:35 UTC (rev 63268)
@@ -77,9 +77,9 @@
{
if (Modifier.isStatic(info.getMethod().getModifiers()))
{
- return JoinPointParameters.ONLY_ARGS;
+ return JoinPointParameters.CALLER_ARGS;
}
- return JoinPointParameters.TARGET_ARGS;
+ return JoinPointParameters.TARGET_CALLER_ARGS;
}
protected void initialiseJoinPointNames(JoinPointInfo info)
@@ -286,23 +286,32 @@
CtClass[] ctorParams1 = new CtClass[params.length + offset];
CtClass[] ctorParams2 = new CtClass[offset];
ctorParams1[0] = ctorParams2[0] = jp;
- ctorParams1[1] = ctorParams2[1] = callingClass;
if (hasTargetObject)
{
- ctorParams1[2] = ctorParams2[2] = targetClass;
+ ctorParams1[1] = ctorParams2[1] = targetClass;
+ ctorParams1[2] = ctorParams2[2] = callingClass;
}
+ else
+ {
+ ctorParams1[1] = ctorParams2[1] = callingClass;
+ }
System.arraycopy(params, 0, ctorParams1, offset, params.length);
StringBuffer body = new StringBuffer();
body.append("{");
body.append(" this($1." + INFO_FIELD + ");");
- body.append(" super.callingObject=$2;");
+
if (hasTargetObject)
{
- body.append(" super.targetObject=$3;");
- body.append(" this.").append(TARGET_FIELD).append("=$3;");
+ body.append(" super.targetObject=$2;");
+ body.append(" this.").append(TARGET_FIELD).append("=$2;");
+ body.append(" super.callingObject=$3;");
}
+ else
+ {
+ body.append(" super.callingObject=$2;");
+ }
StringBuffer setArguments = new StringBuffer();
for (int i = offset ; i < ctorParams1.length ; i++)
@@ -337,8 +346,8 @@
if (hasTargetObject)
{
CtClass[] invokeParams = new CtClass[params.length + 2];
- invokeParams[0] = callingClass;
- invokeParams[1] = targetClass;
+ invokeParams[0] = targetClass;
+ invokeParams[1] = callingClass;
System.arraycopy(params, 0, invokeParams, 2, params.length);
return invokeParams;
}
@@ -402,7 +411,7 @@
}
else
{
- body.append(MethodExecutionTransformer.getAopReturnStr(isVoid) + "$2." + targetMethod.getName() + "(" + parameters + ");");
+ body.append(MethodExecutionTransformer.getAopReturnStr(isVoid) + "$1." + targetMethod.getName() + "(" + parameters + ");");
}
body.append("}");
Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/CallerTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/CallerTestCase.java 2007-05-30 22:03:52 UTC (rev 63267)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/CallerTestCase.java 2007-05-31 04:51:35 UTC (rev 63268)
@@ -171,8 +171,41 @@
assertAllAdvices(null, thrown);
}
- public void test12()
+ public void test12() throws POJOException
{
+ TargetCallerPOJO caller = new TargetCallerPOJO(CallType.CONSTRUCTOR, false);
+ assertAllAdvices(caller, false);
+ }
+
+ public void test13() throws POJOException
+ {
+ TargetCallerPOJO caller = new TargetCallerPOJO(CallType.METHOD, false);
+ assertAllAdvices(caller, false);
+ }
+
+ public void test14() throws POJOException
+ {
+ TargetCallerPOJO caller = new TargetCallerPOJO(CallType.STATIC_METHOD, false);
+ assertAllAdvices(caller, false);
+ }
+
+ public void test15()
+ {
+ testConCallerWithException(CallType.CONSTRUCTOR);
+ }
+
+ public void test16()
+ {
+ testConCallerWithException(CallType.METHOD);
+ }
+
+ public void test17()
+ {
+ testConCallerWithException(CallType.STATIC_METHOD);
+ }
+
+ public void test18()
+ {
// no call pointcut
pojo.method1();
@@ -191,7 +224,7 @@
assertFalse(CallerAspect.finally4);
}
- public void test13()
+ public void test19()
{
// no call pointcut
boolean thrown = false;
@@ -222,6 +255,18 @@
public void assertAllAdvices(Object caller, boolean error)
{
+ assertAllAdvices(error);
+ assertSame(caller, CallerAspect.before2Caller);
+ }
+
+ public void assertAllAdvicesNotNull(boolean error)
+ {
+ assertAllAdvices(error);
+ assertNotNull(CallerAspect.before2Caller);
+ }
+
+ public void assertAllAdvices(boolean error)
+ {
assertTrue(CallerAspect.before1);
assertTrue(CallerAspect.before2);
assertTrue(CallerAspect.before3);
@@ -236,7 +281,6 @@
assertTrue(CallerAspect.finally2);
assertTrue(CallerAspect.finally4);
- assertSame(caller, CallerAspect.before2Caller);
assertSame(CallerAspect.before2Caller, CallerAspect.before3Caller);
assertSame(CallerAspect.before3Caller, CallerAspect.around2Caller);
assertSame(CallerAspect.around2Caller, CallerAspect.around4Caller);
@@ -253,4 +297,19 @@
assertSame(CallerAspect.around4Caller, CallerAspect.finally1Caller);
assertSame(CallerAspect.finally1Caller, CallerAspect.finally4Caller);
}
+
+ private void testConCallerWithException(CallType callType)
+ {
+ boolean thrown = false;
+ try
+ {
+ new TargetCallerPOJO(callType, true);
+ }
+ catch(POJOException e)
+ {
+ thrown = true;
+ }
+ assertTrue(thrown);
+ assertAllAdvices(thrown);
+ }
}
\ No newline at end of file
Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/TargetCallerPOJO.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/TargetCallerPOJO.java 2007-05-30 22:03:52 UTC (rev 63267)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/TargetCallerPOJO.java 2007-05-31 04:51:35 UTC (rev 63268)
@@ -21,6 +21,7 @@
*/
package org.jboss.test.aop.beforeafterArgs;
+enum CallType {CONSTRUCTOR, METHOD, STATIC_METHOD}
/**
* Plain old java object used on both @Target and @Caller parameter tests.
@@ -38,6 +39,36 @@
throw new POJOException();
}
+ // test constructor calls
+ public TargetCallerPOJO(CallType callType, boolean throwException) throws POJOException
+ {
+ switch(callType)
+ {
+ case CONSTRUCTOR:
+ if (throwException)
+ {
+ new TargetCallerPOJO2(0, null);
+ }
+ new TargetCallerPOJO2(5);
+ break;
+ case METHOD:
+ TargetCallerPOJO2 pojo2 = new TargetCallerPOJO2();
+ if (throwException)
+ {
+ pojo2.method3_();
+ }
+ pojo2.method1_();
+ break;
+ case STATIC_METHOD:
+ if (throwException)
+ {
+ TargetCallerPOJO2.method4_();
+ }
+ TargetCallerPOJO2.method2_();
+ break;
+ }
+ }
+
public int field1;
public static int field2;
More information about the jboss-cvs-commits
mailing list