You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bval.apache.org by mb...@apache.org on 2018/03/27 16:49:01 UTC

[1/5] bval git commit: ws

Repository: bval
Updated Branches:
  refs/heads/bv2 5e43d7ea6 -> 32e4b4c03


ws


Project: http://git-wip-us.apache.org/repos/asf/bval/repo
Commit: http://git-wip-us.apache.org/repos/asf/bval/commit/66e97149
Tree: http://git-wip-us.apache.org/repos/asf/bval/tree/66e97149
Diff: http://git-wip-us.apache.org/repos/asf/bval/diff/66e97149

Branch: refs/heads/bv2
Commit: 66e971490c320cca6ad4e23f4c436086c194a4a3
Parents: 5e43d7e
Author: Matt Benson <mb...@apache.org>
Authored: Tue Mar 27 09:58:58 2018 -0500
Committer: Matt Benson <mb...@apache.org>
Committed: Tue Mar 27 10:07:33 2018 -0500

----------------------------------------------------------------------
 .../main/java/org/apache/bval/jsr/metadata/ReflectionBuilder.java  | 2 +-
 .../src/main/java/org/apache/bval/jsr/metadata/XmlBuilder.java     | 1 -
 2 files changed, 1 insertion(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/bval/blob/66e97149/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/ReflectionBuilder.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/ReflectionBuilder.java b/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/ReflectionBuilder.java
index 419f961..338e1d2 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/ReflectionBuilder.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/ReflectionBuilder.java
@@ -253,7 +253,7 @@ public class ReflectionBuilder {
                     target = explicitTarget.get();
                 } else {
                     final Set<ValidationTarget> supportedTargets =
-                            validatorFactory.getAnnotationsManager().supportedTargets(constraintType);
+                        validatorFactory.getAnnotationsManager().supportedTargets(constraintType);
 
                     if (supportedTargets.size() == 1) {
                         final ValidationTarget validationTarget = supportedTargets.iterator().next();

http://git-wip-us.apache.org/repos/asf/bval/blob/66e97149/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/XmlBuilder.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/XmlBuilder.java b/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/XmlBuilder.java
index 7a08525..f05d596 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/XmlBuilder.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/XmlBuilder.java
@@ -552,7 +552,6 @@ public class XmlBuilder {
             ConstraintAnnotationAttributes.VALIDATION_APPLIES_TO.getAttributeName())) {
             annoBuilder.setValidationAppliesTo(target);
         }
-
         for (final ElementType elementType : constraint.getElement()) {
             final String name = elementType.getName();
             checkValidName(name);


[4/5] bval git commit: arrays inherit Object for CV computation purposes

Posted by mb...@apache.org.
arrays inherit Object for CV computation purposes


Project: http://git-wip-us.apache.org/repos/asf/bval/repo
Commit: http://git-wip-us.apache.org/repos/asf/bval/commit/237fb504
Tree: http://git-wip-us.apache.org/repos/asf/bval/tree/237fb504
Diff: http://git-wip-us.apache.org/repos/asf/bval/diff/237fb504

Branch: refs/heads/bv2
Commit: 237fb504c7fb5e7c72ef29d7795bf99c14d878b5
Parents: e135a11
Author: Matt Benson <mb...@apache.org>
Authored: Tue Mar 27 11:47:59 2018 -0500
Committer: Matt Benson <mb...@apache.org>
Committed: Tue Mar 27 11:47:59 2018 -0500

----------------------------------------------------------------------
 .../apache/bval/jsr/job/ComputeConstraintValidatorClass.java  | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/bval/blob/237fb504/bval-jsr/src/main/java/org/apache/bval/jsr/job/ComputeConstraintValidatorClass.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/job/ComputeConstraintValidatorClass.java b/bval-jsr/src/main/java/org/apache/bval/jsr/job/ComputeConstraintValidatorClass.java
index d9c0b56..123754b 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/job/ComputeConstraintValidatorClass.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/job/ComputeConstraintValidatorClass.java
@@ -201,10 +201,11 @@ class ComputeConstraintValidatorClass<A extends Annotation>
         final TypeWrapper w = new TypeWrapper(Reflection.primitiveToWrapper(validatedType));
         Stream.Builder<Class<?>> hierarchy = Stream.builder();
         Reflection.hierarchy(w.componentType, Interfaces.INCLUDE).forEach(hierarchy);
-        if (validatedType.isInterface()) {
-            hierarchy.accept(Object.class);
+        final Stream<Class<?>> result = hierarchy.build().map(w::unwrapArrayComponentType);
+        if (validatedType.isInterface() || validatedType.isArray()) {
+            return Stream.concat(result, Stream.of(Object.class));
         }
-        return hierarchy.build().map(w::unwrapArrayComponentType);
+        return result;
     }
 
     private boolean isComposed() {


[5/5] bval git commit: reject collision of getter/method in custom metadata

Posted by mb...@apache.org.
reject collision of getter/method in custom metadata


Project: http://git-wip-us.apache.org/repos/asf/bval/repo
Commit: http://git-wip-us.apache.org/repos/asf/bval/commit/32e4b4c0
Tree: http://git-wip-us.apache.org/repos/asf/bval/tree/32e4b4c0
Diff: http://git-wip-us.apache.org/repos/asf/bval/diff/32e4b4c0

Branch: refs/heads/bv2
Commit: 32e4b4c03e7d8dda0a1cf3f78406590d88b0ca82
Parents: 237fb50
Author: Matt Benson <mb...@apache.org>
Authored: Tue Mar 27 11:48:31 2018 -0500
Committer: Matt Benson <mb...@apache.org>
Committed: Tue Mar 27 11:48:31 2018 -0500

----------------------------------------------------------------------
 .../apache/bval/jsr/metadata/MetadataBuilders.java   | 15 +++++++++++++++
 .../main/java/org/apache/bval/jsr/util/Methods.java  | 14 ++++++++++++--
 2 files changed, 27 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/bval/blob/32e4b4c0/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/MetadataBuilders.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/MetadataBuilders.java b/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/MetadataBuilders.java
index 9b8a33b..82de16d 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/MetadataBuilders.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/MetadataBuilders.java
@@ -23,6 +23,10 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
+import javax.validation.ValidationException;
+
+import org.apache.bval.jsr.util.Methods;
+import org.apache.bval.util.Exceptions;
 import org.apache.bval.util.Validate;
 
 public class MetadataBuilders {
@@ -32,6 +36,7 @@ public class MetadataBuilders {
     public <T> void registerCustomBuilder(Class<T> bean, MetadataBuilder.ForBean<T> builder) {
         Validate.notNull(bean, "bean");
         Validate.notNull(builder, "builder");
+        validateCustomBuilder(bean, builder);
         beanBuilders.computeIfAbsent(bean, c -> new ArrayList<>()).add(builder);
     }
 
@@ -44,4 +49,14 @@ public class MetadataBuilders {
     public Set<Class<?>> getCustomizedTypes() {
         return beanBuilders.keySet();
     }
+
+    private <T> void validateCustomBuilder(Class<T> bean, MetadataBuilder.ForBean<T> builder) {
+        final Meta<Class<T>> meta = new Meta.ForClass<>(bean);
+        final Set<String> propertyNames = builder.getGetters(meta).keySet();
+        builder.getMethods(meta).keySet().stream().map(Signature::getName).filter(Methods::isGetter)
+            .map(Methods::propertyName).forEach(pn -> {
+                Exceptions.raiseIf(propertyNames.contains(pn), ValidationException::new,
+                    "%s user metadata cannot specify both method and getter elements for %s", f -> f.args(bean, pn));
+            });
+    }
 }

http://git-wip-us.apache.org/repos/asf/bval/blob/32e4b4c0/bval-jsr/src/main/java/org/apache/bval/jsr/util/Methods.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/util/Methods.java b/bval-jsr/src/main/java/org/apache/bval/jsr/util/Methods.java
index ce83c73..d0d5bdb 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/util/Methods.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/util/Methods.java
@@ -39,10 +39,20 @@ public final class Methods {
         return !Void.TYPE.equals(m.getReturnType()) && m.getName().startsWith("get");
     }
 
+    public static boolean isGetter(String methodName) {
+        Validate.notNull(methodName);
+        final int len = methodName.length();
+        return len > 2 && methodName.startsWith("is") || len > 3 && methodName.startsWith("get");
+    }
+
     public static String propertyName(Method getter) {
         Validate.isTrue(isGetter(getter), "%s is not a getter", getter);
-        final String name = getter.getName();
-        final String suffix = name.startsWith("is") ? name.substring(2) : name.substring(3);
+        return propertyName(getter.getName());
+    }
+
+    public static String propertyName(String methodName) {
+        Validate.isTrue(isGetter(methodName), "%s does not represent a property getter");
+        final String suffix = methodName.startsWith("is") ? methodName.substring(2) : methodName.substring(3);
         return Introspector.decapitalize(suffix);
     }
 


[2/5] bval git commit: implement validationAppliesTo rules

Posted by mb...@apache.org.
implement validationAppliesTo rules


Project: http://git-wip-us.apache.org/repos/asf/bval/repo
Commit: http://git-wip-us.apache.org/repos/asf/bval/commit/8864228a
Tree: http://git-wip-us.apache.org/repos/asf/bval/tree/8864228a
Diff: http://git-wip-us.apache.org/repos/asf/bval/diff/8864228a

Branch: refs/heads/bv2
Commit: 8864228a46246ef93752efef7173893271ac314a
Parents: 66e9714
Author: Matt Benson <mb...@apache.org>
Authored: Tue Mar 27 10:22:29 2018 -0500
Committer: Matt Benson <mb...@apache.org>
Committed: Tue Mar 27 10:22:29 2018 -0500

----------------------------------------------------------------------
 .../apache/bval/jsr/descriptor/ConstraintD.java | 30 +++++++++++++++++++-
 1 file changed, 29 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/bval/blob/8864228a/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/ConstraintD.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/ConstraintD.java b/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/ConstraintD.java
index bd8c1f8..d8bb932 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/ConstraintD.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/ConstraintD.java
@@ -20,6 +20,8 @@ package org.apache.bval.jsr.descriptor;
 
 import java.lang.annotation.Annotation;
 import java.lang.annotation.ElementType;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Executable;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
@@ -75,6 +77,7 @@ public class ConstraintD<A extends Annotation> implements ConstraintDescriptor<A
     private final boolean reportAsSingle;
     private final ValidateUnwrappedValue valueUnwrapping;
     private final Map<String, Object> attributes;
+    private final ConstraintTarget validationAppliesTo;
 
     private final Set<ConstraintDescriptor<?>> composingConstraints;
     private final List<Class<? extends ConstraintValidator<A, ?>>> constraintValidatorClasses;
@@ -89,6 +92,7 @@ public class ConstraintD<A extends Annotation> implements ConstraintDescriptor<A
         reportAsSingle = annotation.annotationType().isAnnotationPresent(ReportAsSingleViolation.class);
         valueUnwrapping = computeValidateUnwrappedValue();
         attributes = AnnotationsManager.readAttributes(annotation);
+        validationAppliesTo = computeValidationAppliesTo(meta.getElementType());
 
         Validate.notNull(validatorFactory, "validatorFactory");
         composingConstraints = computeComposingConstraints(validatorFactory);
@@ -137,7 +141,7 @@ public class ConstraintD<A extends Annotation> implements ConstraintDescriptor<A
 
     @Override
     public ConstraintTarget getValidationAppliesTo() {
-        return read(ConstraintAnnotationAttributes.VALIDATION_APPLIES_TO);
+        return validationAppliesTo;
     }
 
     @Override
@@ -224,4 +228,28 @@ public class ConstraintD<A extends Annotation> implements ConstraintDescriptor<A
         }
         return result;
     }
+
+    private ConstraintTarget computeValidationAppliesTo(ElementType elementType) {
+        final ConstraintTarget result = read(ConstraintAnnotationAttributes.VALIDATION_APPLIES_TO);
+        if (result != null) {
+            final AnnotatedElement host = meta.getHost();
+            Exceptions.raiseUnless(host instanceof Executable, ConstraintDeclarationException::new, "Illegal %s on %s",
+                result, host);
+
+            switch (result) {
+            case PARAMETERS:
+                Exceptions.raiseIf(((Executable) host).getParameterCount() == 0, ConstraintDeclarationException::new,
+                    "Illegal specification of %s on %s with no parameters", result, elementType);
+                break;
+            case RETURN_VALUE:
+                Exceptions.raiseIf(Void.TYPE.equals(meta.getType()), ConstraintDeclarationException::new,
+                    "Illegal %s on %s method %s", result, Void.TYPE, host);
+                break;
+            case IMPLICIT:
+                // handled in ReflectionBuilder
+            default:
+            }
+        }
+        return result;
+    }
 }


[3/5] bval git commit: ws

Posted by mb...@apache.org.
ws


Project: http://git-wip-us.apache.org/repos/asf/bval/repo
Commit: http://git-wip-us.apache.org/repos/asf/bval/commit/e135a118
Tree: http://git-wip-us.apache.org/repos/asf/bval/tree/e135a118
Diff: http://git-wip-us.apache.org/repos/asf/bval/diff/e135a118

Branch: refs/heads/bv2
Commit: e135a118a9433e4e3a8605ac1658f276b13ca246
Parents: 8864228
Author: Matt Benson <mb...@apache.org>
Authored: Tue Mar 27 11:47:02 2018 -0500
Committer: Matt Benson <mb...@apache.org>
Committed: Tue Mar 27 11:47:02 2018 -0500

----------------------------------------------------------------------
 .../main/java/org/apache/bval/jsr/descriptor/MetadataReader.java    | 1 -
 1 file changed, 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/bval/blob/e135a118/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/MetadataReader.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/MetadataReader.java b/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/MetadataReader.java
index beb0648..5f54279 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/MetadataReader.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/MetadataReader.java
@@ -101,7 +101,6 @@ class MetadataReader {
                 properties.computeIfAbsent(f, descriptorList).add(new PropertyD.ForField(
                     new MetadataReader.ForContainer<>(new Meta.ForField(fld), builder), parent));
             });
-
             beanBuilder.getGetters(meta).forEach((g, builder) -> {
                 final Method getter = Methods.getter(meta.getHost(), g);