@Override
@SuppressWarnings({"rawtypes", "unchecked"})
public Converter<?> create(Type type, Genson genson) {
Map<Type, CircularConverter<?>> map = _circularConverters.get();
if (map == null) {
map = new HashMap<Type, CircularConverter<?>>();
_circularConverters.set(map);
}
if (_circularConverters.get().containsKey(type)) {
return _circularConverters.get().get(type);
} else {
try {
CircularConverter circularConverter = new CircularConverter();
try {
_circularConverters.get().put(type, circularConverter);
Converter converter = next().create(type, genson);
circularConverter.setDelegateConverter(converter);
return converter;
} finally {
circularConverter.initLatch.countDown();
}
} finally {
_circularConverters.get().remove(type);
}
}
}