Skip to content

Commit 36f7aa2

Browse files
mkurzgsmet
authored andcommitted
HV-1589 Take initializationContext into account when caching constraint validators
1 parent 7d23ed6 commit 36f7aa2

File tree

2 files changed

+50
-2
lines changed

2 files changed

+50
-2
lines changed

engine/src/main/java/org/hibernate/validator/internal/engine/constraintvalidation/ConstraintValidatorManager.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ public ConstraintValidatorManager(ConstraintValidatorFactory constraintValidator
110110
Contracts.assertNotNull( constraintValidatorFactory );
111111
Contracts.assertNotNull( initializationContext );
112112

113-
CacheKey key = new CacheKey( descriptor.getAnnotationDescriptor(), validatedValueType, constraintValidatorFactory );
113+
CacheKey key = new CacheKey( descriptor.getAnnotationDescriptor(), validatedValueType, constraintValidatorFactory, initializationContext );
114114

115115
@SuppressWarnings("unchecked")
116116
ConstraintValidator<A, ?> constraintValidator = (ConstraintValidator<A, ?>) constraintValidatorCache.get( key );
@@ -281,12 +281,14 @@ private static final class CacheKey {
281281
private final ConstraintAnnotationDescriptor<?> annotationDescriptor;
282282
private final Type validatedType;
283283
private final ConstraintValidatorFactory constraintValidatorFactory;
284+
private final HibernateConstraintValidatorInitializationContext initializationContext;
284285
private final int hashCode;
285286

286-
private CacheKey(ConstraintAnnotationDescriptor<?> annotationDescriptor, Type validatorType, ConstraintValidatorFactory constraintValidatorFactory) {
287+
private CacheKey(ConstraintAnnotationDescriptor<?> annotationDescriptor, Type validatorType, ConstraintValidatorFactory constraintValidatorFactory, HibernateConstraintValidatorInitializationContext initializationContext) {
287288
this.annotationDescriptor = annotationDescriptor;
288289
this.validatedType = validatorType;
289290
this.constraintValidatorFactory = constraintValidatorFactory;
291+
this.initializationContext = initializationContext;
290292
this.hashCode = createHashCode();
291293
}
292294

@@ -314,6 +316,9 @@ public boolean equals(Object o) {
314316
if ( !constraintValidatorFactory.equals( cacheKey.constraintValidatorFactory ) ) {
315317
return false;
316318
}
319+
if ( !initializationContext.equals( cacheKey.initializationContext ) ) {
320+
return false;
321+
}
317322

318323
return true;
319324
}
@@ -327,6 +332,7 @@ private int createHashCode() {
327332
int result = annotationDescriptor.hashCode();
328333
result = 31 * result + validatedType.hashCode();
329334
result = 31 * result + constraintValidatorFactory.hashCode();
335+
result = 31 * result + initializationContext.hashCode();
330336
return result;
331337
}
332338
}

engine/src/main/java/org/hibernate/validator/internal/engine/constraintvalidation/HibernateConstraintValidatorInitializationContextImpl.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,15 @@ public class HibernateConstraintValidatorInitializationContextImpl implements Hi
2727

2828
private final Object constraintValidatorPayload;
2929

30+
private final int hashCode;
31+
3032
public HibernateConstraintValidatorInitializationContextImpl(ScriptEvaluatorFactory scriptEvaluatorFactory, ClockProvider clockProvider,
3133
Duration temporalValidationTolerance, Object constraintValidatorPayload) {
3234
this.scriptEvaluatorFactory = scriptEvaluatorFactory;
3335
this.clockProvider = clockProvider;
3436
this.temporalValidationTolerance = temporalValidationTolerance;
3537
this.constraintValidatorPayload = constraintValidatorPayload;
38+
this.hashCode = createHashCode();
3639
}
3740

3841
@Override
@@ -59,4 +62,43 @@ public <C> C getConstraintValidatorPayload(Class<C> type) {
5962
return null;
6063
}
6164
}
65+
66+
@Override
67+
public boolean equals(Object o) {
68+
if ( this == o ) {
69+
return true;
70+
}
71+
if ( o == null || getClass() != o.getClass() ) {
72+
return false;
73+
}
74+
75+
HibernateConstraintValidatorInitializationContextImpl hibernateConstraintValidatorInitializationContextImpl = (HibernateConstraintValidatorInitializationContextImpl) o;
76+
77+
if ( scriptEvaluatorFactory != hibernateConstraintValidatorInitializationContextImpl.scriptEvaluatorFactory ) {
78+
return false;
79+
}
80+
if ( clockProvider != hibernateConstraintValidatorInitializationContextImpl.clockProvider ) {
81+
return false;
82+
}
83+
if ( !temporalValidationTolerance.equals( hibernateConstraintValidatorInitializationContextImpl.temporalValidationTolerance ) ) {
84+
return false;
85+
}
86+
if ( constraintValidatorPayload != hibernateConstraintValidatorInitializationContextImpl.constraintValidatorPayload ) {
87+
return false;
88+
}
89+
return true;
90+
}
91+
92+
@Override
93+
public int hashCode() {
94+
return hashCode;
95+
}
96+
97+
private int createHashCode() {
98+
int result = System.identityHashCode( scriptEvaluatorFactory );
99+
result = 31 * result + System.identityHashCode( clockProvider );
100+
result = 31 * result + temporalValidationTolerance.hashCode();
101+
result = 31 * result + System.identityHashCode( constraintValidatorPayload );
102+
return result;
103+
}
62104
}

0 commit comments

Comments
 (0)