From 8aa54b7f25537e84d812adf39a563fbe0de9871d Mon Sep 17 00:00:00 2001 From: Rawi01 Date: Sat, 29 Apr 2023 09:24:11 +0200 Subject: [PATCH] [fixes #3416] Ignore annotations during array detection --- .../lombok/javac/handlers/HandleToString.java | 2 +- .../after-delombok/ToStringArray.java | 13 +++++++++++ .../ToStringArrayTypeAnnotations.java | 22 +++++++++++++++++++ .../resource/after-ecj/ToStringArray.java | 12 ++++++++++ .../ToStringArrayTypeAnnotations.java | 16 ++++++++++++++ .../resource/before/ToStringArray.java | 9 ++++++++ .../before/ToStringArrayTypeAnnotations.java | 15 +++++++++++++ 7 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 test/transform/resource/after-delombok/ToStringArray.java create mode 100644 test/transform/resource/after-delombok/ToStringArrayTypeAnnotations.java create mode 100644 test/transform/resource/after-ecj/ToStringArray.java create mode 100644 test/transform/resource/after-ecj/ToStringArrayTypeAnnotations.java create mode 100644 test/transform/resource/before/ToStringArray.java create mode 100644 test/transform/resource/before/ToStringArrayTypeAnnotations.java diff --git a/src/core/lombok/javac/handlers/HandleToString.java b/src/core/lombok/javac/handlers/HandleToString.java index 8a0bc686..8eccf079 100644 --- a/src/core/lombok/javac/handlers/HandleToString.java +++ b/src/core/lombok/javac/handlers/HandleToString.java @@ -206,7 +206,7 @@ public class HandleToString extends JavacAnnotationHandler { memberAccessor = createFieldAccessor(maker, memberNode, fieldAccess); } - JCExpression memberType = getFieldType(memberNode, fieldAccess); + JCExpression memberType = removeTypeUseAnnotations(getFieldType(memberNode, fieldAccess)); // The distinction between primitive and object will be useful if we ever add a 'hideNulls' option. @SuppressWarnings("unused") diff --git a/test/transform/resource/after-delombok/ToStringArray.java b/test/transform/resource/after-delombok/ToStringArray.java new file mode 100644 index 00000000..ffd614ad --- /dev/null +++ b/test/transform/resource/after-delombok/ToStringArray.java @@ -0,0 +1,13 @@ +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +public class ToStringArray { + int[] primitiveArray; + Object[] objectArray; + + @java.lang.Override + @java.lang.SuppressWarnings("all") + public java.lang.String toString() { + return "ToStringArray(primitiveArray=" + java.util.Arrays.toString(this.primitiveArray) + ", objectArray=" + java.util.Arrays.deepToString(this.objectArray) + ")"; + } +} diff --git a/test/transform/resource/after-delombok/ToStringArrayTypeAnnotations.java b/test/transform/resource/after-delombok/ToStringArrayTypeAnnotations.java new file mode 100644 index 00000000..dce4f2c4 --- /dev/null +++ b/test/transform/resource/after-delombok/ToStringArrayTypeAnnotations.java @@ -0,0 +1,22 @@ +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +public class ToStringArrayTypeAnnotations { + @TA + int[] primitiveArray1; + int @TA [] primitiveArray2; + @TA + Object[] objectArray1; + Object @TA [] objectArray2; + + + @Target({ElementType.TYPE_USE}) + @interface TA { + } + + @java.lang.Override + @java.lang.SuppressWarnings("all") + public java.lang.String toString() { + return "ToStringArrayTypeAnnotations(primitiveArray1=" + java.util.Arrays.toString(this.primitiveArray1) + ", primitiveArray2=" + java.util.Arrays.toString(this.primitiveArray2) + ", objectArray1=" + java.util.Arrays.deepToString(this.objectArray1) + ", objectArray2=" + java.util.Arrays.deepToString(this.objectArray2) + ")"; + } +} diff --git a/test/transform/resource/after-ecj/ToStringArray.java b/test/transform/resource/after-ecj/ToStringArray.java new file mode 100644 index 00000000..e6e69c85 --- /dev/null +++ b/test/transform/resource/after-ecj/ToStringArray.java @@ -0,0 +1,12 @@ +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; +public @lombok.ToString class ToStringArray { + int[] primitiveArray; + Object[] objectArray; + public ToStringArray() { + super(); + } + public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() { + return (((("ToStringArray(primitiveArray=" + java.util.Arrays.toString(this.primitiveArray)) + ", objectArray=") + java.util.Arrays.deepToString(this.objectArray)) + ")"); + } +} diff --git a/test/transform/resource/after-ecj/ToStringArrayTypeAnnotations.java b/test/transform/resource/after-ecj/ToStringArrayTypeAnnotations.java new file mode 100644 index 00000000..ef3ed4c1 --- /dev/null +++ b/test/transform/resource/after-ecj/ToStringArrayTypeAnnotations.java @@ -0,0 +1,16 @@ +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; +public @lombok.ToString class ToStringArrayTypeAnnotations { + @Target({ElementType.TYPE_USE}) @interface TA { + } + @TA int[] primitiveArray1; + int @TA [] primitiveArray2; + @TA Object[] objectArray1; + Object @TA [] objectArray2; + public ToStringArrayTypeAnnotations() { + super(); + } + public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() { + return (((((((("ToStringArrayTypeAnnotations(primitiveArray1=" + java.util.Arrays.toString(this.primitiveArray1)) + ", primitiveArray2=") + java.util.Arrays.toString(this.primitiveArray2)) + ", objectArray1=") + java.util.Arrays.deepToString(this.objectArray1)) + ", objectArray2=") + java.util.Arrays.deepToString(this.objectArray2)) + ")"); + } +} diff --git a/test/transform/resource/before/ToStringArray.java b/test/transform/resource/before/ToStringArray.java new file mode 100644 index 00000000..1d8f930f --- /dev/null +++ b/test/transform/resource/before/ToStringArray.java @@ -0,0 +1,9 @@ +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +@lombok.ToString +public class ToStringArray { + int[] primitiveArray; + + Object[] objectArray; +} \ No newline at end of file diff --git a/test/transform/resource/before/ToStringArrayTypeAnnotations.java b/test/transform/resource/before/ToStringArrayTypeAnnotations.java new file mode 100644 index 00000000..e53241cc --- /dev/null +++ b/test/transform/resource/before/ToStringArrayTypeAnnotations.java @@ -0,0 +1,15 @@ +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +@lombok.ToString +public class ToStringArrayTypeAnnotations { + @TA int[] primitiveArray1; + int @TA [] primitiveArray2; + + @TA Object[] objectArray1; + Object @TA [] objectArray2; + + @Target({ElementType.TYPE_USE}) + @interface TA { + } +} \ No newline at end of file