boolean (@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; }