@@ -51,49 +51,34 @@ public JdbcType getRecommendedJdbcType(JdbcTypeIndicators context) {
51
51
return null ;
52
52
}
53
53
54
- @ Override
54
+ @ Override @ SuppressWarnings ({ "unchecked" , "rawtypes" })
55
55
public JavaType <C > createJavaType (
56
56
ParameterizedType parameterizedType ,
57
57
TypeConfiguration typeConfiguration ) {
58
- final Type [] actualTypeArguments = parameterizedType .getActualTypeArguments ();
59
- final var javaTypeRegistry = typeConfiguration .getJavaTypeRegistry ();
60
- switch ( semantics .getCollectionClassification () ) {
61
- case ARRAY :
62
- //noinspection unchecked
63
- return (JavaType <C >) new ArrayJavaType <>(
64
- javaTypeRegistry .resolveDescriptor (
65
- ( (Class <?>) parameterizedType .getRawType () ).getComponentType ()
66
- )
67
- );
68
- case BAG :
69
- case ID_BAG :
70
- case LIST :
71
- case SET :
72
- case SORTED_SET :
73
- case ORDERED_SET :
74
- //noinspection unchecked,rawtypes
75
- return new BasicCollectionJavaType (
76
- parameterizedType ,
77
- javaTypeRegistry .resolveDescriptor ( actualTypeArguments [actualTypeArguments .length - 1 ] ),
78
- semantics
79
- );
80
-
81
- }
82
- // Construct a basic java type that knows its parametrization
83
- //noinspection unchecked,rawtypes
84
- return new UnknownBasicJavaType (
85
- parameterizedType ,
86
- new MapMutabilityPlan <>(
87
- (MapSemantics <Map <Object , Object >, Object , Object >) semantics ,
88
- javaTypeRegistry .resolveDescriptor ( actualTypeArguments [0 ] ),
89
- javaTypeRegistry .resolveDescriptor ( actualTypeArguments [actualTypeArguments .length - 1 ] )
90
- )
91
- );
92
- }
93
-
94
- @ Override
95
- public C fromString (CharSequence string ) {
96
- throw new UnsupportedOperationException ();
58
+ final Type [] typeArguments = parameterizedType .getActualTypeArguments ();
59
+ final var registry = typeConfiguration .getJavaTypeRegistry ();
60
+ return switch ( semantics .getCollectionClassification () ) {
61
+ case ARRAY -> {
62
+ final var arrayClass = (Class <?>) parameterizedType .getRawType ();
63
+ yield (JavaType <C >) new ArrayJavaType <>( registry .resolveDescriptor ( arrayClass .getComponentType () ) );
64
+ }
65
+ case BAG , ID_BAG , LIST , SET , SORTED_SET , ORDERED_SET ->
66
+ new BasicCollectionJavaType (
67
+ parameterizedType ,
68
+ registry .resolveDescriptor ( typeArguments [typeArguments .length -1 ] ),
69
+ semantics
70
+ );
71
+ case MAP , ORDERED_MAP , SORTED_MAP ->
72
+ // Construct a basic java type that knows its parametrization
73
+ new UnknownBasicJavaType (
74
+ parameterizedType ,
75
+ new MapMutabilityPlan (
76
+ (MapSemantics ) semantics ,
77
+ registry .resolveDescriptor ( typeArguments [0 ] ),
78
+ registry .resolveDescriptor ( typeArguments [typeArguments .length -1 ] )
79
+ )
80
+ );
81
+ };
97
82
}
98
83
99
84
@ Override
@@ -111,16 +96,20 @@ public boolean areEqual(C one, C another) {
111
96
if ( one == another ) {
112
97
return true ;
113
98
}
114
-
115
- if ( one instanceof PersistentCollection <?> pc ) {
116
- return pc .wasInitialized () && ( pc .isWrapper ( another ) || pc .isDirectlyProvidedCollection ( another ) );
99
+ else if ( one instanceof PersistentCollection <?> collection ) {
100
+ return wraps ( collection , another );
117
101
}
118
-
119
- if ( another instanceof PersistentCollection <?> pc ) {
120
- return pc .wasInitialized () && ( pc .isWrapper ( one ) || pc .isDirectlyProvidedCollection ( one ) );
102
+ else if ( another instanceof PersistentCollection <?> collection ) {
103
+ return wraps ( collection , one );
121
104
}
105
+ else {
106
+ return Objects .equals ( one , another );
107
+ }
108
+ }
122
109
123
- return Objects .equals ( one , another );
110
+ private static <C > boolean wraps (PersistentCollection <?> collection , C other ) {
111
+ return collection .wasInitialized ()
112
+ && collection .isWrapper ( other );
124
113
}
125
114
126
115
@ Override
@@ -153,13 +142,14 @@ public C deepCopy(C value) {
153
142
if ( value == null ) {
154
143
return null ;
155
144
}
156
- final C copy = semantics .instantiateRaw ( value .size (), null );
157
-
158
- for ( var entry : value .entrySet () ) {
159
- copy .put ( keyPlan .deepCopy ( entry .getKey () ),
160
- valuePlan .deepCopy ( entry .getValue () ) );
145
+ else {
146
+ final C copy = semantics .instantiateRaw ( value .size (), null );
147
+ for ( var entry : value .entrySet () ) {
148
+ copy .put ( keyPlan .deepCopy ( entry .getKey () ),
149
+ valuePlan .deepCopy ( entry .getValue () ) );
150
+ }
151
+ return copy ;
161
152
}
162
- return copy ;
163
153
}
164
154
165
155
@ Override
0 commit comments