[jboss-cvs] JBossAS SVN: r104318 - in projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist: bytecode and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Apr 29 11:09:58 EDT 2010
Author: kabir.khan at jboss.com
Date: 2010-04-29 11:09:58 -0400 (Thu, 29 Apr 2010)
New Revision: 104318
Removed:
projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/bytecode/ErrorCheckingMemberFactory.java
Modified:
projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistReflectionFactory.java
projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistUtil.java
projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/bytecode/JavassistConstructorFactory.java
projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/bytecode/JavassistFieldFactory.java
projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/bytecode/JavassistMemberFactory.java
projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/bytecode/JavassistMethodFactory.java
Log:
[JBREFLECT-6] Refactor a bit
Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistReflectionFactory.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistReflectionFactory.java 2010-04-29 14:54:09 UTC (rev 104317)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistReflectionFactory.java 2010-04-29 15:09:58 UTC (rev 104318)
@@ -45,10 +45,6 @@
* the use of reflection. Although a lot faster, there is an overhead associated with generating
* these classes, so they should only be used for frequently used members </p>
* <p>
- * By default the generated classes class will not do any checking of the parameters. To turn this on,
- * specify <code>-Dorg.jboss.reflect.plugins.javassist.JavassistReflectionFactory.check=true</code>.
- * </p>
- * <p>
* To output the generated classes to disk, so the bytecode can be inspected, specify
* <code>-Dorg.jboss.reflect.plugins.javassist.JavassistReflectionFactory.debug=true</code>.
* </p>
Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistUtil.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistUtil.java 2010-04-29 14:54:09 UTC (rev 104317)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistUtil.java 2010-04-29 15:09:58 UTC (rev 104318)
@@ -21,11 +21,6 @@
*/
package org.jboss.reflect.plugins.javassist;
-import org.jboss.reflect.spi.ClassInfo;
-import org.jboss.reflect.spi.TypeInfo;
-import org.jboss.util.Classes;
-import org.jboss.util.JBossStringBuilder;
-
import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
@@ -40,8 +35,12 @@
import javassist.CtMethod;
import javassist.CtPrimitiveType;
import javassist.NotFoundException;
-import javassist.bytecode.Descriptor;
+import org.jboss.reflect.spi.ClassInfo;
+import org.jboss.reflect.spi.TypeInfo;
+import org.jboss.util.Classes;
+import org.jboss.util.JBossStringBuilder;
+
/**
* A JavassistUtil.
*
Deleted: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/bytecode/ErrorCheckingMemberFactory.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/bytecode/ErrorCheckingMemberFactory.java 2010-04-29 14:54:09 UTC (rev 104317)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/bytecode/ErrorCheckingMemberFactory.java 2010-04-29 15:09:58 UTC (rev 104318)
@@ -1,316 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source.
-* Copyright 2006, Red Hat Middleware LLC, and individual contributors
-* as indicated by the @author tags. See the copyright.txt file in the
-* distribution for a full listing of individual contributors.
-*
-* This is free software; you can redistribute it and/or modify it
-* under the terms of the GNU Lesser General Public License as
-* published by the Free Software Foundation; either version 2.1 of
-* the License, or (at your option) any later version.
-*
-* This software is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this software; if not, write to the Free
-* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-*/
-package org.jboss.reflect.plugins.javassist.bytecode;
-
-import java.lang.reflect.AccessibleObject;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-
-import javassist.CtClass;
-import javassist.CtConstructor;
-import javassist.CtField;
-import javassist.CtMember;
-import javassist.CtMethod;
-import javassist.Modifier;
-import javassist.NotFoundException;
-
-import org.jboss.reflect.plugins.javassist.JavassistConstructor;
-import org.jboss.reflect.plugins.javassist.JavassistField;
-import org.jboss.reflect.plugins.javassist.JavassistMethod;
-import org.jboss.reflect.plugins.javassist.JavassistUtil;
-import org.jboss.reflect.plugins.javassist.defaultmember.DefaultMemberFactory;
-import org.jboss.util.Strings;
-
-/**
- * JavassistMembers created using {@link JavassistMemberFactory} don't check the parameters
- * in the generated code. Do the same checks as ReflectionUtils here so we get the same behaviour
- * as when using the Introspection implementation or when the Javassist implementation uses the
- * {@link DefaultMemberFactory}.
- *
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-class ErrorCheckingMemberFactory
-{
- static JavassistMethod create(JavassistMethod m, CtMethod method)
- {
- if (m == null || method == null)
- throw new IllegalArgumentException("Null method");
-
- int numParameters = 0;
- try
- {
- numParameters = method.getParameterTypes().length;
- }
- catch(NotFoundException e)
- {
- throw new IllegalArgumentException("Could not load the parameters for " + method);
- }
-
- return new ErrorCheckingJavassistMethod(m, method, numParameters);
- }
-
- static JavassistConstructor create(JavassistConstructor c, CtConstructor constructor)
- {
- if (c == null || constructor == null)
- throw new IllegalArgumentException("Null constructor");
-
- int numParameters = 0;
- try
- {
- numParameters = constructor.getParameterTypes().length;
- }
- catch(NotFoundException e)
- {
- throw new IllegalArgumentException("Could not load the parameters for " + constructor);
- }
-
- return new ErrorCheckingJavassistConstructor(c, constructor, numParameters);
- }
-
- static JavassistField create(JavassistField f, CtField field)
- {
- if (f == null)
- throw new IllegalArgumentException("Null field");
-
- return new ErrorCheckingJavassistField(f, field);
- }
-
- private static boolean checkNumberOfParameters(Object[] args, int numParameters)
- {
- if (args == null && numParameters > 0)
- return false;
- if (args != null && args.length != numParameters)
- return false;
- return true;
- }
-
- private static boolean isStatic(CtMember member)
- {
- return Modifier.isStatic(member.getModifiers());
- }
-
- private static void handleWrongParameters(String context, String target, Class<?>[] expected, Object[] args)
- {
- List<String> actual = new ArrayList<String>();
- if (args != null)
- {
- for (Object argument : args)
- {
- if (argument == null)
- actual.add(null);
- else
- actual.add(argument.getClass().getName());
- }
- }
- throw new IllegalArgumentException("Wrong arguments. " + context + " for target " + target + " expected=" + expected + " actual=" + actual);
-
- }
-
- private static void handleWrongTarget(Object target, Class<?> expected, String name)
- {
- throw new IllegalArgumentException("Wrong target for " + name + " " + target.getClass().getName() + " is not a " + expected.getName());
- }
-
- private static void handleNullTarget(AccessibleObject ao)
- {
- throw new IllegalArgumentException("Null target calling non-static " + ao);
- }
-
- private static class ErrorCheckingJavassistMethod implements JavassistMethod
- {
- private final JavassistMethod delegate;
- private final CtMethod ctMethod;
- private final int numParameters;
-
- private ErrorCheckingJavassistMethod(JavassistMethod delegate, CtMethod ctMethod, int numParameters)
- {
- this.delegate = delegate;
- this.ctMethod = ctMethod;
- this.numParameters = numParameters;
- }
-
- public Object invoke(Object target, Object[] args) throws Throwable
- {
- if (!checkNumberOfParameters(args, numParameters))
- throw new IllegalArgumentException("Wrong number of parameters for " + ctMethod.getDeclaringClass() + "." + ctMethod.getName() + ctMethod.getSignature());
-
- try
- {
- return delegate.invoke(target, args);
- }
- catch(ClassCastException e)
- {
- Method method = JavassistUtil.ctMethodToMethod(ctMethod);
- if (!isStatic(ctMethod))
- {
- if (!method.getDeclaringClass().isAssignableFrom(target.getClass()))
- handleWrongTarget(target, method.getDeclaringClass(), method.getName());
- }
-
- Class<?>[] params = method.getParameterTypes();
- for (int i = 0 ; i < args.length ; i++)
- {
- if (!params[i].isAssignableFrom(args[i].getClass()))
- handleWrongParameters(method.getName(), Strings.defaultToString(target), method.getParameterTypes(), args);
- }
-
- throw e;
- }
- catch(NullPointerException e)
- {
- Method method = JavassistUtil.ctMethodToMethod(ctMethod);
- if (!isStatic(ctMethod) && target == null)
- handleNullTarget(method);
-
- CtClass[] parameters = ctMethod.getParameterTypes();
- for (int i = 0 ; i < parameters.length ; i++)
- {
- if (parameters[i].isPrimitive() && args[i] == null)
- handleWrongParameters(method.getName(), Strings.defaultToString(target), method.getParameterTypes(), args);
- }
-
- throw e;
- }
- }
-
- }
-
- private static class ErrorCheckingJavassistConstructor implements JavassistConstructor
- {
- private final JavassistConstructor delegate;
- private final CtConstructor ctConstructor;
- private final int numParameters;
-
- private ErrorCheckingJavassistConstructor(JavassistConstructor delegate, CtConstructor ctConstructor, int numParameters)
- {
- this.delegate = delegate;
- this.ctConstructor = ctConstructor;
- this.numParameters = numParameters;
- }
-
- public Object newInstance(Object[] args) throws Throwable
- {
- if (!checkNumberOfParameters(args, numParameters))
- throw new IllegalArgumentException("Wrong number of parameters for " + ctConstructor.getDeclaringClass() + "." + ctConstructor.getName() + ctConstructor.getSignature());
-
- try
- {
- return delegate.newInstance(args);
- }
- catch(ClassCastException e)
- {
- Constructor<?> constructor = JavassistUtil.ctConstructorToConstructor(ctConstructor);
- Class<?>[] params = constructor.getParameterTypes();
- for (int i = 0 ; i < args.length ; i++)
- {
- if (!params[i].isAssignableFrom(args[i].getClass()))
- handleWrongParameters("new", Strings.defaultToString(ctConstructor.getDeclaringClass().getName()), constructor.getParameterTypes(), args);
- }
-
- throw e;
- }
- catch(NullPointerException e)
- {
- CtClass[] parameters = ctConstructor.getParameterTypes();
- for (int i = 0 ; i < parameters.length ; i++)
- {
- if (parameters[i].isPrimitive() && args[i] == null)
- {
- Constructor<?> constructor = JavassistUtil.ctConstructorToConstructor(ctConstructor);
- handleWrongParameters("new", Strings.defaultToString(ctConstructor.getDeclaringClass().getName()), constructor.getParameterTypes(), args);
- }
- }
-
- throw e;
- }
- }
- }
-
- private static class ErrorCheckingJavassistField implements JavassistField
- {
- private final JavassistField delegate;
- private final CtField ctField;
-
- private ErrorCheckingJavassistField(JavassistField delegate, CtField ctField)
- {
- this.delegate = delegate;
- this.ctField = ctField;
- }
-
- public Object get(Object target) throws Throwable
- {
- try
- {
- return delegate.get(target);
- }
- catch (ClassCastException e)
- {
- Field field = JavassistUtil.ctFieldToField(ctField);
-
- if (!isStatic(ctField) && !field.getDeclaringClass().isAssignableFrom(target.getClass()))
- handleWrongTarget(target, field.getDeclaringClass(), field.getName());
-
- throw e;
- }
- catch(NullPointerException e)
- {
- Field field = JavassistUtil.ctFieldToField(ctField);
- if (!isStatic(ctField) && target == null)
- handleNullTarget(field);
- throw e;
- }
- }
-
- public void set(Object target, Object value) throws Throwable
- {
- try
- {
- delegate.set(target, value);
- }
- catch (ClassCastException e)
- {
- Field field = JavassistUtil.ctFieldToField(ctField);
- Class<?> type = field.getType();
-
- if (!isStatic(ctField) && !field.getDeclaringClass().isAssignableFrom(target.getClass()))
- handleWrongTarget(target, field.getDeclaringClass(), field.getName());
-
- if (!type.isAssignableFrom(value.getClass()))
- throw new IllegalArgumentException("Wrong arguments. Setting " + field.getName() + " for target " + target + " expected=" + field.getType() + " actual=" + value.getClass());
- }
- catch(NullPointerException e)
- {
- Field field = JavassistUtil.ctFieldToField(ctField);
- if (!isStatic(ctField) && target == null)
- handleNullTarget(field);
- if (ctField.getType().isPrimitive() && value == null)
- throw new IllegalArgumentException("Null value setting non-static field. " + field);
- throw e;
- }
- }
- }
-}
Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/bytecode/JavassistConstructorFactory.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/bytecode/JavassistConstructorFactory.java 2010-04-29 14:54:09 UTC (rev 104317)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/bytecode/JavassistConstructorFactory.java 2010-04-29 15:09:58 UTC (rev 104318)
@@ -45,7 +45,7 @@
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision: 1.1 $
*/
-public class JavassistConstructorFactory extends JavassistBehaviorFactory
+class JavassistConstructorFactory extends JavassistBehaviorFactory
{
/** The names of the interfaces we are implementing */
private static final String[] interfaceNames = new String[] {JavassistConstructor.class.getName()};
Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/bytecode/JavassistFieldFactory.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/bytecode/JavassistFieldFactory.java 2010-04-29 14:54:09 UTC (rev 104317)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/bytecode/JavassistFieldFactory.java 2010-04-29 15:09:58 UTC (rev 104318)
@@ -47,7 +47,7 @@
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision: 1.1 $
*/
-public class JavassistFieldFactory extends JavassistMemberFactory
+class JavassistFieldFactory extends JavassistMemberFactory
{
/** The names of the interfaces we are implementing */
protected static final String[] interfaceNames;
Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/bytecode/JavassistMemberFactory.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/bytecode/JavassistMemberFactory.java 2010-04-29 14:54:09 UTC (rev 104317)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/bytecode/JavassistMemberFactory.java 2010-04-29 15:09:58 UTC (rev 104318)
@@ -24,12 +24,17 @@
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
+import java.util.ArrayList;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
@@ -37,6 +42,7 @@
import javassist.CtClass;
import javassist.CtConstructor;
import javassist.CtField;
+import javassist.CtMember;
import javassist.CtMethod;
import javassist.Modifier;
import javassist.NotFoundException;
@@ -57,6 +63,8 @@
import org.jboss.reflect.plugins.javassist.JavassistConstructor;
import org.jboss.reflect.plugins.javassist.JavassistField;
import org.jboss.reflect.plugins.javassist.JavassistMethod;
+import org.jboss.reflect.plugins.javassist.JavassistUtil;
+import org.jboss.util.Strings;
import org.jboss.util.UnreachableStatementException;
/**
@@ -219,9 +227,7 @@
{
JavassistMemberFactory factory = new JavassistMethodFactory(superClass, ctMethod, debug);
Class<JavassistMethod> member = factory.makeClass(JavassistMethod.class, ctMethod.getDeclaringClass());
- JavassistMethod method = factory.instantiate(member);
- method = ErrorCheckingMemberFactory.create(method, ctMethod);
- return method;
+ return wrapInErrorChecker(factory.instantiate(member), ctMethod);
}
/**
@@ -237,9 +243,7 @@
{
JavassistMemberFactory factory = new JavassistConstructorFactory(superClass, ctConstructor, debug);
Class<JavassistConstructor> member = factory.makeClass(JavassistConstructor.class, ctConstructor.getDeclaringClass());
- JavassistConstructor constructor = factory.instantiate(member);
- constructor = ErrorCheckingMemberFactory.create(constructor, ctConstructor);
- return constructor;
+ return wrapInErrorChecker(factory.instantiate(member), ctConstructor);
}
/**
@@ -255,9 +259,7 @@
{
JavassistMemberFactory factory = new JavassistFieldFactory(superClass, ctField, debug);
Class<JavassistField> member = factory.makeClass(JavassistField.class, ctField.getDeclaringClass());
- JavassistField field = factory.instantiate(member);
- field = ErrorCheckingMemberFactory.create(field, ctField);
- return field;
+ return wrapInErrorChecker(factory.instantiate(member), ctField);
}
/**
@@ -745,6 +747,294 @@
}
}
+ /**
+ * Wraps the generated JavassistMethod in an implementation that checks the
+ * parameters
+ *
+ * @param m The wrapped method
+ * @param method the target method for information about the parameters
+ * @return the error checking wrapper
+ */
+ private static JavassistMethod wrapInErrorChecker(JavassistMethod m, CtMethod method)
+ {
+ if (m == null || method == null)
+ throw new IllegalArgumentException("Null method");
+
+ int numParameters = 0;
+ try
+ {
+ numParameters = method.getParameterTypes().length;
+ }
+ catch(NotFoundException e)
+ {
+ throw new IllegalArgumentException("Could not load the parameters for " + method);
+ }
+
+ return new ErrorCheckingJavassistMethod(m, method, numParameters);
+ }
+
+ /**
+ * Wraps the generated JavassistConstructor in an implementation that checks the
+ * parameters
+ *
+ * @param c The wrapped constructor
+ * @param constructor the target constructor for information about the parameters
+ * @return the error checking wrapper
+ */
+ private static JavassistConstructor wrapInErrorChecker(JavassistConstructor c, CtConstructor constructor)
+ {
+ if (c == null || constructor == null)
+ throw new IllegalArgumentException("Null constructor");
+
+ int numParameters = 0;
+ try
+ {
+ numParameters = constructor.getParameterTypes().length;
+ }
+ catch(NotFoundException e)
+ {
+ throw new IllegalArgumentException("Could not load the parameters for " + constructor);
+ }
+
+ return new ErrorCheckingJavassistConstructor(c, constructor, numParameters);
+ }
+
+ /**
+ * Wraps the generated JavassistField in an implementation that checks the
+ * parameters
+ *
+ * @param f The wrapped field
+ * @param field the target field for information about the parameters
+ * @return the error checking wrapper
+ */
+ private static JavassistField wrapInErrorChecker(JavassistField f, CtField field)
+ {
+ if (f == null)
+ throw new IllegalArgumentException("Null field");
+
+ return new ErrorCheckingJavassistField(f, field);
+ }
+
+ private static class ErrorChecker
+ {
+ protected boolean checkNumberOfParameters(Object[] args, int numParameters)
+ {
+ if (args == null && numParameters > 0)
+ return false;
+ if (args != null && args.length != numParameters)
+ return false;
+ return true;
+ }
+
+ protected boolean isStatic(CtMember member)
+ {
+ return Modifier.isStatic(member.getModifiers());
+ }
+
+ protected void handleWrongParameters(String context, String target, Class<?>[] expected, Object[] args)
+ {
+ List<String> actual = new ArrayList<String>();
+ if (args != null)
+ {
+ for (Object argument : args)
+ {
+ if (argument == null)
+ actual.add(null);
+ else
+ actual.add(argument.getClass().getName());
+ }
+ }
+ throw new IllegalArgumentException("Wrong arguments. " + context + " for target " + target + " expected=" + expected + " actual=" + actual);
+
+ }
+
+ protected void handleWrongTarget(Object target, Class<?> expected, String name)
+ {
+ throw new IllegalArgumentException("Wrong target for " + name + " " + target.getClass().getName() + " is not a " + expected.getName());
+ }
+
+ protected void handleNullTarget(AccessibleObject ao)
+ {
+ throw new IllegalArgumentException("Null target calling non-static " + ao);
+ }
+
+ }
+
+ private static class ErrorCheckingJavassistMethod extends ErrorChecker implements JavassistMethod
+ {
+ private final JavassistMethod delegate;
+ private final CtMethod ctMethod;
+ private final int numParameters;
+
+ private ErrorCheckingJavassistMethod(JavassistMethod delegate, CtMethod ctMethod, int numParameters)
+ {
+ this.delegate = delegate;
+ this.ctMethod = ctMethod;
+ this.numParameters = numParameters;
+ }
+
+ public Object invoke(Object target, Object[] args) throws Throwable
+ {
+ if (!checkNumberOfParameters(args, numParameters))
+ throw new IllegalArgumentException("Wrong number of parameters for " + ctMethod.getDeclaringClass() + "." + ctMethod.getName() + ctMethod.getSignature());
+
+ try
+ {
+ return delegate.invoke(target, args);
+ }
+ catch(ClassCastException e)
+ {
+ Method method = JavassistUtil.ctMethodToMethod(ctMethod);
+ if (!isStatic(ctMethod))
+ {
+ if (!method.getDeclaringClass().isAssignableFrom(target.getClass()))
+ handleWrongTarget(target, method.getDeclaringClass(), method.getName());
+ }
+
+ Class<?>[] params = method.getParameterTypes();
+ for (int i = 0 ; i < args.length ; i++)
+ {
+ if (!params[i].isAssignableFrom(args[i].getClass()))
+ handleWrongParameters(method.getName(), Strings.defaultToString(target), method.getParameterTypes(), args);
+ }
+
+ throw e;
+ }
+ catch(NullPointerException e)
+ {
+ Method method = JavassistUtil.ctMethodToMethod(ctMethod);
+ if (!isStatic(ctMethod) && target == null)
+ handleNullTarget(method);
+
+ CtClass[] parameters = ctMethod.getParameterTypes();
+ for (int i = 0 ; i < parameters.length ; i++)
+ {
+ if (parameters[i].isPrimitive() && args[i] == null)
+ handleWrongParameters(method.getName(), Strings.defaultToString(target), method.getParameterTypes(), args);
+ }
+
+ throw e;
+ }
+ }
+
+ }
+
+ private static class ErrorCheckingJavassistConstructor extends ErrorChecker implements JavassistConstructor
+ {
+ private final JavassistConstructor delegate;
+ private final CtConstructor ctConstructor;
+ private final int numParameters;
+
+ private ErrorCheckingJavassistConstructor(JavassistConstructor delegate, CtConstructor ctConstructor, int numParameters)
+ {
+ this.delegate = delegate;
+ this.ctConstructor = ctConstructor;
+ this.numParameters = numParameters;
+ }
+
+ public Object newInstance(Object[] args) throws Throwable
+ {
+ if (!checkNumberOfParameters(args, numParameters))
+ throw new IllegalArgumentException("Wrong number of parameters for " + ctConstructor.getDeclaringClass() + "." + ctConstructor.getName() + ctConstructor.getSignature());
+
+ try
+ {
+ return delegate.newInstance(args);
+ }
+ catch(ClassCastException e)
+ {
+ Constructor<?> constructor = JavassistUtil.ctConstructorToConstructor(ctConstructor);
+ Class<?>[] params = constructor.getParameterTypes();
+ for (int i = 0 ; i < args.length ; i++)
+ {
+ if (!params[i].isAssignableFrom(args[i].getClass()))
+ handleWrongParameters("new", Strings.defaultToString(ctConstructor.getDeclaringClass().getName()), constructor.getParameterTypes(), args);
+ }
+
+ throw e;
+ }
+ catch(NullPointerException e)
+ {
+ CtClass[] parameters = ctConstructor.getParameterTypes();
+ for (int i = 0 ; i < parameters.length ; i++)
+ {
+ if (parameters[i].isPrimitive() && args[i] == null)
+ {
+ Constructor<?> constructor = JavassistUtil.ctConstructorToConstructor(ctConstructor);
+ handleWrongParameters("new", Strings.defaultToString(ctConstructor.getDeclaringClass().getName()), constructor.getParameterTypes(), args);
+ }
+ }
+
+ throw e;
+ }
+ }
+ }
+
+ private static class ErrorCheckingJavassistField extends ErrorChecker implements JavassistField
+ {
+ private final JavassistField delegate;
+ private final CtField ctField;
+
+ private ErrorCheckingJavassistField(JavassistField delegate, CtField ctField)
+ {
+ this.delegate = delegate;
+ this.ctField = ctField;
+ }
+
+ public Object get(Object target) throws Throwable
+ {
+ try
+ {
+ return delegate.get(target);
+ }
+ catch (ClassCastException e)
+ {
+ Field field = JavassistUtil.ctFieldToField(ctField);
+
+ if (!isStatic(ctField) && !field.getDeclaringClass().isAssignableFrom(target.getClass()))
+ handleWrongTarget(target, field.getDeclaringClass(), field.getName());
+
+ throw e;
+ }
+ catch(NullPointerException e)
+ {
+ Field field = JavassistUtil.ctFieldToField(ctField);
+ if (!isStatic(ctField) && target == null)
+ handleNullTarget(field);
+ throw e;
+ }
+ }
+
+ public void set(Object target, Object value) throws Throwable
+ {
+ try
+ {
+ delegate.set(target, value);
+ }
+ catch (ClassCastException e)
+ {
+ Field field = JavassistUtil.ctFieldToField(ctField);
+ Class<?> type = field.getType();
+
+ if (!isStatic(ctField) && !field.getDeclaringClass().isAssignableFrom(target.getClass()))
+ handleWrongTarget(target, field.getDeclaringClass(), field.getName());
+
+ if (!type.isAssignableFrom(value.getClass()))
+ throw new IllegalArgumentException("Wrong arguments. Setting " + field.getName() + " for target " + target + " expected=" + field.getType() + " actual=" + value.getClass());
+ }
+ catch(NullPointerException e)
+ {
+ Field field = JavassistUtil.ctFieldToField(ctField);
+ if (!isStatic(ctField) && target == null)
+ handleNullTarget(field);
+ if (ctField.getType().isPrimitive() && value == null)
+ throw new IllegalArgumentException("Null value setting non-static field. " + field);
+ throw e;
+ }
+ }
+ }
+
+
private static class ParentLoaderHandler
{
final ClassLoader reflectLoader;
Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/bytecode/JavassistMethodFactory.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/bytecode/JavassistMethodFactory.java 2010-04-29 14:54:09 UTC (rev 104317)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/bytecode/JavassistMethodFactory.java 2010-04-29 15:09:58 UTC (rev 104318)
@@ -47,7 +47,7 @@
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision: 1.1 $
*/
-public class JavassistMethodFactory extends JavassistBehaviorFactory
+class JavassistMethodFactory extends JavassistBehaviorFactory
{
/** The names of the interfaces we are implementing */
private static final String[] interfaceNames;
More information about the jboss-cvs-commits
mailing list