package org.geotools.factory;
import java.util.HashSet;
import java.util.Set;
class RecursionCheckingHelper {
private final ThreadLocal<Set> threadLocalSet = new ThreadLocal<Set>();
boolean addAndCheck(Object item) {
Set set = threadLocalSet.get();
if(set == null) {
set = new HashSet<Class<?>>();
threadLocalSet.set(set);
}
return set.add(item);
}
boolean contains(Object item) {
Set<Class<?>> set = threadLocalSet.get();
if(set == null) {
return false;
}
return set.contains(item);
}
void removeAndCheck(Object item) {
Set<Class<?>> set = threadLocalSet.get();
if(set == null) {
throw new AssertionError(null); // Should never happen.
} else if(!set.remove(item)) {
throw new AssertionError(item); // Should never happen.
}
if(set.isEmpty()) {
threadLocalSet.remove();
}
}
}