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/21 21:24:24 UTC

[1/2] bval git commit: TCK work

Repository: bval
Updated Branches:
  refs/heads/bv2 6140f7d1c -> 00a882f72


TCK work


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

Branch: refs/heads/bv2
Commit: cd6d9caceb0e9751fba11c0d240555c77975c9ad
Parents: 6140f7d
Author: Matt Benson <mb...@apache.org>
Authored: Wed Mar 21 16:22:34 2018 -0500
Committer: Matt Benson <mb...@apache.org>
Committed: Wed Mar 21 16:22:34 2018 -0500

----------------------------------------------------------------------
 .../bval/jsr/ApacheValidationProvider.java      | 11 ++++--
 .../org/apache/bval/jsr/descriptor/BeanD.java   | 10 +++---
 .../bval/jsr/descriptor/MetadataReader.java     | 12 +++++--
 .../apache/bval/jsr/job/ValidateParameters.java |  8 +++--
 .../apache/bval/jsr/util/ExecutableTypes.java   | 37 ++++++++++----------
 .../java/org/apache/bval/util/Exceptions.java   | 13 +++++++
 6 files changed, 59 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/bval/blob/cd6d9cac/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidationProvider.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidationProvider.java b/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidationProvider.java
index 52d2249..896529e 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidationProvider.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidationProvider.java
@@ -25,6 +25,7 @@ import javax.validation.spi.BootstrapState;
 import javax.validation.spi.ConfigurationState;
 import javax.validation.spi.ValidationProvider;
 
+import org.apache.bval.util.Exceptions;
 import org.apache.bval.util.reflection.Reflection;
 
 /**
@@ -92,9 +93,13 @@ public class ApacheValidationProvider implements ValidationProvider<ApacheValida
 
         try {
             return validatorFactoryClass.getConstructor(ConfigurationState.class).newInstance(configuration);
-        } catch (final Exception ex) {
-            throw new ValidationException("Cannot instantiate : " + validatorFactoryClass, ex);
+        } catch (Exception e) {
+            final Throwable t = Exceptions.causeOf(e);
+            if (t instanceof ValidationException) {
+                throw (ValidationException) t;
+            }
+            throw Exceptions.create(ValidationException::new, t, "Cannot instantiate %s",
+                validatorFactoryClass.getName());
         }
     }
-
 }

http://git-wip-us.apache.org/repos/asf/bval/blob/cd6d9cac/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/BeanD.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/BeanD.java b/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/BeanD.java
index da221ce..5feaddf 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/BeanD.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/BeanD.java
@@ -78,15 +78,15 @@ public class BeanD<T> extends ElementD<Class<T>, MetadataReader.ForBean<T>> impl
 
     @Override
     public MethodDescriptor getConstraintsForMethod(String methodName, Class<?>... parameterTypes) {
-        final Signature key = new Signature(methodName, parameterTypes);
-        return methods.get(key);
+        Exceptions.raiseIf(StringUtils.isBlank(methodName), IllegalArgumentException::new,
+            "method name cannot be null/empty/blank");
+        return methods.get(new Signature(methodName, parameterTypes));
     }
 
     @Override
     public Set<MethodDescriptor> getConstrainedMethods(MethodType methodType, MethodType... methodTypes) {
         final EnumSet<MethodType> filter = EnumSet.of(methodType, methodTypes);
-        return methods.values().stream().filter(DescriptorManager::isConstrained)
-            .filter(m -> filter.contains(m.getMethodType())).collect(ToUnmodifiable.set());
+        return methods.values().stream().filter(m -> filter.contains(m.getMethodType())).collect(ToUnmodifiable.set());
     }
 
     @Override
@@ -96,7 +96,7 @@ public class BeanD<T> extends ElementD<Class<T>, MetadataReader.ForBean<T>> impl
 
     @Override
     public Set<ConstructorDescriptor> getConstrainedConstructors() {
-        return constructors.values().stream().filter(DescriptorManager::isConstrained).collect(ToUnmodifiable.set());
+        return constructors.values().stream().collect(ToUnmodifiable.set());
     }
 
     public PropertyDescriptor getProperty(String propertyName) {

http://git-wip-us.apache.org/repos/asf/bval/blob/cd6d9cac/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 c0d5e78..9dba122 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
@@ -140,7 +140,11 @@ class MetadataReader {
                 final Method m = Reflection.find(meta.getHost(),
                     t -> Reflection.getDeclaredMethod(t, sig.getName(), sig.getParameterTypes()));
 
-                result.put(sig, new MethodD(new MetadataReader.ForMethod(new Meta.ForMethod(m), builder), parent));
+                final MethodD descriptor =
+                    new MethodD(new MetadataReader.ForMethod(new Meta.ForMethod(m), builder), parent);
+                if (DescriptorManager.isConstrained(descriptor)) {
+                    result.put(sig, descriptor);
+                }
             });
             return Collections.unmodifiableMap(result);
         }
@@ -158,7 +162,11 @@ class MetadataReader {
                 final Constructor<?> c = Reflection.getDeclaredConstructor(meta.getHost(), sig.getParameterTypes());
                 @SuppressWarnings({ "unchecked", "rawtypes" })
                 final Meta.ForConstructor<T> metaCtor = (Meta.ForConstructor) new Meta.ForConstructor<>(c);
-                result.put(sig, new ConstructorD<>(new MetadataReader.ForConstructor<T>(metaCtor, builder), parent));
+                final ConstructorD<T> descriptor =
+                    new ConstructorD<>(new MetadataReader.ForConstructor<T>(metaCtor, builder), parent);
+                if (DescriptorManager.isConstrained(descriptor)) {
+                    result.put(sig, descriptor);
+                }
             });
             return Collections.unmodifiableMap(result);
         }

http://git-wip-us.apache.org/repos/asf/bval/blob/cd6d9cac/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidateParameters.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidateParameters.java b/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidateParameters.java
index ce93eaf..5e7dc79 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidateParameters.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidateParameters.java
@@ -53,7 +53,8 @@ public abstract class ValidateParameters<E extends Executable, T> extends Valida
 
         ForMethod(ApacheFactoryContext validatorContext, T object, Method executable, Object[] parameterValues,
             Class<?>[] groups) {
-            super(validatorContext, object, executable, parameterValues, groups, new Meta.ForMethod(executable));
+            super(validatorContext, object, Validate.notNull(executable, IllegalArgumentException::new, "null method"),
+                parameterValues, groups, new Meta.ForMethod(executable));
             this.object = Validate.notNull(object, IllegalArgumentException::new, "object");
         }
 
@@ -84,7 +85,8 @@ public abstract class ValidateParameters<E extends Executable, T> extends Valida
 
         ForConstructor(ApacheFactoryContext validatorContext, Constructor<? extends T> executable,
             Object[] parameterValues, Class<?>[] groups) {
-            super(validatorContext, null, executable, parameterValues, groups, new Meta.ForConstructor<>(executable));
+            super(validatorContext, null, Validate.notNull(executable, IllegalArgumentException::new, "null ctor"),
+                parameterValues, groups, new Meta.ForConstructor<>(executable));
         }
 
         @Override
@@ -145,7 +147,7 @@ public abstract class ValidateParameters<E extends Executable, T> extends Valida
         super(validatorContext, groups, meta);
         this.object = object;
         this.parameterValues =
-            Validate.notNull(parameterValues, IllegalArgumentException::new, "parameterValues").clone();
+            Validate.notNull(parameterValues, IllegalArgumentException::new, "null parameter values").clone();
 
         final Type[] genericParameterTypes = executable.getGenericParameterTypes();
         Exceptions.raiseUnless(parameterValues.length == genericParameterTypes.length, IllegalArgumentException::new,

http://git-wip-us.apache.org/repos/asf/bval/blob/cd6d9cac/bval-jsr/src/main/java/org/apache/bval/jsr/util/ExecutableTypes.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/util/ExecutableTypes.java b/bval-jsr/src/main/java/org/apache/bval/jsr/util/ExecutableTypes.java
index 664da42..fed9d49 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/util/ExecutableTypes.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/util/ExecutableTypes.java
@@ -22,12 +22,11 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.EnumSet;
-import java.util.LinkedHashMap;
-import java.util.Map;
 import java.util.Set;
 
 import javax.validation.executable.ExecutableType;
 
+import org.apache.bval.util.Exceptions;
 import org.apache.bval.util.Validate;
 
 /**
@@ -35,18 +34,11 @@ import org.apache.bval.util.Validate;
  */
 public class ExecutableTypes {
 
-    private static final Map<ExecutableType, Set<ExecutableType>> INTERPRETED_EXECUTABLE_TYPES;
-    static {
-        final Map<ExecutableType, Set<ExecutableType>> m = new LinkedHashMap<>();
+    private static final Set<ExecutableType> ALL_TYPES = Collections.unmodifiableSet(
+        EnumSet.of(ExecutableType.CONSTRUCTORS, ExecutableType.NON_GETTER_METHODS, ExecutableType.GETTER_METHODS));
 
-        m.put(ExecutableType.ALL, Collections.unmodifiableSet(
-            EnumSet.of(ExecutableType.CONSTRUCTORS, ExecutableType.NON_GETTER_METHODS, ExecutableType.GETTER_METHODS)));
-        m.put(ExecutableType.IMPLICIT,
-            Collections.unmodifiableSet(EnumSet.of(ExecutableType.CONSTRUCTORS, ExecutableType.NON_GETTER_METHODS)));
-        m.put(ExecutableType.NONE, Collections.emptySet());
-
-        INTERPRETED_EXECUTABLE_TYPES = Collections.unmodifiableMap(m);
-    }
+    private static final Set<ExecutableType> IMPLICIT_TYPES =
+        Collections.unmodifiableSet(EnumSet.of(ExecutableType.CONSTRUCTORS, ExecutableType.NON_GETTER_METHODS));
 
     /**
      * Interpret occurrences of {@link ExecutableType#ALL}, {@link ExecutableType#IMPLICIT}, and
@@ -57,13 +49,20 @@ public class ExecutableTypes {
      */
     public static Set<ExecutableType> interpret(Collection<ExecutableType> executableTypes) {
         Validate.notNull(executableTypes);
-
-        for (Map.Entry<ExecutableType, Set<ExecutableType>> e : INTERPRETED_EXECUTABLE_TYPES.entrySet()) {
-            if (e.getValue().equals(executableTypes) || executableTypes.contains(e.getKey())) {
-                return e.getValue();
-            }
+        if (executableTypes.isEmpty()) {
+            return Collections.emptySet();
+        }
+        final Set<ExecutableType> result = EnumSet.copyOf(executableTypes);
+        if (result.contains(ExecutableType.ALL)) {
+            return ALL_TYPES;
+        }
+        if (result.remove(ExecutableType.IMPLICIT)) {
+            Exceptions.raiseUnless(result.isEmpty(), IllegalArgumentException::new,
+                "Mixing %s with other %ss is illegal.", ExecutableType.IMPLICIT, ExecutableType.class.getSimpleName());
+            return IMPLICIT_TYPES;
         }
-        return Collections.unmodifiableSet(EnumSet.copyOf(executableTypes));
+        result.remove(ExecutableType.NONE);
+        return result.isEmpty() ? Collections.emptySet() : Collections.unmodifiableSet(result);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/bval/blob/cd6d9cac/bval-jsr/src/main/java/org/apache/bval/util/Exceptions.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/util/Exceptions.java b/bval-jsr/src/main/java/org/apache/bval/util/Exceptions.java
index 9487cde..ba3fee8 100644
--- a/bval-jsr/src/main/java/org/apache/bval/util/Exceptions.java
+++ b/bval-jsr/src/main/java/org/apache/bval/util/Exceptions.java
@@ -16,6 +16,7 @@
  */
 package org.apache.bval.util;
 
+import java.lang.reflect.InvocationTargetException;
 import java.util.function.BiFunction;
 import java.util.function.Function;
 import java.util.function.Supplier;
@@ -113,6 +114,18 @@ public class Exceptions {
         raiseIf(!condition, fn, cause, message);
     }
 
+    /**
+     * Extract cause from {@link InvocationTargetException}s.
+     * @param t to unwrap
+     * @return first of t, cause hierarchy not instanceof {@link InvocationTargetException}
+     */
+    public static Throwable causeOf(Throwable t) {
+        while (t instanceof InvocationTargetException) {
+            t = t.getCause();
+        }
+        return t;
+    }
+
     private static <T extends Throwable> T elideStackTrace(T t) {
         final StackTraceElement[] stackTrace = t.fillInStackTrace().getStackTrace();
         t.setStackTrace(Stream.of(stackTrace).filter(e -> !Exceptions.class.getName().equals(e.getClassName()))


[2/2] bval git commit: target NumberSignValidator+ classes to correct constraint types

Posted by mb...@apache.org.
target NumberSignValidator+ classes to correct constraint types


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

Branch: refs/heads/bv2
Commit: 00a882f724a9c861102b1cd768f31ca8a94510eb
Parents: cd6d9ca
Author: Matt Benson <mb...@apache.org>
Authored: Wed Mar 21 16:24:17 2018 -0500
Committer: Matt Benson <mb...@apache.org>
Committed: Wed Mar 21 16:24:17 2018 -0500

----------------------------------------------------------------------
 .../apache/bval/constraints/NumberSignValidator.java  | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/bval/blob/00a882f7/bval-jsr/src/main/java/org/apache/bval/constraints/NumberSignValidator.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/NumberSignValidator.java b/bval-jsr/src/main/java/org/apache/bval/constraints/NumberSignValidator.java
index fe8f59c..48d20b9 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/NumberSignValidator.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/NumberSignValidator.java
@@ -18,20 +18,24 @@
  */
 package org.apache.bval.constraints;
 
+import java.lang.annotation.Annotation;
 import java.util.function.IntPredicate;
 
 import javax.validation.ConstraintValidator;
 import javax.validation.ConstraintValidatorContext;
 import javax.validation.constraints.Negative;
+import javax.validation.constraints.NegativeOrZero;
+import javax.validation.constraints.Positive;
+import javax.validation.constraints.PositiveOrZero;
 
 import org.apache.bval.util.Validate;
 
 /**
  * Description: validate positive/negative number values.
  */
-public abstract class NumberSignValidator implements ConstraintValidator<Negative, Number> {
-    public static class ForPositive extends NumberSignValidator {
-        public static class OrZero extends NumberSignValidator {
+public abstract class NumberSignValidator<A extends Annotation> implements ConstraintValidator<A, Number> {
+    public static class ForPositive extends NumberSignValidator<Positive> {
+        public static class OrZero extends NumberSignValidator<PositiveOrZero> {
             public OrZero() {
                 super(n -> n >= 0);
             }
@@ -42,8 +46,8 @@ public abstract class NumberSignValidator implements ConstraintValidator<Negativ
         }
     }
 
-    public static class ForNegative extends NumberSignValidator {
-        public static class OrZero extends NumberSignValidator {
+    public static class ForNegative extends NumberSignValidator<Negative> {
+        public static class OrZero extends NumberSignValidator<NegativeOrZero> {
             public OrZero() {
                 super(n -> n <= 0);
             }