[hibernate-commits] Hibernate SVN: r16044 - validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine and 7 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Thu Feb 26 08:52:37 EST 2009


Author: epbernard
Date: 2009-02-26 08:52:37 -0500 (Thu, 26 Feb 2009)
New Revision: 16044

Modified:
   beanvalidation/trunk/validation-api/src/main/java/javax/validation/ConstraintDescriptor.java
   beanvalidation/trunk/validation-api/src/main/java/javax/validation/ConstraintViolation.java
   beanvalidation/trunk/validation-api/src/main/java/javax/validation/ElementDescriptor.java
   beanvalidation/trunk/validation-api/src/main/java/javax/validation/MessageInterpolator.java
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintDescriptorImpl.java
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintHelper.java
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintTree.java
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ElementDescriptorImpl.java
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/ValidatorTypeHelper.java
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/annotationfactory/AnnotationDescriptor.java
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/annotationfactory/AnnotationFactory.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/bootstrap/ValidationTest.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForNumberTest.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForStringTest.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/LengthValidatorTest.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MaxValidatorForNumberTest.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MaxValidatorForStringTest.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MinValidatorForNumberTest.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MinValidatorForStringTest.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/PatternValidatorTest.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ResourceBundleMessageInterpolatorTest.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ValidatorImplTest.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/ValidatorTypeTest.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/annotationfactory/AnnotationFactoryTest.java
Log:
BVAL-130 Make ConstraintDescriptor generic: ConstraintDescriptor<T extends Annotation>
Fix a bunch of untypesafe calls to the codebase

Modified: beanvalidation/trunk/validation-api/src/main/java/javax/validation/ConstraintDescriptor.java
===================================================================
--- beanvalidation/trunk/validation-api/src/main/java/javax/validation/ConstraintDescriptor.java	2009-02-26 11:48:50 UTC (rev 16043)
+++ beanvalidation/trunk/validation-api/src/main/java/javax/validation/ConstraintDescriptor.java	2009-02-26 13:52:37 UTC (rev 16044)
@@ -28,7 +28,7 @@
  * @author Emmanuel Bernard
  * @author Hardy Ferentschik
  */
-public interface ConstraintDescriptor {
+public interface ConstraintDescriptor<T extends Annotation> {
 	/**
 	 * Returns the annotation describing the constraint declaration.
 	 * If a composing constraint, parameter values are reflecting
@@ -36,7 +36,7 @@
 	 *
 	 * @return The annotation for this constraint.
 	 */
-	Annotation getAnnotation();
+	T getAnnotation();
 
 	/**
 	 * The Set of groups the constraint is applied on.
@@ -52,8 +52,8 @@
 	 *
 	 * @return list of the constraint validation implementation classes.
 	 */
-	List<Class<? extends ConstraintValidator<?, ?>>>
-	getConstraintValidatorClasses();
+	List<Class<? extends ConstraintValidator<T, ?>>>
+		getConstraintValidatorClasses();
 
 	/**
 	 * Returns a map containing the annotation parameter names as keys and the
@@ -75,7 +75,7 @@
 	 * @return a set of <code>ConstraintDescriptor<code> objects or an empty set
 	 *         in case there are no composing constraints.
 	 */
-	Set<ConstraintDescriptor> getComposingConstraints();
+	Set<ConstraintDescriptor<?>> getComposingConstraints();
 
 	/**
 	 * @return true if the constraint is annotated with @ReportAsSingleViolation

Modified: beanvalidation/trunk/validation-api/src/main/java/javax/validation/ConstraintViolation.java
===================================================================
--- beanvalidation/trunk/validation-api/src/main/java/javax/validation/ConstraintViolation.java	2009-02-26 11:48:50 UTC (rev 16043)
+++ beanvalidation/trunk/validation-api/src/main/java/javax/validation/ConstraintViolation.java	2009-02-26 13:52:37 UTC (rev 16044)
@@ -71,5 +71,5 @@
 	 * 
 	 * @return constraint metadata
 	 */
-	ConstraintDescriptor getConstraintDescriptor();
+	ConstraintDescriptor<?> getConstraintDescriptor();
 }

Modified: beanvalidation/trunk/validation-api/src/main/java/javax/validation/ElementDescriptor.java
===================================================================
--- beanvalidation/trunk/validation-api/src/main/java/javax/validation/ElementDescriptor.java	2009-02-26 11:48:50 UTC (rev 16043)
+++ beanvalidation/trunk/validation-api/src/main/java/javax/validation/ElementDescriptor.java	2009-02-26 13:52:37 UTC (rev 16044)
@@ -45,5 +45,5 @@
 	 *
 	 * @return Set of constraint descriptors for this element
 	 */
-	Set<ConstraintDescriptor> getConstraintDescriptors();
+	Set<ConstraintDescriptor<?>> getConstraintDescriptors();
 }

Modified: beanvalidation/trunk/validation-api/src/main/java/javax/validation/MessageInterpolator.java
===================================================================
--- beanvalidation/trunk/validation-api/src/main/java/javax/validation/MessageInterpolator.java	2009-02-26 11:48:50 UTC (rev 16043)
+++ beanvalidation/trunk/validation-api/src/main/java/javax/validation/MessageInterpolator.java	2009-02-26 13:52:37 UTC (rev 16044)
@@ -39,7 +39,7 @@
 	 * @return Interpolated error message.
 	 */
 	String interpolate(String message,
-					   ConstraintDescriptor constraintDescriptor,
+					   ConstraintDescriptor<?> constraintDescriptor,
 					   Object value);
 
 	/**
@@ -54,7 +54,7 @@
 	 * @return Interpolated error message.
 	 */
 	String interpolate(String message,
-					   ConstraintDescriptor constraintDescriptor,
+					   ConstraintDescriptor<?> constraintDescriptor,
 					   Object value,
 					   Locale locale);
 }

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintDescriptorImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintDescriptorImpl.java	2009-02-26 11:48:50 UTC (rev 16043)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintDescriptorImpl.java	2009-02-26 13:52:37 UTC (rev 16044)
@@ -49,7 +49,7 @@
  * @author Emmanuel Bernard
  * @author Hardy Ferentschik
  */
-public class ConstraintDescriptorImpl<U extends Annotation> implements ConstraintDescriptor {
+public class ConstraintDescriptorImpl<T extends Annotation> implements ConstraintDescriptor<T> {
 	private static final Logger log = LoggerFactory.make();
 	private static final Class<?>[] DEFAULT_GROUP = new Class<?>[] { Default.class };
 	private static final int OVERRIDES_PARAMETER_DEFAULT_INDEX = -1;
@@ -57,13 +57,13 @@
 	/**
 	 * The actual constraint annotation.
 	 */
-	private final U annotation;
+	private final T annotation;
 
 	/**
 	 * The set of classes implementing the validation for this constraint. See also
 	 * <code>ConstraintValidator</code> resolution algorithm.
 	 */
-	private final List<Class<? extends ConstraintValidator<?, ?>>> constraintClasses = new ArrayList<Class<? extends ConstraintValidator<?, ?>>>();
+	private final List<Class<? extends ConstraintValidator<T, ?>>> constraintClasses = new ArrayList<Class<? extends ConstraintValidator<T, ?>>>();
 
 	/**
 	 * The groups for which to apply this constraint.
@@ -79,7 +79,7 @@
 	/**
 	 * The composing constraints for this constraints.
 	 */
-	private final Set<ConstraintDescriptor> composingConstraints = new HashSet<ConstraintDescriptor>();
+	private final Set<ConstraintDescriptor<?>> composingConstraints = new HashSet<ConstraintDescriptor<?>>();
 
 	/**
 	 * Override paramter values used for composing constraints.
@@ -96,7 +96,7 @@
 	 */
 	private final ConstraintHelper constraintHelper;
 
-	public ConstraintDescriptorImpl(U annotation, Class<?>[] groups, ConstraintHelper constraintHelper) {
+	public ConstraintDescriptorImpl(T annotation, Class<?>[] groups, ConstraintHelper constraintHelper) {
 		this( annotation, new HashSet<Class<?>>(), constraintHelper );
 		if ( groups.length == 0 ) {
 			groups = DEFAULT_GROUP;
@@ -104,7 +104,7 @@
 		this.groups.addAll( Arrays.asList( groups ) );
 	}
 
-	public ConstraintDescriptorImpl(U annotation, Set<Class<?>> groups, ConstraintHelper constraintHelper) {
+	private ConstraintDescriptorImpl(T annotation, Set<Class<?>> groups, ConstraintHelper constraintHelper) {
 		this.annotation = annotation;
 		this.groups = groups;
 		this.parameters = getAnnotationParameters( annotation );
@@ -125,15 +125,25 @@
 			constraintClasses.addAll( constraintHelper.getBuiltInConstraints( annotation ) );
 		}
 		else {
-			Constraint constraint = annotation.annotationType().getAnnotation( Constraint.class );
-			constraintClasses.addAll( Arrays.asList( constraint.validatedBy() ) );
+			//TODO are we sure a @Constraint is there?
+			final Class<? extends Annotation> annotationType = annotation.annotationType();
+			Class<? extends ConstraintValidator<?,?>>[] validatedBy = annotationType
+					.getAnnotation( Constraint.class )
+					.validatedBy();
+			for (Class<? extends ConstraintValidator<?,?>> validator : validatedBy) {
+				//FIXME does this create a CCE at runtime?
+				//FIXME if yes wrap into VE, if no we need to test the type here
+				//Once resolved,we can @SuppressWarning("unchecked") on the cast
+				Class<? extends ConstraintValidator<T,?>> safeValidator = (Class<? extends ConstraintValidator<T,?>>) validator;
+				constraintClasses.add( safeValidator );
+			}
 		}
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
-	public U getAnnotation() {
+	public T getAnnotation() {
 		return annotation;
 	}
 
@@ -147,7 +157,7 @@
 	/**
 	 * {@inheritDoc}
 	 */
-	public List<Class<? extends ConstraintValidator<?, ?>>> getConstraintValidatorClasses() {
+	public List<Class<? extends ConstraintValidator<T, ?>>> getConstraintValidatorClasses() {
 		return Collections.unmodifiableList( constraintClasses );
 	}
 
@@ -161,7 +171,7 @@
 	/**
 	 * {@inheritDoc}
 	 */
-	public Set<ConstraintDescriptor> getComposingConstraints() {
+	public Set<ConstraintDescriptor<?>> getComposingConstraints() {
 		return composingConstraints;
 	}
 
@@ -249,10 +259,7 @@
 		for ( Annotation declaredAnnotation : annotation.annotationType().getDeclaredAnnotations() ) {
 			if ( constraintHelper.isConstraintAnnotation( declaredAnnotation )
 					|| constraintHelper.isBuiltinConstraint( declaredAnnotation ) ) {
-				ConstraintDescriptorImpl descriptor = createComposingConstraintDescriptor(
-						OVERRIDES_PARAMETER_DEFAULT_INDEX,
-						declaredAnnotation
-				);
+				ConstraintDescriptorImpl<?> descriptor = createComposingConstraintDescriptor( declaredAnnotation, OVERRIDES_PARAMETER_DEFAULT_INDEX );
 				composingConstraints.add( descriptor );
 				log.debug( "Adding composing constraint: " + descriptor );
 			}
@@ -260,8 +267,8 @@
 				List<Annotation> multiValueConstraints = constraintHelper.getMultiValueConstraints( declaredAnnotation );
 				int index = 1;
 				for ( Annotation constraintAnnotation : multiValueConstraints ) {
-					ConstraintDescriptorImpl descriptor = createComposingConstraintDescriptor(
-							index, constraintAnnotation
+					ConstraintDescriptorImpl<?> descriptor = createComposingConstraintDescriptor(
+						constraintAnnotation, index
 					);
 					composingConstraints.add( descriptor );
 					log.debug( "Adding composing constraint: " + descriptor );
@@ -271,13 +278,25 @@
 		}
 	}
 
-	private ConstraintDescriptorImpl createComposingConstraintDescriptor(int index, Annotation constraintAnnotation) {
-		AnnotationDescriptor annotationDescriptor = new AnnotationDescriptor(
-				constraintAnnotation.annotationType(), getAnnotationParameters( constraintAnnotation )
+	private <U extends Annotation> ConstraintDescriptorImpl<U> createComposingConstraintDescriptor(U declaredAnnotation, int index) {
+		//TODO don't quite understand this warning
+		//TODO assuming U.getClass() returns Class<U>
+		@SuppressWarnings("unchecked")
+		final Class<U> annotationType = (Class<U>) declaredAnnotation.annotationType();
+		return createComposingConstraintDescriptor(
+						index,
+						declaredAnnotation,
+						annotationType
+				);
+	}
+
+	private <U extends Annotation> ConstraintDescriptorImpl<U> createComposingConstraintDescriptor(int index, U constraintAnnotation, Class<U> annotationType) {
+		AnnotationDescriptor<U> annotationDescriptor = new AnnotationDescriptor<U>(
+				annotationType, getAnnotationParameters( constraintAnnotation )
 		);
 		Map<String, Object> overrides = overrideParameters.get(
 				new ClassIndexWrapper(
-						constraintAnnotation.annotationType(), index
+						annotationType, index
 				)
 		);
 		if ( overrides != null ) {
@@ -285,8 +304,8 @@
 				annotationDescriptor.setValue( entry.getKey(), entry.getValue() );
 			}
 		}
-		Annotation annotationProxy = AnnotationFactory.create( annotationDescriptor );
-		return new ConstraintDescriptorImpl( annotationProxy, groups, constraintHelper );
+		U annotationProxy = AnnotationFactory.create( annotationDescriptor );
+		return new ConstraintDescriptorImpl<U>( annotationProxy, groups, constraintHelper );
 	}
 
 	private class ClassIndexWrapper {

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintHelper.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintHelper.java	2009-02-26 11:48:50 UTC (rev 16043)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintHelper.java	2009-02-26 13:52:37 UTC (rev 16044)
@@ -78,7 +78,8 @@
 
 	public ConstraintHelper() {
 
-		List<Class<? extends ConstraintValidator<?, ?>>> constraintList = new ArrayList<Class<? extends ConstraintValidator<?, ?>>>();
+		List<Class<? extends ConstraintValidator<?, ?>>> constraintList =
+				new ArrayList<Class<? extends ConstraintValidator<?, ?>>>();
 		constraintList.add( AssertFalseValidator.class );
 		builtinConstraints.put( AssertFalse.class, constraintList );
 
@@ -131,16 +132,28 @@
 		builtinConstraints.put( Pattern.class, constraintList );
 	}
 
-	public List<Class<? extends ConstraintValidator<?, ?>>> getBuiltInConstraints(Annotation annotation) {
-		List<Class<? extends ConstraintValidator<?, ?>>> constraints = builtinConstraints.get( annotation.annotationType() );
+	public <T extends Annotation> List<Class<? extends ConstraintValidator<T, ?>>> getBuiltInConstraints(T annotation) {
+		final List<Class<? extends ConstraintValidator<?, ?>>> builtInList = getBuiltInFromAnnotationType( annotation.annotationType() );
 
-		if ( constraints == null ) {
+		if (builtInList == null || builtInList.size() == 0) {
 			throw new ValidationException( "Unable to find constraints for  " + annotation.annotationType() );
 		}
+		List<Class<? extends ConstraintValidator<T, ?>>> constraints =
+				new ArrayList<Class<? extends ConstraintValidator<T, ?>>>( builtInList.size() );
+		for (Class<? extends ConstraintValidator<?, ?>> validatorClass : builtInList) {
+			//safe cause all CV for a given annotation A are CV<A, ?>
+			@SuppressWarnings( "unchecked" )
+			Class<ConstraintValidator<T, ?>> safeValdiatorClass = (Class<ConstraintValidator<T, ?>>) validatorClass;
+			constraints.add( safeValdiatorClass );
+		}
 
 		return constraints;
 	}
 
+	private List<Class<? extends ConstraintValidator<?, ?>>> getBuiltInFromAnnotationType(Class<?> annotationType) {
+		return builtinConstraints.get( annotationType );
+	}
+
 	public boolean isBuiltinConstraint(Annotation annotation) {
 		return builtinConstraints.containsKey( annotation.annotationType() );
 	}

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintTree.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintTree.java	2009-02-26 11:48:50 UTC (rev 16043)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintTree.java	2009-02-26 13:52:37 UTC (rev 16044)
@@ -22,6 +22,8 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+
 import org.hibernate.validation.AmbiguousConstraintUsageException;
 import javax.validation.ConstraintDescriptor;
 import javax.validation.ConstraintValidator;
@@ -40,29 +42,34 @@
  *
  * @author Hardy Ferentschik
  */
-public class ConstraintTree {
+public class ConstraintTree<T extends Annotation> {
 
 	private static final Logger log = LoggerFactory.make();
 
-	private final ConstraintTree parent;
-	private final List<ConstraintTree> children;
-	private final ConstraintDescriptor descriptor;
+	private final ConstraintTree<?> parent;
+	private final List<ConstraintTree<?>> children;
+	private final ConstraintDescriptor<T> descriptor;
 
-	public ConstraintTree(ConstraintDescriptor descriptor) {
+	public ConstraintTree(ConstraintDescriptor<T> descriptor) {
 		this( descriptor, null );
 	}
 
-	private ConstraintTree(ConstraintDescriptor descriptor, ConstraintTree parent) {
+	private ConstraintTree(ConstraintDescriptor<T> descriptor, ConstraintTree<?> parent) {
 		this.parent = parent;
 		this.descriptor = descriptor;
-		children = new ArrayList<ConstraintTree>( descriptor.getComposingConstraints().size() );
+		final Set<ConstraintDescriptor<?>> composingConstraints = descriptor.getComposingConstraints();
+		children = new ArrayList<ConstraintTree<?>>( composingConstraints.size() );
 
-		for ( ConstraintDescriptor composingDescriptor : descriptor.getComposingConstraints() ) {
-			ConstraintTree treeNode = new ConstraintTree( composingDescriptor, this );
+		for ( ConstraintDescriptor<?> composingDescriptor : composingConstraints ) {
+			ConstraintTree<?> treeNode = createConstraintTree( composingDescriptor );
 			children.add( treeNode );
 		}
 	}
 
+	private <U extends Annotation> ConstraintTree<U> createConstraintTree(ConstraintDescriptor<U> composingDescriptor) {
+		return new ConstraintTree<U>( composingDescriptor, this );
+	}
+
 	public boolean isRoot() {
 		return parent == null;
 	}
@@ -71,7 +78,7 @@
 		return parent;
 	}
 
-	public List<ConstraintTree> getChildren() {
+	public List<ConstraintTree<?>> getChildren() {
 		return children;
 	}
 
@@ -79,7 +86,7 @@
 		return children.size() > 0;
 	}
 
-	public ConstraintDescriptor getDescriptor() {
+	public ConstraintDescriptor<T> getDescriptor() {
 		return descriptor;
 	}
 
@@ -150,15 +157,18 @@
 	 * @return A initalized constraint validator matching the type of the value to be validated.
 	 */
 	private ConstraintValidator getInitalizedValidator(Object value, ConstraintValidatorFactory constraintFactory) {
-		ConstraintValidator constraintValidator;
-		Class validatorClass;
+		Class<? extends ConstraintValidator<T, ?>> validatorClass;
+		//FIXME This sounds really bad, why value can be null. Why are we deciding of the validator based on the value? 
 		if ( value == null ) {
 			validatorClass = descriptor.getConstraintValidatorClasses().get( 0 );
 		}
 		else {
 			validatorClass = findMatchingValidatorClass( value );
 		}
-		constraintValidator = constraintFactory.getInstance( validatorClass );
+		//
+		@SuppressWarnings("unchecked")
+		ConstraintValidator<T,?> constraintValidator =
+				constraintFactory.getInstance( validatorClass );
 		initializeConstraint( descriptor, constraintValidator );
 		return constraintValidator;
 	}
@@ -174,9 +184,9 @@
 
 		Class valueClass = determineValueClass( value );
 
-		Map<Class<?>, Class<? extends ConstraintValidator<? extends Annotation, ?>>> validatorsTypes = ValidatorTypeHelper
-				.getValidatorsTypes( descriptor.getConstraintValidatorClasses() );
-		List<Class> assignableClasses = findAssingableClasses( valueClass, validatorsTypes );
+		Map<Class<?>, Class<? extends ConstraintValidator<?, ?>>> validatorsTypes =
+				ValidatorTypeHelper.getValidatorsTypes( descriptor.getConstraintValidatorClasses() );
+		List<Class> assignableClasses = findAssignableClasses( valueClass, validatorsTypes );
 
 		resolveAssignableClasses( assignableClasses );
 		verifyResolveWasUnique( valueClass, assignableClasses );
@@ -202,7 +212,7 @@
 		}
 	}
 
-	private List<Class> findAssingableClasses(Class valueClass, Map<Class<?>, Class<? extends ConstraintValidator<? extends Annotation, ?>>> validatorsTypes) {
+	private List<Class> findAssignableClasses(Class valueClass, Map<Class<?>, Class<? extends ConstraintValidator<?, ?>>> validatorsTypes) {
 		List<Class> assignableClasses = new ArrayList<Class>();
 		for ( Class clazz : validatorsTypes.keySet() ) {
 			if ( clazz.isAssignableFrom( valueClass ) ) {
@@ -247,9 +257,8 @@
 		} while ( classesToRemove.size() > 0 );
 	}
 
-	@SuppressWarnings("unchecked")
 	private void initializeConstraint
-			(ConstraintDescriptor
+			(ConstraintDescriptor<T>
 					descriptor, ConstraintValidator
 					constraintValidator) {
 		try {

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ElementDescriptorImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ElementDescriptorImpl.java	2009-02-26 11:48:50 UTC (rev 16043)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ElementDescriptorImpl.java	2009-02-26 13:52:37 UTC (rev 16044)
@@ -35,7 +35,7 @@
 public class ElementDescriptorImpl implements PropertyDescriptor {
 	private final Class<?> returnType;
 	private final boolean cascaded;
-	private final Set<ConstraintDescriptor> constraintDescriptors = new HashSet<ConstraintDescriptor>();
+	private final Set<ConstraintDescriptor<?>> constraintDescriptors = new HashSet<ConstraintDescriptor<?>>();
 	private final String propertyPath;
 
 
@@ -72,7 +72,7 @@
 	/**
 	 * {@inheritDoc}
 	 */
-	public Set<ConstraintDescriptor> getConstraintDescriptors() {
+	public Set<ConstraintDescriptor<?>> getConstraintDescriptors() {
 		return Collections.unmodifiableSet( constraintDescriptors );
 	}
 

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/ValidatorTypeHelper.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/ValidatorTypeHelper.java	2009-02-26 11:48:50 UTC (rev 16043)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/ValidatorTypeHelper.java	2009-02-26 13:52:37 UTC (rev 16044)
@@ -45,15 +45,15 @@
 	 * @return Return a Map&lt;Class, Class&lt;? extends ConstraintValidator&gt;&gt; where the map
 	 *         key is the type the validator accepts and value the validator class itself.
 	 */
-	public static Map<Class<?>, Class<? extends ConstraintValidator<? extends Annotation, ?>>>
-	getValidatorsTypes(List<Class<? extends ConstraintValidator<?, ?>>> validators) {
+	public static <T extends Annotation> Map<Class<?>, Class<? extends ConstraintValidator<?, ?>>> getValidatorsTypes(
+				List<Class<? extends ConstraintValidator<T, ?>>> validators) {
 		if ( validators == null || validators.size() == 0 ) {
 			throw new ValidationException( "No ConstraintValidators associated to @Constraint" );
 		}
 		else {
-			Map<Class<?>, Class<? extends ConstraintValidator<? extends Annotation, ?>>> validatorsTypes =
-					new HashMap<Class<?>, Class<? extends ConstraintValidator<? extends Annotation, ?>>>();
-			for ( Class<? extends ConstraintValidator<? extends Annotation, ?>> validator : validators ) {
+			Map<Class<?>, Class<? extends ConstraintValidator<?, ?>>> validatorsTypes =
+					new HashMap<Class<?>, Class<? extends ConstraintValidator<?, ?>>>();
+			for ( Class<? extends ConstraintValidator<?, ?>> validator : validators ) {
 				validatorsTypes.put( extractType( validator ), validator );
 			}
 			return validatorsTypes;

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/annotationfactory/AnnotationDescriptor.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/annotationfactory/AnnotationDescriptor.java	2009-02-26 11:48:50 UTC (rev 16043)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/annotationfactory/AnnotationDescriptor.java	2009-02-26 13:52:37 UTC (rev 16044)
@@ -33,17 +33,17 @@
  * @author Davide Marchignoli
  * @author Hardy Ferentschik
  */
-public class AnnotationDescriptor {
+public class AnnotationDescriptor<T extends Annotation> {
 
-	private final Class<? extends Annotation> type;
+	private final Class<T> type;
 
 	private final Map<String, Object> elements = new HashMap<String, Object>();
 
-	public AnnotationDescriptor(Class<? extends Annotation> annotationType) {
+	public AnnotationDescriptor(Class<T> annotationType) {
 		this.type = annotationType;
 	}
 
-    public AnnotationDescriptor(Class<? extends Annotation> annotationType, Map<String, Object> elements) {
+    public AnnotationDescriptor(Class<T> annotationType, Map<String, Object> elements) {
 		this.type = annotationType;
 		for (Map.Entry<String, Object> entry : elements.entrySet()) {
 			this.elements.put( entry.getKey(), entry.getValue() );
@@ -66,7 +66,7 @@
 		return elements.size();
 	}
 
-	public Class<? extends Annotation> type() {
+	public Class<T> type() {
 		return type;
 	}
 }

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/annotationfactory/AnnotationFactory.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/annotationfactory/AnnotationFactory.java	2009-02-26 11:48:50 UTC (rev 16043)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/annotationfactory/AnnotationFactory.java	2009-02-26 13:52:37 UTC (rev 16044)
@@ -34,7 +34,7 @@
 public class AnnotationFactory {
 
 	@SuppressWarnings("unchecked")
-	public static <T extends Annotation> T create(AnnotationDescriptor descriptor) {
+	public static <T extends Annotation> T create(AnnotationDescriptor<T> descriptor) {
 		ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
         //TODO round 34ms to generate the proxy, hug! is Javassist Faster?
         Class<T> proxyClass = (Class<T>) Proxy.getProxyClass( classLoader, descriptor.type() );

Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/bootstrap/ValidationTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/bootstrap/ValidationTest.java	2009-02-26 11:48:50 UTC (rev 16043)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/bootstrap/ValidationTest.java	2009-02-26 13:52:37 UTC (rev 16044)
@@ -114,11 +114,11 @@
 		configuration = Validation.byDefaultProvider().configure();
 		configuration.messageInterpolator(
 				new MessageInterpolator() {
-					public String interpolate(String message, ConstraintDescriptor constraintDescriptor, Object value) {
+					public String interpolate(String message, ConstraintDescriptor<?> constraintDescriptor, Object value) {
 						return "my custom message";
 					}
 
-					public String interpolate(String message, ConstraintDescriptor constraintDescriptor, Object value, Locale locale) {
+					public String interpolate(String message, ConstraintDescriptor<?> constraintDescriptor, Object value, Locale locale) {
 						throw new UnsupportedOperationException( "No specific locale is possible" );
 					}
 				}

Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForNumberTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForNumberTest.java	2009-02-26 11:48:50 UTC (rev 16043)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForNumberTest.java	2009-02-26 13:52:37 UTC (rev 16044)
@@ -1,4 +1,4 @@
-// $Id:$
+// $Id$
 /*
 * JBoss, Home of Professional Open Source
 * Copyright 2008, Red Hat Middleware LLC, and individual contributors
@@ -36,7 +36,7 @@
 	@Test
 	public void testIsValid() {
 
-		AnnotationDescriptor descriptor = new AnnotationDescriptor( Digits.class );
+		AnnotationDescriptor<Digits> descriptor = new AnnotationDescriptor( Digits.class );
 		descriptor.setValue( "integer", 5 );
 		descriptor.setValue( "fraction", 2 );
 		descriptor.setValue( "message", "{validator.digits}" );
@@ -64,7 +64,7 @@
 	@Test
 	public void testIsValidZeroLength() {
 
-		AnnotationDescriptor descriptor = new AnnotationDescriptor( Digits.class );
+		AnnotationDescriptor<Digits> descriptor = new AnnotationDescriptor( Digits.class );
 		descriptor.setValue( "integer", 0 );
 		descriptor.setValue( "fraction", 0 );
 		descriptor.setValue( "message", "{validator.digits}" );

Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForStringTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForStringTest.java	2009-02-26 11:48:50 UTC (rev 16043)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForStringTest.java	2009-02-26 13:52:37 UTC (rev 16044)
@@ -1,4 +1,4 @@
-// $Id:$
+// $Id$
 /*
 * JBoss, Home of Professional Open Source
 * Copyright 2008, Red Hat Middleware LLC, and individual contributors
@@ -37,7 +37,7 @@
 	@BeforeClass
 	public static void init() {
 
-		AnnotationDescriptor descriptor = new AnnotationDescriptor( Digits.class );
+		AnnotationDescriptor<Digits> descriptor = new AnnotationDescriptor( Digits.class );
 		descriptor.setValue( "integer", 5 );
 		descriptor.setValue( "fraction", 2 );
 		descriptor.setValue( "message", "{validator.digits}" );

Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/LengthValidatorTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/LengthValidatorTest.java	2009-02-26 11:48:50 UTC (rev 16043)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/LengthValidatorTest.java	2009-02-26 13:52:37 UTC (rev 16044)
@@ -36,7 +36,7 @@
 
 	@BeforeClass
 	public static void init() {
-		AnnotationDescriptor descriptor = new AnnotationDescriptor( Length.class );
+		AnnotationDescriptor<Length> descriptor = new AnnotationDescriptor<Length>( Length.class );
 		descriptor.setValue( "min", 1 );
 		descriptor.setValue( "max", 3 );
 		descriptor.setValue( "message", "{validator.length}" );

Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MaxValidatorForNumberTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MaxValidatorForNumberTest.java	2009-02-26 11:48:50 UTC (rev 16043)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MaxValidatorForNumberTest.java	2009-02-26 13:52:37 UTC (rev 16044)
@@ -39,7 +39,7 @@
 
 	@BeforeClass
 	public static void init() {
-		AnnotationDescriptor descriptor = new AnnotationDescriptor( Max.class );
+		AnnotationDescriptor<Max> descriptor = new AnnotationDescriptor( Max.class );
 		descriptor.setValue( "value", 15l );
 		descriptor.setValue( "message", "{validator.max}" );
 		Max m = AnnotationFactory.create( descriptor );

Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MaxValidatorForStringTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MaxValidatorForStringTest.java	2009-02-26 11:48:50 UTC (rev 16043)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MaxValidatorForStringTest.java	2009-02-26 13:52:37 UTC (rev 16044)
@@ -37,7 +37,7 @@
 
 	@BeforeClass
 	public static void init() {
-		AnnotationDescriptor descriptor = new AnnotationDescriptor( Max.class );
+		AnnotationDescriptor<Max> descriptor = new AnnotationDescriptor( Max.class );
 		descriptor.setValue( "value", 15l );
 		descriptor.setValue( "message", "{validator.max}" );
 		Max m = AnnotationFactory.create( descriptor );

Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MinValidatorForNumberTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MinValidatorForNumberTest.java	2009-02-26 11:48:50 UTC (rev 16043)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MinValidatorForNumberTest.java	2009-02-26 13:52:37 UTC (rev 16044)
@@ -39,7 +39,7 @@
 
 	@BeforeClass
 	public static void init() {
-		AnnotationDescriptor descriptor = new AnnotationDescriptor( Min.class );
+		AnnotationDescriptor<Min> descriptor = new AnnotationDescriptor<Min>( Min.class );
 		descriptor.setValue( "value", 15l );
 		descriptor.setValue( "message", "{validator.min}" );
 		Min m = AnnotationFactory.create( descriptor );

Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MinValidatorForStringTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MinValidatorForStringTest.java	2009-02-26 11:48:50 UTC (rev 16043)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MinValidatorForStringTest.java	2009-02-26 13:52:37 UTC (rev 16044)
@@ -36,7 +36,7 @@
 
 	@BeforeClass
 	public static void init() {
-		AnnotationDescriptor descriptor = new AnnotationDescriptor( Min.class );
+		AnnotationDescriptor<Min> descriptor = new AnnotationDescriptor( Min.class );
 		descriptor.setValue( "value", 15l );
 		descriptor.setValue( "message", "{validator.min}" );
 		Min m = AnnotationFactory.create( descriptor );

Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/PatternValidatorTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/PatternValidatorTest.java	2009-02-26 11:48:50 UTC (rev 16043)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/PatternValidatorTest.java	2009-02-26 13:52:37 UTC (rev 16044)
@@ -37,7 +37,7 @@
 	@BeforeClass
 	public static void init() {
 
-		AnnotationDescriptor descriptor = new AnnotationDescriptor( Pattern.class );
+		AnnotationDescriptor<Pattern> descriptor = new AnnotationDescriptor( Pattern.class );
 		descriptor.setValue( "regexp", "foobar" );
 		descriptor.setValue( "message", "{validator.pattern}" );
 		Pattern p = AnnotationFactory.create( descriptor );

Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ResourceBundleMessageInterpolatorTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ResourceBundleMessageInterpolatorTest.java	2009-02-26 11:48:50 UTC (rev 16043)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ResourceBundleMessageInterpolatorTest.java	2009-02-26 13:52:37 UTC (rev 16044)
@@ -49,11 +49,11 @@
 	public void setUp() {
 		interpolator = new ResourceBundleMessageInterpolator( new TestResources() );
 
-		AnnotationDescriptor descriptor = new AnnotationDescriptor( NotNull.class );
+		AnnotationDescriptor<NotNull> descriptor = new AnnotationDescriptor<NotNull>( NotNull.class );
 		notNull = AnnotationFactory.create( descriptor );
 
-		descriptor = new AnnotationDescriptor( Size.class );
-		size = AnnotationFactory.create( descriptor );
+		AnnotationDescriptor<Size> sizeDescriptor = new AnnotationDescriptor<Size>( Size.class );
+		size = AnnotationFactory.create( sizeDescriptor );
 	}
 
 	@Test

Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ValidatorImplTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ValidatorImplTest.java	2009-02-26 11:48:50 UTC (rev 16043)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ValidatorImplTest.java	2009-02-26 13:52:37 UTC (rev 16044)
@@ -439,7 +439,7 @@
 
 		BeanDescriptor beanDescriptor = validator.getConstraintsForClass( Order.class );
 		PropertyDescriptor propertyDescriptor = beanDescriptor.getConstraintsForProperty( "orderNumber" );
-		Set<ConstraintDescriptor> descriptors = propertyDescriptor.getConstraintDescriptors();
+		Set<ConstraintDescriptor<?>> descriptors = propertyDescriptor.getConstraintDescriptors();
 
 		assertEquals( "There should be only one constraint descriptor", 1, descriptors.size() );
 		ConstraintDescriptor descriptor = descriptors.iterator().next();

Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/ValidatorTypeTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/ValidatorTypeTest.java	2009-02-26 11:48:50 UTC (rev 16043)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/ValidatorTypeTest.java	2009-02-26 13:52:37 UTC (rev 16044)
@@ -27,6 +27,7 @@
 import org.junit.Test;
 
 import org.hibernate.validation.constraints.composition.FrenchZipcodeConstraintValidator;
+import org.hibernate.validation.constraints.composition.FrenchZipcode;
 
 /**
  * Tests for message resolution.
@@ -37,9 +38,10 @@
 
 	@Test
 	public void testTypeDiscovery() {
-		List<Class<? extends ConstraintValidator<?, ?>>> validators = new ArrayList<Class<? extends ConstraintValidator<?, ?>>>();
+		List<Class<? extends ConstraintValidator<FrenchZipcode, ?>>> validators =
+				new ArrayList<Class<? extends ConstraintValidator<FrenchZipcode, ?>>>();
 		validators.add( FrenchZipcodeConstraintValidator.class );
-		Map<Class<?>, Class<? extends ConstraintValidator<? extends Annotation, ?>>> validatorsTypes = ValidatorTypeHelper
+		Map<Class<?>, Class<? extends ConstraintValidator<?, ?>>> validatorsTypes = ValidatorTypeHelper
 				.getValidatorsTypes( validators );
 		assertEquals( FrenchZipcodeConstraintValidator.class, validatorsTypes.get( String.class ) );
 	}

Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/annotationfactory/AnnotationFactoryTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/annotationfactory/AnnotationFactoryTest.java	2009-02-26 11:48:50 UTC (rev 16043)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/annotationfactory/AnnotationFactoryTest.java	2009-02-26 13:52:37 UTC (rev 16044)
@@ -31,7 +31,7 @@
 
 	@Test
 	public void createAnnotationProxy() {
-		AnnotationDescriptor descriptor = new AnnotationDescriptor( Size.class );
+		AnnotationDescriptor<Size> descriptor = new AnnotationDescriptor<Size>( Size.class );
 		descriptor.setValue( "min", 5 );
 		descriptor.setValue( "max", 10 );
 
@@ -43,13 +43,13 @@
 
 	@Test(expected = IllegalArgumentException.class)
 	public void createAnnotationProxyMissingRequiredParamter() {
-		AnnotationDescriptor descriptor = new AnnotationDescriptor( Pattern.class );
+		AnnotationDescriptor<Pattern> descriptor = new AnnotationDescriptor<Pattern>( Pattern.class );
 		AnnotationFactory.create( descriptor );
 	}
 
 	@Test
 	public void createAnnotationProxyWithRequiredParamter() {
-		AnnotationDescriptor descriptor = new AnnotationDescriptor( Pattern.class );
+		AnnotationDescriptor<Pattern> descriptor = new AnnotationDescriptor<Pattern>( Pattern.class );
 		descriptor.setValue( "regexp", ".*" );
 
 		Pattern pattern = AnnotationFactory.create( descriptor );




More information about the hibernate-commits mailing list