From 1599bc1ce4a2440322af7a1183828c5f65dcc237 Mon Sep 17 00:00:00 2001 From: Rawi01 Date: Sun, 30 Apr 2023 11:36:22 +0200 Subject: [PATCH] Remove record component annotations when using Zulu JDK --- .../lombok/javac/handlers/JavacHandlerUtil.java | 17 ++++++++++++++--- src/utils/lombok/permit/Permit.java | 4 ++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/core/lombok/javac/handlers/JavacHandlerUtil.java b/src/core/lombok/javac/handlers/JavacHandlerUtil.java index 80228b56..9cfb883f 100644 --- a/src/core/lombok/javac/handlers/JavacHandlerUtil.java +++ b/src/core/lombok/javac/handlers/JavacHandlerUtil.java @@ -586,29 +586,40 @@ public class JavacHandlerUtil { static class RecordComponentReflect { private static final Field astField; + private static final Field originalAnnos; private static final Method findRecordComponentToRemove; static { Field a = null; + Field o = null; Method m = null; try { Class forName = Class.forName("com.sun.tools.javac.code.Symbol$RecordComponent"); a = Permit.permissiveGetField(forName, "ast"); + o = Permit.permissiveGetField(forName, "originalAnnos"); m = Permit.permissiveGetMethod(ClassSymbol.class, "findRecordComponentToRemove", JCVariableDecl.class); } catch (Throwable e) { // Ignore } astField = a; + originalAnnos = o; findRecordComponentToRemove = m; } static void deleteAnnotation(JCClassDecl record, JCVariableDecl component, JCTree annotation) { - if (astField == null || findRecordComponentToRemove == null) return; + if ((astField == null && originalAnnos == null) || findRecordComponentToRemove == null) return; try { Object toRemove = Permit.invokeSneaky(findRecordComponentToRemove, record.sym, component); - JCVariableDecl variable = (JCVariableDecl) Permit.get(astField, toRemove); - variable.mods.annotations = filterListByPos(variable.mods.annotations, annotation); + if (astField != null) { + // OpenJDK + JCVariableDecl variable = Permit.get(astField, toRemove); + variable.mods.annotations = filterListByPos(variable.mods.annotations, annotation); + } else { + // Zulu JDK 17 + List annotations = Permit.get(originalAnnos, toRemove); + Permit.set(originalAnnos, toRemove, filterListByPos(annotations, annotation)); + } } catch (Throwable e) { // Ignore } diff --git a/src/utils/lombok/permit/Permit.java b/src/utils/lombok/permit/Permit.java index af97a807..477f06c1 100644 --- a/src/utils/lombok/permit/Permit.java +++ b/src/utils/lombok/permit/Permit.java @@ -297,9 +297,9 @@ public class Permit { } } - public static Object get(Field f, Object receiver) throws IllegalAccessException { + public static T get(Field f, Object receiver) throws IllegalAccessException { try { - return f.get(receiver); + return (T) f.get(receiver); } catch (IllegalAccessException e) { handleReflectionDebug(e, null); throw e;