TypeConstraint (@NotNull PsiElement id, @NotNull PsiType superType) { superType = normalizeType(superType); if (superType instanceof PsiClassType) { Exact exact = createExact(superType); if (exact != null && !exact.isFinal()) { return new ExactSubclass(id, exact); } } if (superType instanceof PsiIntersectionType intersectionType) { List<Exact> supers = new ArrayList<>(); for (PsiType conjunct : intersectionType.getConjuncts()) { Exact exact = createExact(conjunct); if (exact == null || exact.isFinal()) return BOTTOM; supers.add(exact); } return new ExactSubclass(id, supers.toArray(new Exact[0])); } return BOTTOM; }