Author: rmannibucau
Date: Tue Jul  2 06:19:17 2013
New Revision: 1498795

URL: http://svn.apache.org/r1498795
Log:
adding basic cache to not validate ValidationAppliesTo each time

Modified:
    
bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ApacheValidatorFactory.java
    
bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ClassValidator.java
    
bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintValidation.java
    
bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ElementDescriptorImpl.java

Modified: 
bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ApacheValidatorFactory.java
URL: 
http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ApacheValidatorFactory.java?rev=1498795&r1=1498794&r2=1498795&view=diff
==============================================================================
--- 
bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ApacheValidatorFactory.java
 (original)
+++ 
bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ApacheValidatorFactory.java
 Tue Jul  2 06:19:17 2013
@@ -118,7 +118,7 @@ public class ApacheValidatorFactory impl
      *
      * @param configuration
      */
-    protected void configure(ConfigurationState configuration) {
+    protected void configure(final ConfigurationState configuration) {
         getProperties().putAll(configuration.getProperties());
         setParameterNameProvider(configuration.getParameterNameProvider());
         setMessageInterpolator(configuration.getMessageInterpolator());

Modified: 
bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ClassValidator.java
URL: 
http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ClassValidator.java?rev=1498795&r1=1498794&r2=1498795&view=diff
==============================================================================
--- 
bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ClassValidator.java
 (original)
+++ 
bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ClassValidator.java
 Tue Jul  2 06:19:17 2013
@@ -470,8 +470,11 @@ public class ClassValidator implements C
         // execute all property level validations
         for (final PropertyDescriptor prop : 
getConstraintsForClass(context.getMetaBean().getBeanClass()).getConstrainedProperties())
 {
             final PropertyDescriptorImpl impl = 
PropertyDescriptorImpl.class.cast(prop);
-            checkValidationAppliesTo(impl.getConstraintDescriptors(), 
ConstraintTarget.PARAMETERS);
-            checkValidationAppliesTo(impl.getConstraintDescriptors(), 
ConstraintTarget.RETURN_VALUE);
+            if (!impl.isValidated(impl)) {
+                checkValidationAppliesTo(impl.getConstraintDescriptors(), 
ConstraintTarget.PARAMETERS);
+                checkValidationAppliesTo(impl.getConstraintDescriptors(), 
ConstraintTarget.RETURN_VALUE);
+                impl.setValidated(impl); // we don't really care about 
concurrency here
+            }
 
             final MetaProperty metaProperty = 
context.getMetaBean().getProperty(prop.getPropertyName());
             context.setMetaProperty(metaProperty);
@@ -485,8 +488,12 @@ public class ClassValidator implements C
         context.setMetaProperty(null);
         for (final Validation validation : 
context.getMetaBean().getValidations()) {
             if (ConstraintValidation.class.isInstance(validation)) {
-                
checkValidationAppliesTo(ConstraintValidation.class.cast(validation).getValidationAppliesTo(),
 ConstraintTarget.PARAMETERS);
-                
checkValidationAppliesTo(ConstraintValidation.class.cast(validation).getValidationAppliesTo(),
 ConstraintTarget.RETURN_VALUE);
+                final ConstraintValidation constraintValidation = 
ConstraintValidation.class.cast(validation);
+                if (!constraintValidation.isValidated()) {
+                    
checkValidationAppliesTo(constraintValidation.getValidationAppliesTo(), 
ConstraintTarget.PARAMETERS);
+                    
checkValidationAppliesTo(constraintValidation.getValidationAppliesTo(), 
ConstraintTarget.RETURN_VALUE);
+                    constraintValidation.setValidated(true);
+                }
             }
             validation.validate(context);
         }
@@ -767,12 +774,15 @@ public class ClassValidator implements C
         }
 
         // validations
-        if (parameterValues.length > 0) {
-            
checkValidationAppliesTo(Collections.singleton(constructorDescriptor.getCrossParameterDescriptor()),
 ConstraintTarget.IMPLICIT);
-            
checkValidationAppliesTo(constructorDescriptor.getParameterDescriptors(), 
ConstraintTarget.IMPLICIT);
-        } else {
-            
checkValidationAppliesTo(Collections.singleton(constructorDescriptor.getCrossParameterDescriptor()),
 ConstraintTarget.PARAMETERS);
-            
checkValidationAppliesTo(constructorDescriptor.getParameterDescriptors(), 
ConstraintTarget.PARAMETERS);
+        if (!constructorDescriptor.isValidated(constructor)) {
+            if (parameterValues.length > 0) {
+                
checkValidationAppliesTo(Collections.singleton(constructorDescriptor.getCrossParameterDescriptor()),
 ConstraintTarget.IMPLICIT);
+                
checkValidationAppliesTo(constructorDescriptor.getParameterDescriptors(), 
ConstraintTarget.IMPLICIT);
+            } else {
+                
checkValidationAppliesTo(Collections.singleton(constructorDescriptor.getCrossParameterDescriptor()),
 ConstraintTarget.PARAMETERS);
+                
checkValidationAppliesTo(constructorDescriptor.getParameterDescriptors(), 
ConstraintTarget.PARAMETERS);
+            }
+            constructorDescriptor.setValidated(constructor);
         }
 
         final Set<ConstraintViolation<T>> violations = new 
HashSet<ConstraintViolation<T>>();
@@ -887,12 +897,15 @@ public class ClassValidator implements C
             return Collections.emptySet();
         }
 
-        if (method.getParameterTypes().length > 0 && method.getReturnType() != 
Void.TYPE) {
-            
checkValidationAppliesTo(Collections.singleton(methodDescriptor.getCrossParameterDescriptor()),
 ConstraintTarget.IMPLICIT);
-            
checkValidationAppliesTo(methodDescriptor.getParameterDescriptors(), 
ConstraintTarget.IMPLICIT);
-        } else if (method.getParameterTypes().length == 0) {
-            
checkValidationAppliesTo(Collections.singleton(methodDescriptor.getCrossParameterDescriptor()),
 ConstraintTarget.PARAMETERS);
-            
checkValidationAppliesTo(methodDescriptor.getParameterDescriptors(), 
ConstraintTarget.PARAMETERS);
+        if (!methodDescriptor.isValidated(method)) {
+            if (method.getParameterTypes().length > 0 && 
method.getReturnType() != Void.TYPE) {
+                
checkValidationAppliesTo(Collections.singleton(methodDescriptor.getCrossParameterDescriptor()),
 ConstraintTarget.IMPLICIT);
+                
checkValidationAppliesTo(methodDescriptor.getParameterDescriptors(), 
ConstraintTarget.IMPLICIT);
+            } else if (method.getParameterTypes().length == 0) {
+                
checkValidationAppliesTo(Collections.singleton(methodDescriptor.getCrossParameterDescriptor()),
 ConstraintTarget.PARAMETERS);
+                
checkValidationAppliesTo(methodDescriptor.getParameterDescriptors(), 
ConstraintTarget.PARAMETERS);
+            }
+            methodDescriptor.setValidated(method);
         }
 
         final Set<ConstraintViolation<T>> violations = new 
HashSet<ConstraintViolation<T>>();

Modified: 
bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintValidation.java
URL: 
http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintValidation.java?rev=1498795&r1=1498794&r2=1498795&view=diff
==============================================================================
--- 
bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintValidation.java
 (original)
+++ 
bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintValidation.java
 Tue Jul  2 06:19:17 2013
@@ -50,6 +50,8 @@ public class ConstraintValidation<T exte
 
     private Set<ConstraintValidation<?>> composedConstraints;
 
+    private boolean validated = false;
+
     /**
      * the owner is the type where the validation comes from. it is used to
      * support implicit grouping.
@@ -395,4 +397,12 @@ public class ConstraintValidation<T exte
     public void setValidationAppliesTo(final ConstraintTarget 
validationAppliesTo) {
         this.validationAppliesTo = validationAppliesTo;
     }
+
+    public boolean isValidated() {
+        return validated;
+    }
+
+    public void setValidated(final boolean validated) {
+        this.validated = validated;
+    }
 }

Modified: 
bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ElementDescriptorImpl.java
URL: 
http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ElementDescriptorImpl.java?rev=1498795&r1=1498794&r2=1498795&view=diff
==============================================================================
--- 
bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ElementDescriptorImpl.java
 (original)
+++ 
bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ElementDescriptorImpl.java
 Tue Jul  2 06:19:17 2013
@@ -24,11 +24,13 @@ import javax.validation.ConstraintDeclar
 import javax.validation.metadata.ConstraintDescriptor;
 import javax.validation.metadata.ElementDescriptor;
 import javax.validation.metadata.GroupConversionDescriptor;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.CopyOnWriteArraySet;
 
 /**
@@ -37,6 +39,7 @@ import java.util.concurrent.CopyOnWriteA
 public abstract class ElementDescriptorImpl implements ElementDescriptor {
     private final Set<GroupConversionDescriptor> groupConversions = new 
CopyOnWriteArraySet<GroupConversionDescriptor>();
     private boolean cascaded;
+    private final Collection<Object> validated = new 
CopyOnWriteArraySet<Object>();
 
     /**
      * Get a set of {@link ConstraintDescriptor}s from the specified array of
@@ -181,4 +184,12 @@ public abstract class ElementDescriptorI
     public void setCascaded(final boolean cascaded) {
         this.cascaded = cascaded;
     }
+
+    public boolean isValidated(final Object object) {
+        return validated.contains(object);
+    }
+
+    public void setValidated(final Object object) {
+        this.validated.add(object);
+    }
 }


Reply via email to