From 8aff1fed7105dfd928bc07d9af6f8f4aa445aad4 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Fri, 23 Feb 2024 10:34:48 +0100 Subject: [PATCH] [java] Preserve type annotations when generating getters and setters Fixes IDEA-196894 Generating accessors should insert nullability annotations automatically when corresponding fields have them GitOrigin-RevId: a24d1288e4b3c82f0baa6216b6d84e9b5da29b76 --- .../codeInsight/GenerateGetterSetterTest.java | 40 ++++++++++++++++++- .../java/generate/element/ElementFactory.java | 2 +- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/GenerateGetterSetterTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/GenerateGetterSetterTest.java index 93f0bcfa4b79..d2f9ce9f871a 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/GenerateGetterSetterTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/GenerateGetterSetterTest.java @@ -167,7 +167,9 @@ public class GenerateGetterSetterTest extends LightJavaCodeInsightFixtureTestCas } public void testNullableStuff() { - myFixture.addClass("package org.jetbrains.annotations;\n" + "public @interface NotNull {}"); + myFixture.addClass(""" + package org.jetbrains.annotations; + public @interface NotNull {}"""); myFixture.configureByText("a.java", """ class Foo { @org.jetbrains.annotations.NotNull @@ -197,6 +199,42 @@ public class GenerateGetterSetterTest extends LightJavaCodeInsightFixtureTestCas """); } + public void testNullableStuffTypeUse() { + myFixture.addClass(""" + package org.jetbrains.annotations; + import java.lang.annotation.ElementType; + import java.lang.annotation.Target; + + @Target(ElementType.TYPE_USE) + public @interface NotNull {}"""); + myFixture.configureByText("a.java", """ + class Foo { + @org.jetbrains.annotations.NotNull + private String myName; + + + } + """); + generateGetter(); + generateSetter(); + myFixture.checkResult(""" + import org.jetbrains.annotations.NotNull; + + class Foo { + @org.jetbrains.annotations.NotNull + private String myName; + + public void setMyName(@NotNull String myName) { + this.myName = myName; + } + + public @NotNull String getMyName() { + return myName; + } + } + """); + } + public void testLombokGeneratedFieldsWithoutContainingFile() { ServiceContainerUtil.registerExtension(ApplicationManager.getApplication(), GenerateAccessorProviderRegistrar.EP_NAME, new NotNullFunction>() { diff --git a/plugins/generate-tostring/src/org/jetbrains/java/generate/element/ElementFactory.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/element/ElementFactory.java index 70ea34dba76e..0b47d479b641 100644 --- a/plugins/generate-tostring/src/org/jetbrains/java/generate/element/ElementFactory.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/element/ElementFactory.java @@ -167,7 +167,7 @@ public final class ElementFactory { // type names element.setTypeName(PsiAdapter.getTypeClassName(type)); element.setTypeQualifiedName(PsiAdapter.getTypeQualifiedClassName(type)); - element.setType(type.getCanonicalText()); + element.setType(type.getCanonicalText(true)); // arrays, collections and maps types if (PsiAdapter.isObjectArrayType(type)) {