ClassComparator.java

package emissary.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ClassComparator {

    private static final Logger logger = LoggerFactory.getLogger(ClassComparator.class);

    /** This class is not meant to be instantiated. */
    private ClassComparator() {}

    @SuppressWarnings("SystemOut")
    public static void main(final String[] args) {

        if (args.length < 2) {
            System.err.println("usage: java emissary.Util class1 class2");
            return;
        }

        if (ClassComparator.isa(args[0], args[1])) {
            System.err.println(args[1] + " isa " + args[0]);
        }
    }

    public static boolean isa(final String one, final String two) {
        String currentTwo = two;
        try {
            while (currentTwo != null) {
                logger.debug("Check {} and {}", one, currentTwo);
                if (one.equals(currentTwo)) {
                    return true;
                }
                final Class<?> c = Class.forName(currentTwo).getSuperclass();
                if (c == null) {
                    logger.debug("Out with a null superclass from two {}", currentTwo);
                    break;
                }
                currentTwo = c.getName();
            }
        } catch (Exception ex) {
            logger.debug("one={}, two={}", one, currentTwo, ex);
        }
        return false;
    }

    public static boolean isaImplementation(Class<? extends Object> clazz, Class<? extends Object> iface) {
        return iface.isAssignableFrom(clazz);
    }
}