/***********************************************************************************
* Copyright (c) 2013. Nickolay Gerilovich. Russia.
* Some Rights Reserved.
************************************************************************************/
package com.github.nickvl.xspring.core.log.aop;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
/**
* Detects if a class has overridden toString method.
* TODO consider ConcurrentReferenceHashMap
*/
final class ToStringDetector {
public static final ToStringDetector INSTANCE = new ToStringDetector();
private final ConcurrentMap<Class<?>, Boolean> cache = new ConcurrentHashMap<Class<?>, Boolean>();
private ToStringDetector() {
}
public boolean hasToString(Class<?> clazz) {
try {
Boolean hasToString = cache.get(clazz);
if (hasToString != null) {
return hasToString;
}
hasToString = clazz.getMethod("toString").getDeclaringClass() != Object.class;
cache.putIfAbsent(clazz, hasToString);
return hasToString;
} catch (NoSuchMethodException e) {
throw new InternalError("method toString() not found in class: " + clazz);
}
}
}