[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