From 61bf6f49a8c97a6202f42540533f96b71434ef36 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Fri, 25 Jun 2021 13:57:45 +0700 Subject: [PATCH] [java-analysis] Eclipse annotations: TYPE_BOUND/TYPE_ARGUMENT targets should not apply to mixed places like FIELD+TYPE_USE Fixes IDEA-272286 org.eclipse.jdt.annotation.NonNullByDefault should not add @NonNull to Local variables GitOrigin-RevId: a9c8f21ea5e50ef4696d2c98e5a0b01e40dd1797 --- .../codeInsight/annoPackages/EclipseAnnotationSupport.java | 3 ++- .../inspection/dataFlow/fixture/EclipseDefaultTypeUse.java | 4 ++++ .../NullabilityAnnotationNoConflict.after.java | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/annoPackages/EclipseAnnotationSupport.java b/java/java-impl/src/com/intellij/codeInsight/annoPackages/EclipseAnnotationSupport.java index a747e9f90d3d..853312a18f13 100644 --- a/java/java-impl/src/com/intellij/codeInsight/annoPackages/EclipseAnnotationSupport.java +++ b/java/java-impl/src/com/intellij/codeInsight/annoPackages/EclipseAnnotationSupport.java @@ -45,7 +45,8 @@ class EclipseAnnotationSupport implements AnnotationPackageSupport { else if (value instanceof PsiLiteralExpression && Boolean.FALSE.equals(((PsiLiteralExpression)value).getValue())) { targets = ArrayUtil.EMPTY_STRING_ARRAY; } - boolean targetApplies = StreamEx.of(targets).map(TARGET_MAP::get).nonNull().anyMatch(loc -> ArrayUtil.contains(loc, types)); + boolean targetApplies = StreamEx.of(targets).map(TARGET_MAP::get).nonNull() + .anyMatch(loc -> loc == PsiAnnotation.TargetType.TYPE_USE ? types.length == 1 && types[0] == loc : ArrayUtil.contains(loc, types)); return new NullabilityAnnotationInfo(anno, targetApplies ? Nullability.NOT_NULL : Nullability.UNKNOWN, true); } return null; diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/EclipseDefaultTypeUse.java b/java/java-tests/testData/inspection/dataFlow/fixture/EclipseDefaultTypeUse.java index dbf69af7a285..4e8f1a4a533c 100644 --- a/java/java-tests/testData/inspection/dataFlow/fixture/EclipseDefaultTypeUse.java +++ b/java/java-tests/testData/inspection/dataFlow/fixture/EclipseDefaultTypeUse.java @@ -16,6 +16,10 @@ public class EclipseDefaultTypeUse { // List::add is not annotated but ArrayList is defined in context of TYPE_USE NonNullByDefault annotation a.add(null); } + + void local() { + String s = null; + } } @NonNullByDefault @FunctionalInterface diff --git a/java/java-tests/testData/refactoring/introduceVariable/NullabilityAnnotationNoConflict.after.java b/java/java-tests/testData/refactoring/introduceVariable/NullabilityAnnotationNoConflict.after.java index 88660cb07b66..340cc774c4ce 100644 --- a/java/java-tests/testData/refactoring/introduceVariable/NullabilityAnnotationNoConflict.after.java +++ b/java/java-tests/testData/refactoring/introduceVariable/NullabilityAnnotationNoConflict.after.java @@ -9,7 +9,7 @@ import java.lang.annotation.*; @NonNullByDefault class X { void test() { - String x = Y.getFoo(); + @NonNull String x = Y.getFoo(); } }