[jboss-cvs] JBossAS SVN: r64038 - in projects/aop/trunk/aop/src/main/org/jboss/aop: advice/annotation and 1 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Jul 13 11:01:40 EDT 2007
Author: flavia.rainone at jboss.com
Date: 2007-07-13 11:01:40 -0400 (Fri, 13 Jul 2007)
New Revision: 64038
Modified:
projects/aop/trunk/aop/src/main/org/jboss/aop/advice/AdviceMethodProperties.java
projects/aop/trunk/aop/src/main/org/jboss/aop/advice/annotation/AdviceMethodFactory.java
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/FieldJoinPointGenerator.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
Log:
[JBAOP-431] Casting is now done only when the method is overloaded.
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/advice/AdviceMethodProperties.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/advice/AdviceMethodProperties.java 2007-07-13 14:55:24 UTC (rev 64037)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/advice/AdviceMethodProperties.java 2007-07-13 15:01:40 UTC (rev 64038)
@@ -66,6 +66,8 @@
//found properties
private Method adviceMethod;
private int[] args;
+
+ private boolean overloadedMethod;
public AdviceMethodProperties(
Class aspectClass,
@@ -209,4 +211,14 @@
{
this.optionalParameters = optionalParameters;
}
+
+ public boolean isAdviceOverloaded()
+ {
+ return this.overloadedMethod;
+ }
+
+ public void setAdviceOverloaded(boolean overloaded)
+ {
+ this.overloadedMethod = overloaded;
+ }
}
\ No newline at end of file
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/advice/annotation/AdviceMethodFactory.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/advice/annotation/AdviceMethodFactory.java 2007-07-13 14:55:24 UTC (rev 64037)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/advice/annotation/AdviceMethodFactory.java 2007-07-13 15:01:40 UTC (rev 64038)
@@ -285,6 +285,7 @@
}
// assign best Advice info to properties
bestAdvice.assignAdviceInfo(properties);
+ properties.setAdviceOverloaded(rankedAdvices.size() > 1);
}
return properties;
}
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-07-13 14:55:24 UTC (rev 64037)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConByConJoinPointGenerator.java 2007-07-13 15:01:40 UTC (rev 64038)
@@ -187,6 +187,7 @@
GeneratedAdvisorInstrumentor instrumentor;
CtClass callingClass;
int callingIndex;
+ CtField callingField;
String classname;
CtClass targetClass;
CtConstructor targetCtor;
@@ -223,6 +224,7 @@
jp = setupClass();
OptimizedBehaviourInvocations.addArgumentFieldsAndAccessors(
instrumentor.getClassPool(), jp, params, false);
+ addTypedCallingField();
addInvokeJoinpointMethod();
addMethodInfoField();
addPublicConstructor();
@@ -243,6 +245,13 @@
addUntransformableInterface(instrumentor, jp);
return jp;
}
+
+ private void addTypedCallingField()throws CannotCompileException
+ {
+ callingField = new CtField(callingClass, TYPED_CALLER_FIELD, jp);
+ jp.addField(callingField);
+ callingField.setModifiers(Modifier.PROTECTED);
+ }
/**
* This constructor is used by the advisor when we have regenerated the joinpoint.
@@ -274,7 +283,8 @@
StringBuffer body = new StringBuffer();
body.append("{");
body.append(" this($1." + INFO_FIELD + ");");
- body.append(" super.callingObject=$2;");
+ body.append(" super.").append(CALLER_FIELD).append("=$2;");
+ body.append(" this.").append(callingField.getName()).append("=$2;");
StringBuffer setArguments = new StringBuffer();
int offset = 2;
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-07-13 14:55:24 UTC (rev 64037)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConByMethodJoinPointGenerator.java 2007-07-13 15:01:40 UTC (rev 64038)
@@ -236,6 +236,7 @@
jp = setupClass();
OptimizedBehaviourInvocations.addArgumentFieldsAndAccessors(
instrumentor.getClassPool(), jp, params, false);
+ addTypedCallingField();
addInvokeJoinpointMethod();
addMethodInfoField();
addPublicConstructor();
@@ -256,6 +257,13 @@
addUntransformableInterface(instrumentor, jp);
return jp;
}
+
+ private void addTypedCallingField()throws CannotCompileException
+ {
+ CtField callingField = new CtField(callingClass, TYPED_CALLER_FIELD, jp);
+ jp.addField(callingField);
+ callingField.setModifiers(Modifier.PROTECTED);
+ }
/**
* This constructor is used by the advisor when we have regenerated the joinpoint.
@@ -295,7 +303,10 @@
if (hasCallingObject)
{
- body.append(" super.callingObject=$" + offset + ";");
+ body.append(" super.").append(CALLER_FIELD);
+ body.append("=$").append(offset).append(';');
+ body.append(" this.").append(TYPED_CALLER_FIELD);
+ body.append("=$").append(offset).append(';');
}
StringBuffer setArguments = new StringBuffer();
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-07-13 14:55:24 UTC (rev 64037)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructionJoinPointGenerator.java 2007-07-13 15:01:40 UTC (rev 64038)
@@ -221,7 +221,7 @@
private void addTypedTargetField()throws CannotCompileException
{
- targetField = new CtField(advisedClass, TARGET_FIELD, jp);
+ targetField = new CtField(advisedClass, TYPED_TARGET_FIELD, jp);
jp.addField(targetField);
targetField.setModifiers(Modifier.PROTECTED);
}
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-07-13 14:55:24 UTC (rev 64037)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/FieldJoinPointGenerator.java 2007-07-13 15:01:40 UTC (rev 64038)
@@ -298,7 +298,7 @@
private void addTypedTargetField()throws CannotCompileException
{
- CtField targetField = new CtField(advisedClass, TARGET_FIELD, jp);
+ CtField targetField = new CtField(advisedClass, TYPED_TARGET_FIELD, jp);
jp.addField(targetField);
targetField.setModifiers(Modifier.PROTECTED);
}
@@ -338,7 +338,7 @@
if (hasTargetObject)
{
- body.append(" this." + TARGET_FIELD + " = $2;");
+ body.append(" this." + TYPED_TARGET_FIELD + " = $2;");
body.append(" super.setTargetObject($2);");
}
@@ -514,7 +514,7 @@
protected String createInvokeNextDispatchMethodBody()
{
return (hasTargetObject) ?
- "{return " + TARGET_FIELD + "." + advisedField.getName() + ";}" :
+ "{return " + TYPED_TARGET_FIELD + "." + advisedField.getName() + ";}" :
"{return " + advisedClass.getName() + "." + advisedField.getName() + ";}";
}
@@ -605,11 +605,11 @@
return
"{" +
((hasTargetObject) ?
- TARGET_FIELD + "." + advisedField.getName() + " = " + value:
+ TYPED_TARGET_FIELD + "." + advisedField.getName() + " = " + value:
advisedClass.getName() + "." + advisedField.getName() + " = " + value) +
((hasTargetObject) ?
- "; return " + TARGET_FIELD + "." + advisedField.getName() + ";" :
+ "; return " + TYPED_TARGET_FIELD + "." + advisedField.getName() + ";" :
"; return " + advisedClass.getName() + "." + advisedField.getName() + ";") +
"}";
}
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-07-13 14:55:24 UTC (rev 64037)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java 2007-07-13 15:01:40 UTC (rev 64038)
@@ -82,8 +82,10 @@
public static final String INVOKE_JOINPOINT = "invokeJoinpoint";
public static final String INVOKE_TARGET = "invokeTarget";
public static final String DISPATCH = "dispatch";
- protected static final String TARGET_FIELD = "typedTargetObject";
+ protected static final String TARGET_FIELD = "targetObject";
+ protected static final String TYPED_TARGET_FIELD = "typedTargetObject";
protected static final String CALLER_FIELD = "callingObject";
+ protected static final String TYPED_CALLER_FIELD = "typedCallingObject";
protected static final String GENERATED_CLASS_ADVISOR = GeneratedClassAdvisor.class.getName();
public static final String GENERATE_JOINPOINT_CLASS = "generateJoinPointClass";
private static final String CURRENT_ADVICE = "super.currentInterceptor";
@@ -539,7 +541,7 @@
{
if (setup.requiresInstanceAdvisor())
{
- String instanceAdvisor = (isCaller()) ? "callingObject" : "targetObject";
+ String instanceAdvisor = (isCaller()) ? CALLER_FIELD : TARGET_FIELD;
return getPerInstanceAspectCode(instanceAdvisor, setup, true);
}
@@ -1669,12 +1671,19 @@
if (args.length > 0)
{
final Class[] adviceParams = properties.getAdviceMethod().getParameterTypes();
+ if (properties.isAdviceOverloaded())
+ {
+ appendCast(call, adviceParams[0]);
+ }
argsFound = appendParameter(beforeCall, call, args[0], adviceParams[0], properties,
generator);
for (int i = 1 ; i < args.length ; i++)
{
call.append(", ");
-
+ if (properties.isAdviceOverloaded())
+ {
+ appendCast(call, adviceParams[i]);
+ }
argsFound = appendParameter(beforeCall, call, args[i], adviceParams[i],
properties, generator) || argsFound;
}
@@ -1697,15 +1706,12 @@
call.append(INFO_FIELD);
break;
case AdviceMethodProperties.RETURN_ARG:
- appendCast(call, adviceParam);
call.append(RETURN_VALUE);
break;
case AdviceMethodProperties.THROWABLE_ARG:
- appendCast(call, adviceParam);
call.append(THROWABLE);
break;
case AdviceMethodProperties.TARGET_ARG:
- appendCast(call, adviceParam);
if (!generator.parameters.hasTarget())
{
call.append("null");
@@ -1717,7 +1723,6 @@
}
break;
case AdviceMethodProperties.CALLER_ARG:
- appendCast(call, adviceParam);
if (!generator.parameters.hasCaller())
{
call.append("null");
@@ -1736,8 +1741,7 @@
// return true when args has been found; false otherwise
return true;
default:
- appendCast(call, adviceParam);
-
+
// make typed argument consistent, if that is the case
Set<Integer> inconsistentTypeArgs = generator.inconsistentTypeArgs.get();
int argIndex = arg + generator.parameters.getFirstArgIndex();
@@ -1804,6 +1808,7 @@
}
boolean result = false;
+
AdviceMethodProperties properties = AdviceMethodFactory.AROUND.
findAdviceMethod(generator.getAdviceMethodProperties(info, setup));
if (properties == null || properties.getAdviceMethod() == null)
@@ -1861,21 +1866,19 @@
final int arg, final Class adviceParam,
AdviceMethodProperties properties, JoinPointGenerator generator)
{
-
switch(arg)
{
case AdviceMethodProperties.TARGET_ARG:
if (generator.parameters.hasTarget())
{
- call.append(TARGET_FIELD);
+ call.append(TYPED_TARGET_FIELD);
return false;
}
break;
case AdviceMethodProperties.CALLER_ARG:
if (generator.parameters.hasCaller())
{
- appendCast(call, adviceParam);
- call.append(CALLER_FIELD);
+ call.append(TYPED_CALLER_FIELD);
return false;
}
break;
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-07-13 14:55:24 UTC (rev 64037)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodByConJoinPointGenerator.java 2007-07-13 15:01:40 UTC (rev 64038)
@@ -191,6 +191,7 @@
GeneratedAdvisorInstrumentor instrumentor;
CtClass callingClass;
int callingIndex;
+ CtField callingField;
CtClass targetClass;
String classname;
CtMethod targetMethod;
@@ -233,6 +234,7 @@
{
addTypedTargetField();
}
+ addTypedCallingField();
addInvokeJoinpointMethod();
addMethodInfoField();
addPublicConstructor();
@@ -261,10 +263,18 @@
private void addTypedTargetField()throws CannotCompileException
{
- CtField targetField = new CtField(targetClass, TARGET_FIELD, jp);
+ CtField targetField = new CtField(targetClass, TYPED_TARGET_FIELD, jp);
jp.addField(targetField);
targetField.setModifiers(Modifier.PROTECTED);
}
+
+ private void addTypedCallingField()throws CannotCompileException
+ {
+ callingField = new CtField(callingClass, TYPED_CALLER_FIELD, jp);
+ jp.addField(callingField);
+ callingField.setModifiers(Modifier.PROTECTED);
+ }
+
/**
* This constructor is used by the advisor when we have regenerated the joinpoint.
* This just creates a generic JoinPoint instance with no data specific to the
@@ -309,13 +319,15 @@
if (hasTargetObject)
{
- body.append(" super.targetObject=$2;");
- body.append(" this.").append(TARGET_FIELD).append("=$2;");
- body.append(" super.callingObject=$3;");
+ body.append(" super.").append(TARGET_FIELD).append("=$2;");
+ body.append(" this.").append(TYPED_TARGET_FIELD).append("=$2;");
+ body.append(" super.").append(CALLER_FIELD).append("=$3;");
+ body.append(" this.").append(callingField.getName()).append("=$3;");
}
else
{
- body.append(" super.callingObject=$2;");
+ body.append(" super.").append(CALLER_FIELD).append("=$2;");
+ body.append(" this.").append(callingField.getName()).append("=$2;");
}
StringBuffer setArguments = new StringBuffer();
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-07-13 14:55:24 UTC (rev 64037)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodByMethodJoinPointGenerator.java 2007-07-13 15:01:40 UTC (rev 64038)
@@ -246,6 +246,10 @@
{
addTypedTargetField();
}
+ if (hasCallingObject)
+ {
+ addTypedCallingField();
+ }
addInvokeJoinpointMethod();
addMethodInfoField();
addPublicConstructor();
@@ -274,10 +278,18 @@
private void addTypedTargetField()throws CannotCompileException
{
- CtField targetField = new CtField(targetClass, TARGET_FIELD, jp);
+ CtField targetField = new CtField(targetClass, TYPED_TARGET_FIELD, jp);
jp.addField(targetField);
targetField.setModifiers(Modifier.PROTECTED);
}
+
+ private void addTypedCallingField()throws CannotCompileException
+ {
+ CtField callingField = new CtField(callingClass, TYPED_CALLER_FIELD, jp);
+ jp.addField(callingField);
+ callingField.setModifiers(Modifier.PROTECTED);
+ }
+
/**
* This constructor is used by the advisor when we have regenerated the joinpoint.
* This just creates a generic JoinPoint instance with no data specific to the
@@ -317,10 +329,17 @@
body.append(" this($1." + INFO_FIELD + ");");
if (hasTargetObject)
{
- body.append(" super.targetObject=$2;");
- body.append(" this.").append(TARGET_FIELD).append("=$2;");
+ body.append(" super.").append(TARGET_FIELD).append("=$2;");
+ body.append(" this.").append(TYPED_TARGET_FIELD).append("=$2;");
}
- if (hasCallingObject) body.append(" super.callingObject=$" + (hasTargetObject ? 3 : 2) + ";");
+ if (hasCallingObject)
+ {
+ int arg = hasTargetObject ? 3 : 2;
+ body.append(" super.").append(CALLER_FIELD);
+ body.append("=$").append(arg).append(';');
+ body.append(" this.").append(TYPED_CALLER_FIELD);
+ body.append("=$").append(arg).append(';');
+ }
StringBuffer setArguments = new StringBuffer();
for (int i = offset ; i < ctorParams1.length ; i++)
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-07-13 14:55:24 UTC (rev 64037)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodJoinPointGenerator.java 2007-07-13 15:01:40 UTC (rev 64038)
@@ -254,7 +254,7 @@
private void addTypedTargetField()throws CannotCompileException
{
- CtField targetField = new CtField(advisedClass, TARGET_FIELD, jp);
+ CtField targetField = new CtField(advisedClass, TYPED_TARGET_FIELD, jp);
jp.addField(targetField);
targetField.setModifiers(Modifier.PROTECTED | Modifier.TRANSIENT);
}
@@ -308,7 +308,7 @@
ctorParams2 = new CtClass[2];
System.arraycopy(ctorParams1, 0, ctorParams2, 0, 2);
- body.append(" this." + TARGET_FIELD + " = $2;");
+ body.append(" this." + TYPED_TARGET_FIELD + " = $2;");
body.append(" super.setTargetObject($2);");
}
else
More information about the jboss-cvs-commits
mailing list