From ec9db633958ea25ad5bce3323ba3a37fb3353655 Mon Sep 17 00:00:00 2001 From: Gunnar Morling Date: Tue, 23 Jul 2013 12:28:16 +0200 Subject: [PATCH] HV-642 Making privileged action for obtaining constructors consistent with other actions --- .../internal/util/ReflectionHelper.java | 24 +++++++++++++------ .../annotationfactory/AnnotationFactory.java | 5 +++- ...uctor.java => GetDeclaredConstructor.java} | 10 ++++---- .../xml/ConstrainedExecutableBuilder.java | 2 +- 4 files changed, 27 insertions(+), 14 deletions(-) rename engine/src/main/java/org/hibernate/validator/internal/util/privilegedactions/{GetConstructor.java => GetDeclaredConstructor.java} (76%) diff --git a/engine/src/main/java/org/hibernate/validator/internal/util/ReflectionHelper.java b/engine/src/main/java/org/hibernate/validator/internal/util/ReflectionHelper.java index 87ba468449..6bbcbf61e0 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/util/ReflectionHelper.java +++ b/engine/src/main/java/org/hibernate/validator/internal/util/ReflectionHelper.java @@ -50,7 +50,7 @@ import org.hibernate.validator.internal.util.privilegedactions.ConstructorInstance; import org.hibernate.validator.internal.util.privilegedactions.GetAnnotationParameter; import org.hibernate.validator.internal.util.privilegedactions.GetClassLoader; -import org.hibernate.validator.internal.util.privilegedactions.GetConstructor; +import org.hibernate.validator.internal.util.privilegedactions.GetDeclaredConstructor; import org.hibernate.validator.internal.util.privilegedactions.GetDeclaredConstructors; import org.hibernate.validator.internal.util.privilegedactions.GetDeclaredField; import org.hibernate.validator.internal.util.privilegedactions.GetDeclaredFields; @@ -97,6 +97,7 @@ public final class ReflectionHelper { private static final TypeResolver typeResolver = new TypeResolver(); private static final Map> PRIMITIVE_NAME_TO_PRIMITIVE; + static { Map> tmpMap = newHashMap( 9 ); @@ -172,8 +173,8 @@ public static Class loadClass(String className, String defaultPackage) { } public static Class loadClass(String className, String defaultPackage, Class caller) { - if( PRIMITIVE_NAME_TO_PRIMITIVE.containsKey( className )) { - return PRIMITIVE_NAME_TO_PRIMITIVE.get( className ); + if ( PRIMITIVE_NAME_TO_PRIMITIVE.containsKey( className ) ) { + return PRIMITIVE_NAME_TO_PRIMITIVE.get( className ); } StringBuilder fullyQualifiedClass = new StringBuilder(); @@ -211,10 +212,6 @@ private static boolean isQualifiedClass(String clazz) { return clazz.contains( PACKAGE_SEPARATOR ); } - public static Constructor getConstructor(Class clazz, Class... params) { - return run( GetConstructor.action( clazz, params ) ); - } - public static T newInstance(Class clazz, String message) { return run( NewInstance.action( clazz, message ) ); } @@ -658,6 +655,19 @@ public static Constructor[] getDeclaredConstructors(Class clazz) { return run( GetDeclaredConstructors.action( clazz ) ); } + /** + * Returns the declared constructor with the specified parameter types or {@code null} if + * it does not exist. + * + * @param clazz The class to check. + * @param parameterTypes The constructor parameter types. + * + * @return Returns the declared constructor with the specified name or {@code null} if it does not exist. + */ + public static Constructor getDeclaredConstructor(Class clazz, Class... params) { + return run( GetDeclaredConstructor.action( clazz, params ) ); + } + /** * Executes the given privileged action either directly or with privileges * enabled, depending on whether a security manager is around or not. diff --git a/engine/src/main/java/org/hibernate/validator/internal/util/annotationfactory/AnnotationFactory.java b/engine/src/main/java/org/hibernate/validator/internal/util/annotationfactory/AnnotationFactory.java index 161f4e28e1..0ce6e44903 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/util/annotationfactory/AnnotationFactory.java +++ b/engine/src/main/java/org/hibernate/validator/internal/util/annotationfactory/AnnotationFactory.java @@ -55,7 +55,10 @@ public static T create(AnnotationDescriptor descriptor private static T getProxyInstance(Class proxyClass, InvocationHandler handler) throws SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException { - final Constructor constructor = ReflectionHelper.getConstructor( proxyClass, InvocationHandler.class ); + final Constructor constructor = ReflectionHelper.getDeclaredConstructor( + proxyClass, + InvocationHandler.class + ); return ReflectionHelper.newConstructorInstance( constructor, handler ); } } diff --git a/engine/src/main/java/org/hibernate/validator/internal/util/privilegedactions/GetConstructor.java b/engine/src/main/java/org/hibernate/validator/internal/util/privilegedactions/GetDeclaredConstructor.java similarity index 76% rename from engine/src/main/java/org/hibernate/validator/internal/util/privilegedactions/GetConstructor.java rename to engine/src/main/java/org/hibernate/validator/internal/util/privilegedactions/GetDeclaredConstructor.java index 65e6444674..da24fa80dc 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/util/privilegedactions/GetConstructor.java +++ b/engine/src/main/java/org/hibernate/validator/internal/util/privilegedactions/GetDeclaredConstructor.java @@ -22,22 +22,22 @@ /** * @author Emmanuel Bernard */ -public final class GetConstructor implements PrivilegedAction> { +public final class GetDeclaredConstructor implements PrivilegedAction> { private final Class clazz; private final Class[] params; - public static GetConstructor action(Class clazz, Class... params) { - return new GetConstructor( clazz, params ); + public static GetDeclaredConstructor action(Class clazz, Class... params) { + return new GetDeclaredConstructor( clazz, params ); } - private GetConstructor(Class clazz, Class... params) { + private GetDeclaredConstructor(Class clazz, Class... params) { this.clazz = clazz; this.params = params; } public Constructor run() { try { - return clazz.getDeclaredConstructor(params); + return clazz.getDeclaredConstructor( params ); } catch ( NoSuchMethodException e ) { return null; diff --git a/engine/src/main/java/org/hibernate/validator/internal/xml/ConstrainedExecutableBuilder.java b/engine/src/main/java/org/hibernate/validator/internal/xml/ConstrainedExecutableBuilder.java index e13c907096..c36096c64a 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/xml/ConstrainedExecutableBuilder.java +++ b/engine/src/main/java/org/hibernate/validator/internal/xml/ConstrainedExecutableBuilder.java @@ -135,7 +135,7 @@ public static Set buildConstructorConstrainedExecutable(L defaultPackage ); - final Constructor constructor = ReflectionHelper.getConstructor( + final Constructor constructor = ReflectionHelper.getDeclaredConstructor( beanClass, constructorParameterTypes.toArray( new Class[constructorParameterTypes.size()] ) );