[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