From 983a6c1d3abd007304cdbe48e3937ea333afd682 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Wed, 20 May 2020 15:38:21 +0700 Subject: [PATCH] Inherit type annotations for arrays Fixes IDEA-240571 "implement method" action works bad with arrays notnulled twice GitOrigin-RevId: 3014f528f6af966153ae4dc8c821240fca3d9d79 --- .../generation/GenerateMembersUtil.java | 3 ++- .../src/com/intellij/psi/GenericsUtil.java | 2 +- .../implementMethods/afterNotNullArray.java | 25 +++++++++++++++++++ .../implementMethods/beforeNotNullArray.java | 15 +++++++++++ 4 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/implementMethods/afterNotNullArray.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/implementMethods/beforeNotNullArray.java diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java index df96978306e6..cfc198871fbe 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java @@ -446,7 +446,8 @@ public class GenerateMembersUtil { generator.addExistingName(paramName); PsiType expressionType = GenericsUtil.getVariableTypeByExpressionType(substituted); if (expressionType instanceof PsiArrayType && substituted instanceof PsiEllipsisType) { - expressionType = new PsiEllipsisType(((PsiArrayType)expressionType).getComponentType()); + expressionType = new PsiEllipsisType(((PsiArrayType)expressionType).getComponentType()) + .annotate(expressionType.getAnnotationProvider()); } result[i] = factory.createParameter(paramName, expressionType, target); } diff --git a/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java b/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java index 56265effb8d5..3965682cb200 100644 --- a/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java @@ -321,7 +321,7 @@ public class GenericsUtil { if (type instanceof PsiWildcardType) { type = ((PsiWildcardType)type).getBound(); } - return type != null ? type.createArrayType() : arrayType; + return type != null ? type.createArrayType().annotate(arrayType.getAnnotationProvider()) : arrayType; } @Override diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/implementMethods/afterNotNullArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/implementMethods/afterNotNullArray.java new file mode 100644 index 000000000000..797829f66459 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/implementMethods/afterNotNullArray.java @@ -0,0 +1,25 @@ +// "Implement methods" "true" +package org.jetbrains.annotations; + +import java.lang.annotation.*; + +abstract class Test { + abstract void foo(@NotNull String @NotNull[] data); + + abstract void foo2(@NotNull String @NotNull ... data); +} + +class TImple extends Test { + @Override + void foo(@NotNull String @NotNull [] data) { + + } + + @Override + void foo2(@NotNull String @NotNull ... data) { + + } +} + +@Target({ElementType.PARAMETER, ElementType.TYPE_USE}) +@interface NotNull {} diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/implementMethods/beforeNotNullArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/implementMethods/beforeNotNullArray.java new file mode 100644 index 000000000000..da92f63e511c --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/implementMethods/beforeNotNullArray.java @@ -0,0 +1,15 @@ +// "Implement methods" "true" +package org.jetbrains.annotations; + +import java.lang.annotation.*; + +abstract class Test { + abstract void foo(@NotNull String @NotNull[] data); + + abstract void foo2(@NotNull String @NotNull ... data); +} + +class TImple extends Test {} + +@Target({ElementType.PARAMETER, ElementType.TYPE_USE}) +@interface NotNull {}