commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From robert burrell donkin <robertburrelldon...@blueyonder.co.uk>
Subject Re: cvs commit: jakarta-commons/beanutils/src/java/org/apache/commons/beanutils ConstructorUtils.java
Date Mon, 03 Feb 2003 21:02:14 GMT
hey martin!

since you're now a member of the beanutils team, you need to add your name 
to the status file :)

- robert

On Monday, February 3, 2003, at 08:50 PM, mvdb@apache.org wrote:

> mvdb        2003/02/03 12:50:49
>
>   Modified:    beanutils/src/java/org/apache/commons/beanutils
>                         ConstructorUtils.java
>   Log:
>   Applying patch supplied by dimiter at blue-edge dot bg
>   In case you're interested here is a patch containing JavaDoc for the
>   ConstructorUtils class.
>   It's not perfect and I have borrowed some parts from the MethodUtils,
>   but I hope it's better than nothing :).
>
>   Revision  Changes    Path
>   1.3       +141 -2    jakarta-
> commons/beanutils/src/java/org/apache/commons/beanutils/ConstructorUtils.
> java
>
>   Index: ConstructorUtils.java
>   ===================================================================
>   RCS file: /home/cvs/jakarta-
> commons/beanutils/src/java/org/apache/commons/beanutils/ConstructorUtils.
> java,v
>   retrieving revision 1.2
>   retrieving revision 1.3
>   diff -u -r1.2 -r1.3
>   --- ConstructorUtils.java	15 Jan 2003 21:59:38 -0000	1.2
>   +++ ConstructorUtils.java	3 Feb 2003 20:50:49 -0000	1.3
>   @@ -63,6 +63,21 @@
>
>    /**
>     * @version $Revision$ $Date$
>   + *
>   + * <p> Utility reflection methods focussed on constructors, modelled 
> after {@link MethodUtils}. </p>
>   + *
>   + * <h3>Known Limitations</h3>
>   + * <h4>Accessing Public Constructors In A Default Access 
> Superclass</h4>
>   + * <p>There is an issue when invoking public constructors contained in 
> a default access superclass.
>   + * Reflection locates these constructors fine and correctly assigns 
> them as public.
>   + * However, an <code>IllegalAccessException</code> is thrown if the 
> constructors is invoked.</p>
>   + *
>   + * <p><code>ConstructorUtils</code> contains a workaround for this

> situation.
>   + * It will attempt to call <code>setAccessible</code> on this 
> constructor.
>   + * If this call succeeds, then the method can be invoked as normal.
>   + * This call will only succeed when the application has sufficient 
> security privilages.
>   + * If this call fails then a warning will be logged and the method may 
> fail.</p>
>   + *
>     * @author Craig R. McClanahan
>     * @author Ralph Schaer
>     * @author Chris Audley
>   @@ -82,6 +97,19 @@
>
>        // --------------------------------------------------------- 
> Public Methods
>
>   +    /**
>   +     * <p>Convenience method returning new instance of 
> <code>klazz</code> using a single argument constructor.
>   +     * The formal parameter type is inferred from the actual values of 
> <code>arg</code>.
>   +     * See {@link #invokeExactConstructor(Class, Object[], Class[])} 
> for more details.</p>
>   +     *
>   +     * <p>The signatures should be assignment compatible.</p>
>   +     *
>   +     * @param klass the class to be constructed.
>   +     * @param arg the actual argument
>   +     * @return new instance of <code>klazz</code>
>   +     *
>   +     * @see #invokeConstructor(java.lang.Class, java.lang.Object[], 
> java.lang.Class[])
>   +     */
>        public static Object invokeConstructor(Class klass, Object arg)
>            throws
>                NoSuchMethodException,
>   @@ -94,6 +122,19 @@
>
>        }
>
>   +    /**
>   +     * <p>Returns new instance of <code>klazz</code> created using
the 
> actual arguments <code>args</code>.
>   +     * The formal parameter types are inferred from the actual values 
> of <code>args</code>.
>   +     * See {@link #invokeExactConstructor(Class, Object[], Class[])} 
> for more details.</p>
>   +     *
>   +     * <p>The signatures should be assignment compatible.</p>
>   +     *
>   +     * @param klass the class to be constructed.
>   +     * @param args actual argument array
>   +     * @return new instance of <code>klazz</code>
>   +     *
>   +     * @see #invokeConstructor(java.lang.Class, java.lang.Object[], 
> java.lang.Class[])
>   +     */
>        public static Object invokeConstructor(Class klass, Object[] args)
>            throws
>                NoSuchMethodException,
>   @@ -113,6 +154,23 @@
>
>        }
>
>   +    /**
>   +     * <p>Returns new instance of <code>klazz</code> created using

> constructor
>   +     * with signature <code>parameterTypes</code> and actual arguments

> <code>args</code>.</p>
>   +     *
>   +     * <p>The signatures should be assignment compatible.</p>
>   +     *
>   +     * @param klass the class to be constructed.
>   +     * @param args actual argument array
>   +     * @param parameterTypes parameter types array
>   +     * @return new instance of <code>klazz</code>
>   +     *
>   +     * @throws NoSuchMethodException if matching constructor cannot be 
> found
>   +     * @throws IllegalAccessException thrown on the constructor's 
> invocation
>   +     * @throws InvocationTargetException thrown on the constructor's 
> invocation
>   +     * @throws InstantiationException thrown on the constructor's 
> invocation
>   +     * @see Constructor#newInstance
>   +     */
>        public static Object invokeConstructor(
>            Class klass,
>            Object[] args,
>   @@ -139,6 +197,20 @@
>            return ctor.newInstance(args);
>        }
>
>   +
>   +    /**
>   +     * <p>Convenience method returning new instance of 
> <code>klazz</code> using a single argument constructor.
>   +     * The formal parameter type is inferred from the actual values of 
> <code>arg</code>.
>   +     * See {@link #invokeExactConstructor(Class, Object[], Class[])} 
> for more details.</p>
>   +     *
>   +     * <p>The signatures should match exactly.</p>
>   +     *
>   +     * @param klass the class to be constructed.
>   +     * @param arg the actual argument
>   +     * @return new instance of <code>klazz</code>
>   +     *
>   +     * @see #invokeExactConstructor(java.lang.Class, java.lang.Object[
> ], java.lang.Class[])
>   +     */
>        public static Object invokeExactConstructor(Class klass, Object 
> arg)
>            throws
>                NoSuchMethodException,
>   @@ -150,6 +222,20 @@
>            return invokeExactConstructor(klass, args);
>
>        }
>   +
>   +    /**
>   +     * <p>Returns new instance of <code>klazz</code> created using
the 
> actual arguments <code>args</code>.
>   +     * The formal parameter types are inferred from the actual values 
> of <code>args</code>.
>   +     * See {@link #invokeExactConstructor(Class, Object[], Class[])} 
> for more details.</p>
>   +     *
>   +     * <p>The signatures should match exactly.</p>
>   +     *
>   +     * @param klass the class to be constructed.
>   +     * @param args actual argument array
>   +     * @return new instance of <code>klazz</code>
>   +     *
>   +     * @see #invokeExactConstructor(java.lang.Class, java.lang.Object[
> ], java.lang.Class[])
>   +     */
>        public static Object invokeExactConstructor(Class klass, Object[] 
> args)
>            throws
>                NoSuchMethodException,
>   @@ -168,6 +254,24 @@
>
>        }
>
>   +    /**
>   +     * <p>Returns new instance of <code>klazz</code> created using

> constructor
>   +     * with signature <code>parameterTypes</code> and actual arguments
>   +     * <code>args</code>.</p>
>   +     *
>   +     * <p>The signatures should match exactly.</p>
>   +     *
>   +     * @param klass the class to be constructed.
>   +     * @param args actual argument array
>   +     * @param parameterTypes parameter types array
>   +     * @return new instance of <code>klazz</code>
>   +     *
>   +     * @throws NoSuchMethodException if matching constructor cannot be 
> found
>   +     * @throws IllegalAccessException thrown on the constructor's 
> invocation
>   +     * @throws InvocationTargetException thrown on the constructor's 
> invocation
>   +     * @throws InstantiationException thrown on the constructor's 
> invocation
>   +     * @see Constructor#newInstance
>   +     */
>        public static Object invokeExactConstructor(
>            Class klass,
>            Object[] args,
>   @@ -195,6 +299,13 @@
>
>        }
>
>   +    /**
>   +     * Returns a constructor with single argument.
>   +     * @param klass the class to be constructed
>   +     * @return null if matching accessible constructor can not be 
> found.
>   +     * @see Class#getConstructor
>   +     * @see #getAccessibleConstructor(java.lang.reflect.Constructor)
>   +     */
>        public static Constructor getAccessibleConstructor(
>            Class klass,
>            Class parameterType) {
>   @@ -204,6 +315,14 @@
>
>        }
>
>   +    /**
>   +     * Returns a constructor given a class and signature.
>   +     * @param klass the class to be constructed
>   +     * @param parameterTypes the parameter array
>   +     * @return null if matching accessible constructor can not be found
>   +     * @see Class#getConstructor
>   +     * @see #getAccessibleConstructor(java.lang.reflect.Constructor)
>   +     */
>        public static Constructor getAccessibleConstructor(
>            Class klass,
>            Class[] parameterTypes) {
>   @@ -217,6 +336,12 @@
>
>        }
>
>   +    /**
>   +     * Returns accessible version of the given constructor.
>   +     * @param ctor prototype constructor object.
>   +     * @return <code>null</code> if accessible constructor can not be

> found.
>   +     * @see java.lang.SecurityManager
>   +     */
>        public static Constructor getAccessibleConstructor(Constructor 
> ctor) {
>
>            // Make sure we have a method to check
>   @@ -241,7 +366,21 @@
>        }
>
>        // -------------------------------------------------------- 
> Private Methods
>   -
>   +    /**
>   +     * <p>Find an accessible constructor with compatible parameters.
>   +     * Compatible parameters mean that every method parameter is 
> assignable from
>   +     * the given parameters. In other words, it finds constructor that 
> will take
>   +     * the parameters given.</p>
>   +     *
>   +     * <p>First it checks if there is constructor matching the exact 
> signature.
>   +     * If no such, all the constructors of the class are tested if 
> their signatures
>   +     * are assignment compatible with the parameter types.
>   +     * The first matching constructor is returned.</p>
>   +     *
>   +     * @param clazz find constructor for this class
>   +     * @param parameterTypes find method with compatible parameters
>   +     * @return a valid Constructor object. If there's no matching 
> constructor, returns <code>null</code>.
>   +     */
>        private static Constructor getMatchingAccessibleConstructor(
>            Class clazz,
>            Class[] parameterTypes) {
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-dev-help@jakarta.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org


Mime
View raw message