1
1
/*
2
- * Copyright 2002-2010 the original author or authors.
2
+ * Copyright 2002-2011 the original author or authors.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
27
27
import java .util .Set ;
28
28
import java .util .concurrent .ConcurrentHashMap ;
29
29
30
- import org .apache .commons .logging .Log ;
31
- import org .apache .commons .logging .LogFactory ;
32
-
33
30
import org .springframework .core .GenericTypeResolver ;
34
31
import org .springframework .core .convert .ConversionFailedException ;
35
32
import org .springframework .core .convert .ConversionService ;
40
37
import org .springframework .core .convert .converter .ConverterFactory ;
41
38
import org .springframework .core .convert .converter .ConverterRegistry ;
42
39
import org .springframework .core .convert .converter .GenericConverter ;
43
- import org .springframework .core .style .StylerUtils ;
44
40
import org .springframework .util .Assert ;
45
41
import org .springframework .util .ClassUtils ;
46
42
@@ -79,8 +75,6 @@ public String toString() {
79
75
};
80
76
81
77
82
- private static final Log logger = LogFactory .getLog (GenericConversionService .class );
83
-
84
78
private final Map <Class <?>, Map <Class <?>, MatchableConverters >> converters =
85
79
new HashMap <Class <?>, Map <Class <?>, MatchableConverters >>(36 );
86
80
@@ -135,57 +129,33 @@ public <T> T convert(Object source, Class<T> targetType) {
135
129
136
130
public boolean canConvert (TypeDescriptor sourceType , TypeDescriptor targetType ) {
137
131
assertNotNull (sourceType , targetType );
138
- if (logger .isTraceEnabled ()) {
139
- logger .trace ("Checking if I can convert " + sourceType + " to " + targetType );
140
- }
141
132
if (sourceType == TypeDescriptor .NULL || targetType == TypeDescriptor .NULL ) {
142
- logger .trace ("Yes, I can convert" );
143
133
return true ;
144
134
}
145
135
GenericConverter converter = getConverter (sourceType , targetType );
146
- if (converter != null ) {
147
- logger .trace ("Yes, I can convert" );
148
- return true ;
149
- }
150
- else {
151
- logger .trace ("No, I cannot convert" );
152
- return false ;
153
- }
136
+ return (converter != null );
154
137
}
155
138
156
139
public Object convert (Object source , TypeDescriptor sourceType , TypeDescriptor targetType ) {
157
140
assertNotNull (sourceType , targetType );
158
- if (logger .isDebugEnabled ()) {
159
- logger .debug ("Converting value " + StylerUtils .style (source ) + " of " + sourceType + " to " + targetType );
160
- }
161
141
if (sourceType == TypeDescriptor .NULL ) {
162
142
Assert .isTrue (source == null , "The value must be null if sourceType == TypeDescriptor.NULL" );
163
- Object result = convertNullSource (sourceType , targetType );
164
- if (logger .isDebugEnabled ()) {
165
- logger .debug ("Converted to " + StylerUtils .style (result ));
166
- }
167
- return result ;
143
+ return convertNullSource (sourceType , targetType );
168
144
}
169
145
if (targetType == TypeDescriptor .NULL ) {
170
- logger .debug ("Converted to null" );
171
146
return null ;
172
147
}
173
148
Assert .isTrue (source == null || sourceType .getObjectType ().isInstance (source ));
174
149
GenericConverter converter = getConverter (sourceType , targetType );
175
150
if (converter == null ) {
176
151
if (source == null || targetType .getObjectType ().isInstance (source )) {
177
- logger .debug ("No converter found - returning assignable source object as-is" );
178
152
return source ;
179
153
}
180
154
else {
181
155
throw new ConverterNotFoundException (sourceType , targetType );
182
156
}
183
157
}
184
- Object result = ConversionUtils .invokeConverter (converter , source , sourceType , targetType );
185
- if (logger .isDebugEnabled ()) {
186
- logger .debug ("Converted to " + StylerUtils .style (result ));
187
- }
188
- return result ;
158
+ return ConversionUtils .invokeConverter (converter , source , sourceType , targetType );
189
159
}
190
160
191
161
public String toString () {
@@ -229,44 +199,33 @@ protected Object convertNullSource(TypeDescriptor sourceType, TypeDescriptor tar
229
199
230
200
/**
231
201
* Hook method to lookup the converter for a given sourceType/targetType pair.
232
- * First queries this ConversionService's converter cache.
202
+ * <p> First queries this ConversionService's converter cache.
233
203
* On a cache miss, then performs an exhaustive search for a matching converter.
234
204
* If no converter matches, returns the default converter.
235
205
* Subclasses may override.
236
206
* @param sourceType the source type to convert from
237
207
* @param targetType the target type to convert to
238
- * @return the generic converter that will perform the conversion, or <code>null</code> if no suitable converter was found
208
+ * @return the generic converter that will perform the conversion,
209
+ * or <code>null</code> if no suitable converter was found
239
210
* @see #getDefaultConverter(TypeDescriptor, TypeDescriptor)
240
211
*/
241
212
protected GenericConverter getConverter (TypeDescriptor sourceType , TypeDescriptor targetType ) {
242
213
ConverterCacheKey key = new ConverterCacheKey (sourceType , targetType );
243
214
GenericConverter converter = this .converterCache .get (key );
244
215
if (converter != null ) {
245
- if (logger .isTraceEnabled ()) {
246
- logger .trace ("Matched cached converter " + converter );
247
- }
248
216
return (converter != NO_MATCH ? converter : null );
249
217
}
250
218
else {
251
219
converter = findConverterForClassPair (sourceType , targetType );
252
220
if (converter != null ) {
253
- if (logger .isTraceEnabled ()) {
254
- logger .trace ("Caching under " + key );
255
- }
256
221
this .converterCache .put (key , converter );
257
222
return converter ;
258
223
}
259
224
converter = getDefaultConverter (sourceType , targetType );
260
225
if (converter != null ) {
261
- if (logger .isTraceEnabled ()) {
262
- logger .trace ("Caching under " + key );
263
- }
264
226
this .converterCache .put (key , converter );
265
227
return converter ;
266
228
}
267
- if (logger .isTraceEnabled ()) {
268
- logger .trace ("Caching NO_MATCH under " + key );
269
- }
270
229
this .converterCache .put (key , NO_MATCH );
271
230
return null ;
272
231
}
@@ -282,13 +241,7 @@ protected GenericConverter getConverter(TypeDescriptor sourceType, TypeDescripto
282
241
* @return the default generic converter that will perform the conversion
283
242
*/
284
243
protected GenericConverter getDefaultConverter (TypeDescriptor sourceType , TypeDescriptor targetType ) {
285
- if (sourceType .isAssignableTo (targetType )) {
286
- logger .trace ("Matched default NO_OP_CONVERTER" );
287
- return NO_OP_CONVERTER ;
288
- }
289
- else {
290
- return null ;
291
- }
244
+ return (sourceType .isAssignableTo (targetType ) ? NO_OP_CONVERTER : null );
292
245
}
293
246
294
247
// internal helpers
@@ -333,9 +286,6 @@ private GenericConverter findConverterForClassPair(TypeDescriptor sourceType, Ty
333
286
classQueue .addFirst (sourceObjectType );
334
287
while (!classQueue .isEmpty ()) {
335
288
Class <?> currentClass = classQueue .removeLast ();
336
- if (logger .isTraceEnabled ()) {
337
- logger .trace ("Searching for converters indexed by sourceType [" + currentClass .getName () + "]" );
338
- }
339
289
Map <Class <?>, MatchableConverters > converters = getTargetConvertersForSource (currentClass );
340
290
GenericConverter converter = getMatchingConverterForTarget (sourceType , targetType , converters );
341
291
if (converter != null ) {
@@ -354,9 +304,6 @@ private GenericConverter findConverterForClassPair(TypeDescriptor sourceType, Ty
354
304
classQueue .addFirst (sourceObjectType );
355
305
while (!classQueue .isEmpty ()) {
356
306
Class <?> currentClass = classQueue .removeLast ();
357
- if (logger .isTraceEnabled ()) {
358
- logger .trace ("Searching for converters indexed by sourceType [" + currentClass .getName () + "]" );
359
- }
360
307
Map <Class <?>, MatchableConverters > converters = getTargetConvertersForSource (currentClass );
361
308
GenericConverter converter = getMatchingConverterForTarget (sourceType , targetType , converters );
362
309
if (converter != null ) {
@@ -402,9 +349,6 @@ private GenericConverter getMatchingConverterForTarget(TypeDescriptor sourceType
402
349
classQueue .addFirst (targetObjectType );
403
350
while (!classQueue .isEmpty ()) {
404
351
Class <?> currentClass = classQueue .removeLast ();
405
- if (logger .isTraceEnabled ()) {
406
- logger .trace ("and indexed by targetType [" + currentClass .getName () + "]" );
407
- }
408
352
MatchableConverters matchable = converters .get (currentClass );
409
353
GenericConverter converter = matchConverter (matchable , sourceType , targetType );
410
354
if (converter != null ) {
@@ -415,19 +359,13 @@ private GenericConverter getMatchingConverterForTarget(TypeDescriptor sourceType
415
359
classQueue .addFirst (ifc );
416
360
}
417
361
}
418
- if (logger .isTraceEnabled ()) {
419
- logger .trace ("and indexed by [java.lang.Object]" );
420
- }
421
362
return matchConverter (converters .get (Object .class ), sourceType , targetType );
422
363
}
423
364
else {
424
365
LinkedList <Class <?>> classQueue = new LinkedList <Class <?>>();
425
366
classQueue .addFirst (targetObjectType );
426
367
while (!classQueue .isEmpty ()) {
427
368
Class <?> currentClass = classQueue .removeLast ();
428
- if (logger .isTraceEnabled ()) {
429
- logger .trace ("and indexed by targetType [" + currentClass .getName () + "]" );
430
- }
431
369
MatchableConverters matchable = converters .get (currentClass );
432
370
GenericConverter converter = matchConverter (matchable , sourceType , targetType );
433
371
if (converter != null ) {
@@ -469,12 +407,10 @@ private GenericConverter matchConverter(
469
407
if (matchable == null ) {
470
408
return null ;
471
409
}
472
- if (logger .isTraceEnabled ()) {
473
- logger .trace ("Found matchable converters " + matchable );
474
- }
475
410
return matchable .matchConverter (sourceFieldType , targetFieldType );
476
411
}
477
412
413
+
478
414
@ SuppressWarnings ("unchecked" )
479
415
private final class ConverterAdapter implements GenericConverter {
480
416
@@ -556,25 +492,11 @@ public void add(GenericConverter converter) {
556
492
public GenericConverter matchConverter (TypeDescriptor sourceType , TypeDescriptor targetType ) {
557
493
if (this .conditionalConverters != null ) {
558
494
for (ConditionalGenericConverter conditional : this .conditionalConverters ) {
559
- if (logger .isTraceEnabled ()) {
560
- logger .trace ("Matching " + conditional );
561
- }
562
495
if (conditional .matches (sourceType , targetType )) {
563
- if (logger .isTraceEnabled ()) {
564
- logger .trace ("Matched converter " + conditional );
565
- }
566
496
return conditional ;
567
497
}
568
- else {
569
- if (logger .isTraceEnabled ()) {
570
- logger .trace ("Did not match converter " + conditional );
571
- }
572
- }
573
498
}
574
499
}
575
- if (this .defaultConverter != null && logger .isTraceEnabled ()) {
576
- logger .trace ("Matched converter " + this .defaultConverter );
577
- }
578
500
return this .defaultConverter ;
579
501
}
580
502
0 commit comments