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 <[email protected]>
Authored: Wed Mar 21 16:22:34 2018 -0500
Committer: Matt Benson <[email protected]>
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()))

Reply via email to