[jboss-cvs] JBossAS SVN: r87691 - in projects/aop/trunk/aop/src: main/java/org/jboss/aop/proxy/container and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Apr 22 16:43:05 EDT 2009


Author: flavia.rainone at jboss.com
Date: 2009-04-22 16:43:04 -0400 (Wed, 22 Apr 2009)
New Revision: 87691

Modified:
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/ClassAdvisor.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/ClassContainer.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/container/ClassProxyContainer.java
   projects/aop/trunk/aop/src/test/java/org/jboss/test/aop/constructortarget/ConstructorTargetTester.java
Log:
[JBAOP-718] The extra constructor, generated by javassist, is removed from the Advisor.constructors list. This action is performed by the methods that initialize the collection: ClassAdvisor.createConstructorTable(), ClassContainer.createConstructorTable() and ClassProxyContainer.createConstructorTable(). The fix was not needed at GeneratedAdvisor.createConstructorTable() method because this method uses the collection initialized by the super class.

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/ClassAdvisor.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/ClassAdvisor.java	2009-04-22 20:35:57 UTC (rev 87690)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/ClassAdvisor.java	2009-04-22 20:43:04 UTC (rev 87691)
@@ -39,6 +39,8 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import javassist.runtime.Inner;
+
 import org.jboss.aop.advice.AdviceBinding;
 import org.jboss.aop.advice.AspectDefinition;
 import org.jboss.aop.advice.ClassifiedBindingAndPointcutCollection;
@@ -1538,6 +1540,23 @@
    protected void createConstructorTables() throws Exception
    {
       constructors = clazz.getDeclaredConstructors();
+      // remove javassist generated constructor for inner class
+      if (clazz.isMemberClass())
+      {
+         for (int i = 0; i < constructors.length; i++)
+         {
+            if (constructors[i].getParameterTypes().length == 1 &&
+               constructors[i].getParameterTypes()[0].getName().
+               equals(Inner.class.getName()))
+            {
+               Constructor<?>[] newConstructors = new Constructor<?>[constructors.length - 1];
+               System.arraycopy(constructors, 0, newConstructors, 0, i);
+               System.arraycopy(constructors, i+1, newConstructors, i, constructors.length -i - 1);
+               constructors = newConstructors;
+               break;
+            }
+         }
+      }
       methodCalledByConBindings = new HashMap[constructors.length];
       methodCalledByConInterceptors = new HashMap[constructors.length];
 

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/ClassContainer.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/ClassContainer.java	2009-04-22 20:35:57 UTC (rev 87690)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/ClassContainer.java	2009-04-22 20:43:04 UTC (rev 87691)
@@ -21,6 +21,7 @@
   */
 package org.jboss.aop;
 
+import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.security.AccessController;
@@ -30,6 +31,8 @@
 import java.util.Collection;
 import java.util.Collections;
 
+import javassist.runtime.Inner;
+
 import org.jboss.aop.advice.AdviceBinding;
 import org.jboss.aop.advice.ClassifiedBindingAndPointcutCollection;
 import org.jboss.aop.metadata.ClassMetaDataBinding;
@@ -295,7 +298,23 @@
    protected void createConstructorTables()
    {
       constructors = SecurityActions.getDeclaredConstructors(clazz);
-      
+      // remove javassist generated constructor for inner class
+      if (clazz.isMemberClass())
+      {
+         for (int i = 0; i < constructors.length; i++)
+         {
+            if (constructors[i].getParameterTypes().length == 1 &&
+               constructors[i].getParameterTypes()[0].getName().
+               equals(Inner.class.getName()))
+            {
+               Constructor<?>[] newConstructors = new Constructor<?>[constructors.length - 1];
+               System.arraycopy(constructors, 0, newConstructors, 0, i);
+               System.arraycopy(constructors, i+1, newConstructors, i, constructors.length -i - 1);
+               constructors = newConstructors;
+               break;
+            }
+         }
+      }
       if (constructors.length > 0)
       {
          for (int i = 0; i < constructors.length; i++)

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/container/ClassProxyContainer.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/container/ClassProxyContainer.java	2009-04-22 20:35:57 UTC (rev 87690)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/container/ClassProxyContainer.java	2009-04-22 20:43:04 UTC (rev 87691)
@@ -25,8 +25,11 @@
 import java.security.PrivilegedAction;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
 
+import javassist.runtime.Inner;
+
 import org.jboss.aop.Advisor;
 import org.jboss.aop.ClassContainer;
 import org.jboss.aop.AspectManager;
@@ -69,6 +72,23 @@
             public Object run()
             {
                constructors = theUseClass.getDeclaredConstructors();
+               // remove javassist generated constructor for inner class
+               if (clazz.isMemberClass())
+               {
+                  for (int i = 0; i < constructors.length; i++)
+                  {
+                     if (constructors[i].getParameterTypes().length == 1 &&
+                        constructors[i].getParameterTypes()[0].getName().
+                        equals(Inner.class.getName()))
+                     {
+                        Constructor<?>[] newConstructors = new Constructor<?>[constructors.length - 1];
+                        System.arraycopy(constructors, 0, newConstructors, 0, i);
+                        System.arraycopy(constructors, i+1, newConstructors, i, constructors.length -i - 1);
+                        constructors = newConstructors;
+                        break;
+                     }
+                  }
+               }
                for (int i = 0; i < constructors.length; i++)
                {
                   constructors[i].setAccessible(true);

Modified: projects/aop/trunk/aop/src/test/java/org/jboss/test/aop/constructortarget/ConstructorTargetTester.java
===================================================================
--- projects/aop/trunk/aop/src/test/java/org/jboss/test/aop/constructortarget/ConstructorTargetTester.java	2009-04-22 20:35:57 UTC (rev 87690)
+++ projects/aop/trunk/aop/src/test/java/org/jboss/test/aop/constructortarget/ConstructorTargetTester.java	2009-04-22 20:43:04 UTC (rev 87691)
@@ -100,11 +100,10 @@
       assertTrue("Target object isnt correct!", AspectTarget.intercepted);
    }
    
-   // TODO JBAOP-718
-   /*public void testConstruction7()
+   public void testConstruction7()
    {
      ExternalClass3 external = new ExternalClass3();
      external.createTarget();
      assertTrue("Target object isnt correct!", AspectTarget.intercepted);
-   }*/
+   }
 }
\ No newline at end of file




More information about the jboss-cvs-commits mailing list