boolean (@NotNull Exact other) { if (equals(other) || other instanceof Unresolved || other == EXACTLY_OBJECT) return true; if (other instanceof ArraySuperInterface) { if (classDef.isInterface()) return true; if (!classDef.isFinal()) return true; return classDef.isInheritor(((ArraySuperInterface)other).myReference); } if (other instanceof ExactClass exactClass) { return classDef.isConvertible(exactClass.classDef); } if (other instanceof ExactSubclass subclass) { for (Exact superClass : subclass.mySupers) { if (isConvertibleFrom(superClass)) return true; } } return false; }