Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit fdb480d

Browse files
HV-2135 Do not create unnecessary collections copies at runtime
Signed-off-by: marko-bekhta <marko.prykladna@gmail.com>
1 parent 4a24bef commit fdb480d

File tree

5 files changed

+22
-18
lines changed

5 files changed

+22
-18
lines changed

‎engine/src/main/java/org/hibernate/validator/internal/engine/MessageInterpolatorContext.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
*/
55
package org.hibernate.validator.internal.engine;
66

7-
import static org.hibernate.validator.internal.util.CollectionHelper.toImmutableMap;
8-
97
import java.lang.invoke.MethodHandles;
108
import java.util.Map;
119

@@ -47,8 +45,8 @@ public MessageInterpolatorContext(ConstraintDescriptor<?> constraintDescriptor,
4745
this.validatedValue = validatedValue;
4846
this.rootBeanType = rootBeanType;
4947
this.propertyPath = propertyPath;
50-
this.messageParameters = toImmutableMap( messageParameters );
51-
this.expressionVariables = toImmutableMap( expressionVariables );
48+
this.messageParameters = messageParameters;
49+
this.expressionVariables = expressionVariables;
5250
this.expressionLanguageFeatureLevel = expressionLanguageFeatureLevel;
5351
this.customViolation = customViolation;
5452
}

‎engine/src/main/java/org/hibernate/validator/internal/engine/constraintvalidation/ConstraintValidatorContextImpl.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ public final List<ConstraintViolationCreationContext> getConstraintViolationCrea
153153
throw LOG.getAtLeastOneCustomMessageMustBeCreatedException();
154154
}
155155

156-
return CollectionHelper.toImmutableList( constraintViolationCreationContexts );
156+
return constraintViolationCreationContexts;
157157
}
158158

159159
if ( constraintViolationCreationContexts == null || constraintViolationCreationContexts.size() == 0 ) {
@@ -165,7 +165,7 @@ public final List<ConstraintViolationCreationContext> getConstraintViolationCrea
165165
returnedConstraintViolationCreationContexts.addAll( constraintViolationCreationContexts );
166166
returnedConstraintViolationCreationContexts.add( getDefaultConstraintViolationCreationContext() );
167167

168-
return CollectionHelper.toImmutableList( returnedConstraintViolationCreationContexts );
168+
return returnedConstraintViolationCreationContexts;
169169
}
170170

171171
protected final MutablePath getCopyOfBasePath() {
@@ -178,8 +178,8 @@ private ConstraintViolationCreationContext getDefaultConstraintViolationCreation
178178
defaultConstraintExpressionLanguageFeatureLevel,
179179
false,
180180
basePath,
181-
messageParameters != null ? newHashMap<>( messageParameters ) : Collections.emptyMap(),
182-
expressionVariables != null ? newHashMap<>( expressionVariables ) : Collections.emptyMap(),
181+
messageParameters != null ? Map.copyOf( messageParameters ) : Collections.emptyMap(),
182+
expressionVariables != null ? Map.copyOf( expressionVariables ) : Collections.emptyMap(),
183183
dynamicPayload
184184
);
185185
}
@@ -214,8 +214,8 @@ public ConstraintValidatorContext addConstraintViolation() {
214214
expressionLanguageFeatureLevel,
215215
true,
216216
propertyPath,
217-
messageParameters != null ? newHashMap<>( messageParameters ) : Collections.emptyMap(),
218-
expressionVariables != null ? newHashMap<>( expressionVariables ) : Collections.emptyMap(),
217+
messageParameters != null ? Map.copyOf( messageParameters ) : Collections.emptyMap(),
218+
expressionVariables != null ? Map.copyOf( expressionVariables ) : Collections.emptyMap(),
219219
dynamicPayload
220220
)
221221
);

‎engine/src/main/java/org/hibernate/validator/internal/engine/constraintvalidation/ConstraintViolationCreationContext.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
*/
55
package org.hibernate.validator.internal.engine.constraintvalidation;
66

7-
import static org.hibernate.validator.internal.util.CollectionHelper.toImmutableMap;
8-
97
import java.util.Map;
108

119
import jakarta.validation.Path;
@@ -44,8 +42,8 @@ public ConstraintViolationCreationContext(String message,
4442
this.customViolation = customViolation;
4543
// at this point we make a copy of the path to avoid side effects
4644
this.propertyPath = property.materialize();
47-
this.messageParameters = toImmutableMap( messageParameters );
48-
this.expressionVariables = toImmutableMap( expressionVariables );
45+
this.messageParameters = messageParameters;
46+
this.expressionVariables = expressionVariables;
4947
this.dynamicPayload = dynamicPayload;
5048
}
5149

‎engine/src/main/java/org/hibernate/validator/internal/engine/valueextraction/ValueExtractorResolver.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -304,10 +304,12 @@ private Set<ValueExtractorDescriptor> getRuntimeCompliantValueExtractors(Class<?
304304
return valueExtractorDescriptors;
305305
}
306306

307-
Set<ValueExtractorDescriptor> possibleValueExtractors = potentialValueExtractorDescriptors
308-
.stream()
309-
.filter( e -> TypeHelper.isAssignable( e.getContainerType(), runtimeType ) )
310-
.collect( Collectors.toSet() );
307+
Set<ValueExtractorDescriptor> possibleValueExtractors = CollectionHelper.newHashSet( potentialValueExtractorDescriptors.size() );
308+
for ( ValueExtractorDescriptor descriptor : potentialValueExtractorDescriptors ) {
309+
if ( TypeHelper.isAssignable( descriptor.getContainerType(), runtimeType ) ) {
310+
possibleValueExtractors.add( descriptor );
311+
}
312+
}
311313

312314
valueExtractorDescriptors = getMaximallySpecificValueExtractors( possibleValueExtractors );
313315

‎engine/src/main/java/org/hibernate/validator/internal/util/CollectionHelper.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ public static <T> Set<T> asSet(T... ts) {
9898
* <p>
9999
* <b>NOTE:</b> the resulting list does not allow {@code null} values.
100100
* Attempt to convert a list with {@code null}s will result in an exception!
101+
* <b>NOTE:</b> do <b>NOT</b> use this util method at "runtime" as results
102+
* in creating unnecessary copies of arrays!
101103
*
102104
* @param list the list to convert.
103105
* @return the converted list.
@@ -112,6 +114,8 @@ public static <T> List<T> toImmutableList(List<? extends T> list) {
112114
* <p>
113115
* <b>NOTE:</b> the resulting set does not allow {@code null} values.
114116
* Attempt to convert a set with {@code null}s will result in an exception!
117+
* <b>NOTE:</b> do <b>NOT</b> use this util method at "runtime" as results
118+
* in creating unnecessary copies of arrays!
115119
*
116120
* @param set the set to convert.
117121
* @return the converted set.
@@ -126,6 +130,8 @@ public static <T> Set<T> toImmutableSet(Set<? extends T> set) {
126130
* <p>
127131
* <b>NOTE:</b> the resulting map does not allow {@code null} keys and values .
128132
* Attempt to convert a map with {@code null}s (either as key or a value) will result in an exception!
133+
* <b>NOTE:</b> do <b>NOT</b> use this util method at "runtime" as results
134+
* in creating unnecessary copies of arrays!
129135
*
130136
* @param map the map to convert.
131137
* @param <K> the type of the map keys.

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /