[jboss-cvs] JBossAS SVN: r59954 - projects/aop/trunk/aop/src/main/org/jboss/aop/instrument.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Jan 23 16:08:17 EST 2007


Author: flavia.rainone at jboss.com
Date: 2007-01-23 16:08:16 -0500 (Tue, 23 Jan 2007)
New Revision: 59954

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/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-325] Duplicate constructor issue is solved.

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 20:03:19 UTC (rev 59953)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConByConJoinPointGenerator.java	2007-01-23 21:08:16 UTC (rev 59954)
@@ -232,7 +232,7 @@
          addInvokeJoinpointMethod();
          addMethodInfoField();
          addPublicConstructor();
-         addProtectedConstructor();
+         addProtectedConstructors();
          addDispatchMethods();
 
          TransformerCommon.compileOrLoadClass(callingClass, jp);
@@ -273,18 +273,16 @@
       }
 
       /**
-       * This constructor will be called by invokeJoinpoint in the generated subclass when we need to
-       * instantiate a joinpoint containing target and args
+       * These constructors 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, NotFoundException
+      protected void addProtectedConstructors() throws CannotCompileException
       {
          CtClass[] ctorParams1 = new CtClass[params.length + 2];
-         CtClass[] ctorParams2 = new CtClass[3];
+         CtClass[] ctorParams2 = new CtClass[2];
          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("{");
@@ -306,15 +304,16 @@
                jp);
          protectedConstructor.setModifiers(Modifier.PROTECTED);
          jp.addConstructor(protectedConstructor);
-         
-         protectedConstructor = CtNewConstructor.make(
+         if (params.length > 0)
+         {
+            protectedConstructor = CtNewConstructor.make(
                ctorParams2,
                new CtClass[0],
-               body.toString() + "   setArguments($3);}",
+               body.toString() + "}",
                jp);
-         protectedConstructor.setModifiers(Modifier.PROTECTED);
-         jp.addConstructor(protectedConstructor);
-
+            protectedConstructor.setModifiers(Modifier.PROTECTED);
+            jp.addConstructor(protectedConstructor);
+         }
       }
 
       private CtClass[] 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 20:03:19 UTC (rev 59953)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConByMethodJoinPointGenerator.java	2007-01-23 21:08:16 UTC (rev 59954)
@@ -244,7 +244,7 @@
          addInvokeJoinpointMethod();
          addMethodInfoField();
          addPublicConstructor();
-         addProtectedConstructor();
+         addProtectedConstructors();
          addDispatchMethods();
 
          TransformerCommon.compileOrLoadClass(callingClass, jp);
@@ -286,23 +286,21 @@
       }
 
       /**
-       * This constructor will be called by invokeJoinpoint in the generated subclass when we need to
-       * instantiate a joinpoint containing target and args
+       * These constructors 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, NotFoundException
+      protected void addProtectedConstructors() throws CannotCompileException
       {
          final int offset = (hasCallingObject) ? 2 : 1;
          CtClass[] ctorParams1 = new CtClass[params.length + offset];
-         CtClass[] ctorParams2 = new CtClass[offset + 1];
+         CtClass[] ctorParams2 = new CtClass[offset];
          ctorParams1[0] = ctorParams2[0] = jp;
          if (hasCallingObject)
          {
             ctorParams1[1] = ctorParams2[1] = callingClass;
          }
          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 + ");");
@@ -326,14 +324,16 @@
                jp);
          protectedConstructor.setModifiers(Modifier.PROTECTED);
          jp.addConstructor(protectedConstructor);
-
-         protectedConstructor = CtNewConstructor.make(
+         if (params.length > 0)
+         {
+            protectedConstructor = CtNewConstructor.make(
                ctorParams2,
                new CtClass[0],
-               body.toString() + "setArguments($" + (offset + 1) + ");}",
+               body.toString() + "}",
                jp);
-         protectedConstructor.setModifiers(Modifier.PROTECTED);
-         jp.addConstructor(protectedConstructor);
+            protectedConstructor.setModifiers(Modifier.PROTECTED);
+            jp.addConstructor(protectedConstructor);
+         }
       }
 
       private CtClass[] 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 20:03:19 UTC (rev 59953)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructionJoinPointGenerator.java	2007-01-23 21:08:16 UTC (rev 59954)
@@ -209,7 +209,7 @@
          addInvokeJoinpointMethod();
          addConstructionInfoField();
          addPublicConstructor();
-         addProtectedConstructor();
+         addProtectedConstructors();
          addDispatchMethods();
 
          TransformerCommon.compileOrLoadClass(advisedClass, jp);
@@ -259,19 +259,17 @@
       }
 
       /**
-       * This constructor will be called by invokeJoinpoint in the generated subclass when we need to
-       * instantiate a joinpoint containing target and args
+       * These constructors 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, NotFoundException
+      protected void addProtectedConstructors() throws CannotCompileException
       {
          CtClass[] ctorParams1 = new CtClass[params.length + 1];
-         CtClass[] ctorParams2 = new CtClass[3];
+         CtClass[] ctorParams2 = new CtClass[2];
          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 + ");");
@@ -294,14 +292,16 @@
                jp);
          protectedConstructor.setModifiers(Modifier.PROTECTED);
          jp.addConstructor(protectedConstructor);
-         
-         protectedConstructor = CtNewConstructor.make(
+         if (params.length > 1)
+         {
+            protectedConstructor = CtNewConstructor.make(
                ctorParams2,
                new CtClass[0],
-               body.toString() + "   setArguments($3);}",
+               body.toString() + "}",
                jp);
-         protectedConstructor.setModifiers(Modifier.PROTECTED);
-         jp.addConstructor(protectedConstructor);
+            protectedConstructor.setModifiers(Modifier.PROTECTED);
+            jp.addConstructor(protectedConstructor);
+         }
       }
 
       /**

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 20:03:19 UTC (rev 59953)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructorJoinPointGenerator.java	2007-01-23 21:08:16 UTC (rev 59954)
@@ -191,7 +191,7 @@
          addInvokeJoinpointMethod();
          addMethodInfoField();
          addPublicConstructor();
-         addProtectedConstructor();
+         addProtectedConstructors();
          addDispatchMethods();
 
          TransformerCommon.compileOrLoadClass(advisedClass, jp);
@@ -233,18 +233,16 @@
       }
 
       /**
-       * This constructor will be called by invokeJoinpoint in the generated subclass when we need to
-       * instantiate a joinpoint containing target and args
+       * These constructors 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, NotFoundException
+      protected void addProtectedConstructors() throws CannotCompileException
       {
          CtClass[] ctorParams1 = new CtClass[params.length + 1];
-         CtClass[] ctorParams2 = new CtClass[2];
+         CtClass[] ctorParams2 = new CtClass[1];
          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 + ");");
@@ -264,14 +262,16 @@
                jp);
          protectedConstructor.setModifiers(Modifier.PROTECTED);
          jp.addConstructor(protectedConstructor);
-
-         protectedConstructor = CtNewConstructor.make(
+         if (params.length > 0)
+         {
+            protectedConstructor = CtNewConstructor.make(
                ctorParams2,
                new CtClass[0],
-               body.toString() + "   setArguments($2);}",
+               body.toString() + "}",
                jp);
-         protectedConstructor.setModifiers(Modifier.PROTECTED);
-         jp.addConstructor(protectedConstructor);
+            protectedConstructor.setModifiers(Modifier.PROTECTED);
+            jp.addConstructor(protectedConstructor);
+         }
       }
 
       /**

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 20:03:19 UTC (rev 59953)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java	2007-01-23 21:08:16 UTC (rev 59954)
@@ -161,15 +161,13 @@
          }
       }
       
-      public final void appendParameterListWithArgs(StringBuffer code)
+      public final void appendParameterListWithoutArgs(StringBuffer code)
       {
          if (targetCallerList != null)
          {
+            code.append(',');
             code.append(targetCallerList);
-            code.append(",");
          }
-         
-         code.append(ARGUMENTS);
       }
       
       
@@ -816,18 +814,26 @@
 
          code.append("      if(" + INFO_FIELD + ".getInterceptors() != null)");
          code.append("      {");
-         code.append("         " + joinpointFqn + " jp = new " + joinpointClass.getName() + "(this, ");
+         code.append("         " + joinpointFqn + " jp = new " + joinpointClass.getName() + "(this");
          if (argsFoundBefore)
          {
-            parameters.appendParameterListWithArgs(code);
+            parameters.appendParameterListWithoutArgs(code);
             
          }
          else
          {
-            code.append("$$");
+            code.append(", $$");
          }
          
          code.append(aspects.toString() + cflows.toString() + ");");
+         
+         if (argsFoundBefore)
+         {
+            code.append("   jp.setArguments(");
+            code.append(ARGUMENTS);
+            code.append(");");
+         }
+         
          if (!isVoid())
          {
             code.append("          " + RETURN_VALUE + " = ($r)");
@@ -933,18 +939,18 @@
    private void createConstructors(ClassPool pool, CtClass superClass, CtClass clazz, AdviceSetupsByType setups) throws NotFoundException, CannotCompileException
    {
       CtConstructor[] superCtors = superClass.getDeclaredConstructors();
-      if (superCtors.length != 3 && !this.getClass().equals(MethodJoinPointGenerator.class)
+      if (superCtors.length != 3 && superCtors.length != 2 && !this.getClass().equals(MethodJoinPointGenerator.class)
             && !FieldJoinPointGenerator.class.isAssignableFrom(this.getClass()))
       {
-         throw new RuntimeException("JoinPoints should only have 3 and only constructors, not " + superCtors.length);
+         throw new RuntimeException("JoinPoints should have 2 or 3 constructors, not " + superCtors.length);
       }
       else if (superCtors.length != 2 && FieldJoinPointGenerator.class.isAssignableFrom(this.getClass()))
       {
          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))
+      else if (superCtors.length != 4 && superCtors.length != 3 && this.getClass().equals(MethodJoinPointGenerator.class))
       {
-         throw new RuntimeException("Method JoinPoints should only have 4 and only constructors, not " + superCtors.length);
+         throw new RuntimeException("Method JoinPoints should have 3 or 4 constructors, not " + superCtors.length);
       }
       
       int publicIndex = -1;

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 20:03:19 UTC (rev 59953)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodByConJoinPointGenerator.java	2007-01-23 21:08:16 UTC (rev 59954)
@@ -230,7 +230,7 @@
          addInvokeJoinpointMethod();
          addMethodInfoField();
          addPublicConstructor();
-         addProtectedConstructor();
+         addProtectedConstructors();
          addDispatchMethods();
 
          TransformerCommon.compileOrLoadClass(callingClass, jp);
@@ -283,15 +283,14 @@
       }
 
       /**
-       * This constructor will be called by invokeJoinpoint in the generated subclass when we need to
-       * instantiate a joinpoint containing target and args
+       * These constructors 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, NotFoundException
+      protected void addProtectedConstructors() throws CannotCompileException
       {
          final int offset =  hasTargetObject ? 3 : 2;
          CtClass[] ctorParams1 = new CtClass[params.length + offset];
-         CtClass[] ctorParams2 = new CtClass[offset + 1];
+         CtClass[] ctorParams2 = new CtClass[offset];
          ctorParams1[0] = ctorParams2[0] = jp;
          ctorParams1[1] = ctorParams2[1] = callingClass;
          if (hasTargetObject)
@@ -299,8 +298,7 @@
             ctorParams1[2] = ctorParams2[2] = targetClass;
          }
          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 + ");");
@@ -327,14 +325,16 @@
                jp);
          protectedConstructor.setModifiers(Modifier.PROTECTED);
          jp.addConstructor(protectedConstructor);
-
-         protectedConstructor = CtNewConstructor.make(
+         if (params.length > 0)
+         {
+            protectedConstructor = CtNewConstructor.make(
                ctorParams2,
                new CtClass[0],
-               body.toString() + "setArguments($" + (offset + 1) + ");}",
+               body.toString() + "}",
                jp);
-         protectedConstructor.setModifiers(Modifier.PROTECTED);
-         jp.addConstructor(protectedConstructor);
+            protectedConstructor.setModifiers(Modifier.PROTECTED);
+            jp.addConstructor(protectedConstructor);
+         }
       }
 
 

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 20:03:19 UTC (rev 59953)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodByMethodJoinPointGenerator.java	2007-01-23 21:08:16 UTC (rev 59954)
@@ -241,7 +241,7 @@
          addInvokeJoinpointMethod();
          addMethodInfoField();
          addPublicConstructor();
-         addProtectedConstructor();
+         addProtectedConstructors();
          addDispatchMethods();
 
          TransformerCommon.compileOrLoadClass(callingClass, jp);
@@ -294,25 +294,23 @@
       }
 
       /**
-       * This constructor will be called by invokeJoinpoint in the generated subclass when we need to
-       * instantiate a joinpoint containing target and args
+       * These constructors 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, NotFoundException
+      protected void addProtectedConstructors() throws CannotCompileException
       {
          int offset = 1;
          if (hasTargetObject) offset++;
          if (hasCallingObject) offset++;
          CtClass[] ctorParams1 = new CtClass[params.length + offset];
-         CtClass[] ctorParams2 = new CtClass[offset + 1];
+         CtClass[] ctorParams2 = new CtClass[offset];
 
          int index = 0;
          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 + ");");
@@ -337,14 +335,16 @@
                jp);
          protectedConstructor.setModifiers(Modifier.PROTECTED);
          jp.addConstructor(protectedConstructor);
-
-         protectedConstructor = CtNewConstructor.make(
+         if (params.length > 0)
+         {
+            protectedConstructor = CtNewConstructor.make(
                ctorParams2,
                new CtClass[0],
-               body.toString() + "   setArguments($" + index + ");}",
+               body.toString() + "}",
                jp);
-         protectedConstructor.setModifiers(Modifier.PROTECTED);
-         jp.addConstructor(protectedConstructor);
+            protectedConstructor.setModifiers(Modifier.PROTECTED);
+            jp.addConstructor(protectedConstructor);
+         }
       }
 
       private CtClass[] 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 20:03:19 UTC (rev 59953)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodJoinPointGenerator.java	2007-01-23 21:08:16 UTC (rev 59954)
@@ -280,10 +280,10 @@
       }
       
       /**
-       * These constructor will be called by invokeJoinpoint in the generated subclass when we need to 
-       * instantiate a joinpoint containing target and args
+       * These constructors will be called by invokeJoinpoint in the generated
+       * subclass when we need to instantiate a joinpoint containing target and args
        */
-      protected void addProtectedConstructors() throws CannotCompileException, NotFoundException
+      protected void addProtectedConstructors() throws CannotCompileException
       {
          CtClass[] ctorParams1 = new CtClass[params.length + 1];
          CtClass[] ctorParams2 = null;
@@ -300,18 +300,16 @@
          {
             offset = 2;
             // second version of constructor, that receives Arguments array
-            ctorParams2 = new CtClass[3];
+            ctorParams2 = new CtClass[2];
             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);");
          }
          else
          {
-            ctorParams2 = new CtClass[2];
+            ctorParams2 = new CtClass[1];
             ctorParams2[0] = ctorParams1[0];
-            ctorParams2[1] = ctorParams1[0].getClassPool().get("java.lang.Object[]");
          }
          
          
@@ -331,14 +329,16 @@
          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);
+         if (params.length > 1)
+         {
+            protectedConstructor = CtNewConstructor.make(
+                  ctorParams2,
+                  new CtClass[0],
+                  body.toString() + "}",
+                  jp);
+            protectedConstructor.setModifiers(Modifier.PROTECTED);
+            jp.addConstructor(protectedConstructor);
+         }
       }
       
       /**




More information about the jboss-cvs-commits mailing list