package tc.oc.commons.core.reflect; import java.util.Iterator; import com.google.common.reflect.TypeToken; /** * A {@link MinimalTypeSet} that guarantees that, immediately after a type is added to the set, * there is at least one member of the set that is assignable to that type. */ public class MinimalSupertypeSet<T> extends MinimalTypeSet<TypeToken<? super T>, Class<? super T>> { @Override protected boolean prune(TypeToken<? super T> adding) { for(Iterator<TypeToken<? super T>> iterator = iterator(); iterator.hasNext(); ) { final TypeToken<? super T> existing = iterator.next(); if(adding.isAssignableFrom(existing)) return false; if(existing.isAssignableFrom(adding)) iterator.remove(); } return true; } }