public static @NotNull TypeConstraint exactSubtype(@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;
  }
public static @NotNull TypeConstraint exactSubtype(@NotNull PsiElement id, @NotNull PsiType superType)