package com.googlecode.totallylazy;
import com.googlecode.totallylazy.predicates.LogicalPredicate;
import jdk.internal.org.objectweb.asm.Type;
import static com.googlecode.totallylazy.Option.none;
import static com.googlecode.totallylazy.Sequences.empty;
import static com.googlecode.totallylazy.Sequences.sequence;
public class Classes {
public static Option<Class<?>> forName(final String name) {
try {
return Option.<Class<?>>some(Class.forName(name));
} catch (Exception e) {
return none();
}
}
public static LogicalPredicate<Class<?>> isInstance(final Object instance) {
return new LogicalPredicate<Class<?>>() {
public boolean matches(Class<?> aClass) {
return aClass.isInstance(instance);
}
};
}
public static Sequence<Class<?>> allClasses(Class<?> aClass) {
if(aClass == null) return empty();
return sequence(aClass.getInterfaces()).
join(allClasses(aClass.getSuperclass())).
cons(aClass);
}
public static String filename(Class<?> aClass) {
return filename(aClass.getName());
}
public static String filename(String className) {
return className.replace('.', '/') + ".class";
}
public static byte[] bytes(Class<?> aClass){
return Bytes.bytes(aClass);
}
public static String classNameForSource(String sourceFilename) {
return sourceFilename.replace(".java", "").replace('/', '.');
}
public static String classNameForByteCode(String sourceFilename) {
return sourceFilename.replace(".class", "").replace('/', '.');
}
public static String classFilename(String className) {
return className.replace('.', '/') + ".class";
}
}