Skip to content

Commit 686a788

Browse files
committed
[value-context-changes] Delegate retrieving bean metadata to CascadingMetaData
As in case of property holders we would need to produce metadata not based on a class of a current object at runtime but based on a string representing the constraint mapping, we need to delegate this to cascading metadata as that's the place where this information will be stored.
1 parent 5eb1fb4 commit 686a788

File tree

2 files changed

+10
-6
lines changed

2 files changed

+10
-6
lines changed

engine/src/main/java/org/hibernate/validator/internal/engine/ValidatorImpl.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -621,7 +621,7 @@ private void validateCascadedAnnotatedObjectForCurrentGroup(Object value, BaseBe
621621
// already and need only to pass the current element
622622
ValidationOrder validationOrder = validationOrderGenerator.getValidationOrder( currentGroup, currentGroup != originalGroup );
623623

624-
BeanValueContext<?, Object> cascadedValueContext = buildNewLocalExecutionContext( valueContext, value );
624+
BeanValueContext<?, Object> cascadedValueContext = buildNewLocalExecutionContext( cascadingMetaData, valueContext, value );
625625

626626
validateInContext( validationContext, cascadedValueContext, validationOrder );
627627
}
@@ -699,7 +699,7 @@ private void doValidate(Object value, String nodeName) {
699699
// already and need only to pass the current element
700700
ValidationOrder validationOrder = validationOrderGenerator.getValidationOrder( currentGroup, currentGroup != originalGroup );
701701

702-
BeanValueContext<?, Object> cascadedValueContext = buildNewLocalExecutionContext( valueContext, value );
702+
BeanValueContext<?, Object> cascadedValueContext = buildNewLocalExecutionContext( cascadingMetaData, valueContext, value );
703703

704704
if ( cascadingMetaData.getDeclaredContainerClass() != null ) {
705705
cascadedValueContext.setTypeParameter( cascadingMetaData.getDeclaredContainerClass(), cascadingMetaData.getDeclaredTypeParameterIndex() );
@@ -712,7 +712,7 @@ private void doValidate(Object value, String nodeName) {
712712

713713
// Cascade validation to container elements if we are dealing with a container element
714714
if ( cascadingMetaData.hasContainerElementsMarkedForCascading() ) {
715-
ValueContext<?, Object> cascadedTypeArgumentValueContext = buildNewLocalExecutionContext( valueContext, value );
715+
ValueContext<?, Object> cascadedTypeArgumentValueContext = buildNewLocalExecutionContext( cascadingMetaData, valueContext, value );
716716
if ( cascadingMetaData.getTypeParameter() != null ) {
717717
cascadedValueContext.setTypeParameter( cascadingMetaData.getDeclaredContainerClass(), cascadingMetaData.getDeclaredTypeParameterIndex() );
718718
}
@@ -761,14 +761,13 @@ private void validateCascadedContainerElementsInContext(Object value, BaseBeanVa
761761
}
762762
}
763763

764-
private BeanValueContext<?, Object> buildNewLocalExecutionContext(ValueContext<?, ?> valueContext, Object value) {
764+
private BeanValueContext<?, Object> buildNewLocalExecutionContext(CascadingMetaData cascadingMetaData, ValueContext<?, ?> valueContext, Object value) {
765765
BeanValueContext<?, Object> newValueContext;
766766
Contracts.assertNotNull( value, "value cannot be null" );
767-
BeanMetaData<?> beanMetaData = beanMetaDataManager.getBeanMetaData( value.getClass() );
768767
newValueContext = ValueContexts.getLocalExecutionContextForBean(
769768
validatorScopedContext.getParameterNameProvider(),
770769
value,
771-
beanMetaData,
770+
cascadingMetaData.getBeanMetaDataForCascadable( beanMetaDataManager, value ),
772771
valueContext.getPropertyPath()
773772
);
774773
newValueContext.setCurrentValidatedValue( value );

engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/CascadingMetaData.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.hibernate.validator.internal.engine.valueextraction.AnnotatedObject;
1616
import org.hibernate.validator.internal.engine.valueextraction.ArrayElement;
1717
import org.hibernate.validator.internal.engine.valueextraction.ValueExtractorManager;
18+
import org.hibernate.validator.internal.metadata.BeanMetaDataManager;
1819

1920
/**
2021
* An aggregated view of the cascading validation metadata. Note that it also includes the cascading validation metadata
@@ -59,4 +60,8 @@ public interface CascadingMetaData {
5960
* time.
6061
*/
6162
CascadingMetaData addRuntimeContainerSupport(ValueExtractorManager valueExtractorManager, Class<?> valueClass);
63+
64+
default BeanMetaData<?> getBeanMetaDataForCascadable(BeanMetaDataManager beanMetaDataManager, Object value) {
65+
return beanMetaDataManager.getBeanMetaData( value.getClass() );
66+
}
6267
}

0 commit comments

Comments
 (0)