public static boolean typeIsAssignableFrom(PsiClass from, String... toFQN) { if (from == null) return false; Set<String> matching = new HashSet<String>(Arrays.asList(toFQN)); PsiClass cls = from; do { if (matching.contains(cls.getQualifiedName())) return true; for (PsiClass interfaceClass : cls.getInterfaces()) { if (typeIsAssignableFrom(interfaceClass, toFQN)) { return true; } } } while ((cls = cls.getSuperClass()) != null); return false; }