Skip to content

Commit 7d23ed6

Browse files
gsmetgunnarmorling
authored andcommitted
HV-1587 Simplify how already validated bean tracking is disabled/enabled
1 parent 869fedc commit 7d23ed6

File tree

7 files changed

+34
-35
lines changed

7 files changed

+34
-35
lines changed

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import org.hibernate.validator.internal.metadata.aggregated.BeanMetaData;
4242
import org.hibernate.validator.internal.metadata.aggregated.ExecutableMetaData;
4343
import org.hibernate.validator.internal.metadata.core.MetaConstraint;
44+
import org.hibernate.validator.internal.metadata.facets.Validatable;
4445
import org.hibernate.validator.internal.util.ExecutableParameterNameProvider;
4546
import org.hibernate.validator.internal.util.logging.Log;
4647
import org.hibernate.validator.internal.util.logging.LoggerFactory;
@@ -415,29 +416,35 @@ public String toString() {
415416

416417
private static boolean buildDisableAlreadyValidatedBeanTracking(ValidationOperation validationOperation, BeanMetaData<?> rootBeanMetaData,
417418
Optional<ExecutableMetaData> executableMetaData) {
419+
Validatable validatable;
418420
switch ( validationOperation ) {
419421
case BEAN_VALIDATION:
420422
case PROPERTY_VALIDATION:
421423
case VALUE_VALIDATION:
422424
// note that in the case of property and value validation, we are considering the root bean, whereas we
423425
// could consider the bean of the property or the value. We don't really have the info here though so it
424426
// will do for now.
425-
return !rootBeanMetaData.hasCascadingProperties();
427+
validatable = rootBeanMetaData;
428+
break;
426429
case PARAMETER_VALIDATION:
427430
if ( !executableMetaData.isPresent() ) {
428431
// the method is unconstrained so there's no need to worry about the tracking
429432
return false;
430433
}
431-
return !executableMetaData.get().hasCascadingParameters();
434+
validatable = executableMetaData.get().getValidatableParametersMetaData();
435+
break;
432436
case RETURN_VALUE_VALIDATION:
433437
if ( !executableMetaData.isPresent() ) {
434438
// the method is unconstrained so there's no need to worry about the tracking
435439
return false;
436440
}
437-
return !executableMetaData.get().getReturnValueMetaData().isCascading();
441+
validatable = executableMetaData.get().getReturnValueMetaData();
442+
break;
438443
default:
439444
return false;
440445
}
446+
447+
return !validatable.hasCascadables();
441448
}
442449

443450
private String interpolate(String messageTemplate,

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

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,4 @@ public interface BeanMetaData<T> extends Validatable {
113113
* element itself and goes up the hierarchy chain. Interfaces are not included.
114114
*/
115115
List<Class<? super T>> getClassHierarchy();
116-
117-
/**
118-
* @return {@code true} if there is at least one cascading property in the bean metadata, {@code false} otherwise.
119-
*/
120-
boolean hasCascadingProperties();
121116
}

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

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -134,11 +134,6 @@ public final class BeanMetaDataImpl<T> implements BeanMetaData<T> {
134134
@Immutable
135135
private final Set<Cascadable> cascadedProperties;
136136

137-
/**
138-
* Indicates if the bean has at least one cascading property.
139-
*/
140-
private final boolean hasCascadingProperties;
141-
142137
/**
143138
* The bean descriptor for this bean.
144139
*/
@@ -221,7 +216,6 @@ public BeanMetaDataImpl(Class<T> beanClass,
221216

222217
this.hasConstraints = hasConstraints;
223218
this.cascadedProperties = CollectionHelper.toImmutableSet( cascadedProperties );
224-
this.hasCascadingProperties = cascadedProperties.size() > 0;
225219
this.allMetaConstraints = CollectionHelper.toImmutableSet( allMetaConstraints );
226220

227221
this.classHierarchyWithoutInterfaces = CollectionHelper.toImmutableList( ClassHierarchyHelper.getHierarchy(
@@ -292,8 +286,8 @@ public Set<Cascadable> getCascadables() {
292286
}
293287

294288
@Override
295-
public boolean hasCascadingProperties() {
296-
return hasCascadingProperties;
289+
public boolean hasCascadables() {
290+
return !cascadedProperties.isEmpty();
297291
}
298292

299293
@Override

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

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,15 @@
6060
public class ExecutableMetaData extends AbstractConstraintMetaData {
6161

6262
private final Class<?>[] parameterTypes;
63+
6364
@Immutable
6465
private final List<ParameterMetaData> parameterMetaDataList;
66+
67+
private final ValidatableParametersMetaData validatableParametersMetaData;
68+
6569
@Immutable
6670
private final Set<MetaConstraint<?>> crossParameterConstraints;
71+
6772
private final boolean isGetter;
6873

6974
/**
@@ -76,8 +81,6 @@ public class ExecutableMetaData extends AbstractConstraintMetaData {
7681
private final ReturnValueMetaData returnValueMetaData;
7782
private final ElementKind kind;
7883

79-
private final boolean hasCascadingParameters;
80-
8184
private ExecutableMetaData(
8285
String name,
8386
Type returnType,
@@ -102,6 +105,7 @@ private ExecutableMetaData(
102105

103106
this.parameterTypes = parameterTypes;
104107
this.parameterMetaDataList = CollectionHelper.toImmutableList( parameterMetaDataList );
108+
this.validatableParametersMetaData = new ValidatableParametersMetaData( parameterMetaDataList );
105109
this.crossParameterConstraints = CollectionHelper.toImmutableSet( crossParameterConstraints );
106110
this.signatures = signatures;
107111
this.returnValueMetaData = new ReturnValueMetaData(
@@ -112,8 +116,6 @@ private ExecutableMetaData(
112116
);
113117
this.isGetter = isGetter;
114118
this.kind = kind;
115-
116-
this.hasCascadingParameters = buildHasCascadingParameters( parameterMetaDataList );
117119
}
118120

119121
/**
@@ -156,7 +158,7 @@ public Set<MetaConstraint<?>> getCrossParameterConstraints() {
156158
}
157159

158160
public ValidatableParametersMetaData getValidatableParametersMetaData() {
159-
return new ValidatableParametersMetaData( parameterMetaDataList );
161+
return validatableParametersMetaData;
160162
}
161163

162164
public ReturnValueMetaData getReturnValueMetaData() {
@@ -244,19 +246,6 @@ public boolean equals(Object obj) {
244246
return true;
245247
}
246248

247-
public boolean hasCascadingParameters() {
248-
return hasCascadingParameters;
249-
}
250-
251-
private boolean buildHasCascadingParameters(List<ParameterMetaData> parameterMetaDataList) {
252-
for ( ParameterMetaData parameterMetaData : parameterMetaDataList ) {
253-
if ( parameterMetaData.isCascading() ) {
254-
return true;
255-
}
256-
}
257-
return false;
258-
}
259-
260249
/**
261250
* Creates new {@link ExecutableMetaData} instances.
262251
*

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@ public Iterable<Cascadable> getCascadables() {
6161
return cascadables;
6262
}
6363

64+
@Override
65+
public boolean hasCascadables() {
66+
return !cascadables.isEmpty();
67+
}
68+
6469
@Override
6570
public ElementType getElementType() {
6671
return ElementType.METHOD;

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ public class ValidatableParametersMetaData implements Validatable {
2424

2525
@Immutable
2626
private final List<ParameterMetaData> parameterMetaData;
27+
2728
@Immutable
28-
private final Iterable<Cascadable> cascadables;
29+
private final List<Cascadable> cascadables;
2930

3031
public ValidatableParametersMetaData(List<ParameterMetaData> parameterMetaData) {
3132
this.parameterMetaData = CollectionHelper.toImmutableList( parameterMetaData );
@@ -39,4 +40,8 @@ public Iterable<Cascadable> getCascadables() {
3940
return cascadables;
4041
}
4142

43+
@Override
44+
public boolean hasCascadables() {
45+
return !cascadables.isEmpty();
46+
}
4247
}

engine/src/main/java/org/hibernate/validator/internal/metadata/facets/Validatable.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,8 @@ public interface Validatable {
2323
*/
2424
Iterable<Cascadable> getCascadables();
2525

26+
/**
27+
* Returns {@code true} if this validatable has at least one cascadable element, {@code false} otherwise.
28+
*/
29+
boolean hasCascadables();
2630
}

0 commit comments

Comments
 (0)