mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
report when notnull type is instantiated with unknown nullity (IDEA-CR-21203)
This commit is contained in:
+5
-5
@@ -180,13 +180,13 @@ public class NullableStuffInspectionBase extends BaseJavaBatchLocalInspectionToo
|
||||
if (element instanceof PsiClass) {
|
||||
PsiTypeParameter[] typeParameters = ((PsiClass)element).getTypeParameters();
|
||||
PsiTypeElement[] typeArguments = getReferenceTypeArguments(reference);
|
||||
if (typeParameters.length > 0 && typeParameters.length == typeArguments.length) {
|
||||
if (typeParameters.length > 0 && typeParameters.length == typeArguments.length && !(typeArguments[0].getType() instanceof PsiDiamondType)) {
|
||||
for (int i = 0; i < typeParameters.length; i++) {
|
||||
if (isNullityConflict(JavaPsiFacade.getElementFactory(element.getProject()).createType(typeParameters[i]), typeArguments[i].getType())) {
|
||||
if (DfaPsiUtil.getTypeNullability(JavaPsiFacade.getElementFactory(element.getProject()).createType(typeParameters[i])) ==
|
||||
Nullness.NOT_NULL && DfaPsiUtil.getTypeNullability(typeArguments[i].getType()) != Nullness.NOT_NULL) {
|
||||
holder.registerProblem(typeArguments[i],
|
||||
"Nullable type argument where non-null one is expected",
|
||||
"Non-null type argument is expected",
|
||||
ProblemHighlightType.GENERIC_ERROR_OR_WARNING);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -302,7 +302,7 @@ public class NullableStuffInspectionBase extends BaseJavaBatchLocalInspectionToo
|
||||
if (isNullableOverridingNotNull(check(targetMethod, holder, expression.getType()), superMethod)) {
|
||||
holder.registerProblem(refName,
|
||||
InspectionsBundle.message("inspection.nullable.problems.Nullable.method.overrides.NotNull",
|
||||
getPresentableAnnoName((PsiMethod)targetMethod), getPresentableAnnoName(superMethod)),
|
||||
getPresentableAnnoName(targetMethod), getPresentableAnnoName(superMethod)),
|
||||
ProblemHighlightType.GENERIC_ERROR_OR_WARNING);
|
||||
}
|
||||
else if (isNonAnnotatedOverridingNotNull(targetMethod, superMethod)) {
|
||||
|
||||
+3
-7
@@ -3,13 +3,9 @@ import java.util.*;
|
||||
|
||||
class MyList<T extends @NotNull Number> extends ArrayList<T> {}
|
||||
|
||||
class SubList extends MyList<<warning descr="Nullable type argument where non-null one is expected">@Nullable Integer</warning>> {
|
||||
MyList<<warning descr="Nullable type argument where non-null one is expected">@Nullable Integer</warning>> myList;
|
||||
class SubList extends MyList<<warning descr="Non-null type argument is expected">@Nullable Integer</warning>> {
|
||||
MyList<<warning descr="Non-null type argument is expected">@Nullable Integer</warning>> myList;
|
||||
}
|
||||
|
||||
class MyNonNullGenericClass<T extends @NotNull Object> {
|
||||
public static void test() {
|
||||
MyNonNullGenericClass<<warning descr="Nullable type argument where non-null one is expected">@Nullable String</warning>> foo = new MyNonNullGenericClass<>();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
import typeUse.*;
|
||||
import java.util.*;
|
||||
|
||||
class MyNonNullGenericClass<T extends @NotNull Object> {
|
||||
public static void test() {
|
||||
MyNonNullGenericClass<<warning descr="Non-null type argument is expected">@Nullable String</warning>> foo = new MyNonNullGenericClass<>();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
class Parent<A extends @Nullable Object, B extends @NotNull Object> { }
|
||||
class Child<A, B> extends Parent<B, <warning descr="Non-null type argument is expected">A</warning>> {
|
||||
void test2() {
|
||||
Parent<@Nullable String, <warning descr="Non-null type argument is expected">@Nullable String</warning>> p = new Parent<>();
|
||||
Child<@Nullable String, @Nullable String> c = new Child<>();
|
||||
}
|
||||
}
|
||||
+5
@@ -217,4 +217,9 @@ public class NullableStuffInspectionTest extends LightCodeInsightFixtureTestCase
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testNotNullTypeArgumentWithNullableSuperType() {
|
||||
DataFlowInspection8Test.setupTypeUseAnnotations("typeUse", myFixture);
|
||||
doTest();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user