Author: mbenson
Date: Mon Jan  5 22:13:35 2015
New Revision: 1649679

URL: http://svn.apache.org/r1649679
Log:
cleanup

Modified:
    
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
    
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
    
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorConfiguration.java
    
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
    
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/AppendValidationToBuilder.java
    
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/AppendValidationToList.java
    
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/BaseAppendValidation.java
    
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
    
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/CascadingPropertyValidator.java
    
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
    
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/groups/Groups.java

Modified: 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
URL: 
http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java?rev=1649679&r1=1649678&r2=1649679&view=diff
==============================================================================
--- 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
 (original)
+++ 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
 Mon Jan  5 22:13:35 2015
@@ -176,10 +176,11 @@ public final class AnnotationProcessor {
             return false;
         }
         AccessStrategy[] strategies = 
prop.getFeature(Features.Property.REF_CASCADE);
+        if (ArrayUtils.contains(strategies, access)) {
+            return false;
+        }
         if (strategies == null) {
             strategies = new AccessStrategy[] { access };
-        } else if (ArrayUtils.contains(strategies, access)) {
-            return false;
         } else {
             strategies = ArrayUtils.add(strategies, access);
         }

Modified: 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
URL: 
http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java?rev=1649679&r1=1649678&r2=1649679&view=diff
==============================================================================
--- 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
 (original)
+++ 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
 Mon Jan  5 22:13:35 2015
@@ -142,12 +142,7 @@ public class ApacheFactoryContext implem
      * {@inheritDoc}
      */
     public Validator getValidator() {
-        ClassValidator validator = new ClassValidator(this);
-        if (Boolean.parseBoolean(factory.getProperties().get(
-            ApacheValidatorConfiguration.Properties.TREAT_MAPS_LIKE_BEANS))) {
-            validator.setTreatMapsLikeBeans(true);
-        }
-        return validator;
+        return new ClassValidator(this);
     }
 
     /**
@@ -172,6 +167,11 @@ public class ApacheFactoryContext implem
         return parameterNameProvider == null ? 
factory.getParameterNameProvider() : parameterNameProvider;
     }
 
+    boolean isTreatMapsLikeBeans() {
+        return Boolean.parseBoolean(factory.getProperties().get(
+            ApacheValidatorConfiguration.Properties.TREAT_MAPS_LIKE_BEANS));
+    }
+
     /**
      * Create MetaBeanManager that uses factories:
      * <ol>

Modified: 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorConfiguration.java
URL: 
http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorConfiguration.java?rev=1649679&r1=1649678&r2=1649679&view=diff
==============================================================================
--- 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorConfiguration.java
 (original)
+++ 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorConfiguration.java
 Mon Jan  5 22:13:35 2015
@@ -27,8 +27,7 @@ import javax.validation.spi.Configuratio
  * Description: Uniquely identify Apache BVal in the Bean Validation bootstrap
  * strategy. Also contains Apache BVal specific configurations<br/>
  */
-public interface ApacheValidatorConfiguration
-      extends Configuration<ApacheValidatorConfiguration> {
+public interface ApacheValidatorConfiguration extends 
Configuration<ApacheValidatorConfiguration> {
 
     /**
      * Proprietary property keys for {@link ConfigurationImpl}  
@@ -62,7 +61,11 @@ public interface ApacheValidatorConfigur
         String ENABLE_METABEANS_XML = "apache.bval.enable-metabeans-xml";
 
         /**
-         * BeanValidator.treatMapsLikeBeans.
+         * - true (validate maps like beans, so that
+         *     you can use Maps to validate dynamic classes or
+         *     beans for which you have the MetaBean but no instances)
+         * - false (default), validate maps like collections
+         *     (validating the values only)
          * default: false
          */
         String TREAT_MAPS_LIKE_BEANS = "apache.bval.treat-maps-like-beans";

Modified: 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
URL: 
http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java?rev=1649679&r1=1649678&r2=1649679&view=diff
==============================================================================
--- 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
 (original)
+++ 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
 Mon Jan  5 22:13:35 2015
@@ -80,7 +80,6 @@ public class ApacheValidatorFactory impl
     private final ConcurrentMap<Class<?>, List<MetaConstraint<?, ? extends 
Annotation>>> constraintMap;
 
     private final Collection<Closeable> toClose = new ArrayList<Closeable>();
-    private volatile boolean init;
 
     /**
      * Convenience method to retrieve a default global ApacheValidatorFactory
@@ -272,7 +271,9 @@ public class ApacheValidatorFactory impl
      */
     public <T> T unwrap(final Class<T> type) {
         if (type.isInstance(this)) {
-            return (T) this;
+            @SuppressWarnings("unchecked")
+            final T result = (T) this;
+            return result;
         }
 
         // FIXME 2011-03-27 jw:
@@ -285,7 +286,7 @@ public class ApacheValidatorFactory impl
             return newInstance(type);
         }
         try {
-            Class<?> cls = ClassUtils.getClass(type.getName() + "Impl");
+            final Class<?> cls = ClassUtils.getClass(type.getName() + "Impl");
             if (type.isAssignableFrom(cls)) {
                 @SuppressWarnings("unchecked")
                 T result = (T) newInstance(cls);

Modified: 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/AppendValidationToBuilder.java
URL: 
http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/AppendValidationToBuilder.java?rev=1649679&r1=1649678&r2=1649679&view=diff
==============================================================================
--- 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/AppendValidationToBuilder.java
 (original)
+++ 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/AppendValidationToBuilder.java
 Mon Jan  5 22:13:35 2015
@@ -43,23 +43,23 @@ public class AppendValidationToBuilder e
         // JSR-303 2.3:
         // Groups from the main constraint annotation are inherited by the 
composing annotations.
         // Any groups definition on a composing annotation is ignored.
-        Set<Class<?>> inheritedGroups = 
builder.getConstraintValidation().getGroups();
+        final Set<Class<?>> inheritedGroups = 
builder.getConstraintValidation().getGroups();
         validation.setGroups(inheritedGroups);
         
         // JSR-303 2.3 p:
         // Payloads are also inherited
-        Set<Class<? extends Payload>> inheritedPayload = 
builder.getConstraintValidation().getPayload();
+        final Set<Class<? extends Payload>> inheritedPayload = 
builder.getConstraintValidation().getPayload();
         validation.setPayload(inheritedPayload);
 
         // Inherited groups and payload values must also be replicated in the 
         // annotation, so it has to be substituted with a new proxy.
-        T originalAnnot = validation.getAnnotation();
-        AnnotationProxyBuilder<T> apb = new 
AnnotationProxyBuilder<T>(originalAnnot);
+        final T originalAnnot = validation.getAnnotation();
+        final AnnotationProxyBuilder<T> apb = new 
AnnotationProxyBuilder<T>(originalAnnot);
         apb.putValue(ConstraintAnnotationAttributes.GROUPS.getAttributeName(),
             inheritedGroups.toArray(new Class[inheritedGroups.size()]));
         apb.putValue(ConstraintAnnotationAttributes.PAYLOAD.getAttributeName(),
             inheritedPayload.toArray(new Class[inheritedPayload.size()]));
-        T newAnnot = apb.createAnnotation();
+        final T newAnnot = apb.createAnnotation();
         validation.setAnnotation(newAnnot);
     }
 

Modified: 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/AppendValidationToList.java
URL: 
http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/AppendValidationToList.java?rev=1649679&r1=1649678&r2=1649679&view=diff
==============================================================================
--- 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/AppendValidationToList.java
 (original)
+++ 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/AppendValidationToList.java
 Mon Jan  5 22:13:35 2015
@@ -16,7 +16,6 @@
  */
 package org.apache.bval.jsr;
 
-
 import java.lang.annotation.Annotation;
 import java.util.ArrayList;
 import java.util.List;
@@ -29,12 +28,6 @@ public class AppendValidationToList exte
     private final List<ConstraintValidation<?>> validations = new 
ArrayList<ConstraintValidation<?>>();
 
     /**
-     * Create a new AppendValidationToList instance.
-     */
-    public AppendValidationToList() {
-    }
-
-    /**
      * {@inheritDoc}
      */
     public <T extends Annotation> void performAppend(ConstraintValidation<T> 
validation) {

Modified: 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/BaseAppendValidation.java
URL: 
http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/BaseAppendValidation.java?rev=1649679&r1=1649678&r2=1649679&view=diff
==============================================================================
--- 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/BaseAppendValidation.java
 (original)
+++ 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/BaseAppendValidation.java
 Mon Jan  5 22:13:35 2015
@@ -63,7 +63,7 @@ public abstract class BaseAppendValidati
     public <T extends Annotation> void preProcessValidation(final 
ConstraintValidation<T> validation) {
         // No generic pre-processing
     }
-    
+
     /**
      * Post-process the validation once it postProcessValidationhas been 
appended.
      * 
@@ -73,8 +73,6 @@ public abstract class BaseAppendValidati
      *            The validation to be appended.
      */
     public <T extends Annotation> void postProcessValidation(final 
ConstraintValidation<T> validation) {
-        // done lazily to ensure CDI is available
-        // validation.initialize();
     }
-    
+
 }

Modified: 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
URL: 
http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java?rev=1649679&r1=1649678&r2=1649679&view=diff
==============================================================================
--- 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
 (original)
+++ 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
 Mon Jan  5 22:13:35 2015
@@ -130,22 +130,20 @@ public class BeanDescriptorImpl extends
                     fieldFound = true;
                 }
             }
-
             if (!methodFound) {
                 final String name = 
Character.toUpperCase(prop.getName().charAt(0)) + prop.getName().substring(1);
                 Method m = Reflection.getDeclaredMethod(current, "get" + name);
+                if (m == null) {
+                    final Method isAccessor = 
Reflection.getDeclaredMethod(current, "is" + name);
+                    if (isAccessor != null && 
boolean.class.equals(isAccessor.getReturnType())) {
+                        m = isAccessor;
+                    }
+                }
                 if (m != null) {
                     processConvertGroup(edesc, m);
                     methodFound = true;
-                } else {
-                    m = Reflection.getDeclaredMethod(current, "is" + name);
-                    if (m != null) {
-                        processConvertGroup(edesc, m);
-                        methodFound = true;
-                    }
                 }
             }
-
             current = current.getSuperclass();
         }
 
@@ -157,7 +155,6 @@ public class BeanDescriptorImpl extends
                         edesc.addGroupConversion(new 
GroupConversionDescriptorImpl(new Group(convertGroup.from()), new 
Group(convertGroup.to())));
                     }
                 }
-
                 if (ConvertGroup.class.isInstance(a)) {
                     final ConvertGroup convertGroup = 
ConvertGroup.class.cast(a);
                     edesc.addGroupConversion(new 
GroupConversionDescriptorImpl(new Group(convertGroup.from()), new 
Group(convertGroup.to())));
@@ -165,7 +162,6 @@ public class BeanDescriptorImpl extends
             }
             annotations.clear();
         }
-
         if (!edesc.getGroupConversions().isEmpty() && !edesc.isCascaded()) {
             throw new ConstraintDeclarationException("@Valid is needed for 
group conversion");
         }
@@ -178,7 +174,6 @@ public class BeanDescriptorImpl extends
                 edesc.addGroupConversion(new GroupConversionDescriptorImpl(new 
Group(convertGroup.from()), new Group(convertGroup.to())));
             }
         }
-
         final ConvertGroup convertGroup = 
accessible.getAnnotation(ConvertGroup.class);
         if (convertGroup != null) {
             edesc.addGroupConversion(new GroupConversionDescriptorImpl(new 
Group(convertGroup.from()), new Group(convertGroup.to())));
@@ -211,9 +206,10 @@ public class BeanDescriptorImpl extends
         if (propertyName == null || propertyName.trim().length() == 0) {
             throw new IllegalArgumentException("propertyName cannot be null or 
empty");
         }
-        MetaProperty prop = metaBean.getProperty(propertyName);
-        if (prop == null)
+        final MetaProperty prop = metaBean.getProperty(propertyName);
+        if (prop == null) {
             return null;
+        }
         // If no constraints and not cascaded, return null
         if (prop.getValidations().length == 0 && 
prop.getFeature(Features.Property.REF_CASCADE) == null) {
             return null;
@@ -272,7 +268,10 @@ public class BeanDescriptorImpl extends
     private static Collection<MethodDescriptor> filter(final 
Set<MethodDescriptor> containedMethods, final MethodType type) {
         final Collection<MethodDescriptor> list = new 
ArrayList<MethodDescriptor>();
         for (final MethodDescriptor d : containedMethods) {
-            final boolean getter = d.getName().startsWith("get") && 
d.getParameterDescriptors().isEmpty();
+            final boolean getter =
+                d.getParameterDescriptors().isEmpty()
+                    && (d.getName().startsWith("get") || 
(d.getName().startsWith("is") && boolean.class.equals(d
+                        .getReturnValueDescriptor().getElementClass())));
 
             switch (type) {
                 case GETTER:
@@ -295,7 +294,6 @@ public class BeanDescriptorImpl extends
         if (descriptor != null && (descriptor.hasConstrainedParameters() || 
descriptor.hasConstrainedReturnValue())) {
             return descriptor;
         }
-
         return null;
     }
 
@@ -336,16 +334,16 @@ public class BeanDescriptorImpl extends
             buildExecutableDescriptors();
 
             boolean hasAnyContraints;
-            if (!constraintDescriptors.isEmpty()) {
-                hasAnyContraints = true;
-            } else {
+            if (constraintDescriptors.isEmpty()) {
                 hasAnyContraints = false;
                 for (final MetaProperty mprop : metaBean.getProperties()) {
-                    if 
(getConstraintDescriptors(mprop.getValidations()).size() > 0) {
+                    if 
(!getConstraintDescriptors(mprop.getValidations()).isEmpty()) {
                         hasAnyContraints = true;
                         break;
                     }
                 }
+            } else {
+                hasAnyContraints = true;
             }
 
             // cache isBeanConstrained
@@ -394,10 +392,10 @@ public class BeanDescriptorImpl extends
 
                     if (!annotationIgnores.isIgnoreAnnotations(cons)) {
                         for (final Annotation anno : cons.getAnnotations()) {
-                            if (!Valid.class.isInstance(anno)) {
-                                processAnnotations(null, consDesc, 
cons.getDeclaringClass(), anno);
-                            } else {
+                            if (Valid.class.isInstance(anno)) {
                                 consDesc.setCascaded(true);
+                            } else {
+                                processAnnotations(null, consDesc, 
cons.getDeclaringClass(), anno);
                             }
                         }
                     }
@@ -413,10 +411,10 @@ public class BeanDescriptorImpl extends
                 final MetaConstructor metaConstructor = 
metaBean.getConstructor(cons);
                 if (metaConstructor != null) {
                     for (final Annotation anno : 
metaConstructor.getAnnotations()) {
-                        if (!Valid.class.isInstance(anno)) {
-                            processAnnotations(null, consDesc, 
cons.getDeclaringClass(), anno);
-                        } else {
+                        if (Valid.class.isInstance(anno)) {
                             consDesc.setCascaded(true);
+                        } else {
+                            processAnnotations(null, consDesc, 
cons.getDeclaringClass(), anno);
                         }
                     }
 
@@ -429,11 +427,11 @@ public class BeanDescriptorImpl extends
                     }
                 }
 
-                if (!consDesc.getGroupConversions().isEmpty() && 
!consDesc.isCascaded()) {
+                if (consDesc.getGroupConversions().isEmpty() || 
consDesc.isCascaded()) {
+                    ensureNotNullDescriptors(cons.getDeclaringClass(), 
consDesc);
+                } else {
                     throw new ConstraintDeclarationException("@Valid is needed 
to define a group conversion");
                 }
-
-                ensureNotNullDescriptors(cons.getDeclaringClass(), consDesc);
             }
         }
 
@@ -454,7 +452,6 @@ public class BeanDescriptorImpl extends
                     returnValueDescriptor.addGroupConversion(c);
                 }
             }
-
         }
 
         private void processAnnotations(final Method mtd, final 
InvocableElementDescriptor consDesc, final Class<?> clazz, final Annotation 
anno) throws InvocationTargetException, IllegalAccessException {
@@ -466,11 +463,11 @@ public class BeanDescriptorImpl extends
                 consDesc.addValidations(list);
 
                 ReturnValueDescriptorImpl returnValueDescriptor = 
ReturnValueDescriptorImpl.class.cast(consDesc.getReturnValueDescriptor());
-                if (consDesc.getReturnValueDescriptor() != null) {
-                    
returnValueDescriptor.getMutableConstraintDescriptors().addAll(list);
-                } else {
+                if (consDesc.getReturnValueDescriptor() == null) {
                     returnValueDescriptor = new 
ReturnValueDescriptorImpl(metaBean, clazz, list, consDesc.isCascaded());
                     consDesc.setReturnValueDescriptor(returnValueDescriptor);
+                } else {
+                    
returnValueDescriptor.getMutableConstraintDescriptors().addAll(list);
                 }
             }
 
@@ -480,10 +477,10 @@ public class BeanDescriptorImpl extends
                 processAnnotation(anno, consDesc, parametersAccess, 
validations);
                 final List<ConstraintValidation<?>> list = 
removeFromListValidationAppliesTo(validations.getValidations(), 
ConstraintTarget.RETURN_VALUE);
                 consDesc.addValidations(list);
-                if (consDesc.getCrossParameterDescriptor() != null) {
-                    
CrossParameterDescriptorImpl.class.cast(consDesc.getCrossParameterDescriptor()).getMutableConstraintDescriptors().addAll(list);
-                } else {
+                if (consDesc.getCrossParameterDescriptor() == null) {
                     consDesc.setCrossParameterDescriptor(new 
CrossParameterDescriptorImpl(metaBean, list));
+                } else {
+                    
CrossParameterDescriptorImpl.class.cast(consDesc.getCrossParameterDescriptor()).getMutableConstraintDescriptors().addAll(list);
                 }
             }
         }
@@ -509,7 +506,10 @@ public class BeanDescriptorImpl extends
                     continue;
                 }
 
-                final boolean getter = (method.getName().startsWith("get") || 
method.getName().startsWith("is")) && method.getParameterTypes().length == 0 && 
method.getReturnType() != Void.TYPE;
+                final boolean propertyAccessor =
+                    method.getParameterTypes().length == 0
+                        && (method.getName().startsWith("get") && 
!Void.TYPE.equals(method.getReturnType()) || method
+                            .getName().startsWith("is") && 
Boolean.TYPE.equals(method.getReturnType()));
 
                 final String key = method.getName() + 
Arrays.toString(method.getParameterTypes());
                 MethodDescriptorImpl methodDesc = 
MethodDescriptorImpl.class.cast(methodConstraints.get(key));
@@ -544,12 +544,14 @@ public class BeanDescriptorImpl extends
                             }
                             
ensureNoReturnValueAddedInChild(methodDesc.getReturnValueDescriptor(), 
parentDec, "Return value constraints should be the same for parent and 
children");
                         }
-                    } else if (!parents.isEmpty()) {
+                    } else if (parents.size() == 1) {
                         final Method parent = parents.iterator().next();
                         final MethodDescriptor parentDesc = 
factoryContext.getValidator().getConstraintsForClass(parent.getDeclaringClass()).getConstraintsForMethod(parent.getName(),
 parent.getParameterTypes());
                         
ensureNoReturnValueAddedInChild(methodDesc.getReturnValueDescriptor(), 
parentDesc, "Return value constraints should be at least the same for parent 
and children");
 
-                        if (parentDesc != null) {
+                        if (parentDesc == null) {
+                            
ensureMethodDoesntDefineParameterConstraint(methodDesc);
+                        } else {
                             final Iterator<ParameterDescriptor> parentPd = 
parentDesc.getParameterDescriptors().iterator();
                             for (final ParameterDescriptor pd : 
methodDesc.getParameterDescriptors()) {
                                 final ParameterDescriptor next = 
parentPd.next();
@@ -560,8 +562,6 @@ public class BeanDescriptorImpl extends
                                     throw new 
ConstraintDeclarationException("child shouldn't get more constraint than 
parent");
                                 }
                             }
-                        } else {
-                            
ensureMethodDoesntDefineParameterConstraint(methodDesc);
                         }
                     }
 
@@ -598,7 +598,7 @@ public class BeanDescriptorImpl extends
                     }
                 }
 
-                if (getter) {
+                if (propertyAccessor) {
                     final MetaProperty prop = 
metaBean.getProperty(Introspector.decapitalize(method.getName().substring(3)));
                     if (prop != null && 
prop.getFeature(Features.Property.REF_CASCADE) != null) {
                         methodDesc.setCascaded(true);
@@ -635,7 +635,6 @@ public class BeanDescriptorImpl extends
             if (parentMtdDesc == null) {
                 return;
             }
-
             final ReturnValueDescriptor parentReturnDesc = 
parentMtdDesc.getReturnValueDescriptor();
             if (parentReturnDesc.isCascaded() && 
!returnValueDescriptor.isCascaded() || 
parentReturnDesc.getConstraintDescriptors().size() > 
returnValueDescriptor.getConstraintDescriptors().size()) {
                 throw new ConstraintDeclarationException(msg);
@@ -666,7 +665,6 @@ public class BeanDescriptorImpl extends
         private void processMethod(final Method method, final 
MethodDescriptorImpl methodDesc) throws InvocationTargetException, 
IllegalAccessException {
             final AnnotationIgnores annotationIgnores = 
factoryContext.getFactory().getAnnotationIgnores();
 
-
             { // reflection
                 if (!annotationIgnores.isIgnoreAnnotations(method)) {
                     // return value validations and/or cross-parameter 
validation
@@ -684,13 +682,13 @@ public class BeanDescriptorImpl extends
                 int idx = 0;
                 final List<String> names = 
factoryContext.getParameterNameProvider().getParameterNames(method);
                 for (final Annotation[] paramAnnos : paramsAnnos) {
-                    if 
(!annotationIgnores.isIgnoreAnnotationOnParameter(method, idx)) {
-                        final ParameterAccess access = new 
ParameterAccess(method.getParameterTypes()[idx], idx);
-                        processAnnotations(methodDesc, paramAnnos, access, 
idx, names.get(idx));
-                    } else {
+                    if 
(annotationIgnores.isIgnoreAnnotationOnParameter(method, idx)) {
                         final ParameterDescriptorImpl parameterDescriptor = 
new ParameterDescriptorImpl(metaBean, EMPTY_VALIDATION, names.get(idx));
                         parameterDescriptor.setIndex(idx);
                         
methodDesc.getParameterDescriptors().add(parameterDescriptor);
+                    } else {
+                        final ParameterAccess access = new 
ParameterAccess(method.getParameterTypes()[idx], idx);
+                        processAnnotations(methodDesc, paramAnnos, access, 
idx, names.get(idx));
                     }
                     idx++;
                 }
@@ -722,9 +720,7 @@ public class BeanDescriptorImpl extends
                     final ParameterAccess access = new 
ParameterAccess(method.getParameterTypes()[idx], idx);
                     processAnnotations(methodDesc, 
paramAnnos.getAnnotations(), access, idx, names.get(idx));
                 }
-
             }
-
         }
 
         private AppendValidationToList 
processAnnotations(InvocableElementDescriptor methodDesc, Annotation[] 
paramAnnos, AccessStrategy access, int idx, String name)
@@ -786,19 +782,19 @@ public class BeanDescriptorImpl extends
                         
paramDesc.getMutableConstraintDescriptors().add(validation);
                     }
                 }
-
                 if (cascaded) {
                     paramDesc.setCascaded(true);
                 } // else keep previous config
             }
-            if (paramDesc.isCascaded() && from != null) {
-                for (int i = 0; i < from.length; i++) {
-                    paramDesc.addGroupConversion(new 
GroupConversionDescriptorImpl(from[i], to[i]));
+            if (from != null) {
+                if (paramDesc.isCascaded()) {
+                    for (int i = 0; i < from.length; i++) {
+                        paramDesc.addGroupConversion(new 
GroupConversionDescriptorImpl(from[i], to[i]));
+                    }
+                } else {
+                    throw new ConstraintDeclarationException("Group conversion 
is only relevant for @Valid cases");
                 }
-            } else if (from != null) {
-                throw new ConstraintDeclarationException("Group conversion is 
only relevant for @Valid cases");
             }
-
             return validations;
         }
 
@@ -823,13 +819,12 @@ public class BeanDescriptorImpl extends
             }
         }
 
-        private <A extends Annotation> void processConstraint(final A 
annotation, final InvocableElementDescriptor desc,
-                                                              final 
AccessStrategy access, final AppendValidation validations) throws 
IllegalAccessException, InvocationTargetException {
-            Constraint vcAnno = 
annotation.annotationType().getAnnotation(Constraint.class);
-            if (vcAnno != null) {
-                annotationProcessor.processAnnotation(annotation, null, 
ClassUtils.primitiveToWrapper((Class<?>) access.getJavaType()), access, 
validations, true);
-            } else {
-                /**
+        private <A extends Annotation> void processConstraint(final A 
annotation,
+            final InvocableElementDescriptor desc, final AccessStrategy 
access, final AppendValidation validations)
+            throws IllegalAccessException, InvocationTargetException {
+            final Constraint vcAnno = 
annotation.annotationType().getAnnotation(Constraint.class);
+            if (vcAnno == null) {
+                /*
                  * Multi-valued constraints
                  */
                 final ConstraintAnnotationAttributes.Worker<? extends 
Annotation> worker = 
ConstraintAnnotationAttributes.VALUE.analyze(annotation.annotationType());
@@ -844,6 +839,8 @@ public class BeanDescriptorImpl extends
                         }
                     }
                 }
+            } else {
+                annotationProcessor.processAnnotation(annotation, null, 
ClassUtils.primitiveToWrapper((Class<?>) access.getJavaType()), access, 
validations, true);
             }
         }
 
@@ -855,7 +852,6 @@ public class BeanDescriptorImpl extends
                 if (RuntimeException.class.isInstance(ex)) {
                     throw RuntimeException.class.cast(ex);
                 }
-
                 throw new IllegalArgumentException(ex.getMessage(), ex);
             }
         }

Modified: 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/CascadingPropertyValidator.java
URL: 
http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/CascadingPropertyValidator.java?rev=1649679&r1=1649678&r2=1649679&view=diff
==============================================================================
--- 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/CascadingPropertyValidator.java
 (original)
+++ 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/CascadingPropertyValidator.java
 Mon Jan  5 22:13:35 2015
@@ -47,8 +47,8 @@ public interface CascadingPropertyValida
      * @param groups
      * @return the resulting {@link Set} of {@link ConstraintViolation}s.
      */
-    <T extends Object> java.util.Set<javax.validation.ConstraintViolation<T>> 
validateProperty(T object,
-        String propertyName, boolean cascade, java.lang.Class<?>... groups);
+    <T extends Object> Set<javax.validation.ConstraintViolation<T>> 
validateProperty(T object, String propertyName,
+        boolean cascade, Class<?>... groups);
 
     /**
      * Validates all constraints placed on <code>object</code>'s
@@ -63,6 +63,6 @@ public interface CascadingPropertyValida
      * @param groups
      * @return the resulting {@link Set} of {@link ConstraintViolation}s.
      */
-    <T extends Object> java.util.Set<javax.validation.ConstraintViolation<T>> 
validateValue(
-        java.lang.Class<T> beanType, String propertyName, Object value, 
boolean cascade, java.lang.Class<?>... groups);
+    <T extends Object> Set<javax.validation.ConstraintViolation<T>> 
validateValue(Class<T> beanType,
+        String propertyName, Object value, boolean cascade, Class<?>... 
groups);
 }

Modified: 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
URL: 
http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java?rev=1649679&r1=1649678&r2=1649679&view=diff
==============================================================================
--- 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
 (original)
+++ 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
 Mon Jan  5 22:13:35 2015
@@ -63,13 +63,13 @@ import org.apache.bval.model.MetaPropert
 import org.apache.bval.model.Validation;
 import org.apache.bval.util.AccessStrategy;
 import org.apache.bval.util.ValidationHelper;
+import org.apache.bval.util.reflection.Reflection;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.ClassUtils;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.reflect.TypeUtils;
-import org.apache.commons.weaver.privilizer.Privileged;
-
-// TODO: centralize treatMapsLikeBeans
+import org.apache.commons.weaver.privilizer.Privilizing;
+import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
 
 /**
  * Objects of this class are able to validate bean instances (and the 
associated object graphs).
@@ -83,6 +83,7 @@ import org.apache.commons.weaver.privili
  * @author Roman Stumm
  * @author Carlos Vara
  */
+@Privilizing(@CallTo(Reflection.class))
 public class ClassValidator implements CascadingPropertyValidator, 
ExecutableValidator {
     private static final Object VALIDATE_PROPERTY = new Object() {
         public String toString() {
@@ -135,7 +136,6 @@ public class ClassValidator implements C
         checkGroups(groups);
 
         try {
-
             final Class<T> objectClass = (Class<T>) object.getClass();
             final MetaBean objectMetaBean = 
metaBeanFinder.findForClass(objectClass);
             final GroupValidationContext<T> context = 
createContext(objectMetaBean, object, objectClass, groups);
@@ -201,11 +201,12 @@ public class ClassValidator implements C
     public <T> Set<ConstraintViolation<T>> validateProperty(T object, String 
propertyName, boolean cascade,
         Class<?>... groups) {
 
-        if (object == null)
+        if (object == null) {
             throw new IllegalArgumentException("cannot validate null");
+        }
 
         @SuppressWarnings("unchecked")
-        Set<ConstraintViolation<T>> result =
+        final Set<ConstraintViolation<T>> result =
             validateValueImpl((Class<T>) object.getClass(), object, 
propertyName, VALIDATE_PROPERTY, cascade, groups);
         return result;
     }
@@ -291,37 +292,43 @@ public class ClassValidator implements C
         // Can't fix this because don't know which classes this method should 
support.
 
         if (type.isAssignableFrom(getClass())) {
-            return (T) this;
-        } else if (!(type.isInterface() || 
Modifier.isAbstract(type.getModifiers()))) {
+            @SuppressWarnings("unchecked")
+            final T result = (T) this;
+            return result;
+        }
+        if (!(type.isInterface() || Modifier.isAbstract(type.getModifiers()))) 
{
             return newInstance(type);
-        } else {
-            try {
-                Class<?> cls = ClassUtils.getClass(type.getName() + "Impl");
-                if (type.isAssignableFrom(cls)) {
-                    @SuppressWarnings("unchecked")
-                    final Class<? extends T> implClass = (Class<? extends T>) 
cls;
-                    return newInstance(implClass);
-                }
-            } catch (ClassNotFoundException e) {
+        }
+        try {
+            final Class<?> cls = ClassUtils.getClass(type.getName() + "Impl");
+            if (type.isAssignableFrom(cls)) {
+                @SuppressWarnings("unchecked")
+                final Class<? extends T> implClass = (Class<? extends T>) cls;
+                return newInstance(implClass);
             }
-            throw new ValidationException("Type " + type + " not supported");
+        } catch (ClassNotFoundException e) {
         }
+        throw new ValidationException("Type " + type + " not supported");
     }
 
     public ExecutableValidator forExecutables() {
         return this;
     }
 
-    @Privileged
     private <T> T newInstance(final Class<T> cls) {
+        final Constructor<T> cons = Reflection.getDeclaredConstructor(cls, 
ApacheFactoryContext.class);
+        if (cons == null) {
+            throw new ValidationException("Cannot instantiate " + cls);
+        }
+        final boolean mustUnset = Reflection.setAccessible(cons, true);
         try {
-            Constructor<T> cons = 
cls.getConstructor(ApacheFactoryContext.class);
-            if (!cons.isAccessible()) {
-                cons.setAccessible(true);
-            }
             return cons.newInstance(factoryContext);
         } catch (final Exception ex) {
-            throw new ValidationException("Cannot instantiate : " + cls, ex);
+            throw new ValidationException("Cannot instantiate " + cls, ex);
+        } finally {
+            if (mustUnset) {
+                Reflection.setAccessible(cons, false);
+            }
         }
     }
 
@@ -405,13 +412,10 @@ public class ClassValidator implements C
                             break;
                         }
                     }
-
                 }
                 context.setCurrentOwner(initialOwner);
                 context.setCurrentGroup(Group.DEFAULT);
-
             }
-
         }
         // if not the default group, proceed as normal
         else {
@@ -424,23 +428,20 @@ public class ClassValidator implements C
             final Group mappedGroup;
 
             final Object feature = 
prop.getFeature(JsrFeatures.Property.PropertyDescriptor);
-            if (feature != null) {
-                mappedGroup = 
PropertyDescriptorImpl.class.cast(feature).mapGroup(group);
-            } else {
+            if (feature == null) {
                 mappedGroup = group;
+            } else {
+                mappedGroup = 
PropertyDescriptorImpl.class.cast(feature).mapGroup(group);
             }
 
-
-            if (group != mappedGroup) {
+            if (group == mappedGroup) {
+                validateCascadedBean(context, prop, null);
+            } else {
                 final Groups propertyGroup = groupsComputer.computeGroups(new 
Class<?>[]{ mappedGroup.getGroup() });
                 validateCascadedBean(context, prop, propertyGroup);
-            } else {
-                validateCascadedBean(context, prop, null);
             }
-
             context.setCurrentGroup(group);
         }
-
     }
 
     // TODO: maybe add a GroupMapper to bval-core to ease this kind of thing 
and void to fork this method from ValidationHelper
@@ -466,7 +467,7 @@ public class ClassValidator implements C
         context.setMetaProperty(null);
         for (final Validation validation : 
context.getMetaBean().getValidations()) {
             if (ConstraintValidation.class.isInstance(validation)) {
-                final ConstraintValidation constraintValidation = 
ConstraintValidation.class.cast(validation);
+                final ConstraintValidation<?> constraintValidation = 
ConstraintValidation.class.cast(validation);
                 if (!constraintValidation.isValidated()) {
                     
checkValidationAppliesTo(constraintValidation.getValidationAppliesTo(), 
ConstraintTarget.PARAMETERS);
                     
checkValidationAppliesTo(constraintValidation.getValidationAppliesTo(), 
ConstraintTarget.RETURN_VALUE);
@@ -484,7 +485,7 @@ public class ClassValidator implements C
      * @param prop    The property to cascade from (in case it is possible).
      */
     private void validateCascadedBean(final GroupValidationContext<?> context, 
final MetaProperty prop, final Groups groups) {
-        AccessStrategy[] access = 
prop.getFeature(Features.Property.REF_CASCADE);
+        final AccessStrategy[] access = 
prop.getFeature(Features.Property.REF_CASCADE);
         if (access != null) { // different accesses to relation
             // save old values from context
             final Object bean = context.getBean();
@@ -497,13 +498,13 @@ public class ClassValidator implements C
                     context.moveDown(prop, each);
                     // validate
                     if (groups == null) {
-                        ValidationHelper.validateContext(context, new 
JsrValidationCallback(context), treatMapsLikeBeans);
+                        ValidationHelper.validateContext(context, new 
JsrValidationCallback(context), factoryContext.isTreatMapsLikeBeans());
                     } else {
                         ValidationHelper.validateContext(context, new 
ValidationHelper.ValidateCallback() {
                             public void validate() {
                                 validateBeanWithGroups(context, groups);
                             }
-                        }, treatMapsLikeBeans);
+                        }, factoryContext.isTreatMapsLikeBeans());
                     }
                     // restore old values in context
                     context.moveUp(bean, mbean);
@@ -539,12 +540,12 @@ public class ClassValidator implements C
 
         try {
             if 
(!context.getTraversableResolver().isCascadable(context.getBean(), node,
-                context.getRootMetaBean().getBeanClass(), beanPath, 
access.getElementType()))
+                context.getRootMetaBean().getBeanClass(), beanPath, 
access.getElementType())) {
                 return false;
+            }
         } catch (RuntimeException e) {
             throw new ValidationException("Error 
TraversableResolver.isCascadable() for " + context.getBean(), e);
         }
-
         return true;
     }
 
@@ -556,14 +557,13 @@ public class ClassValidator implements C
     private List<Group> expandDefaultGroup(GroupValidationContext<?> context) {
         if (context.getCurrentGroup().isDefault()) {
             // mention if metaBean redefines the default group
-            List<Group> groupSeq = 
context.getMetaBean().getFeature(JsrFeatures.Bean.GROUP_SEQUENCE);
+            final List<Group> groupSeq = 
context.getMetaBean().getFeature(JsrFeatures.Bean.GROUP_SEQUENCE);
             if (groupSeq != null) {
                 
context.getGroups().assertDefaultGroupSequenceIsExpandable(groupSeq);
             }
             return groupSeq;
-        } else {
-            return null;
         }
+        return null;
     }
 
     /**
@@ -573,29 +573,25 @@ public class ClassValidator implements C
      * @param object
      * @return a {@link RuntimeException} of the appropriate type
      */
-    @SuppressWarnings("finally")
     protected static RuntimeException 
unrecoverableValidationError(RuntimeException ex, Object object) {
         if (ex instanceof UnknownPropertyException || ex instanceof 
IncompatiblePropertyValueException) {
             // Convert to IllegalArgumentException
             return new IllegalArgumentException(ex.getMessage(), ex);
-        } else if (ex instanceof ValidationException) {
-            return ex; // do not wrap specific ValidationExceptions (or
-            // instances from subclasses)
+        }
+        if (ex instanceof ValidationException) {
+            return ex; // do not wrap specific ValidationExceptions (or 
instances from subclasses)
+        }
+        String objectId;
+        if (object == null) {
+            objectId = "<null>";
         } else {
-            String objectId = "";
             try {
-                if (object != null) {
-                    objectId = object.toString();
-                } else {
-                    objectId = "<null>";
-                }
+                objectId = object.toString();
             } catch (Exception e) {
                 objectId = "<unknown>";
-            } finally {
-                return new ValidationException("error during validation of "
-                        + objectId, ex);
             }
         }
+        return new ValidationException("error during validation of " + 
objectId, ex);
     }
 
     private void validatePropertyInGroup(final GroupValidationContext<?> 
context) {
@@ -615,17 +611,17 @@ public class ClassValidator implements C
                 }
             };
         }
-        Group currentGroup = context.getCurrentGroup();
-        List<Group> defaultGroups = expandDefaultGroup(context);
-        if (defaultGroups != null) {
+        final List<Group> defaultGroups = expandDefaultGroup(context);
+        if (defaultGroups == null) {
+            helper.run();
+        } else {
+            final Group currentGroup = context.getCurrentGroup();
             for (Group each : defaultGroups) {
                 context.setCurrentGroup(each);
                 helper.run();
                 // continue validation, even if errors already found
             }
             context.setCurrentGroup(currentGroup); // restore
-        } else {
-            helper.run();
         }
     }
 
@@ -656,9 +652,11 @@ public class ClassValidator implements C
                         this.factoryContext.getTraversableResolver(), 
factoryContext.getParameterNameProvider(), metaBean);
         context.setBean(object, metaBean);
         final Groups computedGroup = groupsComputer.computeGroups(groups);
-        if (computedGroup.getGroups().size() == 1 && 
Group.DEFAULT.equals(computedGroup.getGroups().iterator().next()) && 
metaBean.getFeature(JsrFeatures.Bean.GROUP_SEQUENCE) != null) {
+        if 
(Collections.singletonList(Group.DEFAULT).equals(computedGroup.getGroups()) && 
metaBean.getFeature(JsrFeatures.Bean.GROUP_SEQUENCE) != null) {
             final Groups sequence = new Groups();
-            
sequence.getGroups().addAll(List.class.cast(metaBean.getFeature(JsrFeatures.Bean.GROUP_SEQUENCE)));
+            @SuppressWarnings("unchecked")
+            final List<? extends Group> sequenceGroups = 
List.class.cast(metaBean.getFeature(JsrFeatures.Bean.GROUP_SEQUENCE));
+            sequence.getGroups().addAll(sequenceGroups);
             context.setGroups(sequence);
         } else {
             context.setGroups(computedGroup);
@@ -672,49 +670,10 @@ public class ClassValidator implements C
      * @param metaBean
      * @return {@link BeanDescriptorImpl} instance
      */
-    /*
-    protected BeanDescriptorImpl createBeanDescriptor(MetaBean metaBean) {
-        return new BeanDescriptorImpl(factoryContext, metaBean);
-    }
-    */
     protected BeanDescriptorImpl createBeanDescriptor(MetaBean metaBean) {
         return new BeanDescriptorImpl(factoryContext, metaBean);
     }
 
-    private boolean treatMapsLikeBeans = false;
-
-    /**
-     * Behavior configuration -
-     * <p/>
-     * <pre>
-     * @return treatMapsLikeBeans - true (validate maps like beans, so that
-     *                              you can use Maps to validate dynamic 
classes or
-     *                              beans for which you have the MetaBean but 
no instances)
-     *                            - false (default), validate maps like 
collections
-     *                              (validating the values only)
-     * </pre>
-     * <p/>
-     * (is still configuration to better in BeanValidationContext?)
-     */
-    public boolean isTreatMapsLikeBeans() {
-        return treatMapsLikeBeans;
-    }
-
-    /**
-     * Set whether maps are to be treated like beans.
-     * 
-     * <pre>
-     * @param treatMapsLikeBeans - true (validate maps like beans, so that
-     *                             you can use Maps to validate dynamic 
classes or
-     *                             beans for which you have the MetaBean but 
no instances)
-     *                           - false (default), validate maps like 
collections
-     *                             (validating the values only)
-     * </pre>
-     */
-    public void setTreatMapsLikeBeans(boolean treatMapsLikeBeans) {
-        this.treatMapsLikeBeans = treatMapsLikeBeans;
-    }
-
     /**
      * Checks that beanType is valid according to spec Section 4.1.1 i. Throws 
an {@link IllegalArgumentException} if it
      * is not.
@@ -735,7 +694,7 @@ public class ClassValidator implements C
      * @param propertyName Property name to check.
      */
     private void checkPropertyName(String propertyName) {
-        if (propertyName == null || propertyName.trim().length() == 0) {
+        if (propertyName == null || propertyName.trim().isEmpty()) {
             throw new IllegalArgumentException("Property path cannot be null 
or empty.");
         }
     }
@@ -770,12 +729,12 @@ public class ClassValidator implements C
 
         // sanity checks
         if (!constructorDescriptor.isValidated(constructor)) {
-            if (parameterValues.length > 0) {
-                
checkValidationAppliesTo(Collections.singleton(constructorDescriptor.getCrossParameterDescriptor()),
 ConstraintTarget.IMPLICIT);
-                
checkValidationAppliesTo(constructorDescriptor.getParameterDescriptors(), 
ConstraintTarget.IMPLICIT);
-            } else {
+            if (parameterValues.length == 0) {
                 
checkValidationAppliesTo(Collections.singleton(constructorDescriptor.getCrossParameterDescriptor()),
 ConstraintTarget.PARAMETERS);
                 
checkValidationAppliesTo(constructorDescriptor.getParameterDescriptors(), 
ConstraintTarget.PARAMETERS);
+            } else {
+                
checkValidationAppliesTo(Collections.singleton(constructorDescriptor.getCrossParameterDescriptor()),
 ConstraintTarget.IMPLICIT);
+                
checkValidationAppliesTo(constructorDescriptor.getParameterDescriptors(), 
ConstraintTarget.IMPLICIT);
             }
             constructorDescriptor.setValidated(constructor);
         }
@@ -788,17 +747,24 @@ public class ClassValidator implements C
                                                                          final 
Class<?>[] gps, final NodeImpl rootNode, final Object rootBean) {
         final Set<ConstraintViolation<T>> violations = new 
HashSet<ConstraintViolation<T>>();
 
+        @SuppressWarnings("unchecked")
+        final GroupValidationContext<ConstraintValidationListener<?>> 
parametersContext =
+            createInvocableContext(constructorDescriptor.getMetaBean(), 
rootBean,
+                Class.class.cast(invocable.getDeclaringClass()), gps);
 
-        final GroupValidationContext<ConstraintValidationListener<?>> 
parametersContext = createInvocableContext(constructorDescriptor.getMetaBean(), 
rootBean, Class.class.cast(invocable.getDeclaringClass()), gps);
-        final GroupValidationContext<Object> crossParameterContext = 
createContext(constructorDescriptor.getMetaBean(), rootBean, 
Class.class.cast(invocable.getDeclaringClass()), gps);
-        if (rootBean != null) { // could be more sexy but that's ok for now
-            final Method m = Method.class.cast(invocable);
-            parametersContext.setMethod(m);
-            crossParameterContext.setMethod(m);
-        } else {
+        @SuppressWarnings("unchecked")
+        final GroupValidationContext<Object> crossParameterContext =
+            createContext(constructorDescriptor.getMetaBean(), rootBean,
+                Class.class.cast(invocable.getDeclaringClass()), gps);
+
+        if (rootBean == null) {
             final Constructor<?> m = Constructor.class.cast(invocable);
             parametersContext.setConstructor(m);
             crossParameterContext.setConstructor(m);
+        } else { // could be more sexy but that's ok for now
+            final Method m = Method.class.cast(invocable);
+            parametersContext.setMethod(m);
+            crossParameterContext.setMethod(m);
         }
 
         final Groups groups = parametersContext.getGroups();
@@ -847,7 +813,7 @@ public class ClassValidator implements C
                     parametersContext.moveDown(new 
NodeImpl.ParameterNodeImpl(paramDesc.getName(), i));
                     initMetaBean(parametersContext, 
factoryContext.getMetaBeanFinder(), parameterValues[i].getClass());
                     
parametersContext.setCurrentGroup(paramDesc.mapGroup(current));
-                    ValidationHelper.validateContext(parametersContext, new 
JsrValidationCallback(parametersContext), isTreatMapsLikeBeans());
+                    ValidationHelper.validateContext(parametersContext, new 
JsrValidationCallback(parametersContext), 
factoryContext.isTreatMapsLikeBeans());
                     parametersContext.moveUp(null, null);
                 }
             }
@@ -886,7 +852,7 @@ public class ClassValidator implements C
                         parametersContext.moveDown(new 
NodeImpl.ParameterNodeImpl(paramDesc.getName(), i));
                         initMetaBean(parametersContext, 
factoryContext.getMetaBeanFinder(), parameterValues[i].getClass());
                         
parametersContext.setCurrentGroup(paramDesc.mapGroup(current));
-                        ValidationHelper.validateContext(parametersContext, 
new JsrValidationCallback(parametersContext), isTreatMapsLikeBeans());
+                        ValidationHelper.validateContext(parametersContext, 
new JsrValidationCallback(parametersContext), 
factoryContext.isTreatMapsLikeBeans());
                         parametersContext.moveUp(null, null);
                     }
                 }
@@ -898,12 +864,12 @@ public class ClassValidator implements C
 
                 for (final Group current : groups.getGroups()) {
                     
parametersContext.setCurrentGroup(constructorDescriptor.mapGroup(current));
-                    ValidationHelper.validateContext(parametersContext, new 
JsrValidationCallback(parametersContext), isTreatMapsLikeBeans());
+                    ValidationHelper.validateContext(parametersContext, new 
JsrValidationCallback(parametersContext), 
factoryContext.isTreatMapsLikeBeans());
                 }
                 for (final List<Group> eachSeq : groups.getSequences()) {
                     for (final Group current : eachSeq) {
                         
parametersContext.setCurrentGroup(constructorDescriptor.mapGroup(current));
-                        ValidationHelper.validateContext(parametersContext, 
new JsrValidationCallback(parametersContext), isTreatMapsLikeBeans());
+                        ValidationHelper.validateContext(parametersContext, 
new JsrValidationCallback(parametersContext), 
factoryContext.isTreatMapsLikeBeans());
                         if (!parametersContext.getListener().isEmpty()) {
                             break;
                         }
@@ -915,12 +881,12 @@ public class ClassValidator implements C
 
                 for (final Group current : groups.getGroups()) {
                     
crossParameterContext.setCurrentGroup(constructorDescriptor.mapGroup(current));
-                    ValidationHelper.validateContext(crossParameterContext, 
new JsrValidationCallback(crossParameterContext), isTreatMapsLikeBeans());
+                    ValidationHelper.validateContext(crossParameterContext, 
new JsrValidationCallback(crossParameterContext), 
factoryContext.isTreatMapsLikeBeans());
                 }
                 for (final List<Group> eachSeq : groups.getSequences()) {
                     for (final Group current : eachSeq) {
                         
crossParameterContext.setCurrentGroup(constructorDescriptor.mapGroup(current));
-                        
ValidationHelper.validateContext(crossParameterContext, new 
JsrValidationCallback(crossParameterContext), isTreatMapsLikeBeans());
+                        
ValidationHelper.validateContext(crossParameterContext, new 
JsrValidationCallback(crossParameterContext), 
factoryContext.isTreatMapsLikeBeans());
                         if (!crossParameterContext.getListener().isEmpty()) {
                             break;
                         }
@@ -929,8 +895,12 @@ public class ClassValidator implements C
             }
         }
 
-        
violations.addAll(Set.class.cast(parametersContext.getListener().getConstraintViolations()));
-        
violations.addAll(Set.class.cast(crossParameterContext.getListener().getConstraintViolations()));
+        @SuppressWarnings("unchecked")
+        final Set<ConstraintViolation<T>> parameterViolations = 
Set.class.cast(parametersContext.getListener().getConstraintViolations());
+        violations.addAll(parameterViolations);
+        @SuppressWarnings("unchecked")
+        final Set<ConstraintViolation<T>> crossParameterViolations = 
Set.class.cast(crossParameterContext.getListener().getConstraintViolations());
+        violations.addAll(crossParameterViolations);
 
         return violations;
     }
@@ -976,7 +946,10 @@ public class ClassValidator implements C
         final ElementDescriptorImpl returnedValueDescriptor = 
ElementDescriptorImpl.class.cast(methodDescriptor.getReturnValueDescriptor());
         final Set<ConstraintDescriptor<?>> returnedValueConstraints = 
returnedValueDescriptor.getConstraintDescriptors();
 
-        final GroupValidationContext<T> context = 
createInvocableContext(methodDescriptor.getMetaBean(), createdObject, 
Class.class.cast(Proxies.classFor(clazz)), gps);
+        @SuppressWarnings("unchecked")
+        final GroupValidationContext<T> context =
+            createInvocableContext(methodDescriptor.getMetaBean(), 
createdObject,
+                Class.class.cast(Proxies.classFor(clazz)), gps);
         context.moveDown(rootNode);
         context.moveDown(new NodeImpl.ReturnValueNodeImpl());
         context.setReturnValue(rootBean);
@@ -1002,7 +975,7 @@ public class ClassValidator implements C
                 initMetaBean(context, factoryContext.getMetaBeanFinder(), 
context.getValidatedValue().getClass());
 
                 context.setCurrentGroup(methodDescriptor.mapGroup(current));
-                ValidationHelper.validateContext(context, new 
JsrValidationCallback(context), isTreatMapsLikeBeans());
+                ValidationHelper.validateContext(context, new 
JsrValidationCallback(context), factoryContext.isTreatMapsLikeBeans());
 
                 if (currentViolationNumber < 
context.getListener().getConstraintViolations().size()) {
                     break;
@@ -1031,7 +1004,7 @@ public class ClassValidator implements C
                     initMetaBean(context, factoryContext.getMetaBeanFinder(), 
context.getValidatedValue().getClass());
 
                     
context.setCurrentGroup(methodDescriptor.mapGroup(current));
-                    ValidationHelper.validateContext(context, new 
JsrValidationCallback(context), isTreatMapsLikeBeans());
+                    ValidationHelper.validateContext(context, new 
JsrValidationCallback(context), factoryContext.isTreatMapsLikeBeans());
 
                     if (currentViolationNumber < 
context.getListener().getConstraintViolations().size()) {
                         break;
@@ -1070,7 +1043,8 @@ public class ClassValidator implements C
             methodDescriptor.setValidated(method);
         }
 
-        return validateInvocationParameters(method, parameterValues, 
methodDescriptor, groups, new NodeImpl.MethodNodeImpl(method.getName(), 
Arrays.asList(method.getParameterTypes())), object);
+        return validateInvocationParameters(method, parameterValues, 
methodDescriptor, groups,
+            new NodeImpl.MethodNodeImpl(method.getName(), 
Arrays.asList(method.getParameterTypes())), object);
     }
 
     private static void notNull(final String entity, final Object 
shouldntBeNull) {
@@ -1087,7 +1061,7 @@ public class ClassValidator implements C
         notNull("method", method);
         notNull("groups", groups);
 
-        MethodDescriptorImpl methodDescriptor = findMethodDescriptor(object, 
method);
+        final MethodDescriptorImpl methodDescriptor = 
findMethodDescriptor(object, method);
         if (methodDescriptor == null) {
             throw new ValidationException("Method " + method + " doesn't 
belong to class " + object.getClass());
         }
@@ -1096,11 +1070,15 @@ public class ClassValidator implements C
             
checkValidationAppliesTo(methodDescriptor.getReturnValueDescriptor().getConstraintDescriptors(),
 ConstraintTarget.RETURN_VALUE);
         }
 
-        return Set.class.cast(validaReturnedValue(new 
NodeImpl.MethodNodeImpl(method.getName(), 
Arrays.asList(method.getParameterTypes())), returnValue, object.getClass(), 
methodDescriptor, groups, object));
+        @SuppressWarnings("unchecked")
+        final Set<ConstraintViolation<T>> result =
+            Set.class.cast(validaReturnedValue(
+                new NodeImpl.MethodNodeImpl(method.getName(), 
Arrays.asList(method.getParameterTypes())), returnValue,
+                object.getClass(), methodDescriptor, groups, object));
+        return result;
     }
 
     private <T> MethodDescriptorImpl findMethodDescriptor(final T object, 
final Method method) {
-        // return 
MethodDescriptorImpl.class.cast(getConstraintsForClass(Proxies.classFor(object.getClass())).getConstraintsForMethod(method.getName(),
 method.getParameterTypes()));
         return MethodDescriptorImpl.class.cast(
             
BeanDescriptorImpl.class.cast(getConstraintsForClass(Proxies.classFor(method.getDeclaringClass())))
                 .getInternalConstraintsForMethod(method.getName(), 
method.getParameterTypes()));
@@ -1122,68 +1100,6 @@ public class ClassValidator implements C
         }
     }
 
-    private <T> Group validateElementInContext(final GroupValidationContext<T> 
context,
-                                              final ElementDescriptor 
eltDescriptor) {
-
-        final ElementDescriptorImpl impl = 
ElementDescriptorImpl.class.cast(eltDescriptor);
-
-        final Groups groups = context.getGroups();
-
-        Group breakOnGroup = null;
-
-        for (final ConstraintDescriptor<?> consDesc : 
eltDescriptor.getConstraintDescriptors()) {
-            final ConstraintValidation<?> validation = 
(ConstraintValidation<?>) consDesc;
-
-            // 1. process groups
-            for (final Group current : groups.getGroups()) {
-                context.setCurrentGroup(current);
-                validation.validateGroupContext(context);
-            }
-            // 2. process sequences
-            for (final List<Group> eachSeq : groups.getSequences()) {
-                for (final Group current : eachSeq) {
-                    context.setCurrentGroup(current);
-                    validation.validateGroupContext(context);
-                    /**
-                     * if one of the group process in the sequence leads to one
-                     * or more validation failure, the groups following in the
-                     * sequence must not be processed
-                     */
-                    if (!context.getListener().isEmpty()) {
-                        breakOnGroup = current;
-                        break;
-                    }
-                }
-            }
-        }
-        if (impl.isCascaded() && context.getValidatedValue() != null) {
-            initMetaBean(context, factoryContext.getMetaBeanFinder(), 
context.getValidatedValue().getClass());
-
-            // 1. process groups
-            for (final Group current : groups.getGroups()) {
-                context.setCurrentGroup(impl.mapGroup(current));
-                ValidationHelper.validateContext(context, new 
JsrValidationCallback(context), isTreatMapsLikeBeans());
-            }
-            // 2. process sequences
-            for (final List<Group> eachSeq : groups.getSequences()) {
-                for (final Group current : eachSeq) {
-                    context.setCurrentGroup(impl.mapGroup(current));
-                    ValidationHelper.validateContext(context, new 
JsrValidationCallback(context), isTreatMapsLikeBeans());
-                    /**
-                     * if one of the group process in the sequence leads to one
-                     * or more validation failure, the groups following in the
-                     * sequence must not be processed
-                     */
-                    if (!context.getListener().isEmpty()) {
-                        breakOnGroup = current;
-                        break;
-                    }
-                }
-            }
-        }
-        return breakOnGroup;
-    }
-
     /**
      * Dispatches a call from {@link #validate()} to {@link 
ClassValidator#validateBeanNet(GroupValidationContext)} with
      * the current context set.

Modified: 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/groups/Groups.java
URL: 
http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/groups/Groups.java?rev=1649679&r1=1649678&r2=1649679&view=diff
==============================================================================
--- 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/groups/Groups.java
 (original)
+++ 
bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/groups/Groups.java
 Mon Jan  5 22:13:35 2015
@@ -31,10 +31,10 @@ import java.util.List;
  */
 public class Groups {
     /** The list of single groups. */
-    protected List<Group> groups = new LinkedList<Group>();
+    final List<Group> groups = new LinkedList<Group>();
 
     /** The list of sequences. */
-    protected List<List<Group>> sequences = new LinkedList<List<Group>>();
+    final List<List<Group>> sequences = new LinkedList<List<Group>>();
 
     /**
      * Get the Groups.


Reply via email to