[java-inspections] checkNullableNotNullInstantiationConflict: use createTypeFromText to preserve nullity

Part of IDEA-372347 Java type inference should respect nullability

GitOrigin-RevId: 433069762b1c7a5dff4b64f9708154a812137cd4
This commit is contained in:
Tagir Valeev
2025-05-30 15:00:26 +02:00
committed by intellij-monorepo-bot
parent 77f4733098
commit 96974e33ba

View File

@@ -369,20 +369,21 @@ public class NullableStuffInspectionBase extends AbstractBaseJavaLocalInspection
PsiTypeElement typeArgument = typeArguments[i];
Project project = element.getProject();
PsiType type = typeArgument.getType();
if (DfaPsiUtil.getTypeNullability(JavaPsiFacade.getElementFactory(project).createType(typeParameters[i])) ==
Nullability.NOT_NULL) {
Nullability typeNullability = DfaPsiUtil.getTypeNullability(type);
if (typeNullability != Nullability.NOT_NULL &&
!(typeNullability == Nullability.UNKNOWN && type instanceof PsiWildcardType && !((PsiWildcardType)type).isExtends())) {
String annotationToAdd = manager.getDefaultNotNull();
PsiClass annotationClass = JavaPsiFacade.getInstance(project).findClass(annotationToAdd, element.getResolveScope());
AddTypeAnnotationFix fix = null;
if (annotationClass != null &&
AnnotationTargetUtil.findAnnotationTarget(annotationClass, PsiAnnotation.TargetType.TYPE_USE) != null) {
fix = new AddTypeAnnotationFix(typeArgument, annotationToAdd, manager.getNullables());
}
reportProblem(holder, typeArgument, fix, "non.null.type.argument.is.expected");
String parameterName = typeParameters[i].getName();
if (parameterName == null) continue;
PsiType parameterType = JavaPsiFacade.getElementFactory(project).createTypeFromText(parameterName, typeParameters[i]);
if (DfaPsiUtil.getTypeNullability(parameterType) != Nullability.NOT_NULL) continue;
Nullability typeNullability = DfaPsiUtil.getTypeNullability(type);
if (typeNullability != Nullability.NOT_NULL &&
!(typeNullability == Nullability.UNKNOWN && type instanceof PsiWildcardType wildcardType && !wildcardType.isExtends())) {
String annotationToAdd = manager.getDefaultNotNull();
PsiClass annotationClass = JavaPsiFacade.getInstance(project).findClass(annotationToAdd, element.getResolveScope());
AddTypeAnnotationFix fix = null;
if (annotationClass != null &&
AnnotationTargetUtil.findAnnotationTarget(annotationClass, PsiAnnotation.TargetType.TYPE_USE) != null) {
fix = new AddTypeAnnotationFix(typeArgument, annotationToAdd, manager.getNullables());
}
reportProblem(holder, typeArgument, fix, "non.null.type.argument.is.expected");
}
}
}