Skip to content

Commit b2c6987

Browse files
gsmetgunnarmorling
authored andcommitted
HV-1481 Reuse singleton instances when there are no group conversions
1 parent 89a2ad3 commit b2c6987

File tree

2 files changed

+35
-7
lines changed

2 files changed

+35
-7
lines changed

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
*/
2727
public class GroupConversionHelper {
2828

29-
private static final GroupConversionHelper EMPTY = new GroupConversionHelper( Collections.emptyMap() );
29+
static final GroupConversionHelper EMPTY = new GroupConversionHelper( Collections.emptyMap() );
3030

3131
@Immutable
3232
private final Map<Class<?>, Class<?>> groupConversions;
@@ -81,6 +81,10 @@ public Set<GroupConversionDescriptor> asDescriptors() {
8181
return CollectionHelper.toImmutableSet( descriptors );
8282
}
8383

84+
boolean isEmpty() {
85+
return groupConversions.isEmpty();
86+
}
87+
8488
@Override
8589
public String toString() {
8690
StringBuilder sb = new StringBuilder();

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

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,26 @@ public class NonContainerCascadingMetaData implements CascadingMetaData {
3232
private static final Log LOG = LoggerFactory.make();
3333

3434
private static final NonContainerCascadingMetaData NON_CASCADING = new NonContainerCascadingMetaData( false,
35-
GroupConversionHelper.of( Collections.emptyMap() ) );
35+
GroupConversionHelper.EMPTY );
3636

3737
private static final NonContainerCascadingMetaData CASCADING_WITHOUT_GROUP_CONVERSIONS = new NonContainerCascadingMetaData( true,
38-
GroupConversionHelper.of( Collections.emptyMap() ) );
38+
GroupConversionHelper.EMPTY );
39+
40+
private static final ContainerCascadingMetaData LIST_CONTAINER_WITHOUT_GROUP_CONVERSIONS =
41+
new ContainerCascadingMetaData( List.class, List.class.getTypeParameters()[0], List.class, List.class.getTypeParameters()[0],
42+
GroupConversionHelper.EMPTY, LegacyCollectionSupportValueExtractors.LIST );
43+
44+
private static final ContainerCascadingMetaData MAP_CONTAINER_WITHOUT_GROUP_CONVERSIONS =
45+
new ContainerCascadingMetaData( Map.class, Map.class.getTypeParameters()[1], Map.class, Map.class.getTypeParameters()[1],
46+
GroupConversionHelper.EMPTY, LegacyCollectionSupportValueExtractors.MAP );
47+
48+
private static final ContainerCascadingMetaData ITERABLE_CONTAINER_WITHOUT_GROUP_CONVERSIONS =
49+
new ContainerCascadingMetaData( Iterable.class, Iterable.class.getTypeParameters()[0], Iterable.class, Iterable.class.getTypeParameters()[0],
50+
GroupConversionHelper.EMPTY, LegacyCollectionSupportValueExtractors.ITERABLE );
51+
52+
private static final ContainerCascadingMetaData OPTIONAL_CONTAINER_WITHOUT_GROUP_CONVERSIONS =
53+
new ContainerCascadingMetaData( Optional.class, Optional.class.getTypeParameters()[0], Optional.class, Optional.class.getTypeParameters()[0],
54+
GroupConversionHelper.EMPTY, LegacyCollectionSupportValueExtractors.OPTIONAL );
3955

4056
/**
4157
* If this type parameter is marked for cascading.
@@ -117,19 +133,27 @@ public CascadingMetaData addRuntimeLegacyCollectionSupport(Class<?> valueClass)
117133

118134
private ContainerCascadingMetaData getLegacyContainerElementCascadingMetaData(Class<?> valueClass) {
119135
if ( List.class.isAssignableFrom( valueClass ) ) {
120-
return new ContainerCascadingMetaData( List.class, List.class.getTypeParameters()[0], List.class, List.class.getTypeParameters()[0],
136+
return groupConversionHelper.isEmpty() ?
137+
LIST_CONTAINER_WITHOUT_GROUP_CONVERSIONS :
138+
new ContainerCascadingMetaData( List.class, List.class.getTypeParameters()[0], List.class, List.class.getTypeParameters()[0],
121139
groupConversionHelper, LegacyCollectionSupportValueExtractors.LIST );
122140
}
123141
else if ( Map.class.isAssignableFrom( valueClass ) ) {
124-
return new ContainerCascadingMetaData( Map.class, Map.class.getTypeParameters()[1], Map.class, Map.class.getTypeParameters()[1],
142+
return groupConversionHelper.isEmpty() ?
143+
MAP_CONTAINER_WITHOUT_GROUP_CONVERSIONS :
144+
new ContainerCascadingMetaData( Map.class, Map.class.getTypeParameters()[1], Map.class, Map.class.getTypeParameters()[1],
125145
groupConversionHelper, LegacyCollectionSupportValueExtractors.MAP );
126146
}
127147
else if ( Iterable.class.isAssignableFrom( valueClass ) ) {
128-
return new ContainerCascadingMetaData( Iterable.class, Iterable.class.getTypeParameters()[0], Iterable.class, Iterable.class.getTypeParameters()[0],
148+
return groupConversionHelper.isEmpty() ?
149+
ITERABLE_CONTAINER_WITHOUT_GROUP_CONVERSIONS :
150+
new ContainerCascadingMetaData( Iterable.class, Iterable.class.getTypeParameters()[0], Iterable.class, Iterable.class.getTypeParameters()[0],
129151
groupConversionHelper, LegacyCollectionSupportValueExtractors.ITERABLE );
130152
}
131153
else if ( Optional.class.isAssignableFrom( valueClass ) ) {
132-
return new ContainerCascadingMetaData( Optional.class, Optional.class.getTypeParameters()[0], Optional.class, Optional.class.getTypeParameters()[0],
154+
return groupConversionHelper.isEmpty() ?
155+
OPTIONAL_CONTAINER_WITHOUT_GROUP_CONVERSIONS :
156+
new ContainerCascadingMetaData( Optional.class, Optional.class.getTypeParameters()[0], Optional.class, Optional.class.getTypeParameters()[0],
133157
groupConversionHelper, LegacyCollectionSupportValueExtractors.OPTIONAL );
134158
}
135159
else if ( valueClass.isArray() ) {

0 commit comments

Comments
 (0)