From 0e8a053e7ae95c4f26436d92e7c71c53996fb2fa Mon Sep 17 00:00:00 2001 From: Gunnar Morling Date: Tue, 1 Nov 2016 17:57:22 +0100 Subject: [PATCH] HV-1148 Removing reference to ConstraintLocation from ConstrainedElement --- ...xecutableConstraintMappingContextImpl.java | 5 +-- ...ParameterConstraintMappingContextImpl.java | 3 +- .../PropertyConstraintMappingContextImpl.java | 6 +-- .../TypeConstraintMappingContextImpl.java | 3 +- .../aggregated/ExecutableMetaData.java | 2 +- .../aggregated/ParameterMetaData.java | 4 +- .../metadata/aggregated/PropertyMetaData.java | 37 ++++++++++++------- .../rule/MethodConfigurationRule.java | 8 ++-- ...ethodMustNotAlterParameterConstraints.java | 4 +- ...GroupConversionForCascadedReturnValue.java | 4 +- ...hodsMustNotDefineParameterConstraints.java | 4 +- ...eMarkedOnceAsCascadedPerHierarchyLine.java | 4 +- ...ethodsMustNotBeReturnValueConstrained.java | 2 +- .../provider/AnnotationMetaDataProvider.java | 10 ++--- .../raw/AbstractConstrainedElement.java | 11 +----- .../metadata/raw/ConstrainedElement.java | 8 ---- .../metadata/raw/ConstrainedExecutable.java | 20 +++++----- .../metadata/raw/ConstrainedField.java | 22 +++++++---- .../metadata/raw/ConstrainedParameter.java | 35 ++++++++++-------- .../metadata/raw/ConstrainedType.java | 22 +++++++---- .../xml/ConstrainedExecutableBuilder.java | 2 +- .../internal/xml/ConstrainedFieldBuilder.java | 2 +- .../xml/ConstrainedGetterBuilder.java | 2 +- .../xml/ConstrainedParameterBuilder.java | 2 +- .../internal/xml/ConstrainedTypeBuilder.java | 2 +- .../internal/xml/MappingXmlParser.java | 16 +++----- .../test/cfg/ConstraintMappingTest.java | 4 +- .../AnnotationMetaDataProviderTest.java | 5 +-- .../AnnotationMetaDataProviderTestBase.java | 18 +++++++-- .../TypeAnnotationMetaDataRetrievalTest.java | 16 ++++++-- 30 files changed, 149 insertions(+), 134 deletions(-) diff --git a/engine/src/main/java/org/hibernate/validator/internal/cfg/context/ExecutableConstraintMappingContextImpl.java b/engine/src/main/java/org/hibernate/validator/internal/cfg/context/ExecutableConstraintMappingContextImpl.java index 216abb993f..c03427834e 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/cfg/context/ExecutableConstraintMappingContextImpl.java +++ b/engine/src/main/java/org/hibernate/validator/internal/cfg/context/ExecutableConstraintMappingContextImpl.java @@ -18,7 +18,6 @@ import org.hibernate.validator.internal.engine.valuehandling.UnwrapMode; import org.hibernate.validator.internal.metadata.core.ConstraintHelper; import org.hibernate.validator.internal.metadata.core.MetaConstraint; -import org.hibernate.validator.internal.metadata.location.ConstraintLocation; import org.hibernate.validator.internal.metadata.raw.ConfigurationSource; import org.hibernate.validator.internal.metadata.raw.ConstrainedElement; import org.hibernate.validator.internal.metadata.raw.ConstrainedExecutable; @@ -107,7 +106,7 @@ public ConstrainedElement build(ConstraintHelper constraintHelper, ExecutablePar // TODO HV-919 Support specification of type parameter constraints via XML and API return new ConstrainedExecutable( ConfigurationSource.API, - ConstraintLocation.forReturnValue( executable ), + executable, getParameters( constraintHelper, parameterNameProvider ), crossParameterContext != null ? crossParameterContext.getConstraints( constraintHelper ) : Collections.>emptySet(), returnValueContext != null ? returnValueContext.getConstraints( constraintHelper ) : Collections.>emptySet(), @@ -130,7 +129,7 @@ private List getParameters(ConstraintHelper constraintHelp constrainedParameters.add( new ConstrainedParameter( ConfigurationSource.API, - ConstraintLocation.forParameter( executable, i ), + executable, ReflectionHelper.typeOf( executable, i ), i, parameterNameProvider.getParameterNames( executable ).get( i ) diff --git a/engine/src/main/java/org/hibernate/validator/internal/cfg/context/ParameterConstraintMappingContextImpl.java b/engine/src/main/java/org/hibernate/validator/internal/cfg/context/ParameterConstraintMappingContextImpl.java index b1a8fb65ff..ccfe7ecbae 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/cfg/context/ParameterConstraintMappingContextImpl.java +++ b/engine/src/main/java/org/hibernate/validator/internal/cfg/context/ParameterConstraintMappingContextImpl.java @@ -17,7 +17,6 @@ import org.hibernate.validator.internal.metadata.core.ConstraintHelper; import org.hibernate.validator.internal.metadata.core.MetaConstraint; import org.hibernate.validator.internal.metadata.descriptor.ConstraintDescriptorImpl.ConstraintType; -import org.hibernate.validator.internal.metadata.location.ConstraintLocation; import org.hibernate.validator.internal.metadata.raw.ConfigurationSource; import org.hibernate.validator.internal.metadata.raw.ConstrainedParameter; import org.hibernate.validator.internal.util.ExecutableParameterNameProvider; @@ -100,7 +99,7 @@ public ConstrainedParameter build(ConstraintHelper constraintHelper, ExecutableP // TODO HV-919 Support specification of type parameter constraints via XML and API return new ConstrainedParameter( ConfigurationSource.API, - ConstraintLocation.forParameter( executableContext.getExecutable(), parameterIndex ), + executableContext.getExecutable(), ReflectionHelper.typeOf( executableContext.getExecutable(), parameterIndex ), parameterIndex, parameterNameProvider.getParameterNames( executableContext.getExecutable() ).get( parameterIndex ), diff --git a/engine/src/main/java/org/hibernate/validator/internal/cfg/context/PropertyConstraintMappingContextImpl.java b/engine/src/main/java/org/hibernate/validator/internal/cfg/context/PropertyConstraintMappingContextImpl.java index 3f3151e4fa..1dc15de7c9 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/cfg/context/PropertyConstraintMappingContextImpl.java +++ b/engine/src/main/java/org/hibernate/validator/internal/cfg/context/PropertyConstraintMappingContextImpl.java @@ -7,6 +7,7 @@ package org.hibernate.validator.internal.cfg.context; import java.lang.annotation.ElementType; +import java.lang.reflect.Executable; import java.lang.reflect.Field; import java.lang.reflect.Member; import java.lang.reflect.Method; @@ -19,7 +20,6 @@ import org.hibernate.validator.internal.metadata.core.ConstraintHelper; import org.hibernate.validator.internal.metadata.core.MetaConstraint; import org.hibernate.validator.internal.metadata.descriptor.ConstraintDescriptorImpl.ConstraintType; -import org.hibernate.validator.internal.metadata.location.ConstraintLocation; import org.hibernate.validator.internal.metadata.raw.ConfigurationSource; import org.hibernate.validator.internal.metadata.raw.ConstrainedElement; import org.hibernate.validator.internal.metadata.raw.ConstrainedExecutable; @@ -95,7 +95,7 @@ ConstrainedElement build(ConstraintHelper constraintHelper) { if ( member instanceof Field ) { return new ConstrainedField( ConfigurationSource.API, - ConstraintLocation.forProperty( member ), + (Field) member, getConstraints( constraintHelper ), Collections.>emptySet(), groupConversions, @@ -106,7 +106,7 @@ ConstrainedElement build(ConstraintHelper constraintHelper) { else { return new ConstrainedExecutable( ConfigurationSource.API, - ConstraintLocation.forProperty( member ), + (Executable) member, getConstraints( constraintHelper ), groupConversions, isCascading, diff --git a/engine/src/main/java/org/hibernate/validator/internal/cfg/context/TypeConstraintMappingContextImpl.java b/engine/src/main/java/org/hibernate/validator/internal/cfg/context/TypeConstraintMappingContextImpl.java index 977c52c50d..f84c75575d 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/cfg/context/TypeConstraintMappingContextImpl.java +++ b/engine/src/main/java/org/hibernate/validator/internal/cfg/context/TypeConstraintMappingContextImpl.java @@ -26,7 +26,6 @@ import org.hibernate.validator.cfg.context.TypeConstraintMappingContext; import org.hibernate.validator.internal.metadata.core.ConstraintHelper; import org.hibernate.validator.internal.metadata.descriptor.ConstraintDescriptorImpl.ConstraintType; -import org.hibernate.validator.internal.metadata.location.ConstraintLocation; import org.hibernate.validator.internal.metadata.raw.BeanConfiguration; import org.hibernate.validator.internal.metadata.raw.ConfigurationSource; import org.hibernate.validator.internal.metadata.raw.ConstrainedElement; @@ -200,7 +199,7 @@ private Set buildConstraintElements(ConstraintHelper constra elements.add( new ConstrainedType( ConfigurationSource.API, - ConstraintLocation.forClass( beanClass ), + beanClass, getConstraints( constraintHelper ) ) ); diff --git a/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/ExecutableMetaData.java b/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/ExecutableMetaData.java index b624e41d5f..39fcfd8668 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/ExecutableMetaData.java +++ b/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/ExecutableMetaData.java @@ -359,7 +359,7 @@ public final void add(ConstrainedElement constrainedElement) { * @param executable The executable to merge. */ private void addToExecutablesByDeclaringType(ConstrainedExecutable executable) { - Class beanClass = executable.getLocation().getDeclaringClass(); + Class beanClass = executable.getExecutable().getDeclaringClass(); ConstrainedExecutable mergedExecutable = executablesByDeclaringType.get( beanClass ); if ( mergedExecutable != null ) { diff --git a/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/ParameterMetaData.java b/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/ParameterMetaData.java index 731e57737a..dddd4fc378 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/ParameterMetaData.java +++ b/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/ParameterMetaData.java @@ -159,8 +159,8 @@ public void add(ConstrainedElement constrainedElement) { if ( constrainedParameter == null ) { constrainedParameter = newConstrainedParameter; } - else if ( newConstrainedParameter.getLocation().getDeclaringClass().isAssignableFrom( - constrainedParameter.getLocation().getDeclaringClass() + else if ( newConstrainedParameter.getExecutable().getDeclaringClass().isAssignableFrom( + constrainedParameter.getExecutable().getDeclaringClass() ) ) { // If the current parameter is from a method hosted on a parent class, // use this parent class parameter name instead of the more specific one. diff --git a/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/PropertyMetaData.java b/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/PropertyMetaData.java index 22538b5370..8a7030b4cc 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/PropertyMetaData.java +++ b/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/PropertyMetaData.java @@ -20,6 +20,7 @@ import java.util.EnumSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import javax.validation.ElementKind; @@ -241,8 +242,8 @@ public static class Builder extends MetaDataBuilder { public Builder(Class beanClass, ConstrainedField constrainedField, ConstraintHelper constraintHelper) { super( beanClass, constraintHelper ); - this.propertyName = constrainedField.getLocation().getPropertyName(); - this.propertyType = ReflectionHelper.typeOf( constrainedField.getLocation().getMember() ); + this.propertyName = constrainedField.getField().getName(); + this.propertyType = ReflectionHelper.typeOf( constrainedField.getField() ); add( constrainedField ); } @@ -257,8 +258,8 @@ public Builder(Class beanClass, ConstrainedType constrainedType, ConstraintHe public Builder(Class beanClass, ConstrainedExecutable constrainedMethod, ConstraintHelper constraintHelper) { super( beanClass, constraintHelper ); - this.propertyName = constrainedMethod.getLocation().getPropertyName(); - this.propertyType = ReflectionHelper.typeOf( constrainedMethod.getLocation().getMember() ); + this.propertyName = ReflectionHelper.getPropertyName( constrainedMethod.getExecutable() ); + this.propertyType = ReflectionHelper.typeOf( constrainedMethod.getExecutable() ); add( constrainedMethod ); } @@ -273,10 +274,7 @@ public boolean accepts(ConstrainedElement constrainedElement) { return false; } - return equals( - constrainedElement.getLocation().getPropertyName(), - propertyName - ); + return Objects.equals( getPropertyName( constrainedElement ), propertyName ); } @Override @@ -305,14 +303,29 @@ public final void add(ConstrainedElement constrainedElement) { if ( constrainedElement.getKind() == ConstrainedElementKind.FIELD ) { typeArgumentsConstraints.addAll( ( (ConstrainedField) constrainedElement ).getTypeArgumentsConstraints() ); + + if ( constrainedElement.isCascading() && cascadingMember == null ) { + cascadingMember = ( (ConstrainedField) constrainedElement ).getField(); + } } else if ( constrainedElement.getKind() == ConstrainedElementKind.METHOD ) { typeArgumentsConstraints.addAll( ( (ConstrainedExecutable) constrainedElement ).getTypeArgumentsConstraints() ); + + if ( constrainedElement.isCascading() && cascadingMember == null ) { + cascadingMember = ( (ConstrainedExecutable) constrainedElement ).getExecutable(); + } } + } - if ( constrainedElement.isCascading() && cascadingMember == null ) { - cascadingMember = constrainedElement.getLocation().getMember(); + private String getPropertyName(ConstrainedElement constrainedElement) { + if ( constrainedElement.getKind() == ConstrainedElementKind.FIELD ) { + return ReflectionHelper.getPropertyName( ( (ConstrainedField) constrainedElement ).getField() ); + } + else if ( constrainedElement.getKind() == ConstrainedElementKind.METHOD ) { + return ReflectionHelper.getPropertyName( ( (ConstrainedExecutable) constrainedElement ).getExecutable() ); } + + return null; } @Override @@ -332,9 +345,5 @@ public PropertyMetaData build() { unwrapMode() ); } - - private boolean equals(String s1, String s2) { - return ( s1 != null && s1.equals( s2 ) ) || ( s1 == null && s2 == null ); - } } } diff --git a/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/rule/MethodConfigurationRule.java b/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/rule/MethodConfigurationRule.java index 10c9948826..5d72f107ce 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/rule/MethodConfigurationRule.java +++ b/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/rule/MethodConfigurationRule.java @@ -52,8 +52,8 @@ protected boolean isStrictSubType(Class clazz, Class otherClazz) { * {@code otherExecutable}, {@code false} otherwise */ protected boolean isDefinedOnSubType(ConstrainedExecutable executable, ConstrainedExecutable otherExecutable) { - Class clazz = executable.getLocation().getDeclaringClass(); - Class otherClazz = otherExecutable.getLocation().getDeclaringClass(); + Class clazz = executable.getExecutable().getDeclaringClass(); + Class otherClazz = otherExecutable.getExecutable().getDeclaringClass(); return isStrictSubType( clazz, otherClazz ); } @@ -69,8 +69,8 @@ protected boolean isDefinedOnSubType(ConstrainedExecutable executable, Constrain * {@code otherExecutable}, {@code false} otherwise */ protected boolean isDefinedOnParallelType(ConstrainedExecutable executable, ConstrainedExecutable otherExecutable) { - Class clazz = executable.getLocation().getDeclaringClass(); - Class otherClazz = otherExecutable.getLocation().getDeclaringClass(); + Class clazz = executable.getExecutable().getDeclaringClass(); + Class otherClazz = otherExecutable.getExecutable().getDeclaringClass(); return !( clazz.isAssignableFrom( otherClazz ) || otherClazz.isAssignableFrom( clazz ) ); } diff --git a/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/rule/OverridingMethodMustNotAlterParameterConstraints.java b/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/rule/OverridingMethodMustNotAlterParameterConstraints.java index be02a7a2b1..a1a78f8139 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/rule/OverridingMethodMustNotAlterParameterConstraints.java +++ b/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/rule/OverridingMethodMustNotAlterParameterConstraints.java @@ -22,8 +22,8 @@ public void apply(ConstrainedExecutable method, ConstrainedExecutable otherMetho otherMethod.hasParameterConstraints() && !method.isEquallyParameterConstrained( otherMethod ) ) { throw log.getParameterConfigurationAlteredInSubTypeException( - method.getLocation().getMember(), - otherMethod.getLocation().getMember() + method.getExecutable(), + otherMethod.getExecutable() ); } } diff --git a/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/rule/ParallelMethodsMustNotDefineGroupConversionForCascadedReturnValue.java b/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/rule/ParallelMethodsMustNotDefineGroupConversionForCascadedReturnValue.java index c19a8cb574..6d77ea299d 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/rule/ParallelMethodsMustNotDefineGroupConversionForCascadedReturnValue.java +++ b/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/rule/ParallelMethodsMustNotDefineGroupConversionForCascadedReturnValue.java @@ -24,8 +24,8 @@ public void apply(ConstrainedExecutable method, ConstrainedExecutable otherMetho if ( isDefinedOnParallelType( method, otherMethod ) && isCascaded && hasGroupConversions ) { throw log.getMethodsFromParallelTypesMustNotDefineGroupConversionsForCascadedReturnValueException( - method.getLocation().getMember(), - otherMethod.getLocation().getMember() + method.getExecutable(), + otherMethod.getExecutable() ); } } diff --git a/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/rule/ParallelMethodsMustNotDefineParameterConstraints.java b/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/rule/ParallelMethodsMustNotDefineParameterConstraints.java index daf8cc3286..40431a3bee 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/rule/ParallelMethodsMustNotDefineParameterConstraints.java +++ b/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/rule/ParallelMethodsMustNotDefineParameterConstraints.java @@ -21,8 +21,8 @@ public void apply(ConstrainedExecutable method, ConstrainedExecutable otherMetho if ( isDefinedOnParallelType( method, otherMethod ) && ( method.hasParameterConstraints() || otherMethod.hasParameterConstraints() ) ) { throw log.getParameterConstraintsDefinedInMethodsFromParallelTypesException( - method.getLocation().getMember(), - otherMethod.getLocation().getMember() + method.getExecutable(), + otherMethod.getExecutable() ); } } diff --git a/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/rule/ReturnValueMayOnlyBeMarkedOnceAsCascadedPerHierarchyLine.java b/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/rule/ReturnValueMayOnlyBeMarkedOnceAsCascadedPerHierarchyLine.java index 996777b547..fdfec47157 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/rule/ReturnValueMayOnlyBeMarkedOnceAsCascadedPerHierarchyLine.java +++ b/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/rule/ReturnValueMayOnlyBeMarkedOnceAsCascadedPerHierarchyLine.java @@ -21,8 +21,8 @@ public void apply(ConstrainedExecutable method, ConstrainedExecutable otherMetho if ( method.isCascading() && otherMethod.isCascading() && ( isDefinedOnSubType( method, otherMethod ) || isDefinedOnSubType( otherMethod, method ) ) ) { throw log.getMethodReturnValueMustNotBeMarkedMoreThanOnceForCascadedValidationException( - method.getLocation().getMember(), - otherMethod.getLocation().getMember() + method.getExecutable(), + otherMethod.getExecutable() ); } } diff --git a/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/rule/VoidMethodsMustNotBeReturnValueConstrained.java b/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/rule/VoidMethodsMustNotBeReturnValueConstrained.java index 6c44154313..853755d650 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/rule/VoidMethodsMustNotBeReturnValueConstrained.java +++ b/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/rule/VoidMethodsMustNotBeReturnValueConstrained.java @@ -23,7 +23,7 @@ public void apply(ConstrainedExecutable executable, ConstrainedExecutable otherE if ( ( executable.getExecutable() instanceof Method ) && ( (Method) executable.getExecutable() ).getReturnType() == void.class && ( !executable.getConstraints().isEmpty() || executable.isCascading() ) ) { - throw log.getVoidMethodsMustNotBeConstrainedException( executable.getLocation().getMember() ); + throw log.getVoidMethodsMustNotBeConstrainedException( executable.getExecutable() ); } } } diff --git a/engine/src/main/java/org/hibernate/validator/internal/metadata/provider/AnnotationMetaDataProvider.java b/engine/src/main/java/org/hibernate/validator/internal/metadata/provider/AnnotationMetaDataProvider.java index c96e486701..6321922df9 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/metadata/provider/AnnotationMetaDataProvider.java +++ b/engine/src/main/java/org/hibernate/validator/internal/metadata/provider/AnnotationMetaDataProvider.java @@ -153,7 +153,7 @@ private BeanConfiguration retrieveBeanConfiguration(Class beanClass) { ConstrainedType classLevelMetaData = new ConstrainedType( ConfigurationSource.ANNOTATION, - ConstraintLocation.forClass( beanClass ), + beanClass, classLevelConstraints ); constrainedElements.add( classLevelMetaData ); @@ -256,7 +256,7 @@ private ConstrainedField findPropertyMetaData(Field field) { return new ConstrainedField( ConfigurationSource.ANNOTATION, - ConstraintLocation.forProperty( field ), + field, constraints, typeArgumentsConstraints, groupConversions, @@ -393,7 +393,7 @@ private ConstrainedExecutable findExecutableMetaData(Executable executable) { return new ConstrainedExecutable( ConfigurationSource.ANNOTATION, - ConstraintLocation.forReturnValue( executable ), + executable, parameterConstraints, crossParameterConstraints, returnValueConstraints, @@ -457,7 +457,7 @@ private List getParameterMetaData(Executable executable) { metaData.add( new ConstrainedParameter( ConfigurationSource.ANNOTATION, - ConstraintLocation.forParameter( executable, i ), + executable, ReflectionHelper.typeOf( executable, i ), i, parameterName, @@ -511,7 +511,7 @@ else if ( parameterAnnotation.annotationType().equals( UnwrapValidatedValue.clas metaData.add( new ConstrainedParameter( ConfigurationSource.ANNOTATION, - ConstraintLocation.forParameter( executable, i ), + executable, ReflectionHelper.typeOf( executable, i ), i, parameterName, diff --git a/engine/src/main/java/org/hibernate/validator/internal/metadata/raw/AbstractConstrainedElement.java b/engine/src/main/java/org/hibernate/validator/internal/metadata/raw/AbstractConstrainedElement.java index b8d74ffed2..d0379b689c 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/metadata/raw/AbstractConstrainedElement.java +++ b/engine/src/main/java/org/hibernate/validator/internal/metadata/raw/AbstractConstrainedElement.java @@ -13,7 +13,6 @@ import org.hibernate.validator.internal.engine.valuehandling.UnwrapMode; import org.hibernate.validator.internal.metadata.core.MetaConstraint; -import org.hibernate.validator.internal.metadata.location.ConstraintLocation; /** * Base implementation of with functionality common to all {@link ConstrainedElement} implementations. @@ -24,7 +23,6 @@ public abstract class AbstractConstrainedElement implements ConstrainedElement { private final ConstrainedElementKind kind; protected final ConfigurationSource source; - protected final ConstraintLocation location; protected final Set> constraints; protected final Map, Class> groupConversions; protected final boolean isCascading; @@ -32,14 +30,12 @@ public abstract class AbstractConstrainedElement implements ConstrainedElement { public AbstractConstrainedElement(ConfigurationSource source, ConstrainedElementKind kind, - ConstraintLocation location, Set> constraints, Map, Class> groupConversions, boolean isCascading, UnwrapMode unwrapMode) { this.kind = kind; this.source = source; - this.location = location; this.constraints = constraints != null ? Collections.unmodifiableSet( constraints ) : Collections.>emptySet(); this.groupConversions = Collections.unmodifiableMap( groupConversions ); this.isCascading = isCascading; @@ -51,11 +47,6 @@ public ConstrainedElementKind getKind() { return kind; } - @Override - public ConstraintLocation getLocation() { - return location; - } - @Override public Iterator> iterator() { return constraints.iterator(); @@ -89,7 +80,7 @@ public UnwrapMode unwrapMode() { @Override public String toString() { return "AbstractConstrainedElement [kind=" + kind + ", source=" - + source + ", location=" + location + ", constraints=" + + source + ", constraints=" + constraints + ", groupConversions=" + groupConversions + ", isCascading=" + isCascading + ", unwrapMode=" + unwrapMode + "]"; diff --git a/engine/src/main/java/org/hibernate/validator/internal/metadata/raw/ConstrainedElement.java b/engine/src/main/java/org/hibernate/validator/internal/metadata/raw/ConstrainedElement.java index ae23a21f92..6f04cf0013 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/metadata/raw/ConstrainedElement.java +++ b/engine/src/main/java/org/hibernate/validator/internal/metadata/raw/ConstrainedElement.java @@ -11,7 +11,6 @@ import org.hibernate.validator.internal.engine.valuehandling.UnwrapMode; import org.hibernate.validator.internal.metadata.core.MetaConstraint; -import org.hibernate.validator.internal.metadata.location.ConstraintLocation; /** * Represents a (potentially) constrained Java element such as a type, field or @@ -56,13 +55,6 @@ enum ConstrainedElementKind { */ ConstrainedElementKind getKind(); - /** - * Returns the location of this constrained element. - * - * @return The location of this constrained element. - */ - ConstraintLocation getLocation(); - /** * Returns a set containing the constraints specified for this constrained * element. diff --git a/engine/src/main/java/org/hibernate/validator/internal/metadata/raw/ConstrainedExecutable.java b/engine/src/main/java/org/hibernate/validator/internal/metadata/raw/ConstrainedExecutable.java index 67174c52ea..fed39b5695 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/metadata/raw/ConstrainedExecutable.java +++ b/engine/src/main/java/org/hibernate/validator/internal/metadata/raw/ConstrainedExecutable.java @@ -21,7 +21,6 @@ import org.hibernate.validator.internal.engine.valuehandling.UnwrapMode; import org.hibernate.validator.internal.metadata.core.MetaConstraint; -import org.hibernate.validator.internal.metadata.location.ConstraintLocation; import org.hibernate.validator.internal.util.ReflectionHelper; import org.hibernate.validator.internal.util.logging.Log; import org.hibernate.validator.internal.util.logging.LoggerFactory; @@ -56,7 +55,7 @@ public class ConstrainedExecutable extends AbstractConstrainedElement { * Creates a new executable meta data object for a parameter-less executable. * * @param source The source of meta data. - * @param location The location of the represented executable. + * @param executable The represented executable. * @param returnValueConstraints Type arguments constraints, if any. * @param groupConversions The group conversions of the represented executable, if any. * @param isCascading Whether a cascaded validation of the represented executable's @@ -66,14 +65,14 @@ public class ConstrainedExecutable extends AbstractConstrainedElement { */ public ConstrainedExecutable( ConfigurationSource source, - ConstraintLocation location, + Executable executable, Set> returnValueConstraints, Map, Class> groupConversions, boolean isCascading, UnwrapMode unwrapMode) { this( source, - location, + executable, Collections.emptyList(), Collections.>emptySet(), returnValueConstraints, @@ -88,7 +87,7 @@ public ConstrainedExecutable( * Creates a new executable meta data object. * * @param source The source of meta data. - * @param location The location of the represented executable. + * @param executable The represented executable. * @param parameterMetaData A list with parameter meta data. The length must correspond * with the number of parameters of the represented executable. So * this list may be empty (in case of a parameterless executable), @@ -106,7 +105,7 @@ public ConstrainedExecutable( */ public ConstrainedExecutable( ConfigurationSource source, - ConstraintLocation location, + Executable executable, List parameterMetaData, Set> crossParameterConstraints, Set> returnValueConstraints, @@ -116,15 +115,14 @@ public ConstrainedExecutable( UnwrapMode unwrapMode) { super( source, - ( location.getMember() instanceof Constructor ) ? ConstrainedElementKind.CONSTRUCTOR : ConstrainedElementKind.METHOD, - location, + ( executable instanceof Constructor ) ? ConstrainedElementKind.CONSTRUCTOR : ConstrainedElementKind.METHOD, returnValueConstraints, groupConversions, isCascading, unwrapMode ); - this.executable = (Executable) location.getMember(); + this.executable = executable; if ( parameterMetaData.size() != executable.getParameterTypes().length ) { throw log.getInvalidLengthOfParameterMetaDataListException( @@ -227,7 +225,7 @@ public Set> getTypeArgumentsConstraints() { @Override public String toString() { - return "ConstrainedExecutable [location=" + getLocation() + return "ConstrainedExecutable [executable=" + executable + ", parameterMetaData=" + parameterMetaData + ", hasParameterConstraints=" + hasParameterConstraints + "]"; } @@ -312,7 +310,7 @@ public ConstrainedExecutable merge(ConstrainedExecutable other) { return new ConstrainedExecutable( mergedSource, - getLocation(), + executable, mergedParameterMetaData, mergedCrossParameterConstraints, mergedReturnValueConstraints, diff --git a/engine/src/main/java/org/hibernate/validator/internal/metadata/raw/ConstrainedField.java b/engine/src/main/java/org/hibernate/validator/internal/metadata/raw/ConstrainedField.java index b2abe05895..313c58466b 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/metadata/raw/ConstrainedField.java +++ b/engine/src/main/java/org/hibernate/validator/internal/metadata/raw/ConstrainedField.java @@ -6,13 +6,13 @@ */ package org.hibernate.validator.internal.metadata.raw; +import java.lang.reflect.Field; import java.util.Collections; import java.util.Map; import java.util.Set; import org.hibernate.validator.internal.engine.valuehandling.UnwrapMode; import org.hibernate.validator.internal.metadata.core.MetaConstraint; -import org.hibernate.validator.internal.metadata.location.ConstraintLocation; /** * Represents a field of a Java type and all its associated meta-data relevant @@ -22,13 +22,14 @@ */ public class ConstrainedField extends AbstractConstrainedElement { + private final Field field; private final Set> typeArgumentsConstraints; /** * Creates a new field meta data object. * * @param source The source of meta data. - * @param location The location of the represented field. + * @param field The represented field. * @param constraints The constraints of the represented field, if any. * @param typeArgumentsConstraints Type arguments constraints, if any. * @param groupConversions The group conversions of the represented field, if any. @@ -38,20 +39,25 @@ public class ConstrainedField extends AbstractConstrainedElement { * unwrapping prior to validation. */ public ConstrainedField(ConfigurationSource source, - ConstraintLocation location, + Field field, Set> constraints, Set> typeArgumentsConstraints, Map, Class> groupConversions, boolean isCascading, UnwrapMode unwrapMode) { - super( source, ConstrainedElementKind.FIELD, location, constraints, groupConversions, isCascading, unwrapMode ); + super( source, ConstrainedElementKind.FIELD, constraints, groupConversions, isCascading, unwrapMode ); + this.field = field; this.typeArgumentsConstraints = typeArgumentsConstraints != null ? Collections.unmodifiableSet( typeArgumentsConstraints ) : Collections.>emptySet(); } + public Field getField() { + return field; + } + public Set> getTypeArgumentsConstraints() { return this.typeArgumentsConstraints; } @@ -60,7 +66,7 @@ public Set> getTypeArgumentsConstraints() { public int hashCode() { final int prime = 31; int result = super.hashCode(); - result = prime * result + ( ( getLocation().getMember() == null ) ? 0 : getLocation().getMember().hashCode() ); + result = prime * result + ( ( field == null ) ? 0 : field.hashCode() ); return result; } @@ -76,12 +82,12 @@ public boolean equals(Object obj) { return false; } ConstrainedField other = (ConstrainedField) obj; - if ( getLocation().getMember() == null ) { - if ( other.getLocation().getMember() != null ) { + if ( field == null ) { + if ( other.field != null ) { return false; } } - else if ( !getLocation().getMember().equals( other.getLocation().getMember() ) ) { + else if ( !field.equals( other.field ) ) { return false; } return true; diff --git a/engine/src/main/java/org/hibernate/validator/internal/metadata/raw/ConstrainedParameter.java b/engine/src/main/java/org/hibernate/validator/internal/metadata/raw/ConstrainedParameter.java index 253a553cea..1b176c35b5 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/metadata/raw/ConstrainedParameter.java +++ b/engine/src/main/java/org/hibernate/validator/internal/metadata/raw/ConstrainedParameter.java @@ -6,6 +6,10 @@ */ package org.hibernate.validator.internal.metadata.raw; +import static org.hibernate.validator.internal.util.CollectionHelper.newHashMap; +import static org.hibernate.validator.internal.util.CollectionHelper.newHashSet; + +import java.lang.reflect.Executable; import java.lang.reflect.Type; import java.util.Collections; import java.util.Map; @@ -13,10 +17,6 @@ import org.hibernate.validator.internal.engine.valuehandling.UnwrapMode; import org.hibernate.validator.internal.metadata.core.MetaConstraint; -import org.hibernate.validator.internal.metadata.location.ConstraintLocation; - -import static org.hibernate.validator.internal.util.CollectionHelper.newHashMap; -import static org.hibernate.validator.internal.util.CollectionHelper.newHashSet; /** * Contains constraint-related meta-data for one method parameter. @@ -25,19 +25,20 @@ */ public class ConstrainedParameter extends AbstractConstrainedElement { + private final Executable executable; private final Type type; private final String name; private final int index; private final Set> typeArgumentsConstraints; public ConstrainedParameter(ConfigurationSource source, - ConstraintLocation location, + Executable executable, Type type, int index, String name) { this( source, - location, + executable, type, index, name, @@ -53,7 +54,7 @@ public ConstrainedParameter(ConfigurationSource source, * Creates a new parameter meta data object. * * @param source The source of meta data. - * @param location The location of the represented method parameter. + * @param executable The executable of the represented method parameter. * @param type the parameter type * @param index the index of the parameter * @param name The name of the represented parameter. @@ -67,7 +68,7 @@ public ConstrainedParameter(ConfigurationSource source, * unwrapping prior to validation. */ public ConstrainedParameter(ConfigurationSource source, - ConstraintLocation location, + Executable executable, Type type, int index, String name, @@ -79,13 +80,13 @@ public ConstrainedParameter(ConfigurationSource source, super( source, ConstrainedElementKind.PARAMETER, - location, constraints, groupConversions, isCascading, unwrapMode ); + this.executable = executable; this.type = type; this.name = name; this.index = index; @@ -98,6 +99,10 @@ public Type getType() { return type; } + public Executable getExecutable() { + return executable; + } + public String getName() { return name; } @@ -149,7 +154,7 @@ public ConstrainedParameter merge(ConstrainedParameter other) { return new ConstrainedParameter( mergedSource, - getLocation(), + executable, type, index, mergedName, @@ -173,7 +178,7 @@ public String toString() { String constraintsAsString = sb.length() > 0 ? sb.substring( 0, sb.length() - 2 ) : sb.toString(); - return "ParameterMetaData [location=" + getLocation() + "], name=" + name + "], constraints=[" + return "ParameterMetaData [executable=" + executable + "], name=" + name + "], constraints=[" + constraintsAsString + "], isCascading=" + isCascading() + "]"; } @@ -182,7 +187,7 @@ public int hashCode() { final int prime = 31; int result = super.hashCode(); result = prime * result + index; - result = prime * result + ( ( getLocation().getMember() == null ) ? 0 : getLocation().getMember().hashCode() ); + result = prime * result + ( ( executable == null ) ? 0 : executable.hashCode() ); return result; } @@ -201,12 +206,12 @@ public boolean equals(Object obj) { if ( index != other.index ) { return false; } - if ( getLocation().getMember() == null ) { - if ( other.getLocation().getMember() != null ) { + if ( executable == null ) { + if ( other.executable != null ) { return false; } } - else if ( !getLocation().getMember().equals( other.getLocation().getMember() ) ) { + else if ( !executable.equals( other.executable ) ) { return false; } return true; diff --git a/engine/src/main/java/org/hibernate/validator/internal/metadata/raw/ConstrainedType.java b/engine/src/main/java/org/hibernate/validator/internal/metadata/raw/ConstrainedType.java index 057db4992a..972ffb7bf6 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/metadata/raw/ConstrainedType.java +++ b/engine/src/main/java/org/hibernate/validator/internal/metadata/raw/ConstrainedType.java @@ -11,7 +11,6 @@ import org.hibernate.validator.internal.engine.valuehandling.UnwrapMode; import org.hibernate.validator.internal.metadata.core.MetaConstraint; -import org.hibernate.validator.internal.metadata.location.ConstraintLocation; /** * Represents a Java type and all its associated meta-data relevant in the @@ -22,24 +21,31 @@ */ public class ConstrainedType extends AbstractConstrainedElement { + private final Class beanClass; + /** * Creates a new type meta data object. * * @param source The source of meta data. - * @param location The location of the represented type. + * @param beanClass The represented type. * @param constraints The constraints of the represented type, if any. */ - public ConstrainedType(ConfigurationSource source, ConstraintLocation location, Set> constraints) { + public ConstrainedType(ConfigurationSource source, Class beanClass, Set> constraints) { super( source, ConstrainedElementKind.TYPE, - location, constraints, Collections., Class>emptyMap(), false, UnwrapMode.AUTOMATIC ); + + this.beanClass = beanClass; + } + + public Class getBeanClass() { + return beanClass; } @Override @@ -47,7 +53,7 @@ public int hashCode() { final int prime = 31; int result = super.hashCode(); result = prime * result - + ( ( getLocation().getDeclaringClass() == null ) ? 0 : getLocation().getDeclaringClass().hashCode() ); + + ( ( beanClass == null ) ? 0 : beanClass.hashCode() ); return result; } @@ -63,12 +69,12 @@ public boolean equals(Object obj) { return false; } ConstrainedType other = (ConstrainedType) obj; - if ( getLocation().getDeclaringClass() == null ) { - if ( other.getLocation().getDeclaringClass() != null ) { + if ( beanClass == null ) { + if ( other.beanClass != null ) { return false; } } - else if ( !getLocation().getDeclaringClass().equals( other.getLocation().getDeclaringClass() ) ) { + else if ( !beanClass.equals( other.beanClass ) ) { return false; } return true; diff --git a/engine/src/main/java/org/hibernate/validator/internal/xml/ConstrainedExecutableBuilder.java b/engine/src/main/java/org/hibernate/validator/internal/xml/ConstrainedExecutableBuilder.java index 8c2541b2a0..3139c63f83 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/xml/ConstrainedExecutableBuilder.java +++ b/engine/src/main/java/org/hibernate/validator/internal/xml/ConstrainedExecutableBuilder.java @@ -220,7 +220,7 @@ private ConstrainedExecutable parseExecutableType(String defaultPackage, // TODO HV-919 Support specification of type parameter constraints via XML and API return new ConstrainedExecutable( ConfigurationSource.XML, - ConstraintLocation.forReturnValue( executable ), + executable, parameterMetaData, crossParameterConstraints, returnValueConstraints, diff --git a/engine/src/main/java/org/hibernate/validator/internal/xml/ConstrainedFieldBuilder.java b/engine/src/main/java/org/hibernate/validator/internal/xml/ConstrainedFieldBuilder.java index dc0dbac0c8..a763ada30c 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/xml/ConstrainedFieldBuilder.java +++ b/engine/src/main/java/org/hibernate/validator/internal/xml/ConstrainedFieldBuilder.java @@ -75,7 +75,7 @@ Set buildConstrainedFields(List fields, // TODO HV-919 Support specification of type parameter constraints via XML and API ConstrainedField constrainedField = new ConstrainedField( ConfigurationSource.XML, - constraintLocation, + field, metaConstraints, Collections.>emptySet(), groupConversions, diff --git a/engine/src/main/java/org/hibernate/validator/internal/xml/ConstrainedGetterBuilder.java b/engine/src/main/java/org/hibernate/validator/internal/xml/ConstrainedGetterBuilder.java index 9edee3d076..e1d41f9475 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/xml/ConstrainedGetterBuilder.java +++ b/engine/src/main/java/org/hibernate/validator/internal/xml/ConstrainedGetterBuilder.java @@ -78,7 +78,7 @@ Set buildConstrainedGetters(List getterList, // TODO HV-919 Support specification of type parameter constraints via XML and API ConstrainedExecutable constrainedGetter = new ConstrainedExecutable( ConfigurationSource.XML, - constraintLocation, + getter, Collections.emptyList(), Collections.>emptySet(), metaConstraints, diff --git a/engine/src/main/java/org/hibernate/validator/internal/xml/ConstrainedParameterBuilder.java b/engine/src/main/java/org/hibernate/validator/internal/xml/ConstrainedParameterBuilder.java index 7b4b76ba35..bed252f25d 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/xml/ConstrainedParameterBuilder.java +++ b/engine/src/main/java/org/hibernate/validator/internal/xml/ConstrainedParameterBuilder.java @@ -84,7 +84,7 @@ List buildConstrainedParameters(List parame // TODO HV-919 Support specification of type parameter constraints via XML and API ConstrainedParameter constrainedParameter = new ConstrainedParameter( ConfigurationSource.XML, - constraintLocation, + executable, ReflectionHelper.typeOf( executable, i ), i, parameterNames.get( i ), diff --git a/engine/src/main/java/org/hibernate/validator/internal/xml/ConstrainedTypeBuilder.java b/engine/src/main/java/org/hibernate/validator/internal/xml/ConstrainedTypeBuilder.java index 2338a7996f..4c54ae39ad 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/xml/ConstrainedTypeBuilder.java +++ b/engine/src/main/java/org/hibernate/validator/internal/xml/ConstrainedTypeBuilder.java @@ -79,7 +79,7 @@ ConstrainedType buildConstrainedType(ClassType classType, Class beanClass, St return new ConstrainedType( ConfigurationSource.XML, - constraintLocation, + beanClass, metaConstraints ); } diff --git a/engine/src/main/java/org/hibernate/validator/internal/xml/MappingXmlParser.java b/engine/src/main/java/org/hibernate/validator/internal/xml/MappingXmlParser.java index 2d0f314e59..4cc45297d7 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/xml/MappingXmlParser.java +++ b/engine/src/main/java/org/hibernate/validator/internal/xml/MappingXmlParser.java @@ -36,7 +36,6 @@ import org.hibernate.validator.internal.metadata.core.AnnotationProcessingOptions; import org.hibernate.validator.internal.metadata.core.AnnotationProcessingOptionsImpl; import org.hibernate.validator.internal.metadata.core.ConstraintHelper; -import org.hibernate.validator.internal.metadata.location.ConstraintLocation; import org.hibernate.validator.internal.metadata.raw.ConstrainedElement; import org.hibernate.validator.internal.metadata.raw.ConstrainedExecutable; import org.hibernate.validator.internal.metadata.raw.ConstrainedField; @@ -326,21 +325,18 @@ private void addConstrainedElement(Class beanClass, ConstrainedElement constr private void addConstrainedElements(Class beanClass, Set newConstrainedElements) { if ( constrainedElements.containsKey( beanClass ) ) { + Set existingConstrainedElements = constrainedElements.get( beanClass ); + for ( ConstrainedElement constrainedElement : newConstrainedElements ) { - for ( ConstrainedElement existingConstrainedElement : existingConstrainedElements ) { - if ( existingConstrainedElement.getLocation().getMember() != null && - existingConstrainedElement.getLocation().getMember().equals( - constrainedElement.getLocation().getMember() - ) ) { - ConstraintLocation location = constrainedElement.getLocation(); + if ( existingConstrainedElements.contains( constrainedElement ) ) { throw log.getConstrainedElementConfiguredMultipleTimesException( - location.getMember().toString() + constrainedElement.toString() ); - } } - existingConstrainedElements.add( constrainedElement ); } + + existingConstrainedElements.addAll( newConstrainedElements ); } else { Set tmpSet = newHashSet(); diff --git a/engine/src/test/java/org/hibernate/validator/test/cfg/ConstraintMappingTest.java b/engine/src/test/java/org/hibernate/validator/test/cfg/ConstraintMappingTest.java index bb4a9b9903..ffe2ff2488 100644 --- a/engine/src/test/java/org/hibernate/validator/test/cfg/ConstraintMappingTest.java +++ b/engine/src/test/java/org/hibernate/validator/test/cfg/ConstraintMappingTest.java @@ -529,7 +529,7 @@ private BeanConfiguration getBeanConfiguration(Class type) { private ConstrainedField getConstrainedField(BeanConfiguration beanConfiguration, String fieldName) { for ( ConstrainedElement constrainedElement : beanConfiguration.getConstrainedElements() ) { if ( constrainedElement.getKind() == ConstrainedElementKind.FIELD && - constrainedElement.getLocation().getMember().getName().equals( fieldName ) ) { + ( (ConstrainedField) constrainedElement ).getField().getName().equals( fieldName ) ) { return (ConstrainedField) constrainedElement; } } @@ -540,7 +540,7 @@ private ConstrainedField getConstrainedField(BeanConfiguration beanConfigurat private ConstrainedExecutable getConstrainedExecutable(BeanConfiguration beanConfiguration, String executableName) { for ( ConstrainedElement constrainedElement : beanConfiguration.getConstrainedElements() ) { if ( constrainedElement.getKind() == ConstrainedElementKind.METHOD && - constrainedElement.getLocation().getMember().getName().equals( executableName ) ) { + ( (ConstrainedExecutable) constrainedElement ).getExecutable().getName().equals( executableName ) ) { return (ConstrainedExecutable) constrainedElement; } } diff --git a/engine/src/test/java/org/hibernate/validator/test/internal/metadata/provider/AnnotationMetaDataProviderTest.java b/engine/src/test/java/org/hibernate/validator/test/internal/metadata/provider/AnnotationMetaDataProviderTest.java index 9d4b027a87..a88ed9d578 100644 --- a/engine/src/test/java/org/hibernate/validator/test/internal/metadata/provider/AnnotationMetaDataProviderTest.java +++ b/engine/src/test/java/org/hibernate/validator/test/internal/metadata/provider/AnnotationMetaDataProviderTest.java @@ -35,7 +35,6 @@ import org.hibernate.validator.internal.metadata.core.AnnotationProcessingOptionsImpl; import org.hibernate.validator.internal.metadata.core.ConstraintHelper; import org.hibernate.validator.internal.metadata.core.MetaConstraint; -import org.hibernate.validator.internal.metadata.location.ConstraintLocation; import org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider; import org.hibernate.validator.internal.metadata.raw.BeanConfiguration; import org.hibernate.validator.internal.metadata.raw.ConfigurationSource; @@ -107,9 +106,7 @@ public void testGetCrossParameterMetaData() throws Exception { assertThat( createEvent.getConstraints() ).as( "No return value constraints expected" ).isEmpty(); assertThat( createEvent.getCrossParameterConstraints() ).hasSize( 1 ); - ConstraintLocation location = createEvent.getLocation(); - - assertThat( location.getMember() ).isEqualTo( + assertThat( createEvent.getExecutable() ).isEqualTo( Calendar.class.getMethod( "createEvent", DateMidnight.class, diff --git a/engine/src/test/java/org/hibernate/validator/test/internal/metadata/provider/AnnotationMetaDataProviderTestBase.java b/engine/src/test/java/org/hibernate/validator/test/internal/metadata/provider/AnnotationMetaDataProviderTestBase.java index 6f4d22f7ac..a7451963fa 100644 --- a/engine/src/test/java/org/hibernate/validator/test/internal/metadata/provider/AnnotationMetaDataProviderTestBase.java +++ b/engine/src/test/java/org/hibernate/validator/test/internal/metadata/provider/AnnotationMetaDataProviderTestBase.java @@ -6,10 +6,13 @@ */ package org.hibernate.validator.test.internal.metadata.provider; +import java.lang.reflect.Executable; +import java.lang.reflect.Field; import java.lang.reflect.Member; import org.hibernate.validator.internal.metadata.raw.BeanConfiguration; import org.hibernate.validator.internal.metadata.raw.ConstrainedElement; +import org.hibernate.validator.internal.metadata.raw.ConstrainedElement.ConstrainedElementKind; import org.hibernate.validator.internal.metadata.raw.ConstrainedExecutable; import org.hibernate.validator.internal.metadata.raw.ConstrainedField; import org.hibernate.validator.internal.metadata.raw.ConstrainedType; @@ -46,9 +49,9 @@ protected ConstrainedType findConstrainedType(Iterable type) { for ( BeanConfiguration oneConfiguration : beanConfigurations ) { for ( ConstrainedElement constrainedElement : oneConfiguration.getConstrainedElements() ) { - if ( constrainedElement.getLocation().getMember() == null ) { + if ( constrainedElement.getKind() == ConstrainedElementKind.TYPE ) { ConstrainedType constrainedType = (ConstrainedType) constrainedElement; - if ( constrainedType.getLocation().getDeclaringClass().equals( type ) ) { + if ( constrainedType.getBeanClass().equals( type ) ) { return constrainedType; } } @@ -62,8 +65,15 @@ protected ConstrainedElement findConstrainedElement(Iterable oneConfiguration : beanConfigurations ) { for ( ConstrainedElement constrainedElement : oneConfiguration.getConstrainedElements() ) { - if ( constrainedElement.getLocation().getMember().equals( member ) ) { - return constrainedElement; + if ( member instanceof Executable && constrainedElement instanceof ConstrainedExecutable ) { + if ( member.equals( ( (ConstrainedExecutable) constrainedElement ).getExecutable() ) ) { + return constrainedElement; + } + } + else if ( member instanceof Field && constrainedElement instanceof ConstrainedField ) { + if ( member.equals( ( (ConstrainedField) constrainedElement ).getField() ) ) { + return constrainedElement; + } } } } diff --git a/engine/src/test/java/org/hibernate/validator/test/internal/metadata/provider/TypeAnnotationMetaDataRetrievalTest.java b/engine/src/test/java/org/hibernate/validator/test/internal/metadata/provider/TypeAnnotationMetaDataRetrievalTest.java index 629c4aba40..17a93b46a0 100644 --- a/engine/src/test/java/org/hibernate/validator/test/internal/metadata/provider/TypeAnnotationMetaDataRetrievalTest.java +++ b/engine/src/test/java/org/hibernate/validator/test/internal/metadata/provider/TypeAnnotationMetaDataRetrievalTest.java @@ -10,6 +10,8 @@ import static org.hibernate.validator.internal.util.CollectionHelper.newArrayList; import java.lang.annotation.Annotation; +import java.lang.reflect.Executable; +import java.lang.reflect.Field; import java.lang.reflect.Member; import java.util.Collections; import java.util.Iterator; @@ -164,12 +166,18 @@ private ConstrainedExecutable findConstrainedConstructor( ); } - private ConstrainedElement findConstrainedElement(Iterable> beanConfigurations, - Member member) { + protected ConstrainedElement findConstrainedElement(Iterable> beanConfigurations, Member member) { for ( BeanConfiguration oneConfiguration : beanConfigurations ) { for ( ConstrainedElement constrainedElement : oneConfiguration.getConstrainedElements() ) { - if ( constrainedElement.getLocation().getMember().equals( member ) ) { - return constrainedElement; + if ( member instanceof Executable && constrainedElement instanceof ConstrainedExecutable ) { + if ( member.equals( ( (ConstrainedExecutable) constrainedElement ).getExecutable() ) ) { + return constrainedElement; + } + } + else if ( member instanceof Field && constrainedElement instanceof ConstrainedField ) { + if ( member.equals( ( (ConstrainedField) constrainedElement ).getField() ) ) { + return constrainedElement; + } } } }