From 77eeff16988bb46827764de49021caf9137d3199 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Tue, 14 May 2019 10:33:12 +0700 Subject: [PATCH] IDEA-212402 Inspection Use Objects.requireNonNull detected, but the fix not work for ParametersAreNonnullByDefault GitOrigin-RevId: f3d7caf333fdf02abdb4da5fa7aa873a9d33e0bd --- .../ObjectsRequireNonNullIntention.java | 5 +++-- .../objects_require_non_null/Container.java | 8 ++++++++ .../Container_after.java | 10 ++++++++++ .../ObjectsRequireNonNullIntentionTest.java | 19 +++++++++++-------- 4 files changed, 32 insertions(+), 10 deletions(-) create mode 100644 plugins/IntentionPowerPak/test/com/siyeh/ipp/asserttoif/objects_require_non_null/Container.java create mode 100644 plugins/IntentionPowerPak/test/com/siyeh/ipp/asserttoif/objects_require_non_null/Container_after.java diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/asserttoif/ObjectsRequireNonNullIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/asserttoif/ObjectsRequireNonNullIntention.java index d9c88041cfa2..bae833338210 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/asserttoif/ObjectsRequireNonNullIntention.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/asserttoif/ObjectsRequireNonNullIntention.java @@ -54,8 +54,9 @@ public class ObjectsRequireNonNullIntention extends Intention { return; } final PsiVariable variable = (PsiVariable)target; - final List notNulls = NullableNotNullManager.getInstance(element.getProject()).getNotNulls(); - final PsiAnnotation annotation = AnnotationUtil.findAnnotation(variable, notNulls); + NullableNotNullManager manager = NullableNotNullManager.getInstance(element.getProject()); + final NullabilityAnnotationInfo info = manager.findEffectiveNullabilityInfo(variable); + final PsiAnnotation annotation = info == null ? null : info.getAnnotation(); final CommentTracker commentTracker = new CommentTracker(); if (annotation == null) { final PsiStatement referenceStatement = PsiTreeUtil.getParentOfType(referenceExpression, PsiStatement.class); diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/asserttoif/objects_require_non_null/Container.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/asserttoif/objects_require_non_null/Container.java new file mode 100644 index 000000000000..8d4b75804d04 --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/asserttoif/objects_require_non_null/Container.java @@ -0,0 +1,8 @@ +@javax.annotation.ParametersAreNonnullByDefault +public class Test { + private final String message; + + public Test(String message) { + this.message = message; + } +} \ No newline at end of file diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/asserttoif/objects_require_non_null/Container_after.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/asserttoif/objects_require_non_null/Container_after.java new file mode 100644 index 000000000000..75b2b51b8ae8 --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/asserttoif/objects_require_non_null/Container_after.java @@ -0,0 +1,10 @@ +import java.util.Objects; + +@javax.annotation.ParametersAreNonnullByDefault +public class Test { + private final String message; + + public Test(String message) { + this.message = Objects.requireNonNull(message); + } +} \ No newline at end of file diff --git a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/asserttoif/ObjectsRequireNonNullIntentionTest.java b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/asserttoif/ObjectsRequireNonNullIntentionTest.java index 9b22a7f12ebb..9dc1ac5562fd 100644 --- a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/asserttoif/ObjectsRequireNonNullIntentionTest.java +++ b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/asserttoif/ObjectsRequireNonNullIntentionTest.java @@ -15,31 +15,34 @@ */ package com.siyeh.ipp.asserttoif; +import com.intellij.java.codeInspection.DataFlowInspectionTest; +import com.intellij.testFramework.LightProjectDescriptor; import com.siyeh.IntentionPowerPackBundle; import com.siyeh.ipp.IPPTestCase; +import org.jetbrains.annotations.NotNull; /** * @see com.siyeh.ipp.asserttoif.ObjectsRequireNonNullIntention * @author Bas Leijdekkers */ public class ObjectsRequireNonNullIntentionTest extends IPPTestCase { + @NotNull + @Override + protected LightProjectDescriptor getProjectDescriptor() { + return JAVA_8; + } @Override protected void setUp() throws Exception { super.setUp(); - myFixture.addClass("package java.util;\n" + - "public class Objects {\n" + - " public static T requireNonNull(T obj) {\n" + - " if (obj == null)\n" + - " throw new NullPointerException();\n" + - " return obj;\n" + - " }\n" + - "}"); + DataFlowInspectionTest.addJavaxNullabilityAnnotations(myFixture); + DataFlowInspectionTest.addJavaxDefaultNullabilityAnnotations(myFixture); } public void testOne() { doTest(); } public void testTwo() { doTest(); } public void testThree() { doTest(); } + public void testContainer() { doTest(); } @Override protected String getRelativePath() {