private static boolean isNullableNotNullCollectionConflict(@Nullable PsiType expectedType,
                                                             @Nullable PsiType assignedType,
                                                             @NotNull PsiFile place,
                                                             @NotNull Set<? super Couple<PsiType>> visited) {
    if (!visited.add(Couple.of(expectedType, assignedType))) return false;

    GlobalSearchScope scope = place.getResolveScope();
    if (isNullityConflict(JavaGenericsUtil.getCollectionItemType(expectedType, scope),
                          JavaGenericsUtil.getCollectionItemType(assignedType, scope))) {
      return true;
    }

    for (int i = 0; i <= 1; i++) {
      PsiType expectedArg = PsiUtil.substituteTypeParameter(expectedType, CommonClassNames.JAVA_UTIL_MAP, i, false);
      PsiType assignedArg = PsiUtil.substituteTypeParameter(assignedType, CommonClassNames.JAVA_UTIL_MAP, i, false);
      if (isNullityConflict(expectedArg, assignedArg) ||
          expectedArg != null && assignedArg != null && isNullableNotNullCollectionConflict(expectedArg, assignedArg, place, visited)) {
        return true;
      }
    }

    return false;
  }
private static boolean isNullableNotNullCollectionConflict(@Nullable PsiType expectedType,
                                                             @Nullable PsiType assignedType,
                                                             @NotNull PsiFile place,
                                                             @NotNull Set<? super Couple<PsiType>> visited)