TypeConstraint (@NotNull PsiElement id, @NotNull List<ClassDef> superClasses) { Exact[] supers = ContainerUtil.map2Array(superClasses, Exact.class, cls -> exactClass(cls)); if (ContainerUtil.or(supers, Exact::isFinal)) return BOTTOM; if (supers.length == 0) { supers = new Exact[]{EXACTLY_OBJECT}; } return new ExactSubclass(id, supers); }