NullableStuffInspection: don't check hierarchy for @NotNull on primitive type (IDEA-217864)

GitOrigin-RevId: 0ecb2dd0809071c98c5e0ae25d7d82020af955a1
This commit is contained in:
peter
2019-07-10 13:03:18 +03:00
committed by intellij-monorepo-bot
parent 349df3fdce
commit d03ceed722
3 changed files with 36 additions and 6 deletions
@@ -739,6 +739,7 @@ public class NullableStuffInspectionBase extends AbstractBaseJavaLocalInspection
PsiParameter[] parameters = method.getParameterList().getParameters();
for (int i = 0; i < parameters.length; i++) {
PsiParameter parameter = parameters[i];
if (parameter.getType() instanceof PsiPrimitiveType) continue;
List<PsiParameter> superParameters = new ArrayList<>();
for (PsiMethod superMethod : superMethods) {
@@ -843,15 +844,18 @@ public class NullableStuffInspectionBase extends AbstractBaseJavaLocalInspection
@NotNull NullableNotNullManager nullableManager) {
PsiParameter[] parameters = method.getParameterList().getParameters();
if (REPORT_ANNOTATION_NOT_PROPAGATED_TO_OVERRIDERS) {
boolean[] parameterAnnotated = new boolean[parameters.length];
boolean[] checkParameter = new boolean[parameters.length];
boolean[] parameterQuickFixSuggested = new boolean[parameters.length];
boolean hasAnnotatedParameter = false;
for (int i = 0; i < parameters.length; i++) {
PsiParameter parameter = parameters[i];
parameterAnnotated[i] = isNotNullNotInferred(parameter, false, false) && !hasInheritableNotNull(parameter);
hasAnnotatedParameter |= parameterAnnotated[i];
checkParameter[i] = isNotNullNotInferred(parameter, false, false) &&
!hasInheritableNotNull(parameter) &&
!(parameter.getType() instanceof PsiPrimitiveType);
hasAnnotatedParameter |= checkParameter[i];
}
if (hasAnnotatedParameter || annotated.isDeclaredNotNull && !hasInheritableNotNull(method)) {
boolean checkReturnType = annotated.isDeclaredNotNull && !hasInheritableNotNull(method) && !(method.getReturnType() instanceof PsiPrimitiveType);
if (hasAnnotatedParameter || checkReturnType) {
final String defaultNotNull = nullableManager.getDefaultNotNull();
final boolean superMethodApplicable = AnnotationUtil.isAnnotatingApplicable(method, defaultNotNull);
PsiMethod[] overridings =
@@ -861,7 +865,7 @@ public class NullableStuffInspectionBase extends AbstractBaseJavaLocalInspection
if (shouldSkipOverriderAsGenerated(overriding)) continue;
if (!methodQuickFixSuggested
&& annotated.isDeclaredNotNull
&& checkReturnType
&& !isNotNullNotInferred(overriding, false, false)
&& (isNullableNotInferred(overriding, false) || !isNullableNotInferred(overriding, true))
&& AddAnnotationPsiFix.isAvailable(overriding, defaultNotNull)) {
@@ -888,7 +892,7 @@ public class NullableStuffInspectionBase extends AbstractBaseJavaLocalInspection
for (int i = 0; i < psiParameters.length; i++) {
if (parameterQuickFixSuggested[i]) continue;
PsiParameter parameter = psiParameters[i];
if (parameterAnnotated[i] &&
if (checkParameter[i] &&
!isNotNullNotInferred(parameter, false, false) &&
!isNullableNotInferred(parameter, false) &&
AddAnnotationPsiFix.isAvailable(parameter, defaultNotNull)) {
@@ -0,0 +1,21 @@
import org.jetbrains.annotations.NotNull;
class HelperClazz {
abstract class ClassA {
<warning descr="Primitive type members cannot be annotated">@NotNull</warning>
abstract void aMethod();
abstract void bMethod(<warning descr="Primitive type members cannot be annotated">@NotNull</warning> int a);
}
class ClassB extends ClassA {
@Override
void aMethod() {}
@Override
void bMethod(int a) {}
}
}
@@ -97,6 +97,11 @@ public class NullableStuffInspectionTest extends LightJavaCodeInsightFixtureTest
doTest();
}
public void testNoOverridingChecksOnInapplicableAnnotations() {
myInspection.REPORT_ANNOTATION_NOT_PROPAGATED_TO_OVERRIDERS = true;
doTest();
}
public void testOverriddenMethodsWithDefaults() {
DataFlowInspectionTest.addJavaxNullabilityAnnotations(myFixture);
DataFlowInspectionTest.addJavaxDefaultNullabilityAnnotations(myFixture);