From d03ceed72271f007bea3f4c3c06b4535b3b59a28 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 10 Jul 2019 11:09:59 +0200 Subject: [PATCH] NullableStuffInspection: don't check hierarchy for @NotNull on primitive type (IDEA-217864) GitOrigin-RevId: 0ecb2dd0809071c98c5e0ae25d7d82020af955a1 --- .../nullable/NullableStuffInspectionBase.java | 16 ++++++++------ ...ridingChecksOnInapplicableAnnotations.java | 21 +++++++++++++++++++ .../NullableStuffInspectionTest.java | 5 +++++ 3 files changed, 36 insertions(+), 6 deletions(-) create mode 100644 java/java-tests/testData/inspection/nullableProblems/NoOverridingChecksOnInapplicableAnnotations.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/nullable/NullableStuffInspectionBase.java b/java/java-analysis-impl/src/com/intellij/codeInspection/nullable/NullableStuffInspectionBase.java index d837a3e7de90..81fec1e746dd 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/nullable/NullableStuffInspectionBase.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/nullable/NullableStuffInspectionBase.java @@ -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 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)) { diff --git a/java/java-tests/testData/inspection/nullableProblems/NoOverridingChecksOnInapplicableAnnotations.java b/java/java-tests/testData/inspection/nullableProblems/NoOverridingChecksOnInapplicableAnnotations.java new file mode 100644 index 000000000000..49b726cc5159 --- /dev/null +++ b/java/java-tests/testData/inspection/nullableProblems/NoOverridingChecksOnInapplicableAnnotations.java @@ -0,0 +1,21 @@ +import org.jetbrains.annotations.NotNull; + +class HelperClazz { + + abstract class ClassA { + + @NotNull + abstract void aMethod(); + + abstract void bMethod(@NotNull int a); + } + + class ClassB extends ClassA { + + @Override + void aMethod() {} + + @Override + void bMethod(int a) {} + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/NullableStuffInspectionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/NullableStuffInspectionTest.java index 353a3357ab4f..d5c3cd9ad7cc 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/NullableStuffInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/NullableStuffInspectionTest.java @@ -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);