From 5f0582baeff8e0b69848c895454cb0684ae14a4c Mon Sep 17 00:00:00 2001 From: Rawi01 Date: Mon, 9 Jan 2023 23:10:45 +0100 Subject: [fixes #3274] Reset erasure_field of symbol --- .../lombok/javac/handlers/HandleUtilityClass.java | 7 +++++-- src/stubs/com/sun/tools/javac/code/Symbol.java | 1 + .../after-delombok/UtilityClassGeneric.java | 21 +++++++++++++++++++++ .../resource/after-ecj/UtilityClassGeneric.java | 21 +++++++++++++++++++++ .../resource/before/UtilityClassGeneric.java | 18 ++++++++++++++++++ 5 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 test/transform/resource/after-delombok/UtilityClassGeneric.java create mode 100644 test/transform/resource/after-ecj/UtilityClassGeneric.java create mode 100644 test/transform/resource/before/UtilityClassGeneric.java diff --git a/src/core/lombok/javac/handlers/HandleUtilityClass.java b/src/core/lombok/javac/handlers/HandleUtilityClass.java index 716d6d63..b20aee3a 100644 --- a/src/core/lombok/javac/handlers/HandleUtilityClass.java +++ b/src/core/lombok/javac/handlers/HandleUtilityClass.java @@ -128,8 +128,11 @@ public class HandleUtilityClass extends JavacAnnotationHandler { JCClassDecl innerClassDecl = (JCClassDecl) element.get(); innerClassDecl.mods.flags |= Flags.STATIC; ClassSymbol innerClassSymbol = innerClassDecl.sym; - if (innerClassSymbol != null && innerClassSymbol.type instanceof ClassType) { - ((ClassType) innerClassSymbol.type).setEnclosingType(Type.noType); + if (innerClassSymbol != null) { + if (innerClassSymbol.type instanceof ClassType) { + ((ClassType) innerClassSymbol.type).setEnclosingType(Type.noType); + } + innerClassSymbol.erasure_field = null; } } } diff --git a/src/stubs/com/sun/tools/javac/code/Symbol.java b/src/stubs/com/sun/tools/javac/code/Symbol.java index f389f1a8..3a41edf9 100644 --- a/src/stubs/com/sun/tools/javac/code/Symbol.java +++ b/src/stubs/com/sun/tools/javac/code/Symbol.java @@ -25,6 +25,7 @@ public abstract class Symbol implements Element { public Type type; public Name name; public Symbol owner; + public Type erasure_field; public long flags() { return 0; } public boolean isStatic() { return false; } diff --git a/test/transform/resource/after-delombok/UtilityClassGeneric.java b/test/transform/resource/after-delombok/UtilityClassGeneric.java new file mode 100644 index 00000000..469d2d01 --- /dev/null +++ b/test/transform/resource/after-delombok/UtilityClassGeneric.java @@ -0,0 +1,21 @@ +final class UtilityClassGeneric { + static T convertValue(Class toValueType) { + return null; + } + + static DTO convert(Object json) { + return convertValue(DTO.class); + } + + static Object convert(DTO dto) { + return null; + } + + static class DTO { + } + + @java.lang.SuppressWarnings("all") + private UtilityClassGeneric() { + throw new java.lang.UnsupportedOperationException("This is a utility class and cannot be instantiated"); + } +} \ No newline at end of file diff --git a/test/transform/resource/after-ecj/UtilityClassGeneric.java b/test/transform/resource/after-ecj/UtilityClassGeneric.java new file mode 100644 index 00000000..2e163d24 --- /dev/null +++ b/test/transform/resource/after-ecj/UtilityClassGeneric.java @@ -0,0 +1,21 @@ +import lombok.experimental.UtilityClass; +final @UtilityClass class UtilityClassGeneric { + static class DTO { + DTO() { + super(); + } + } + static T convertValue(Class toValueType) { + return null; + } + static DTO convert(Object json) { + return convertValue(DTO.class); + } + static Object convert(DTO dto) { + return null; + } + private @java.lang.SuppressWarnings("all") UtilityClassGeneric() { + super(); + throw new java.lang.UnsupportedOperationException("This is a utility class and cannot be instantiated"); + } +} diff --git a/test/transform/resource/before/UtilityClassGeneric.java b/test/transform/resource/before/UtilityClassGeneric.java new file mode 100644 index 00000000..dcca51b4 --- /dev/null +++ b/test/transform/resource/before/UtilityClassGeneric.java @@ -0,0 +1,18 @@ +import lombok.experimental.UtilityClass; +@UtilityClass +class UtilityClassGeneric { + T convertValue(Class toValueType) { + return null; + } + + DTO convert(Object json) { + return convertValue(DTO.class); + } + + Object convert(DTO dto) { + return null; + } + + class DTO { + } +} -- cgit