Skip to content

Commit c51b9a7

Browse files
committed
removed GenericConversionService logging in order to avoid toString side effects (and to avoid isTraceEnabled overhead; SPR-8297)
1 parent 3ffc0a2 commit c51b9a7

File tree

1 file changed

+9
-87
lines changed

1 file changed

+9
-87
lines changed

org.springframework.core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java

Lines changed: 9 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2010 the original author or authors.
2+
* Copyright 2002-2011 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -27,9 +27,6 @@
2727
import java.util.Set;
2828
import java.util.concurrent.ConcurrentHashMap;
2929

30-
import org.apache.commons.logging.Log;
31-
import org.apache.commons.logging.LogFactory;
32-
3330
import org.springframework.core.GenericTypeResolver;
3431
import org.springframework.core.convert.ConversionFailedException;
3532
import org.springframework.core.convert.ConversionService;
@@ -40,7 +37,6 @@
4037
import org.springframework.core.convert.converter.ConverterFactory;
4138
import org.springframework.core.convert.converter.ConverterRegistry;
4239
import org.springframework.core.convert.converter.GenericConverter;
43-
import org.springframework.core.style.StylerUtils;
4440
import org.springframework.util.Assert;
4541
import org.springframework.util.ClassUtils;
4642

@@ -79,8 +75,6 @@ public String toString() {
7975
};
8076

8177

82-
private static final Log logger = LogFactory.getLog(GenericConversionService.class);
83-
8478
private final Map<Class<?>, Map<Class<?>, MatchableConverters>> converters =
8579
new HashMap<Class<?>, Map<Class<?>, MatchableConverters>>(36);
8680

@@ -135,57 +129,33 @@ public <T> T convert(Object source, Class<T> targetType) {
135129

136130
public boolean canConvert(TypeDescriptor sourceType, TypeDescriptor targetType) {
137131
assertNotNull(sourceType, targetType);
138-
if (logger.isTraceEnabled()) {
139-
logger.trace("Checking if I can convert " + sourceType + " to " + targetType);
140-
}
141132
if (sourceType == TypeDescriptor.NULL || targetType == TypeDescriptor.NULL) {
142-
logger.trace("Yes, I can convert");
143133
return true;
144134
}
145135
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);
154137
}
155138

156139
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
157140
assertNotNull(sourceType, targetType);
158-
if (logger.isDebugEnabled()) {
159-
logger.debug("Converting value " + StylerUtils.style(source) + " of " + sourceType + " to " + targetType);
160-
}
161141
if (sourceType == TypeDescriptor.NULL) {
162142
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);
168144
}
169145
if (targetType == TypeDescriptor.NULL) {
170-
logger.debug("Converted to null");
171146
return null;
172147
}
173148
Assert.isTrue(source == null || sourceType.getObjectType().isInstance(source));
174149
GenericConverter converter = getConverter(sourceType, targetType);
175150
if (converter == null) {
176151
if (source == null || targetType.getObjectType().isInstance(source)) {
177-
logger.debug("No converter found - returning assignable source object as-is");
178152
return source;
179153
}
180154
else {
181155
throw new ConverterNotFoundException(sourceType, targetType);
182156
}
183157
}
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);
189159
}
190160

191161
public String toString() {
@@ -229,44 +199,33 @@ protected Object convertNullSource(TypeDescriptor sourceType, TypeDescriptor tar
229199

230200
/**
231201
* 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.
233203
* On a cache miss, then performs an exhaustive search for a matching converter.
234204
* If no converter matches, returns the default converter.
235205
* Subclasses may override.
236206
* @param sourceType the source type to convert from
237207
* @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
239210
* @see #getDefaultConverter(TypeDescriptor, TypeDescriptor)
240211
*/
241212
protected GenericConverter getConverter(TypeDescriptor sourceType, TypeDescriptor targetType) {
242213
ConverterCacheKey key = new ConverterCacheKey(sourceType, targetType);
243214
GenericConverter converter = this.converterCache.get(key);
244215
if (converter != null) {
245-
if (logger.isTraceEnabled()) {
246-
logger.trace("Matched cached converter " + converter);
247-
}
248216
return (converter != NO_MATCH ? converter : null);
249217
}
250218
else {
251219
converter = findConverterForClassPair(sourceType, targetType);
252220
if (converter != null) {
253-
if (logger.isTraceEnabled()) {
254-
logger.trace("Caching under " + key);
255-
}
256221
this.converterCache.put(key, converter);
257222
return converter;
258223
}
259224
converter = getDefaultConverter(sourceType, targetType);
260225
if (converter != null) {
261-
if (logger.isTraceEnabled()) {
262-
logger.trace("Caching under " + key);
263-
}
264226
this.converterCache.put(key, converter);
265227
return converter;
266228
}
267-
if (logger.isTraceEnabled()) {
268-
logger.trace("Caching NO_MATCH under " + key);
269-
}
270229
this.converterCache.put(key, NO_MATCH);
271230
return null;
272231
}
@@ -282,13 +241,7 @@ protected GenericConverter getConverter(TypeDescriptor sourceType, TypeDescripto
282241
* @return the default generic converter that will perform the conversion
283242
*/
284243
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);
292245
}
293246

294247
// internal helpers
@@ -333,9 +286,6 @@ private GenericConverter findConverterForClassPair(TypeDescriptor sourceType, Ty
333286
classQueue.addFirst(sourceObjectType);
334287
while (!classQueue.isEmpty()) {
335288
Class<?> currentClass = classQueue.removeLast();
336-
if (logger.isTraceEnabled()) {
337-
logger.trace("Searching for converters indexed by sourceType [" + currentClass.getName() + "]");
338-
}
339289
Map<Class<?>, MatchableConverters> converters = getTargetConvertersForSource(currentClass);
340290
GenericConverter converter = getMatchingConverterForTarget(sourceType, targetType, converters);
341291
if (converter != null) {
@@ -354,9 +304,6 @@ private GenericConverter findConverterForClassPair(TypeDescriptor sourceType, Ty
354304
classQueue.addFirst(sourceObjectType);
355305
while (!classQueue.isEmpty()) {
356306
Class<?> currentClass = classQueue.removeLast();
357-
if (logger.isTraceEnabled()) {
358-
logger.trace("Searching for converters indexed by sourceType [" + currentClass.getName() + "]");
359-
}
360307
Map<Class<?>, MatchableConverters> converters = getTargetConvertersForSource(currentClass);
361308
GenericConverter converter = getMatchingConverterForTarget(sourceType, targetType, converters);
362309
if (converter != null) {
@@ -402,9 +349,6 @@ private GenericConverter getMatchingConverterForTarget(TypeDescriptor sourceType
402349
classQueue.addFirst(targetObjectType);
403350
while (!classQueue.isEmpty()) {
404351
Class<?> currentClass = classQueue.removeLast();
405-
if (logger.isTraceEnabled()) {
406-
logger.trace("and indexed by targetType [" + currentClass.getName() + "]");
407-
}
408352
MatchableConverters matchable = converters.get(currentClass);
409353
GenericConverter converter = matchConverter(matchable, sourceType, targetType);
410354
if (converter != null) {
@@ -415,19 +359,13 @@ private GenericConverter getMatchingConverterForTarget(TypeDescriptor sourceType
415359
classQueue.addFirst(ifc);
416360
}
417361
}
418-
if (logger.isTraceEnabled()) {
419-
logger.trace("and indexed by [java.lang.Object]");
420-
}
421362
return matchConverter(converters.get(Object.class), sourceType, targetType);
422363
}
423364
else {
424365
LinkedList<Class<?>> classQueue = new LinkedList<Class<?>>();
425366
classQueue.addFirst(targetObjectType);
426367
while (!classQueue.isEmpty()) {
427368
Class<?> currentClass = classQueue.removeLast();
428-
if (logger.isTraceEnabled()) {
429-
logger.trace("and indexed by targetType [" + currentClass.getName() + "]");
430-
}
431369
MatchableConverters matchable = converters.get(currentClass);
432370
GenericConverter converter = matchConverter(matchable, sourceType, targetType);
433371
if (converter != null) {
@@ -469,12 +407,10 @@ private GenericConverter matchConverter(
469407
if (matchable == null) {
470408
return null;
471409
}
472-
if (logger.isTraceEnabled()) {
473-
logger.trace("Found matchable converters " + matchable);
474-
}
475410
return matchable.matchConverter(sourceFieldType, targetFieldType);
476411
}
477412

413+
478414
@SuppressWarnings("unchecked")
479415
private final class ConverterAdapter implements GenericConverter {
480416

@@ -556,25 +492,11 @@ public void add(GenericConverter converter) {
556492
public GenericConverter matchConverter(TypeDescriptor sourceType, TypeDescriptor targetType) {
557493
if (this.conditionalConverters != null) {
558494
for (ConditionalGenericConverter conditional : this.conditionalConverters) {
559-
if (logger.isTraceEnabled()) {
560-
logger.trace("Matching " + conditional);
561-
}
562495
if (conditional.matches(sourceType, targetType)) {
563-
if (logger.isTraceEnabled()) {
564-
logger.trace("Matched converter " + conditional);
565-
}
566496
return conditional;
567497
}
568-
else {
569-
if (logger.isTraceEnabled()) {
570-
logger.trace("Did not match converter " + conditional);
571-
}
572-
}
573498
}
574499
}
575-
if (this.defaultConverter != null && logger.isTraceEnabled()) {
576-
logger.trace("Matched converter " + this.defaultConverter);
577-
}
578500
return this.defaultConverter;
579501
}
580502

0 commit comments

Comments
 (0)