package sk.stuba.fiit.perconik.utilities.reflect.resolver;
import com.google.common.collect.ImmutableList;
import static com.google.common.collect.Lists.asList;
public final class ClassResolvers {
private ClassResolvers() {}
public static ClassResolver forClassLoader(final ClassLoader loader) {
return new LoadingClassResolver(loader);
}
public static ClassResolver forSystemClassLoader() {
return forClassLoader(ClassLoader.getSystemClassLoader());
}
public static ClassResolver forClass(final Class<?> type) {
return forClassLoader(type.getClassLoader());
}
public static ClassResolver forObject(final Object object) {
return forClass(object.getClass());
}
public static ClassResolver forThread(final Thread thread) {
return forClassLoader(thread.getContextClassLoader());
}
public static ClassResolver forCurrentThread() {
return forThread(Thread.currentThread());
}
public static ClassResolver getDefault() {
return DefaultClassResolver.INSTANCE;
}
public static ClassResolver compose(final ClassResolver a, final ClassResolver b) {
return compose(ImmutableList.of(a, b));
}
public static ClassResolver compose(final ClassResolver a, final ClassResolver b, final ClassResolver ... rest) {
return compose(asList(a, b, rest));
}
public static ClassResolver compose(final Iterable<ClassResolver> resolvers) {
return new CompositeClassResolver(resolvers);
}
}