1717import org .hibernate .engine .internal .CacheHelper ;
1818import org .hibernate .engine .spi .SessionFactoryImplementor ;
1919import org .hibernate .engine .spi .SharedSessionContractImplementor ;
20- import org .hibernate .internal .util .collections .ArrayHelper ;
2120import org .hibernate .type .descriptor .converter .spi .BasicValueConverter ;
2221import org .hibernate .type .descriptor .ValueBinder ;
2322import org .hibernate .type .descriptor .ValueExtractor ;
2625import org .hibernate .type .descriptor .jdbc .JdbcLiteralFormatter ;
2726import org .hibernate .type .descriptor .jdbc .JdbcType ;
2827import org .hibernate .type .internal .UserTypeJavaTypeWrapper ;
29- import org .hibernate .type .internal .UserTypeSqlTypeAdapter ;
28+ import org .hibernate .type .internal .UserTypeJdbcTypeAdapter ;
3029import org .hibernate .type .internal .UserTypeVersionJavaTypeWrapper ;
3130import org .hibernate .type .spi .TypeConfiguration ;
3231import org .hibernate .usertype .EnhancedUserType ;
3332import org .hibernate .usertype .LoggableUserType ;
3433import org .hibernate .usertype .UserType ;
3534import org .hibernate .usertype .UserVersionType ;
3635
36+ import static org .hibernate .internal .util .collections .ArrayHelper .EMPTY_STRING_ARRAY ;
37+
3738/**
3839 * Adapts {@link UserType} to the generic {@link Type} interface, in order
3940 * to isolate user code from changes in the internal Type contracts.
@@ -63,36 +64,22 @@ public class CustomType<J>
6364 private final JdbcLiteralFormatter <J > jdbcLiteralFormatter ;
6465
6566 public CustomType (UserType <J > userType , TypeConfiguration typeConfiguration ) throws MappingException {
66- this ( userType , ArrayHelper . EMPTY_STRING_ARRAY , typeConfiguration );
67+ this ( userType , EMPTY_STRING_ARRAY , typeConfiguration );
6768 }
6869
69- public CustomType (UserType <J > userType , String [] registrationKeys , TypeConfiguration typeConfiguration )
70- throws MappingException {
70+ public CustomType (UserType <J > userType , String [] registrationKeys , TypeConfiguration typeConfiguration ) {
7171 this .userType = userType ;
7272 name = userType .getClass ().getName ();
7373
74- if ( userType instanceof JavaType <?> ) {
75- //noinspection unchecked
76- mappedJavaType = (JavaType <J >) userType ;
77- }
78- else if ( userType instanceof JavaTypedExpressible ) {
79- //noinspection unchecked
80- mappedJavaType = ( (JavaTypedExpressible <J >) userType ).getExpressibleJavaType ();
81- }
82- else if ( userType instanceof UserVersionType ) {
83- mappedJavaType = new UserTypeVersionJavaTypeWrapper <>( (UserVersionType <J >) userType );
84- }
85- else {
86- mappedJavaType = new UserTypeJavaTypeWrapper <>( userType );
87- }
74+ mappedJavaType = getMappedJavaType ( userType );
8875
89- final BasicValueConverter <J , Object > valueConverter = userType .getValueConverter ();
90- if ( valueConverter != null ) {
76+ final BasicValueConverter <J , Object > converter = userType .getValueConverter ();
77+ if ( converter != null ) {
9178 // When an explicit value converter is given,
9279 // we configure the custom type to use that instead of adapters that delegate to UserType.
9380 // This is necessary to support selecting a column with multiple domain type representations.
9481 jdbcType = userType .getJdbcType ( typeConfiguration );
95- jdbcJavaType = valueConverter .getRelationalJavaType ();
82+ jdbcJavaType = converter .getRelationalJavaType ();
9683 //noinspection unchecked
9784 valueExtractor = (ValueExtractor <J >) jdbcType .getExtractor ( jdbcJavaType );
9885 //noinspection unchecked
@@ -102,18 +89,34 @@ else if ( userType instanceof UserVersionType ) {
10289 }
10390 else {
10491 // create a JdbcType adapter that uses the UserType binder/extract handling
105- jdbcType = new UserTypeSqlTypeAdapter <>( userType , mappedJavaType , typeConfiguration );
92+ jdbcType = new UserTypeJdbcTypeAdapter <>( userType , mappedJavaType );
10693 jdbcJavaType = jdbcType .getJdbcRecommendedJavaTypeMapping ( null , null , typeConfiguration );
10794 valueExtractor = jdbcType .getExtractor ( mappedJavaType );
10895 valueBinder = jdbcType .getBinder ( mappedJavaType );
109- jdbcLiteralFormatter = userType instanceof EnhancedUserType
110- ? jdbcType .getJdbcLiteralFormatter ( mappedJavaType )
111- : null ;
96+ jdbcLiteralFormatter =
97+ userType instanceof EnhancedUserType ? jdbcType .getJdbcLiteralFormatter ( mappedJavaType ) : null ;
11298 }
11399
114100 this .registrationKeys = registrationKeys ;
115101 }
116102
103+ private JavaType <J > getMappedJavaType (UserType <J > userType ) {
104+ if ( userType instanceof JavaType <?> ) {
105+ //noinspection unchecked
106+ return (JavaType <J >) userType ;
107+ }
108+ else if ( userType instanceof JavaTypedExpressible <?> ) {
109+ //noinspection unchecked
110+ return ( (JavaTypedExpressible <J >) userType ).getExpressibleJavaType ();
111+ }
112+ else if ( userType instanceof UserVersionType <J > userVersionType ) {
113+ return new UserTypeVersionJavaTypeWrapper <>( userVersionType );
114+ }
115+ else {
116+ return new UserTypeJavaTypeWrapper <>( userType );
117+ }
118+ }
119+
117120 public UserType <J > getUserType () {
118121 return userType ;
119122 }
@@ -176,13 +179,8 @@ public Object assemble(Serializable cached, SharedSessionContractImplementor ses
176179 // in which case we will try to use a converter for assembling,
177180 // or if that doesn't exist, simply use the relational value as is
178181 if ( assembled == null && cached != null ) {
179- final BasicValueConverter <J , Object > valueConverter = getUserType ().getValueConverter ();
180- if ( valueConverter == null ) {
181- return cached ;
182- }
183- else {
184- return valueConverter .toDomainValue ( cached );
185- }
182+ final BasicValueConverter <J , Object > converter = getUserType ().getValueConverter ();
183+ return converter == null ? cached : converter .toDomainValue ( cached );
186184 }
187185 return assembled ;
188186 }
@@ -193,7 +191,7 @@ public Serializable disassemble(Object value, SharedSessionContractImplementor s
193191 }
194192
195193 @ Override
196- public Serializable disassemble (Object value , SessionFactoryImplementor sessionFactory ) throws HibernateException {
194+ public Serializable disassemble (Object value , SessionFactoryImplementor sessionFactory ) {
197195 return disassembleForCache ( value );
198196 }
199197
@@ -204,27 +202,19 @@ private Serializable disassembleForCache(Object value) {
204202 // in which case we will try to use a converter for disassembling,
205203 // or if that doesn't exist, simply use the domain value as is
206204 if ( disassembled == null ){
207- final BasicValueConverter <J , Object > valueConverter = getUserType ().getValueConverter ();
208- if ( valueConverter == null ) {
209- return disassembled ;
210- }
211- else {
212- return (Serializable ) valueConverter .toRelationalValue ( (J ) value );
213- }
205+ final BasicValueConverter <J , Object > converter = getUserType ().getValueConverter ();
206+ return converter == null ? disassembled : (Serializable ) converter .toRelationalValue ( (J ) value );
207+ }
208+ else {
209+ return disassembled ;
214210 }
215- return disassembled ;
216211 }
217212
218213 @ Override
219214 public Object disassemble (Object value , SharedSessionContractImplementor session ) {
220215 // Use the value converter if available for conversion to the jdbc representation
221- final BasicValueConverter <J , Object > valueConverter = getUserType ().getValueConverter ();
222- if ( valueConverter == null ) {
223- return value ;
224- }
225- else {
226- return valueConverter .toRelationalValue ( (J ) value );
227- }
216+ final BasicValueConverter <J , Object > converter = getUserType ().getValueConverter ();
217+ return converter == null ? value : converter .toRelationalValue ( (J ) value );
228218 }
229219
230220 @ Override
@@ -240,12 +230,7 @@ public void addToCacheKey(MutableCacheKeyBuilder cacheKey, Object value, SharedS
240230 }
241231 else {
242232 cacheKey .addValue ( disassembled );
243- if ( value == null ) {
244- cacheKey .addHashCode ( 0 );
245- }
246- else {
247- cacheKey .addHashCode ( getUserType ().hashCode ( (J ) value ) );
248- }
233+ cacheKey .addHashCode ( value == null ? 0 : getUserType ().hashCode ( (J ) value ) );
249234 }
250235 }
251236
@@ -255,7 +240,7 @@ public Object replace(
255240 Object target ,
256241 SharedSessionContractImplementor session ,
257242 Object owner ,
258- Map <Object , Object > copyCache ) throws HibernateException {
243+ Map <Object , Object > copyCache ) {
259244 return getUserType ().replace ( (J ) original , (J ) target , owner );
260245 }
261246
@@ -302,8 +287,8 @@ public String toLoggableString(Object value, SessionFactoryImplementor factory)
302287 if ( value == null ) {
303288 return "null" ;
304289 }
305- else if ( userType instanceof LoggableUserType ) {
306- return ( ( LoggableUserType ) userType ) .toLoggableString ( value , factory );
290+ else if ( userType instanceof LoggableUserType loggableUserType ) {
291+ return loggableUserType .toLoggableString ( value , factory );
307292 }
308293 else if ( userType instanceof EnhancedUserType <?> ) {
309294 return ( (EnhancedUserType <Object >) userType ).toString ( value );
@@ -315,32 +300,32 @@ else if ( userType instanceof EnhancedUserType<?> ) {
315300
316301 @ Override
317302 public boolean [] toColumnNullness (Object value , MappingContext mapping ) {
318- boolean [] result = new boolean [ getColumnSpan (mapping ) ];
303+ final boolean [] result = new boolean [ getColumnSpan (mapping ) ];
319304 if ( value != null ) {
320- Arrays .fill (result , true );
305+ Arrays .fill ( result , true );
321306 }
322307 return result ;
323308 }
324309
325310 @ Override
326311 public boolean isDirty (Object old , Object current , boolean [] checkable , SharedSessionContractImplementor session )
327312 throws HibernateException {
328- return checkable [0 ] && isDirty (old , current , session );
313+ return checkable [0 ] && isDirty ( old , current , session );
329314 }
330315
331316 @ Override
332317 public boolean canDoSetting () {
333- if ( getUserType () instanceof ProcedureParameterNamedBinder ) {
334- return ((ProcedureParameterNamedBinder <?>) getUserType () ).canDoSetting ();
335- }
336- return false ;
318+ return getUserType () instanceof ProcedureParameterNamedBinder <?> procedureParameterNamedBinder
319+ && procedureParameterNamedBinder .canDoSetting ();
337320 }
338321
339322 @ Override
340- public void nullSafeSet (
341- CallableStatement statement , J value , String name , SharedSessionContractImplementor session ) throws SQLException {
323+ public void nullSafeSet (CallableStatement statement , J value , String name , SharedSessionContractImplementor session )
324+ throws SQLException {
342325 if ( canDoSetting () ) {
343- ((ProcedureParameterNamedBinder <J >) getUserType () ).nullSafeSet ( statement , value , name , session );
326+ //noinspection unchecked
327+ ( (ProcedureParameterNamedBinder <J >) getUserType () )
328+ .nullSafeSet ( statement , value , name , session );
344329 }
345330 else {
346331 throw new UnsupportedOperationException (
@@ -351,17 +336,17 @@ public void nullSafeSet(
351336
352337 @ Override
353338 public boolean canDoExtraction () {
354- if ( getUserType () instanceof ProcedureParameterExtractionAware ) {
355- return ((ProcedureParameterExtractionAware <?>) getUserType () ).canDoExtraction ();
356- }
357- return false ;
339+ return getUserType () instanceof ProcedureParameterExtractionAware <?> procedureParameterExtractionAware
340+ && procedureParameterExtractionAware .canDoExtraction ();
358341 }
359342
360343 @ Override
361- public J extract (CallableStatement statement , int startIndex , SharedSessionContractImplementor session ) throws SQLException {
344+ public J extract (CallableStatement statement , int startIndex , SharedSessionContractImplementor session )
345+ throws SQLException {
362346 if ( canDoExtraction () ) {
363347 //noinspection unchecked
364- return ((ProcedureParameterExtractionAware <J >) getUserType () ).extract ( statement , startIndex , session );
348+ return ((ProcedureParameterExtractionAware <J >) getUserType () )
349+ .extract ( statement , startIndex , session );
365350 }
366351 else {
367352 throw new UnsupportedOperationException (
@@ -375,7 +360,8 @@ public J extract(CallableStatement statement, String paramName, SharedSessionCon
375360 throws SQLException {
376361 if ( canDoExtraction () ) {
377362 //noinspection unchecked
378- return ((ProcedureParameterExtractionAware <J >) getUserType () ).extract ( statement , paramName , session );
363+ return ((ProcedureParameterExtractionAware <J >) getUserType () )
364+ .extract ( statement , paramName , session );
379365 }
380366 else {
381367 throw new UnsupportedOperationException (
@@ -391,7 +377,8 @@ public int hashCode() {
391377
392378 @ Override
393379 public boolean equals (Object obj ) {
394- return ( obj instanceof CustomType ) && getUserType ().equals ( ( (CustomType <?>) obj ).getUserType () );
380+ return obj instanceof CustomType <?> customType
381+ && getUserType ().equals ( customType .getUserType () );
395382 }
396383
397384 @ Override
0 commit comments