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 2017/05/02 04:53:22 UTC
svn commit: r1793432 [3/5] - in /bval/branches/bv2.x: ./
bval-core/src/main/java/org/apache/bval/
bval-core/src/main/java/org/apache/bval/model/
bval-core/src/main/java/org/apache/bval/routines/
bval-core/src/main/java/org/apache/bval/util/ bval-core/s...
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java Tue May 2 04:53:20 2017
@@ -261,10 +261,8 @@ public class ClassValidator implements C
edesc = metaBean.initFeature(JsrFeatures.Bean.BEAN_DESCRIPTOR, createBeanDescriptor(metaBean));
}
return edesc;
- } catch (final ConstraintDefinitionException definitionEx) {
- throw definitionEx;
- } catch (final ConstraintDeclarationException declarationEx) {
- throw declarationEx;
+ } catch (final ConstraintDefinitionException | ConstraintDeclarationException ex) {
+ throw ex;
} catch (final RuntimeException ex) {
throw new ValidationException("error retrieving constraints for " + clazz, ex);
}
@@ -386,7 +384,7 @@ public class ClassValidator implements C
// to the GroupSequence defined in the same class
// Obtain the full class hierarchy
- final List<Class<?>> classHierarchy = new ArrayList<Class<?>>();
+ final List<Class<?>> classHierarchy = new ArrayList<>();
ClassHelper.fillFullClassHierarchyAsList(classHierarchy, context.getMetaBean().getBeanClass());
final Class<?> initialOwner = context.getCurrentOwner();
@@ -600,21 +598,9 @@ public class ClassValidator implements C
private void validatePropertyInGroup(final GroupValidationContext<?> context) {
final Runnable helper;
if (context.getMetaProperty() == null) {
- helper = new Runnable() {
-
- @Override
- public void run() {
- ValidationHelper.validateBean(context);
- }
- };
+ helper = () -> ValidationHelper.validateBean(context);
} else {
- helper = new Runnable() {
-
- @Override
- public void run() {
- ValidationHelper.validateProperty(context);
- }
- };
+ helper = () -> ValidationHelper.validateProperty(context);
}
final List<Group> defaultGroups = expandDefaultGroup(context);
if (defaultGroups == null) {
@@ -642,8 +628,8 @@ public class ClassValidator implements C
*/
protected <T> GroupValidationContext<T> createContext(MetaBean metaBean, T object, Class<T> objectClass,
Class<?>... groups) {
- final ConstraintValidationListener<T> listener = new ConstraintValidationListener<T>(object, objectClass);
- final GroupValidationContextImpl<T> context = new GroupValidationContextImpl<T>(listener,
+ final ConstraintValidationListener<T> listener = new ConstraintValidationListener<>(object, objectClass);
+ final GroupValidationContextImpl<T> context = new GroupValidationContextImpl<>(listener,
factoryContext.getMessageInterpolator(), factoryContext.getTraversableResolver(),
factoryContext.getParameterNameProvider(), factoryContext.getConstraintValidatorFactory(), metaBean);
context.setBean(object, metaBean);
@@ -653,8 +639,8 @@ public class ClassValidator implements C
protected <T> GroupValidationContext<T> createInvocableContext(MetaBean metaBean, T object, Class<T> objectClass,
Class<?>... groups) {
- final ConstraintValidationListener<T> listener = new ConstraintValidationListener<T>(object, objectClass);
- final GroupValidationContextImpl<T> context = new GroupValidationContextImpl<T>(listener,
+ final ConstraintValidationListener<T> listener = new ConstraintValidationListener<>(object, objectClass);
+ final GroupValidationContextImpl<T> context = new GroupValidationContextImpl<>(listener,
factoryContext.getMessageInterpolator(), factoryContext.getTraversableResolver(),
factoryContext.getParameterNameProvider(), factoryContext.getConstraintValidatorFactory(), metaBean);
context.setBean(object, metaBean);
@@ -1204,7 +1190,7 @@ public class ClassValidator implements C
Validation[] validations = meta.getValidations();
if (validations == null || validations.length == 0) {
- return Collections.<ConstraintViolation<T>> emptySet();
+ return Collections.emptySet();
}
}
if (!TypeUtils.isAssignable(value == null ? null : value.getClass(), contextTraversal.getType())) {
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConfigurationImpl.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConfigurationImpl.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConfigurationImpl.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConfigurationImpl.java Tue May 2 04:53:20 2017
@@ -19,7 +19,6 @@
package org.apache.bval.jsr;
import java.io.Closeable;
-import java.io.IOException;
import java.io.InputStream;
import java.util.Collection;
import java.util.HashMap;
@@ -97,8 +96,7 @@ public class ConfigurationImpl implement
protected Collection<ExecutableType> executableValidation;
- private Collection<BValExtension.Releasable<?>> releasables =
- new CopyOnWriteArrayList<BValExtension.Releasable<?>>();
+ private Collection<BValExtension.Releasable<?>> releasables = new CopyOnWriteArrayList<>();
private boolean beforeCdi = false;
@@ -109,8 +107,8 @@ public class ConfigurationImpl implement
private boolean prepared = false;
// END DEFAULTS
- private Set<InputStream> mappingStreams = new HashSet<InputStream>();
- private Map<String, String> properties = new HashMap<String, String>();
+ private Set<InputStream> mappingStreams = new HashSet<>();
+ private Map<String, String> properties = new HashMap<>();
private boolean ignoreXmlConfiguration = false;
private volatile ValidationParser parser;
@@ -452,14 +450,11 @@ public class ConfigurationImpl implement
}
public Closeable getClosable() {
- return new Closeable() {
- @Override
- public void close() throws IOException {
- for (final BValExtension.Releasable<?> releasable : releasables) {
- releasable.release();
- }
- releasables.clear();
+ return () -> {
+ for (final BValExtension.Releasable<?> releasable : releasables) {
+ releasable.release();
}
+ releasables.clear();
};
}
@@ -469,8 +464,7 @@ public class ConfigurationImpl implement
final BValExtension.Releasable<T> releasable = BValExtension.inject(cls);
releasables.add(releasable);
return releasable.getInstance();
- } catch (final Exception e) {
- } catch (final NoClassDefFoundError error) {
+ } catch (Exception | NoClassDefFoundError e) {
}
try {
return cls.newInstance();
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintAnnotationAttributes.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintAnnotationAttributes.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintAnnotationAttributes.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintAnnotationAttributes.java Tue May 2 04:53:20 2017
@@ -145,9 +145,9 @@ public enum ConstraintAnnotationAttribut
}
// this is static but related to Worker
- private static final ConcurrentMap<Class<?>, Worker<?>> WORKER_CACHE = new ConcurrentHashMap<Class<?>, Worker<?>>();
+ private static final ConcurrentMap<Class<?>, Worker<?>> WORKER_CACHE = new ConcurrentHashMap<>();
private static final ConcurrentMap<Class<?>, ConcurrentMap<String, Method>> METHOD_BY_NAME_AND_CLASS =
- new ConcurrentHashMap<Class<?>, ConcurrentMap<String, Method>>();
+ new ConcurrentHashMap<>();
private static final Method NULL_METHOD;
static {
try {
@@ -171,14 +171,8 @@ public enum ConstraintAnnotationAttribut
}
private Method findMethod(final Class<C> constraintType, final String attributeName) {
- ConcurrentMap<String, Method> cache = METHOD_BY_NAME_AND_CLASS.get(constraintType);
- if (cache == null) {
- cache = new ConcurrentHashMap<String, Method>();
- final ConcurrentMap<String, Method> old = METHOD_BY_NAME_AND_CLASS.putIfAbsent(constraintType, cache);
- if (old != null) {
- cache = old;
- }
- }
+ ConcurrentMap<String, Method> cache =
+ METHOD_BY_NAME_AND_CLASS.computeIfAbsent(constraintType, t -> new ConcurrentHashMap<>());
final Method found = cache.get(attributeName);
if (found != null) {
@@ -189,11 +183,7 @@ public enum ConstraintAnnotationAttribut
cache.putIfAbsent(attributeName, NULL_METHOD);
return null;
}
- final Method oldMtd = cache.putIfAbsent(attributeName, m);
- if (oldMtd != null) {
- return oldMtd;
- }
- return m;
+ return cache.computeIfAbsent(attributeName, s -> m);
}
public boolean isValid() {
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintCached.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintCached.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintCached.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintCached.java Tue May 2 04:53:20 2017
@@ -29,7 +29,7 @@ import java.util.Map;
*/
public class ConstraintCached {
private final Map<Class<? extends Annotation>, Class<? extends ConstraintValidator<?, ?>>[]> classes =
- new HashMap<Class<? extends Annotation>, Class<? extends ConstraintValidator<?, ?>>[]>();
+ new HashMap<>();
/**
* Record the set of validator classes for a given constraint annotation.
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintDefaults.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintDefaults.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintDefaults.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintDefaults.java Tue May 2 04:53:20 2017
@@ -80,28 +80,20 @@ public class ConstraintDefaults {
private Map<String, Class<? extends ConstraintValidator<?, ?>>[]> loadDefaultConstraints(String resource) {
final Properties constraintProperties = new Properties();
final ClassLoader classloader = getClassLoader();
- final InputStream stream = classloader.getResourceAsStream(resource);
- if (stream == null) {
- log.log(Level.WARNING, String.format("Cannot find %s", resource));
- } else {
- try {
+ try (final InputStream stream = classloader.getResourceAsStream(resource)) {
+ if (stream == null) {
+ log.log(Level.WARNING, String.format("Cannot find %s", resource));
+ } else {
constraintProperties.load(stream);
- } catch (IOException e) {
- log.log(Level.SEVERE, String.format("Cannot load %s", resource), e);
- } finally {
- try {
- stream.close();
- } catch (final IOException e) {
- // no-op
- }
}
+ } catch (IOException e) {
+ log.log(Level.SEVERE, String.format("Cannot load %s", resource), e);
}
- final Map<String, Class<? extends ConstraintValidator<?, ?>>[]> loadedConstraints =
- new HashMap<String, Class<? extends ConstraintValidator<?, ?>>[]>();
+ final Map<String, Class<? extends ConstraintValidator<?, ?>>[]> loadedConstraints = new HashMap<>();
for (final Map.Entry<Object, Object> entry : constraintProperties.entrySet()) {
- final List<Class<?>> classes = new LinkedList<Class<?>>();
+ final List<Class<?>> classes = new LinkedList<>();
for (String className : StringUtils.split((String) entry.getValue(), ',')) {
try {
classes.add(Reflection.toClass(className.trim(), classloader));
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintDescriptorImpl.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintDescriptorImpl.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintDescriptorImpl.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintDescriptorImpl.java Tue May 2 04:53:20 2017
@@ -26,6 +26,7 @@ import java.io.Serializable;
import java.lang.annotation.Annotation;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.Set;
/**
@@ -209,15 +210,7 @@ public class ConstraintDescriptorImpl<T
* generated hashCode on all fields except hashCode
*/
private int computeHashCode() {
- int result = annotation != null ? annotation.hashCode() : 0;
- result = 31 * result + (groups != null ? groups.hashCode() : 0);
- result = 31 * result + (payload != null ? payload.hashCode() : 0);
- result = 31 * result + (constraintValidatorClasses != null ? constraintValidatorClasses.hashCode() : 0);
- result = 31 * result + (attributes != null ? attributes.hashCode() : 0);
- result = 31 * result + (composingConstraints != null ? composingConstraints.hashCode() : 0);
- result = 31 * result + (reportAsSingleViolation ? 1 : 0);
- result = 31 * result + (validationAppliesTo != null ? validationAppliesTo.hashCode() : 0);
- result = 31 * result + (template != null ? template.hashCode() : 0);
- return result;
+ return Objects.hash(annotation, groups, payload, constraintValidatorClasses, attributes, composingConstraints,
+ reportAsSingleViolation, validationAppliesTo, template);
}
}
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintFinderImpl.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintFinderImpl.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintFinderImpl.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintFinderImpl.java Tue May 2 04:53:20 2017
@@ -105,8 +105,7 @@ final class ConstraintFinderImpl impleme
*/
@Override
public ElementDescriptor.ConstraintFinder declaredOn(ElementType... elementTypes) {
- final Set<ConstraintValidation<?>> matchingDescriptors =
- new HashSet<ConstraintValidation<?>>(constraintDescriptors.size());
+ final Set<ConstraintValidation<?>> matchingDescriptors = new HashSet<>(constraintDescriptors.size());
for (ElementType each : elementTypes) {
for (ConstraintValidation<?> descriptor : constraintDescriptors) {
if (isInScope(descriptor) && isAtElement(descriptor, each)) {
@@ -162,7 +161,7 @@ final class ConstraintFinderImpl impleme
if (constraintDescriptors.isEmpty()) {
return Collections.emptySet();
}
- return Collections.<ConstraintDescriptor<?>> unmodifiableSet(constraintDescriptors);
+ return Collections.unmodifiableSet(constraintDescriptors);
}
/**
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java Tue May 2 04:53:20 2017
@@ -18,27 +18,6 @@
*/
package org.apache.bval.jsr;
-import org.apache.bval.jsr.util.NodeImpl;
-import org.apache.bval.jsr.util.PathImpl;
-import org.apache.bval.model.Validation;
-import org.apache.bval.model.ValidationContext;
-import org.apache.bval.model.ValidationListener;
-import org.apache.bval.util.AccessStrategy;
-import org.apache.bval.util.ObjectUtils;
-import org.apache.bval.util.StringUtils;
-import org.apache.bval.util.reflection.Reflection;
-import org.apache.bval.util.reflection.TypeUtils;
-
-import javax.validation.ConstraintDefinitionException;
-import javax.validation.ConstraintTarget;
-import javax.validation.ConstraintValidator;
-import javax.validation.ConstraintValidatorFactory;
-import javax.validation.Payload;
-import javax.validation.UnexpectedTypeException;
-import javax.validation.ValidationException;
-import javax.validation.constraintvalidation.SupportedValidationTarget;
-import javax.validation.constraintvalidation.ValidationTarget;
-import javax.validation.metadata.ConstraintDescriptor;
import java.io.Serializable;
import java.lang.annotation.Annotation;
import java.lang.reflect.Array;
@@ -54,6 +33,28 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.stream.Collectors;
+
+import javax.validation.ConstraintDefinitionException;
+import javax.validation.ConstraintTarget;
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorFactory;
+import javax.validation.Payload;
+import javax.validation.UnexpectedTypeException;
+import javax.validation.ValidationException;
+import javax.validation.constraintvalidation.SupportedValidationTarget;
+import javax.validation.constraintvalidation.ValidationTarget;
+import javax.validation.metadata.ConstraintDescriptor;
+
+import org.apache.bval.jsr.util.NodeImpl;
+import org.apache.bval.jsr.util.PathImpl;
+import org.apache.bval.model.Validation;
+import org.apache.bval.model.ValidationContext;
+import org.apache.bval.model.ValidationListener;
+import org.apache.bval.util.AccessStrategy;
+import org.apache.bval.util.ObjectUtils;
+import org.apache.bval.util.reflection.Reflection;
+import org.apache.bval.util.reflection.TypeUtils;
/**
* Description: Adapter between Constraint (JSR303) and Validation (Core)<br/>
@@ -98,12 +99,12 @@ public class ConstraintValidation<T exte
* @return {@link ConstraintDescriptor}
*/
public ConstraintDescriptor<T> asSerializableDescriptor() {
- return new ConstraintDescriptorImpl<T>(this);
+ return new ConstraintDescriptorImpl<>(this);
}
void setGroups(final Set<Class<?>> groups) {
this.groups = groups;
- ConstraintAnnotationAttributes.GROUPS.put(attributes, groups.toArray(new Class<?>[groups.size()]));
+ ConstraintAnnotationAttributes.GROUPS.put(attributes, groups.toArray(new Class[groups.size()]));
}
void setGroups(final Class<?>[] groups) {
@@ -132,7 +133,7 @@ public class ConstraintValidation<T exte
*/
public void addComposed(ConstraintValidation<?> aConstraintValidation) {
if (composedConstraints == null) {
- composedConstraints = new HashSet<ConstraintValidation<?>>();
+ composedConstraints = new HashSet<>();
}
composedConstraints.add(aConstraintValidation);
}
@@ -251,12 +252,12 @@ public class ConstraintValidation<T exte
getValidatorsTypes(constraintClasses);
reduceTarget(validatorTypes, access);
- final List<Type> assignableTypes = new ArrayList<Type>(constraintClasses.length);
+ final List<Type> assignableTypes = new ArrayList<>(constraintClasses.length);
fillAssignableTypes(type, validatorTypes.keySet(), assignableTypes);
reduceAssignableTypes(assignableTypes);
checkOneType(assignableTypes, type, owner, annotation, access);
- if ((type.equals(Object.class) || type.equals(Object[].class)) && validatorTypes.containsKey(Object.class)
+ if ((Object.class.equals(type) || Object[].class.equals(type)) && validatorTypes.containsKey(Object.class)
&& validatorTypes.containsKey(Object[].class)) {
throw new ConstraintDefinitionException(
"Only a validator for Object or Object[] should be provided for cross-parameter validators");
@@ -331,7 +332,7 @@ public class ConstraintValidation<T exte
throw new UnexpectedTypeException(
String.format("Ambiguous validators for type %s. See: @%s at %s. Validators are: %s",
stringForType(targetType), anno.annotationType().getSimpleName(), stringForLocation(owner, access),
- StringUtils.join(types, ", ")));
+ types.stream().map(Object::toString).collect(Collectors.joining(", "))));
}
}
@@ -400,7 +401,7 @@ public class ConstraintValidation<T exte
}
}
if (!validatorsTypes.containsKey(validatedType)) {
- validatorsTypes.put(validatedType, new ArrayList<Class<? extends ConstraintValidator<A, ?>>>());
+ validatorsTypes.put(validatedType, new ArrayList<>());
}
validatorsTypes.get(validatedType).add(validatorType);
}
@@ -472,7 +473,7 @@ public class ConstraintValidation<T exte
*/
@Override
public String toString() {
- return "ConstraintValidation{" + validator + '}';
+ return String.format("%s{%s}",ConstraintValidation.class.getSimpleName(), validator);
}
/**
@@ -524,9 +525,8 @@ public class ConstraintValidation<T exte
* {@inheritDoc}
*/
@Override
- @SuppressWarnings("unchecked")
public Set<ConstraintDescriptor<?>> getComposingConstraints() {
- return composedConstraints == null ? Collections.EMPTY_SET : composedConstraints;
+ return composedConstraints == null ? Collections.emptySet() : Collections.unmodifiableSet(composedConstraints);
}
/**
@@ -537,7 +537,7 @@ public class ConstraintValidation<T exte
* @return {@link Set} of {@link ConstraintValidation}
*/
Set<ConstraintValidation<?>> getComposingValidations() {
- return composedConstraints == null ? Collections.<ConstraintValidation<?>> emptySet() : composedConstraints;
+ return composedConstraints == null ? Collections.emptySet() : composedConstraints;
}
/**
@@ -566,8 +566,7 @@ public class ConstraintValidation<T exte
*/
@Override
public List<Class<? extends ConstraintValidator<T, ?>>> getConstraintValidatorClasses() {
- return validatorClasses == null ? Collections.<Class<? extends ConstraintValidator<T, ?>>> emptyList()
- : Arrays.asList(validatorClasses);
+ return validatorClasses == null ? Collections.emptyList() : Arrays.asList(validatorClasses);
}
public void setValidationAppliesTo(final ConstraintTarget validationAppliesTo) {
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidationListener.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidationListener.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidationListener.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidationListener.java Tue May 2 04:53:20 2017
@@ -16,19 +16,21 @@
*/
package org.apache.bval.jsr;
-import org.apache.bval.jsr.util.PathImpl;
-import org.apache.bval.model.ValidationContext;
-import org.apache.bval.model.ValidationListener;
+import java.lang.annotation.ElementType;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.ElementKind;
import javax.validation.MessageInterpolator;
import javax.validation.Path;
import javax.validation.metadata.ConstraintDescriptor;
-import java.lang.annotation.ElementType;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
+
+import org.apache.bval.jsr.util.PathImpl;
+import org.apache.bval.model.ValidationContext;
+import org.apache.bval.model.ValidationListener;
+import org.apache.bval.util.ObjectUtils;
/**
* Description: JSR-303 {@link ValidationListener} implementation; provides {@link ConstraintViolation}s.<br/>
@@ -36,7 +38,7 @@ import java.util.Set;
* @version $Rev: 1503686 $ $Date: 2013-07-16 14:38:56 +0200 (mar., 16 juil. 2013) $
*/
public final class ConstraintValidationListener<T> implements ValidationListener {
- private final Set<ConstraintViolation<T>> constraintViolations = new HashSet<ConstraintViolation<T>>();
+ private final Set<ConstraintViolation<T>> constraintViolations = new HashSet<>();
private final T rootBean;
private final Class<T> rootBeanType;
// the validation process is single-threaded and it's unlikely to change in the near future (otherwise use AtomicInteger).
@@ -95,13 +97,15 @@ public final class ConstraintValidationL
if (propPath == null)
propPath = gcontext.getPropertyPath();
} else {
- if (context.getMetaProperty() == null)
+ if (context.getMetaProperty() == null) {
value = context.getBean();
- else
+ } else {
value = context.getPropertyValue();
+ }
message = messageTemplate;
- if (propPath == null)
+ if (propPath == null) {
propPath = PathImpl.createPathFromString(context.getPropertyName());
+ }
descriptor = null;
}
ElementType elementType = (context.getAccess() != null) ? context.getAccess().getElementType() : null;
@@ -111,6 +115,7 @@ public final class ConstraintValidationL
Object returnValue;
T rootBean;
if (GroupValidationContext.class.isInstance(context)) { // TODO: clean up it but it would need to rework completely our context - get rid of it would be the best
+ @SuppressWarnings("unchecked")
final GroupValidationContext<T> ctx = GroupValidationContext.class.cast(context);
final ElementKind elementKind = ctx.getElementKind();
final Iterator<Path.Node> it = propPath.iterator();
@@ -118,13 +123,15 @@ public final class ConstraintValidationL
returnValue = ctx.getReturnValue();
- if (ElementKind.CONSTRUCTOR.equals(kind)) {
+ if (ElementKind.CONSTRUCTOR == kind) {
rootBean = null;
leaf = context.getBean();
returnValue = this.rootBean; // switch back return value and rootBean
- } else if (ElementKind.METHOD.equals(kind)) {
- if (ElementKind.RETURN_VALUE.equals(elementKind)) { // switch back return value and rootBean
- rootBean = (T) returnValue;
+ } else if (ElementKind.METHOD == kind) {
+ if (ElementKind.RETURN_VALUE == elementKind) { // switch back return value and rootBean
+ @SuppressWarnings("unchecked")
+ T t = (T) returnValue;
+ rootBean = t;
if (kindOf(propPath, ElementKind.RETURN_VALUE)) {
leaf = returnValue;
returnValue = this.rootBean;
@@ -145,8 +152,8 @@ public final class ConstraintValidationL
leaf = context.getBean();
}
- if (ElementKind.CONSTRUCTOR.equals(kind)
- && (ElementKind.CROSS_PARAMETER.equals(elementKind) || ElementKind.PARAMETER.equals(elementKind))
+ if (ElementKind.CONSTRUCTOR == kind
+ && (ElementKind.CROSS_PARAMETER == elementKind || ElementKind.PARAMETER == elementKind)
&& (it.hasNext() && it.next() != null && it.hasNext() && it.next() != null && !it.hasNext())) { // means inherited validation use real value
leaf = null;
}
@@ -159,24 +166,16 @@ public final class ConstraintValidationL
rootBean = this.rootBean;
}
- constraintViolations.add(new ConstraintViolationImpl<T>(messageTemplate, message, rootBean, leaf, propPath,
+ constraintViolations.add(new ConstraintViolationImpl<>(messageTemplate, message, rootBean, leaf, propPath,
value, descriptor, rootBeanType, elementType, returnValue, parameters));
}
private static boolean kindOf(final Path propPath, final ElementKind... kinds) {
- final Iterator<Path.Node> node = propPath.iterator();
- boolean isParam = false;
- while (node.hasNext()) {
- final ElementKind current = node.next().getKind();
- isParam = false;
- for (final ElementKind k : kinds) {
- if (k.equals(current)) {
- isParam = true;
- break;
- }
- }
+ Path.Node last = null;
+ for (Path.Node node : propPath) {
+ last = node;
}
- return isParam;
+ return last != null && ObjectUtils.arrayContains(kinds, last.getKind());
}
/**
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidatorContextImpl.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidatorContextImpl.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidatorContextImpl.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidatorContextImpl.java Tue May 2 04:53:20 2017
@@ -39,7 +39,7 @@ import java.util.List;
* a {@link ConstraintValidation} to its adapted {@link ConstraintValidator}. <br/>
*/
public class ConstraintValidatorContextImpl implements ConstraintValidatorContext {
- private final List<ValidationListener.Error> errorMessages = new LinkedList<ValidationListener.Error>();
+ private final List<ValidationListener.Error> errorMessages = new LinkedList<>();
private final ConstraintValidation<?> constraintDescriptor;
private final GroupValidationContext<?> validationContext;
@@ -126,26 +126,23 @@ public class ConstraintValidatorContextI
@Override
public NodeBuilderCustomizableContext addPropertyNode(String name) {
final NodeImpl node;
- if (!propertyPath.isRootPath()) {
- if (propertyPath.getLeafNode().getKind() != null) {
- node = new NodeImpl.PropertyNodeImpl(name);
- propertyPath.addNode(node);
- } else {
- node = propertyPath.getLeafNode();
- }
+ if (propertyPath.isRootPath()) {
+ node = new NodeImpl.PropertyNodeImpl(name);
+ propertyPath.addNode(node);
+ } else if (propertyPath.getLeafNode().getKind() == null) {
+ node = propertyPath.getLeafNode();
+ node.setName(name);
+ node.setKind(ElementKind.PROPERTY);
} else {
node = new NodeImpl.PropertyNodeImpl(name);
propertyPath.addNode(node);
}
- node.setName(name);
- node.setKind(ElementKind.PROPERTY); // enforce it
return new NodeBuilderCustomizableContextImpl(parent, messageTemplate, propertyPath);
}
@Override
public LeafNodeBuilderCustomizableContext addBeanNode() {
final NodeImpl node = new NodeImpl.BeanNodeImpl();
- node.setKind(ElementKind.BEAN);
propertyPath.addNode(node);
return new LeafNodeBuilderCustomizableContextImpl(parent, messageTemplate, propertyPath);
}
@@ -157,7 +154,6 @@ public class ConstraintValidatorContextI
parent.validationContext.getParameterNameProvider().getParameterNames(method);
final NodeImpl node = new NodeImpl.ParameterNodeImpl(parameters.get(index), index);
node.setParameterIndex(index);
- node.setKind(ElementKind.PARAMETER);
if (!propertyPath.isRootPath()) {
propertyPath.removeLeafNode();
}
@@ -185,7 +181,7 @@ public class ConstraintValidatorContextI
"At least one custom message must be created if the default error message gets disabled.");
}
- List<ValidationListener.Error> returnedErrorMessages = new ArrayList<ValidationListener.Error>(errorMessages);
+ List<ValidationListener.Error> returnedErrorMessages = new ArrayList<>(errorMessages);
if (!defaultDisabled) {
returnedErrorMessages.add(new ValidationListener.Error(getDefaultConstraintMessageTemplate(),
validationContext.getPropertyPath(), null));
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidatorIdentity.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidatorIdentity.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidatorIdentity.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidatorIdentity.java Tue May 2 04:53:20 2017
@@ -19,6 +19,8 @@
package org.apache.bval.jsr;
+import java.util.Objects;
+
import javax.validation.ConstraintValidator;
import javax.validation.Path;
@@ -120,12 +122,7 @@ final class ConstraintValidatorIdentity
*/
@Override
public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((this.bean == null) ? 0 : this.bean.hashCode());
- result = prime * result + ((this.path == null) ? 0 : this.path.hashCode());
- result = prime * result + ((this.constraintValidator == null) ? 0 : this.constraintValidator.hashCode());
- return result;
+ return Objects.hash(bean, path, constraintValidator);
}
}
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintViolationImpl.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintViolationImpl.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintViolationImpl.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintViolationImpl.java Tue May 2 04:53:20 2017
@@ -23,6 +23,7 @@ import javax.validation.metadata.Constra
import java.io.Serializable;
import java.lang.annotation.ElementType;
import java.util.Arrays;
+import java.util.Objects;
/**
* Description: Describe a constraint validation defect.<br/>
@@ -171,45 +172,28 @@ class ConstraintViolationImpl<T> impleme
*/
@Override
public String toString() {
- return "ConstraintViolationImpl{" + "rootBean=" + rootBean + ", propertyPath='" + propertyPath + '\''
- + ", message='" + message + '\'' + ", leafBean=" + leafBean + ", value=" + value + '}';
+ return String.format("%s{rootBean=%s, propertyPath='%s', message='%s', leafBean=%s, value=%s}",
+ ConstraintViolationImpl.class.getSimpleName(), rootBean, propertyPath, message, leafBean, value);
}
@Override
public boolean equals(Object o) {
- if (this == o)
+ if (this == o) {
return true;
- if (o == null || getClass() != o.getClass())
+ }
+ if (o == null || !getClass().equals(o.getClass())) {
return false;
+ }
+ @SuppressWarnings("rawtypes")
ConstraintViolationImpl that = (ConstraintViolationImpl) o;
- if (constraintDescriptor != null ? !constraintDescriptor.equals(that.constraintDescriptor)
- : that.constraintDescriptor != null)
- return false;
- if (elementType != that.elementType)
- return false;
- if (leafBean != null ? !leafBean.equals(that.leafBean) : that.leafBean != null)
- return false;
- if (message != null ? !message.equals(that.message) : that.message != null)
- return false;
- if (messageTemplate != null ? !messageTemplate.equals(that.messageTemplate) : that.messageTemplate != null)
- return false;
- // Probably incorrect - comparing Object[] arrays with Arrays.equals
- if (!Arrays.equals(parameters, that.parameters))
- return false;
- if (propertyPath != null ? !propertyPath.equals(that.propertyPath) : that.propertyPath != null)
- return false;
- if (returnValue != null ? !returnValue.equals(that.returnValue) : that.returnValue != null)
- return false;
- if (rootBean != null ? !rootBean.equals(that.rootBean) : that.rootBean != null)
- return false;
- if (rootBeanClass != null ? !rootBeanClass.equals(that.rootBeanClass) : that.rootBeanClass != null)
- return false;
- if (value != null ? !value.equals(that.value) : that.value != null)
- return false;
-
- return true;
+ return Objects.equals(constraintDescriptor, that.constraintDescriptor) && elementType == that.elementType
+ && Objects.equals(leafBean, that.leafBean) && Objects.equals(message, that.message)
+ && Objects.equals(messageTemplate, that.messageTemplate) && Arrays.equals(parameters, that.parameters)
+ && Objects.equals(propertyPath, that.propertyPath) && Objects.equals(returnValue, that.returnValue)
+ && Objects.equals(rootBean, that.rootBean) && Objects.equals(rootBeanClass, that.rootBeanClass)
+ && Objects.equals(value, that.value);
}
@Override
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultConstraintValidatorFactory.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultConstraintValidatorFactory.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultConstraintValidatorFactory.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultConstraintValidatorFactory.java Tue May 2 04:53:20 2017
@@ -32,8 +32,7 @@ import java.util.concurrent.CopyOnWriteA
* Description: create constraint instances with the default / no-arg constructor <br/>
*/
public class DefaultConstraintValidatorFactory implements ConstraintValidatorFactory, Closeable {
- private final Collection<BValExtension.Releasable<?>> releasables =
- new CopyOnWriteArrayList<BValExtension.Releasable<?>>();
+ private final Collection<BValExtension.Releasable<?>> releasables = new CopyOnWriteArrayList<>();
private volatile Boolean useCdi = null; // store it to avoid NoClassDefFoundError when cdi is not present (it is slow) + lazily (to wait cdi is started)
/**
@@ -49,9 +48,7 @@ public class DefaultConstraintValidatorF
if (useCdi == null) {
try {
useCdi = BValExtension.getBeanManager() != null;
- } catch (final NoClassDefFoundError error) {
- useCdi = Boolean.FALSE;
- } catch (final Exception e) {
+ } catch (NoClassDefFoundError | Exception error) {
useCdi = Boolean.FALSE;
}
}
@@ -69,10 +66,7 @@ public class DefaultConstraintValidatorF
return instance.getInstance();
}
throw new IllegalStateException("Can't create " + constraintClass.getName());
- } catch (final Exception e) {
- return constraintClass.newInstance();
- } catch (final NoClassDefFoundError error) {
- return constraintClass.newInstance();
+ } catch (Exception | NoClassDefFoundError e) {
}
}
return constraintClass.newInstance();
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultMessageInterpolator.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultMessageInterpolator.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultMessageInterpolator.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultMessageInterpolator.java Tue May 2 04:53:20 2017
@@ -54,10 +54,10 @@ public class DefaultMessageInterpolator
private Locale defaultLocale;
/** User specified resource bundles hashed against their locale. */
- private final Map<Locale, ResourceBundle> userBundlesMap = new ConcurrentHashMap<Locale, ResourceBundle>();
+ private final Map<Locale, ResourceBundle> userBundlesMap = new ConcurrentHashMap<>();
/** Builtin resource bundles hashed against their locale. */
- private final Map<Locale, ResourceBundle> defaultBundlesMap = new ConcurrentHashMap<Locale, ResourceBundle>();
+ private final Map<Locale, ResourceBundle> defaultBundlesMap = new ConcurrentHashMap<>();
private final MessageEvaluator evaluator;
@@ -83,12 +83,12 @@ public class DefaultMessageInterpolator
userBundlesMap.put(defaultLocale, resourceBundle);
}
- MessageEvaluator ev = null;
+ MessageEvaluator ev;
try {
ev = MessageEvaluator.class
.cast(getClass().getClassLoader().loadClass("org.apache.bval.el.ELFacade").newInstance());
} catch (final Throwable e) { // can be exception or error
- // no-op
+ ev = null;
}
evaluator = ev;
}
@@ -170,47 +170,42 @@ public class DefaultMessageInterpolator
* @return the resource bundle or <code>null</code> if none is found.
*/
private ResourceBundle getFileBasedResourceBundle(Locale locale) {
- ResourceBundle rb = null;
+ ResourceBundle rb;
final ClassLoader classLoader = Reflection.getClassLoader(DefaultMessageInterpolator.class);
if (classLoader != null) {
rb = loadBundle(classLoader, locale, USER_VALIDATION_MESSAGES + " not found by thread local classloader");
- }
-
+ } else {
// 2011-03-27 jw: No privileged action required.
// A class can always access the classloader of itself and of subclasses.
- if (rb == null) {
rb = loadBundle(getClass().getClassLoader(), locale,
USER_VALIDATION_MESSAGES + " not found by validator classloader");
}
if (LOG_FINEST) {
- if (rb != null) {
- log.log(Level.FINEST, String.format("%s found", USER_VALIDATION_MESSAGES));
- } else {
+ if (rb == null) {
log.log(Level.FINEST, String.format("%s not found. Delegating to %s", USER_VALIDATION_MESSAGES,
DEFAULT_VALIDATION_MESSAGES));
+ } else {
+ log.log(Level.FINEST, String.format("%s found", USER_VALIDATION_MESSAGES));
}
}
return rb;
}
private ResourceBundle loadBundle(ClassLoader classLoader, Locale locale, String message) {
- ResourceBundle rb = null;
try {
- rb = ResourceBundle.getBundle(USER_VALIDATION_MESSAGES, locale, classLoader);
+ return ResourceBundle.getBundle(USER_VALIDATION_MESSAGES, locale, classLoader);
} catch (final MissingResourceException e) {
log.fine(message);
}
- return rb;
+ return null;
}
private String replaceVariables(String message, ResourceBundle bundle, Locale locale, boolean recurse) {
final Matcher matcher = messageParameterPattern.matcher(message);
final StringBuffer sb = new StringBuffer(64);
- String resolvedParameterValue;
while (matcher.find()) {
final String parameter = matcher.group(1);
- resolvedParameterValue = resolveParameter(parameter, bundle, locale, recurse);
-
+ String resolvedParameterValue = resolveParameter(parameter, bundle, locale, recurse);
matcher.appendReplacement(sb, sanitizeForAppendReplacement(resolvedParameterValue));
}
matcher.appendTail(sb);
@@ -242,13 +237,13 @@ public class DefaultMessageInterpolator
private String resolveParameter(String parameterName, ResourceBundle bundle, Locale locale, boolean recurse) {
String parameterValue;
try {
- if (bundle != null) {
+ if (bundle == null) {
+ parameterValue = parameterName;
+ } else {
parameterValue = bundle.getString(removeCurlyBrace(parameterName));
if (recurse) {
parameterValue = replaceVariables(parameterValue, bundle, locale, recurse);
}
- } else {
- parameterValue = parameterName;
}
} catch (final MissingResourceException e) {
// return parameter itself
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultValidationProviderResolver.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultValidationProviderResolver.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultValidationProviderResolver.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultValidationProviderResolver.java Tue May 2 04:53:20 2017
@@ -38,6 +38,11 @@ public class DefaultValidationProviderRe
//TODO - Spec recommends caching per classloader
private static final String SPI_CFG = "META-INF/services/javax.validation.spi.ValidationProvider";
+ private static ClassLoader getCurrentClassLoader() {
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ return cl == null ? DefaultValidationProviderResolver.class.getClassLoader() : cl;
+ }
+
/**
* {@inheritDoc}
*/
@@ -46,43 +51,28 @@ public class DefaultValidationProviderRe
List<ValidationProvider<?>> providers = new ArrayList<ValidationProvider<?>>();
try {
// get our classloader
- ClassLoader cl = Thread.currentThread().getContextClassLoader();
- if (cl == null)
- cl = DefaultValidationProviderResolver.class.getClassLoader();
+ ClassLoader cl = getCurrentClassLoader();
// find all service provider cfgs
Enumeration<URL> cfgs = cl.getResources(SPI_CFG);
while (cfgs.hasMoreElements()) {
final URL url = cfgs.nextElement();
- BufferedReader br = null;
- try {
- br = new BufferedReader(new InputStreamReader(url.openStream()), 256);
- String line = br.readLine();
- // cfgs may contain multiple providers and/or comments
- while (line != null) {
- line = line.trim();
- if (!line.startsWith("#")) {
- try {
- // try loading the specified class
- @SuppressWarnings("rawtypes")
- final Class<? extends ValidationProvider> providerType =
- cl.loadClass(line).asSubclass(ValidationProvider.class);
- // create an instance to return
- providers
- .add(Reflection.newInstance(providerType.asSubclass(ValidationProvider.class)));
-
- } catch (ClassNotFoundException e) {
- throw new ValidationException(
- "Failed to load provider " + line + " configured in file " + url, e);
- }
+ try (BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()), 256)) {
+ br.lines().filter(s -> s.charAt(0) != '#').map(String::trim).forEach(line -> {
+ // cfgs may contain multiple providers and/or comments
+ try {
+ // try loading the specified class
+ @SuppressWarnings("rawtypes")
+ final Class<? extends ValidationProvider> providerType =
+ cl.loadClass(line).asSubclass(ValidationProvider.class);
+ // create an instance to return
+ providers.add(Reflection.newInstance(providerType));
+ } catch (ClassNotFoundException e) {
+ throw new ValidationException(
+ "Failed to load provider " + line + " configured in file " + url, e);
}
- line = br.readLine();
- }
+ });
} catch (IOException e) {
throw new ValidationException("Error trying to read " + url, e);
- } finally {
- if (br != null) {
- br.close();
- }
}
}
} catch (IOException e) {
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ElementDescriptorImpl.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ElementDescriptorImpl.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ElementDescriptorImpl.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ElementDescriptorImpl.java Tue May 2 04:53:20 2017
@@ -27,19 +27,19 @@ import javax.validation.metadata.GroupCo
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
/**
* Description: MetaData class<br/>
*/
public abstract class ElementDescriptorImpl implements ElementDescriptor {
- private final Set<GroupConversionDescriptor> groupConversions =
- new CopyOnWriteArraySet<GroupConversionDescriptor>();
+ private final Set<GroupConversionDescriptor> groupConversions = new CopyOnWriteArraySet<>();
private boolean cascaded;
- private final Collection<Object> validated = new CopyOnWriteArraySet<Object>();
+ private final Collection<Object> validated = new CopyOnWriteArraySet<>();
/**
* Get a set of {@link ConstraintDescriptor}s from the specified array of
@@ -49,13 +49,8 @@ public abstract class ElementDescriptorI
* @return {@link ConstraintDescriptor} set
*/
protected static Set<ConstraintDescriptor<?>> getConstraintDescriptors(final Validation[] validations) {
- final Set<ConstraintDescriptor<?>> result = new HashSet<ConstraintDescriptor<?>>(validations.length);
- for (Validation validation : validations) {
- if (validation instanceof ConstraintValidation<?>) {
- result.add((ConstraintValidation<?>) validation);
- }
- }
- return result;
+ return Stream.of(validations).filter(ConstraintValidation.class::isInstance)
+ .<ConstraintDescriptor<?>> map(ConstraintDescriptor.class::cast).collect(Collectors.toSet());
}
/** the MetaBean of this element */
@@ -66,7 +61,7 @@ public abstract class ElementDescriptorI
private Set<ConstraintDescriptor<?>> constraintDescriptors;
- private final Map<Group, Group> groupMapping = new HashMap<Group, Group>();
+ private final Map<Group, Group> groupMapping = new HashMap<>();
/**
* Create a new ElementDescriptorImpl instance.
@@ -105,9 +100,9 @@ public abstract class ElementDescriptorI
* {@inheritDoc}
*/
@Override
- @SuppressWarnings({ "unchecked", "rawtypes" })
public ElementDescriptor.ConstraintFinder findConstraints() {
- return new ConstraintFinderImpl(metaBean, new HashSet(constraintDescriptors));
+ return new ConstraintFinderImpl(metaBean, constraintDescriptors.stream()
+ .<ConstraintValidation<?>> map(ConstraintValidation.class::cast).collect(Collectors.toSet()));
}
/**
@@ -115,7 +110,7 @@ public abstract class ElementDescriptorI
*/
@Override
public Set<ConstraintDescriptor<?>> getConstraintDescriptors() {
- return constraintDescriptors.isEmpty() ? Collections.<ConstraintDescriptor<?>> emptySet()
+ return constraintDescriptors.isEmpty() ? Collections.emptySet()
: Collections.unmodifiableSet(constraintDescriptors);
}
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/GraphBeanIdentity.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/GraphBeanIdentity.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/GraphBeanIdentity.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/GraphBeanIdentity.java Tue May 2 04:53:20 2017
@@ -18,6 +18,8 @@
*/
package org.apache.bval.jsr;
+import java.util.Objects;
+
/**
* Class that stores the needed properties to avoid circular paths when
* validating an object graph.
@@ -80,32 +82,16 @@ public class GraphBeanIdentity {
*/
@Override
public boolean equals(Object obj) {
-
if (this == obj) {
return true;
}
-
- if (obj == null) {
- return false;
- }
-
if (!(obj instanceof GraphBeanIdentity)) {
return false;
}
-
GraphBeanIdentity other = (GraphBeanIdentity) obj;
- // Bean ref must be the same
- if (this.bean != other.bean) {
- return false;
- }
-
- // Group ref must be the same
- if (this.group != other.group) {
- return false;
- }
-
- return true;
+ // Bean ref must be the same; Group ref must be the same
+ return bean == other.bean && group == other.group;
}
/**
@@ -113,11 +99,7 @@ public class GraphBeanIdentity {
*/
@Override
public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((this.bean == null) ? 0 : this.bean.hashCode());
- result = prime * result + ((this.group == null) ? 0 : this.group.hashCode());
- return result;
+ return Objects.hash(bean, group);
}
}
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java Tue May 2 04:53:20 2017
@@ -44,7 +44,8 @@ import java.util.Set;
/**
* Description: instance per validation process, not thread-safe<br/>
*/
-final class GroupValidationContextImpl<T> extends BeanValidationContext<ConstraintValidationListener<T>>
+final class GroupValidationContextImpl<T>
+ extends BeanValidationContext<ConstraintValidationListener<T>, GraphBeanIdentity, Set<PathImpl>>
implements GroupValidationContext<T>, MessageInterpolator.Context {
private final MessageInterpolator messageResolver;
@@ -67,7 +68,7 @@ final class GroupValidationContextImpl<T
* contains the validation constraints that have already been processed
* during this validation routine (as part of a previous group match)
*/
- private HashSet<ConstraintValidatorIdentity> validatedConstraints = new HashSet<ConstraintValidatorIdentity>();
+ private Set<ConstraintValidatorIdentity> validatedConstraints = new HashSet<>();
private ConstraintValidation<?> constraintValidation;
private final TraversableResolver traversableResolver;
@@ -90,7 +91,7 @@ final class GroupValidationContextImpl<T
public GroupValidationContextImpl(ConstraintValidationListener<T> listener, MessageInterpolator aMessageResolver,
TraversableResolver traversableResolver, ParameterNameProvider parameterNameProvider,
ConstraintValidatorFactory constraintValidatorFactory, MetaBean rootMetaBean) {
- super(listener, new HashMap<GraphBeanIdentity, Set<PathImpl>>());
+ super(listener, new HashMap<>());
this.messageResolver = aMessageResolver;
this.constraintValidatorFactory = constraintValidatorFactory;
this.traversableResolver = CachingTraversableResolver.cacheFor(traversableResolver);
@@ -166,30 +167,21 @@ final class GroupValidationContextImpl<T
/**
* {@inheritDoc} Here, state equates to bean identity + group.
*/
- @SuppressWarnings("unchecked")
@Override
public boolean collectValidated() {
-
// Combination of bean+group+owner (owner is currently ignored)
- GraphBeanIdentity gbi = new GraphBeanIdentity(getBean(), getCurrentGroup().getGroup(), getCurrentOwner());
+ final GraphBeanIdentity gbi = new GraphBeanIdentity(getBean(), getCurrentGroup().getGroup(), getCurrentOwner());
- Set<PathImpl> validatedPathsForGBI = (Set<PathImpl>) validatedObjects.get(gbi);
- if (validatedPathsForGBI == null) {
- validatedPathsForGBI = new HashSet<PathImpl>();
- validatedObjects.put(gbi, validatedPathsForGBI);
- }
+ final Set<PathImpl> validatedPathsForGBI = validatedObjects.computeIfAbsent(gbi, k -> new HashSet<>());
// If any of the paths is a subpath of the current path, there is a
// circular dependency, so return false
- for (PathImpl validatedPath : validatedPathsForGBI) {
- if (path.isSubPathOf(validatedPath)) {
- return false;
- }
+ if (validatedPathsForGBI.stream().anyMatch(path::isSubPathOf)) {
+ return false;
}
// Else, add the currentPath to the set of validatedPaths
- validatedPathsForGBI.add(PathImpl.copy(path));
- return true;
+ return validatedPathsForGBI.add(PathImpl.copy(path));
}
/**
@@ -300,15 +292,11 @@ final class GroupValidationContextImpl<T
*/
@Override
public Object getValidatedValue() {
- if (getMetaProperty() != null) {
- return getPropertyValue(constraintValidation.getAccess());
- } else {
- return getBean();
- }
+ return getMetaProperty() == null ? getBean() : getPropertyValue(constraintValidation.getAccess());
}
@Override
- public <T> T unwrap(Class<T> type) {
+ public <U> U unwrap(Class<U> type) {
if (type.isInstance(this)) {
return type.cast(this);
}
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/InvocableElementDescriptor.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/InvocableElementDescriptor.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/InvocableElementDescriptor.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/InvocableElementDescriptor.java Tue May 2 04:53:20 2017
@@ -31,12 +31,11 @@ import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
public class InvocableElementDescriptor extends ElementDescriptorImpl implements ProcedureDescriptor {
- private static final CopyOnWriteArraySet<ConstraintValidation<?>> NO_CONSTRAINTS =
- new CopyOnWriteArraySet<ConstraintValidation<?>>();
+ private static final CopyOnWriteArraySet<ConstraintValidation<?>> NO_CONSTRAINTS = new CopyOnWriteArraySet<>();
private ReturnValueDescriptor returnValueDescriptor;
private CrossParameterDescriptor crossParameterDescriptor;
- private final List<ParameterDescriptor> parameterDescriptors = new ArrayList<ParameterDescriptor>();
+ private final List<ParameterDescriptor> parameterDescriptors = new ArrayList<>();
protected InvocableElementDescriptor(final MetaBean metaBean, final Class<?> elementClass,
final Validation[] validations) {
@@ -99,6 +98,7 @@ public class InvocableElementDescriptor
return new ConstraintFinderImpl(metaBean, NO_CONSTRAINTS);
}
+ @SuppressWarnings("unchecked")
@Override
public Set<ConstraintDescriptor<?>> getConstraintDescriptors() {
return Set.class.cast(NO_CONSTRAINTS);
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java Tue May 2 04:53:20 2017
@@ -18,6 +18,24 @@
*/
package org.apache.bval.jsr;
+import java.lang.annotation.Annotation;
+import java.lang.annotation.ElementType;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.validation.ConstraintDeclarationException;
+import javax.validation.GroupDefinitionException;
+import javax.validation.GroupSequence;
+import javax.validation.groups.ConvertGroup;
+import javax.validation.groups.Default;
+
import org.apache.bval.MetaBeanFactory;
import org.apache.bval.jsr.groups.Group;
import org.apache.bval.jsr.util.ClassHelper;
@@ -36,24 +54,6 @@ import org.apache.bval.util.reflection.R
import org.apache.commons.weaver.privilizer.Privilizing;
import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
-import javax.validation.ConstraintDeclarationException;
-import javax.validation.GroupDefinitionException;
-import javax.validation.GroupSequence;
-import javax.validation.groups.ConvertGroup;
-import javax.validation.groups.Default;
-
-import java.lang.annotation.Annotation;
-import java.lang.annotation.ElementType;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
/**
* Description: process the class annotations for JSR303 constraint validations to build the MetaBean with information
* from annotations and JSR303 constraint mappings (defined in xml)<br/>
@@ -64,6 +64,11 @@ public class JsrMetaBeanFactory implemen
// of dubious utility as it's static :/
protected static final Logger log = Logger.getLogger(JsrMetaBeanFactory.class.getName());
+ private static boolean isAccessor(Method m) {
+ return m.getParameterCount() == 0 && !Void.TYPE.equals(m.getReturnType()) && (m.getName().startsWith("get")
+ || m.getName().startsWith("is") && Boolean.TYPE.equals(m.getReturnType()));
+ }
+
/** {@link javax.validation.ValidatorFactory} used */
protected final ApacheValidatorFactory factory;
@@ -93,7 +98,7 @@ public class JsrMetaBeanFactory implemen
// process class, superclasses and interfaces
final List<Class<?>> classSequence =
- ClassHelper.fillFullClassHierarchyAsList(new ArrayList<Class<?>>(), beanClass);
+ ClassHelper.fillFullClassHierarchyAsList(new ArrayList<>(), beanClass);
// start with superclasses and go down the hierarchy so that
// the child classes are processed last to have the chance to
@@ -130,7 +135,7 @@ public class JsrMetaBeanFactory implemen
new AppendValidationToMeta(metabean));
}
- final Collection<String> missingValid = new ArrayList<String>();
+ final Collection<String> missingValid = new ArrayList<>();
final Field[] fields = Reflection.getDeclaredFields(beanClass);
for (final Field field : fields) {
@@ -147,23 +152,18 @@ public class JsrMetaBeanFactory implemen
new AppendValidationToMeta(metaProperty)) && create) {
metabean.putProperty(metaProperty.getName(), null);
}
-
if (field.getAnnotation(ConvertGroup.class) != null) {
missingValid.add(field.getName());
}
}
}
- final Method[] methods = Reflection.getDeclaredMethods(beanClass);
- for (final Method method : methods) {
+ for (final Method method : Reflection.getDeclaredMethods(beanClass)) {
if (method.isSynthetic() || method.isBridge()) {
continue;
}
- String propName = null;
- if (method.getParameterTypes().length == 0) {
- propName = MethodAccess.getPropertyName(method);
- }
- if (propName != null) {
- if (!factory.getAnnotationIgnores().isIgnoreAnnotations(method)) {
+ if (method.getParameterCount() == 0) {
+ String propName = MethodAccess.getPropertyName(method);
+ if (propName != null && !factory.getAnnotationIgnores().isIgnoreAnnotations(method)) {
AccessStrategy access = new MethodAccess(propName, method);
MetaProperty metaProperty = metabean.getProperty(propName);
boolean create = metaProperty == null;
@@ -208,7 +208,7 @@ public class JsrMetaBeanFactory implemen
if (access == null) { // class level
meta = null;
} else if (access.getElementType() == ElementType.METHOD
- && !metaConstraint.getMember().getName().startsWith("get")) { // TODO: better getter test
+ && !isAccessor((Method) metaConstraint.getMember())) {
final Method method = Method.class.cast(metaConstraint.getMember());
meta = metabean.getMethod(method);
final MetaMethod metaMethod;
@@ -220,15 +220,15 @@ public class JsrMetaBeanFactory implemen
metaMethod = MetaMethod.class.cast(meta);
}
final Integer index = metaConstraint.getIndex();
- if (index != null && index >= 0) {
+ if (index == null || index.intValue() < 0) {
+ metaMethod.addAnnotation(metaConstraint.getAnnotation());
+ } else {
MetaParameter param = metaMethod.getParameter(index);
if (param == null) {
param = new MetaParameter(metaMethod, index);
metaMethod.addParameter(index, param);
}
param.addAnnotation(metaConstraint.getAnnotation());
- } else {
- metaMethod.addAnnotation(metaConstraint.getAnnotation());
}
continue;
} else if (access.getElementType() == ElementType.CONSTRUCTOR) {
@@ -243,15 +243,15 @@ public class JsrMetaBeanFactory implemen
metaConstructor = MetaConstructor.class.cast(meta);
}
final Integer index = metaConstraint.getIndex();
- if (index != null && index >= 0) {
+ if (index == null || index.intValue() < 0) {
+ metaConstructor.addAnnotation(metaConstraint.getAnnotation());
+ } else {
MetaParameter param = metaConstructor.getParameter(index);
if (param == null) {
param = new MetaParameter(metaConstructor, index);
metaConstructor.addParameter(index, param);
}
param.addAnnotation(metaConstraint.getAnnotation());
- } else {
- metaConstructor.addAnnotation(metaConstraint.getAnnotation());
}
continue;
} else { // property level
@@ -292,16 +292,15 @@ public class JsrMetaBeanFactory implemen
List<Group> groupSeq = metabean.getFeature(key);
if (groupSeq == null) {
groupSeq =
- metabean.initFeature(key, new ArrayList<Group>(annotation == null ? 1 : annotation.value().length));
+ metabean.initFeature(key, new ArrayList<>(annotation == null ? 1 : annotation.value().length));
}
Class<?>[] groupClasses = factory.getDefaultSequence(beanClass);
if (groupClasses == null || groupClasses.length == 0) {
if (annotation == null) {
groupSeq.add(Group.DEFAULT);
return;
- } else {
- groupClasses = annotation.value();
}
+ groupClasses = annotation.value();
}
boolean containsDefault = false;
for (final Class<?> groupClass : groupClasses) {
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/NodeBuilderCustomizableContextImpl.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/NodeBuilderCustomizableContextImpl.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/NodeBuilderCustomizableContextImpl.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/NodeBuilderCustomizableContextImpl.java Tue May 2 04:53:20 2017
@@ -54,7 +54,6 @@ public class NodeBuilderCustomizableCont
public ConstraintValidatorContext.ConstraintViolationBuilder.NodeBuilderCustomizableContext addPropertyNode(
String name) {
final NodeImpl node = new NodeImpl.PropertyNodeImpl(name);
- node.setKind(ElementKind.PROPERTY);
path.addNode(node);
return this;
}
@@ -62,7 +61,6 @@ public class NodeBuilderCustomizableCont
@Override
public ConstraintValidatorContext.ConstraintViolationBuilder.LeafNodeBuilderCustomizableContext addBeanNode() {
final NodeImpl node = new NodeImpl.BeanNodeImpl();
- node.setKind(ElementKind.BEAN);
path.addNode(node);
return new LeafNodeBuilderCustomizableContextImpl(context, template, path);
}
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/NodeContextBuilderImpl.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/NodeContextBuilderImpl.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/NodeContextBuilderImpl.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/NodeContextBuilderImpl.java Tue May 2 04:53:20 2017
@@ -65,7 +65,6 @@ public class NodeContextBuilderImpl
@Override
public ConstraintValidatorContext.ConstraintViolationBuilder.LeafNodeBuilderCustomizableContext addBeanNode() {
final NodeImpl node = new NodeImpl.BeanNodeImpl();
- node.setKind(ElementKind.BEAN);
path.addNode(node);
return new LeafNodeBuilderCustomizableContextImpl(context, template, path);
}
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ParameterAccess.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ParameterAccess.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ParameterAccess.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ParameterAccess.java Tue May 2 04:53:20 2017
@@ -23,6 +23,7 @@ import org.apache.bval.util.AccessStrate
import java.lang.annotation.ElementType;
import java.lang.reflect.Type;
+import java.util.Objects;
/**
* Implementation of {@link org.apache.bval.util.AccessStrategy} for method parameters.
@@ -73,15 +74,17 @@ public class ParameterAccess extends Acc
*/
@Override
public String getPropertyName() {
- return "" + paramIdx;
+ return Integer.toString(paramIdx);
}
@Override
public boolean equals(Object o) {
- if (this == o)
+ if (this == o) {
return true;
- if (o == null || getClass() != o.getClass())
+ }
+ if (o == null || !getClass().equals(o.getClass())) {
return false;
+ }
final ParameterAccess that = (ParameterAccess) o;
return paramIdx == that.paramIdx && paramType.equals(that.paramType);
@@ -89,8 +92,6 @@ public class ParameterAccess extends Acc
@Override
public int hashCode() {
- int result = paramType.hashCode();
- result = 31 * result + paramIdx;
- return result;
+ return Objects.hash(paramType, paramIdx);
}
}
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ParameterDescriptorImpl.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ParameterDescriptorImpl.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ParameterDescriptorImpl.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/ParameterDescriptorImpl.java Tue May 2 04:53:20 2017
@@ -30,8 +30,7 @@ import java.util.concurrent.CopyOnWriteA
* Description: {@link javax.validation.metadata.ParameterDescriptor} implementation.<br/>
*/
public class ParameterDescriptorImpl extends ElementDescriptorImpl implements ParameterDescriptor {
- private final Set<GroupConversionDescriptor> groupConversions =
- new CopyOnWriteArraySet<GroupConversionDescriptor>();
+ private final Set<GroupConversionDescriptor> groupConversions = new CopyOnWriteArraySet<>();
private final String name;
private int index;
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/PropertyDescriptorImpl.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/PropertyDescriptorImpl.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/PropertyDescriptorImpl.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/PropertyDescriptorImpl.java Tue May 2 04:53:20 2017
@@ -64,7 +64,7 @@ class PropertyDescriptorImpl extends Ele
*/
@Override
public String toString() {
- return "PropertyDescriptorImpl{" + "returnType=" + elementClass + ", propertyPath='" + propertyPath + '\''
- + '}';
+ return String.format("%s{returnType=%s, propertyPath='%s'}", PropertyDescriptorImpl.class.getSimpleName(),
+ elementClass, propertyPath);
}
}
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/groups/Group.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/groups/Group.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/groups/Group.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/groups/Group.java Tue May 2 04:53:20 2017
@@ -18,6 +18,8 @@
*/
package org.apache.bval.jsr.groups;
+import java.util.Objects;
+
import javax.validation.groups.Default;
/**
@@ -52,7 +54,7 @@ public final class Group {
*/
@Override
public String toString() {
- return "Group{" + "group=" + group + '}';
+ return String.format("Group{group=%s}", Group.class.getSimpleName(), group);
}
/**
@@ -71,13 +73,10 @@ public final class Group {
if (this == o) {
return true;
}
- if (o == null || getClass() != o.getClass()) {
+ if (o == null || !getClass().equals(o.getClass())) {
return false;
}
-
- Group group1 = (Group) o;
-
- return group != null ? group.equals(group1.group) : group1.group == null;
+ return Objects.equals(group, ((Group) o).group);
}
/**
@@ -85,6 +84,6 @@ public final class Group {
*/
@Override
public int hashCode() {
- return (group != null ? group.hashCode() : 0);
+ return Objects.hashCode(group);
}
}
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/groups/GroupConversionDescriptorImpl.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/groups/GroupConversionDescriptorImpl.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/groups/GroupConversionDescriptorImpl.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/groups/GroupConversionDescriptorImpl.java Tue May 2 04:53:20 2017
@@ -26,10 +26,9 @@ public class GroupConversionDescriptorIm
public GroupConversionDescriptorImpl(final Group from, final Group to) {
this.from = from.getGroup();
- if (this.from.getAnnotation(GroupSequence.class) != null) {
+ if (this.from.isAnnotationPresent(GroupSequence.class)) {
throw new ConstraintDeclarationException("from() can't get a group sequence");
}
-
this.to = to.getGroup();
}
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/groups/Groups.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/groups/Groups.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/groups/Groups.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/groups/Groups.java Tue May 2 04:53:20 2017
@@ -29,12 +29,12 @@ import java.util.List;
* @author Roman Stumm
*/
public class Groups {
- /** The list of single groups. */
- final List<Group> groups = new LinkedList<Group>();
-
/** The list of sequences. */
- final List<List<Group>> sequences = new LinkedList<List<Group>>();
+ private final List<List<Group>> sequences = new LinkedList<>();
+ /** The list of single groups. */
+ final List<Group> groups = new LinkedList<>();
+
/**
* Get the Groups.
* @return {@link List} of {@link Group}.
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/groups/GroupsComputer.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/groups/GroupsComputer.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/groups/GroupsComputer.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/groups/GroupsComputer.java Tue May 2 04:53:20 2017
@@ -37,7 +37,7 @@ import java.util.concurrent.ConcurrentHa
* Implementation is thread-safe.
*/
public class GroupsComputer {
- public static final Class<?>[] DEFAULT_GROUP = new Class<?>[] { Default.class };
+ public static final Class<?>[] DEFAULT_GROUP = { Default.class };
/** The default group array used in case any of the validate methods is called without a group. */
private static final Groups DEFAULT_GROUPS;
@@ -46,7 +46,7 @@ public class GroupsComputer {
}
/** caching resolved groups in a thread-safe map. */
- private final Map<Class<?>, List<Group>> resolvedSequences = new ConcurrentHashMap<Class<?>, List<Group>>();
+ private final Map<Class<?>, List<Group>> resolvedSequences = new ConcurrentHashMap<>();
/**
* Compute groups from an array of group classes.
@@ -72,7 +72,7 @@ public class GroupsComputer {
* @return {@link Groups}
*/
protected Groups computeGroups(Collection<Class<?>> groups) {
- if (groups == null || groups.size() == 0) {
+ if (groups == null || groups.isEmpty()) {
throw new IllegalArgumentException("At least one group has to be specified.");
}
@@ -80,9 +80,8 @@ public class GroupsComputer {
if (clazz == null) {
throw new IllegalArgumentException("At least one group has to be specified.");
}
-
if (!clazz.isInterface()) {
- throw new ValidationException("A group has to be an interface. " + clazz.getName() + " is not.");
+ throw new ValidationException("A group must be an interface. " + clazz.getName() + " is not.");
}
}
@@ -114,7 +113,7 @@ public class GroupsComputer {
if (resolvedSequences.containsKey(clazz)) {
sequence = resolvedSequences.get(clazz);
} else {
- sequence = resolveSequence(clazz, anno, new HashSet<Class<?>>());
+ sequence = resolveSequence(clazz, anno, new HashSet<>());
}
chain.insertSequence(sequence);
}
@@ -123,10 +122,9 @@ public class GroupsComputer {
Set<Class<?>> processedSequences) {
if (processedSequences.contains(group)) {
throw new GroupDefinitionException("Cyclic dependency in groups definition");
- } else {
- processedSequences.add(group);
}
- List<Group> resolvedGroupSequence = new LinkedList<Group>();
+ processedSequences.add(group);
+ List<Group> resolvedGroupSequence = new LinkedList<>();
Class<?>[] sequenceArray = sequenceAnnotation.value();
for (Class<?> clazz : sequenceArray) {
GroupSequence anno = clazz.getAnnotation(GroupSequence.class);
Modified: bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/parameter/DefaultParameterNameProvider.java
URL: http://svn.apache.org/viewvc/bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/parameter/DefaultParameterNameProvider.java?rev=1793432&r1=1793431&r2=1793432&view=diff
==============================================================================
--- bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/parameter/DefaultParameterNameProvider.java (original)
+++ bval/branches/bv2.x/bval-jsr/src/main/java/org/apache/bval/jsr/parameter/DefaultParameterNameProvider.java Tue May 2 04:53:20 2017
@@ -18,15 +18,21 @@
*/
package org.apache.bval.jsr.parameter;
-import javax.validation.ParameterNameProvider;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
-import java.util.ArrayList;
import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+import javax.validation.ParameterNameProvider;
public class DefaultParameterNameProvider implements ParameterNameProvider {
private static final String ARG = "arg";
+ private static List<String> names(final int length) {
+ return IntStream.range(0, length).mapToObj(i -> ARG + i).collect(Collectors.toList());
+ }
+
@Override
public List<String> getParameterNames(Constructor<?> constructor) {
return names(constructor.getParameterTypes().length);
@@ -36,12 +42,4 @@ public class DefaultParameterNameProvide
public List<String> getParameterNames(Method method) {
return names(method.getParameterTypes().length);
}
-
- private static List<String> names(final int length) {
- final List<String> list = new ArrayList<String>();
- for (int i = 0; i < length; i++) {
- list.add(ARG + i);
- }
- return list;
- }
}