7
7
package org .hibernate .validator .internal .engine .validationcontext ;
8
8
9
9
import java .lang .invoke .MethodHandles ;
10
- import java .util .ArrayList ;
11
10
import java .util .Collections ;
12
- import java .util .HashMap ;
13
11
import java .util .HashSet ;
12
+ import java .util .IdentityHashMap ;
14
13
import java .util .Iterator ;
15
14
import java .util .Map ;
16
15
import java .util .Set ;
@@ -103,19 +102,19 @@ abstract class AbstractValidationContext<T> implements BaseBeanValidationContext
103
102
* The set of already processed meta constraints per bean - path ({@link BeanPathMetaConstraintProcessedUnit}).
104
103
*/
105
104
@ Lazy
106
- private HashSet <BeanPathMetaConstraintProcessedUnit > processedPathUnits ;
105
+ private Set <BeanPathMetaConstraintProcessedUnit > processedPathUnits ;
107
106
108
107
/**
109
108
* The set of already processed groups per bean ({@link BeanGroupProcessedUnit}).
110
109
*/
111
110
@ Lazy
112
- private HashSet <BeanGroupProcessedUnit > processedGroupUnits ;
111
+ private Set <BeanGroupProcessedUnit > processedGroupUnits ;
113
112
114
113
/**
115
114
* Maps an object to a list of paths in which it has been validated. The objects are the bean instances.
116
115
*/
117
116
@ Lazy
118
- private HashMap < ProcessedBean , ArrayList <PathImpl >> processedPathsPerBean ;
117
+ private Map < Object , Set <PathImpl >> processedPathsPerBean ;
119
118
120
119
/**
121
120
* Contains all failing constraints so far.
@@ -339,7 +338,7 @@ private String interpolate(
339
338
}
340
339
341
340
private boolean isAlreadyValidatedForPath (Object value , PathImpl path ) {
342
- ArrayList <PathImpl > pathSet = getInitializedProcessedPathsPerBean ().get ( new ProcessedBean ( value ) );
341
+ Set <PathImpl > pathSet = getInitializedProcessedPathsPerBean ().get ( value );
343
342
if ( pathSet == null ) {
344
343
return false ;
345
344
}
@@ -375,13 +374,12 @@ private boolean isAlreadyValidatedForCurrentGroup(Object value, Class<?> group)
375
374
376
375
private void markCurrentBeanAsProcessedForCurrentPath (Object bean , PathImpl path ) {
377
376
// HV-1031 The path object is mutated as we traverse the object tree, hence copy it before saving it
378
- HashMap < ProcessedBean , ArrayList <PathImpl >> processedPathsPerBean = getInitializedProcessedPathsPerBean ();
377
+ Map < Object , Set <PathImpl >> processedPathsPerBean = getInitializedProcessedPathsPerBean ();
379
378
380
- ProcessedBean processedBean = new ProcessedBean ( bean );
381
- ArrayList <PathImpl > processedPaths = processedPathsPerBean .get ( processedBean );
379
+ Set <PathImpl > processedPaths = processedPathsPerBean .get ( bean );
382
380
if ( processedPaths == null ) {
383
- processedPaths = new ArrayList <>();
384
- processedPathsPerBean .put ( processedBean , processedPaths );
381
+ processedPaths = new HashSet <>();
382
+ processedPathsPerBean .put ( bean , processedPaths );
385
383
}
386
384
387
385
processedPaths .add ( PathImpl .createCopy ( path ) );
@@ -398,16 +396,16 @@ private Set<BeanPathMetaConstraintProcessedUnit> getInitializedProcessedPathUnit
398
396
return processedPathUnits ;
399
397
}
400
398
401
- private HashSet <BeanGroupProcessedUnit > getInitializedProcessedGroupUnits () {
399
+ private Set <BeanGroupProcessedUnit > getInitializedProcessedGroupUnits () {
402
400
if ( processedGroupUnits == null ) {
403
401
processedGroupUnits = new HashSet <>();
404
402
}
405
403
return processedGroupUnits ;
406
404
}
407
405
408
- private HashMap < ProcessedBean , ArrayList <PathImpl >> getInitializedProcessedPathsPerBean () {
406
+ private Map < Object , Set <PathImpl >> getInitializedProcessedPathsPerBean () {
409
407
if ( processedPathsPerBean == null ) {
410
- processedPathsPerBean = new HashMap <>();
408
+ processedPathsPerBean = new IdentityHashMap <>();
411
409
}
412
410
return processedPathsPerBean ;
413
411
}
@@ -512,31 +510,4 @@ private int createHashCode() {
512
510
return result ;
513
511
}
514
512
}
515
-
516
- private static final class ProcessedBean {
517
-
518
- private Object bean ;
519
- private int hashCode = -1 ;
520
-
521
- ProcessedBean (Object bean ) {
522
- this .bean = bean ;
523
- }
524
-
525
- @ Override
526
- public boolean equals (Object o ) {
527
- return this .bean == ((ProcessedBean ) o ).bean ;
528
- }
529
-
530
- @ Override
531
- public int hashCode () {
532
- if ( hashCode == -1 ) {
533
- hashCode = createHashCode ();
534
- }
535
- return hashCode ;
536
- }
537
-
538
- private int createHashCode () {
539
- return System .identityHashCode ( bean );
540
- }
541
- }
542
513
}
0 commit comments