[hibernate-commits] Hibernate SVN: r16822 - validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/metadata.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Wed Jun 17 11:17:31 EDT 2009


Author: hardy.ferentschik
Date: 2009-06-17 11:17:31 -0400 (Wed, 17 Jun 2009)
New Revision: 16822

Modified:
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/metadata/ConstraintDescriptorImpl.java
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/metadata/ConstraintHelper.java
Log:
HV-169 HV-140

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/metadata/ConstraintDescriptorImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/metadata/ConstraintDescriptorImpl.java	2009-06-17 15:12:54 UTC (rev 16821)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/metadata/ConstraintDescriptorImpl.java	2009-06-17 15:17:31 UTC (rev 16822)
@@ -122,20 +122,20 @@
 	}
 
 	private void findConstraintValidatorClasses() {
-		if ( constraintHelper.containsConstraintValidatorDefinition( annotation.annotationType() ) ) {
-			for ( Class<? extends ConstraintValidator<? extends Annotation, ?>> validator : constraintHelper
-					.getConstraintValidatorDefinition( annotation.annotationType() ) ) {
-				constraintValidatorDefinitonClasses.add( ( Class<? extends ConstraintValidator<T, ?>> ) validator );
+		final Class<T> annotationType = getAnnotationType();
+		if ( constraintHelper.containsConstraintValidatorDefinition( annotationType ) ) {
+			for ( Class<? extends ConstraintValidator<T, ?>> validator : constraintHelper
+					.getConstraintValidatorDefinition( annotationType ) ) {
+				constraintValidatorDefinitonClasses.add( validator );
 			}
 			return;
 		}
 
 		List<Class<? extends ConstraintValidator<? extends Annotation, ?>>> constraintDefinitonClasses = new ArrayList<Class<? extends ConstraintValidator<? extends Annotation, ?>>>();
 		if ( constraintHelper.isBuiltinConstraint( annotation.annotationType() ) ) {
-			constraintDefinitonClasses.addAll( constraintHelper.getBuiltInConstraints( annotation.annotationType() ) );
+			constraintDefinitonClasses.addAll( constraintHelper.getBuiltInConstraints( annotationType ) );
 		}
 		else {
-			final Class<? extends Annotation> annotationType = annotation.annotationType();
 			Class<? extends ConstraintValidator<?, ?>>[] validatedBy = annotationType
 					.getAnnotation( Constraint.class )
 					.validatedBy();
@@ -153,6 +153,11 @@
 		}
 	}
 
+	@SuppressWarnings("unchecked")
+	private Class<T> getAnnotationType() {
+		return ( Class<T> ) annotation.annotationType();
+	}
+
 	public T getAnnotation() {
 		return annotation;
 	}
@@ -354,6 +359,7 @@
 		}
 
 		@Override
+		@SuppressWarnings("SimplifiableIfStatement")
 		public boolean equals(Object o) {
 			if ( this == o ) {
 				return true;
@@ -362,7 +368,8 @@
 				return false;
 			}
 
-			ClassIndexWrapper that = ( ClassIndexWrapper ) o;
+			@SuppressWarnings("unchecked") // safe due to the check above
+					ClassIndexWrapper that = ( ClassIndexWrapper ) o;
 
 			if ( index != that.index ) {
 				return false;

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/metadata/ConstraintHelper.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/metadata/ConstraintHelper.java	2009-06-17 15:12:54 UTC (rev 16821)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/metadata/ConstraintHelper.java	2009-06-17 15:17:31 UTC (rev 16822)
@@ -22,7 +22,6 @@
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import javax.validation.Constraint;
 import javax.validation.ConstraintDefinitionException;
@@ -82,10 +81,10 @@
  */
 public class ConstraintHelper {
 
-	private final Map<Class<? extends Annotation>, List<Class<? extends ConstraintValidator<?, ?>>>> builtinConstraints =
+	private final ConcurrentHashMap<Class<? extends Annotation>, List<Class<? extends ConstraintValidator<?, ?>>>> builtinConstraints =
 			new ConcurrentHashMap<Class<? extends Annotation>, List<Class<? extends ConstraintValidator<?, ?>>>>();
 
-	private final Map<Class<? extends Annotation>, List<Class<? extends ConstraintValidator<? extends Annotation, ?>>>> constraintValidatorDefinitons =
+	private final ConcurrentHashMap<Class<? extends Annotation>, List<Class<? extends ConstraintValidator<? extends Annotation, ?>>>> constraintValidatorDefinitons =
 			new ConcurrentHashMap<Class<? extends Annotation>, List<Class<? extends ConstraintValidator<? extends Annotation, ?>>>>();
 
 	public ConstraintHelper() {
@@ -160,14 +159,13 @@
 		builtinConstraints.put( Size.class, constraintList );
 	}
 
-	public List<Class<? extends ConstraintValidator<? extends Annotation, ?>>> getBuiltInConstraints(Class<? extends Annotation> annotationType) {
-		final List<Class<? extends ConstraintValidator<?, ?>>> builtInList = getBuiltInFromAnnotationType(
-				annotationType
-		);
+	public List<Class<? extends ConstraintValidator<? extends Annotation, ?>>> getBuiltInConstraints(Class<? extends Annotation> annotationClass) {
+		final List<Class<? extends ConstraintValidator<?, ?>>> builtInList = builtinConstraints.get( annotationClass );
 
 		if ( builtInList == null || builtInList.size() == 0 ) {
-			throw new ValidationException( "Unable to find constraints for  " + annotationType );
+			throw new ValidationException( "Unable to find constraints for  " + annotationClass );
 		}
+
 		List<Class<? extends ConstraintValidator<? extends Annotation, ?>>> constraints =
 				new ArrayList<Class<? extends ConstraintValidator<? extends Annotation, ?>>>( builtInList.size() );
 		for ( Class<? extends ConstraintValidator<?, ?>> validatorClass : builtInList ) {
@@ -180,10 +178,6 @@
 		return constraints;
 	}
 
-	private List<Class<? extends ConstraintValidator<?, ?>>> getBuiltInFromAnnotationType(Class<? extends Annotation> annotationType) {
-		return builtinConstraints.get( annotationType );
-	}
-
 	public boolean isBuiltinConstraint(Class<? extends Annotation> annotationType) {
 		return builtinConstraints.containsKey( annotationType );
 	}
@@ -318,15 +312,27 @@
 		return true;
 	}
 
-	public List<Class<? extends ConstraintValidator<? extends Annotation, ?>>> getConstraintValidatorDefinition(Class<? extends Annotation> annotationClass) {
+	public <T extends Annotation> List<Class<? extends ConstraintValidator<T, ?>>> getConstraintValidatorDefinition(Class<T> annotationClass) {
 		if ( annotationClass == null ) {
 			throw new IllegalArgumentException( "Class cannot be null" );
 		}
-		return constraintValidatorDefinitons.get( annotationClass );
+
+		final List<Class<? extends ConstraintValidator<? extends Annotation, ?>>> list = constraintValidatorDefinitons.get( annotationClass );
+
+		List<Class<? extends ConstraintValidator<T, ?>>> constraintsValidators =
+				new ArrayList<Class<? extends ConstraintValidator<T, ?>>>( list.size() );
+		for ( Class<? extends ConstraintValidator<?, ?>> validatorClass : list ) {
+			//safe cause all CV for a given annotation A are CV<A, ?>
+			@SuppressWarnings("unchecked")
+			Class<ConstraintValidator<T, ?>> safeValdiatorClass = ( Class<ConstraintValidator<T, ?>> ) validatorClass;
+			constraintsValidators.add( safeValdiatorClass );
+		}
+
+		return constraintsValidators;
 	}
 
 	public <A extends Annotation> void addConstraintValidatorDefinition(Class<A> annotationClass, List<Class<? extends ConstraintValidator<? extends Annotation, ?>>> definitionClasses) {
-		constraintValidatorDefinitons.put( annotationClass, definitionClasses );
+		constraintValidatorDefinitons.putIfAbsent( annotationClass, definitionClasses );
 	}
 
 	public boolean containsConstraintValidatorDefinition(Class<? extends Annotation> annotationClass) {




More information about the hibernate-commits mailing list