You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bval.apache.org by rm...@apache.org on 2013/08/14 19:15:26 UTC

svn commit: r1513968 - in /bval/branches/bval-11: bval-core/src/main/java/org/apache/bval/model/Features.java bval-jsr303/src/main/java/org/apache/bval/jsr303/BeanDescriptorImpl.java

Author: rmannibucau
Date: Wed Aug 14 17:15:26 2013
New Revision: 1513968

URL: http://svn.apache.org/r1513968
Log:
some more caching for BeanDescriptorImpl since we use it in validation phase now

Modified:
    bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/model/Features.java
    bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/BeanDescriptorImpl.java

Modified: bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/model/Features.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/model/Features.java?rev=1513968&r1=1513967&r2=1513968&view=diff
==============================================================================
--- bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/model/Features.java (original)
+++ bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/model/Features.java Wed Aug 14 17:15:26 2013
@@ -36,6 +36,7 @@ public interface Features {
         String UNIQUE_KEY = "uniqueKey";
 
         String EXECUTABLES = "executables";
+        String PROPERTIES = "properties";
     }
 
     /** Features of {@link MetaProperty} */

Modified: bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/BeanDescriptorImpl.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/BeanDescriptorImpl.java?rev=1513968&r1=1513967&r2=1513968&view=diff
==============================================================================
--- bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/BeanDescriptorImpl.java (original)
+++ bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/BeanDescriptorImpl.java Wed Aug 14 17:15:26 2013
@@ -79,26 +79,38 @@ public class BeanDescriptorImpl extends 
      * The {@link ApacheFactoryContext} (not) used by this
      * {@link BeanDescriptorImpl}
      */
-    private Set<ConstructorDescriptor> constrainedConstructors = new CopyOnWriteArraySet<ConstructorDescriptor>();
-    private Set<MethodDescriptor> containedMethods = new CopyOnWriteArraySet<MethodDescriptor>();
+    private final Set<ConstructorDescriptor> constrainedConstructors;
+    private final Set<MethodDescriptor> containedMethods;
     private final ExecutableMeta meta;
-    private Boolean isBeanConstrained = null;
-    private Boolean hasAnyContraints = null;
+    private final Boolean isBeanConstrained;
+    private final Set<PropertyDescriptor> validatedProperties;
 
-    protected BeanDescriptorImpl(ApacheFactoryContext factoryContext, MetaBean metaBean) {
+    protected BeanDescriptorImpl(final ApacheFactoryContext factoryContext, final MetaBean metaBean) {
         super(metaBean, metaBean.getBeanClass(), metaBean.getValidations());
 
+        Set<PropertyDescriptor> procedureDescriptors = metaBean.getFeature(Jsr303Features.Bean.PROPERTIES);
+        if (procedureDescriptors == null) {
+            procedureDescriptors = new HashSet<PropertyDescriptor>();
+            for (final MetaProperty prop : metaBean.getProperties()) {
+                if (prop.getValidations().length > 0
+                    || (prop.getMetaBean() != null || prop.getFeature(Features.Property.REF_CASCADE) != null)) {
+                    procedureDescriptors.add(getPropertyDescriptor(prop));
+                }
+            }
+            metaBean.putFeature(Jsr303Features.Bean.PROPERTIES, procedureDescriptors);
+        }
+
         ExecutableMeta executables = metaBean.getFeature(Jsr303Features.Bean.EXECUTABLES);
         if (executables == null) { // caching the result of it is important to avoid to compute it for each Validator
             executables = new ExecutableMeta(factoryContext, metaBean, getConstraintDescriptors());
             metaBean.putFeature(Jsr303Features.Bean.EXECUTABLES, executables);
         }
 
+        validatedProperties = Collections.unmodifiableSet(procedureDescriptors);
         meta = executables;
         isBeanConstrained = meta.isBeanConstrained;
-        hasAnyContraints = meta.hasAnyContraints;
-        setConstrained(containedMethods, meta.methodConstraints.values());
-        setConstrained(constrainedConstructors, meta.contructorConstraints.values());
+        containedMethods = toConstrained(meta.methodConstraints.values());
+        constrainedConstructors = toConstrained(meta.contructorConstraints.values());
     }
 
     private static void addGroupConvertion(final MetaProperty prop, final PropertyDescriptorImpl edesc) {
@@ -188,15 +200,6 @@ public class BeanDescriptorImpl extends 
         return isBeanConstrained;
     }
 
-    private boolean hasAnyConstraints() {
-        if (hasAnyContraints == null) {
-            synchronized (this) {
-
-            }
-        }
-        return hasAnyContraints;
-    }
-
     /**
      * Return the property level constraints for a given propertyName or {@code null} if
      * either the property does not exist or has no constraint. The returned
@@ -235,13 +238,6 @@ public class BeanDescriptorImpl extends 
      * @return the property descriptors having at least a constraint defined
      */
     public Set<PropertyDescriptor> getConstrainedProperties() {
-        Set<PropertyDescriptor> validatedProperties = new HashSet<PropertyDescriptor>();
-        for (MetaProperty prop : metaBean.getProperties()) {
-            if (prop.getValidations().length > 0
-                || (prop.getMetaBean() != null || prop.getFeature(Features.Property.REF_CASCADE) != null)) {
-                validatedProperties.add(getPropertyDescriptor(prop));
-            }
-        }
         return Collections.unmodifiableSet(validatedProperties);
     }
 
@@ -308,12 +304,14 @@ public class BeanDescriptorImpl extends 
         return "BeanDescriptorImpl{" + "returnType=" + elementClass + '}';
     }
 
-    private <A extends ExecutableDescriptor> void setConstrained(final Set<A> dest, final Collection<A> src) {
+    private static <A extends ExecutableDescriptor> Set<A> toConstrained(final Collection<A> src) {
+        final Set<A> dest = new HashSet<A>();
         for (final A d : src) {
             if (d.hasConstrainedParameters() || d.hasConstrainedReturnValue()) {
                 dest.add(d);
             }
         }
+        return Collections.unmodifiableSet(dest);
     }
 
     private static class ExecutableMeta {
@@ -323,7 +321,6 @@ public class BeanDescriptorImpl extends 
         private final Map<String, MethodDescriptor> methodConstraints = new HashMap<String, MethodDescriptor>();
         private final Map<String, ConstructorDescriptor> contructorConstraints = new HashMap<String, ConstructorDescriptor>();
         private Boolean isBeanConstrained = null;
-        private Boolean hasAnyContraints = null;
 
         private ExecutableMeta(final ApacheFactoryContext factoryContext, final MetaBean metaBean1, final Collection<ConstraintDescriptor<?>> constraintDescriptors) {
             this.metaBean = metaBean1;
@@ -332,7 +329,7 @@ public class BeanDescriptorImpl extends 
 
             buildExecutableDescriptors();
 
-            // cache hasAnyContraints
+            boolean hasAnyContraints = false;
             if (!constraintDescriptors.isEmpty()) {
                 hasAnyContraints = true;
             } else {