From 98d980decad1f70112bbe934504c789185366ebf Mon Sep 17 00:00:00 2001 From: Rawi01 Date: Tue, 27 May 2025 08:23:04 +0200 Subject: [PATCH 1/4] Use simpler addScriptIfWitness for patch --- src/eclipseAgent/lombok/eclipse/agent/EclipsePatcher.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/eclipseAgent/lombok/eclipse/agent/EclipsePatcher.java b/src/eclipseAgent/lombok/eclipse/agent/EclipsePatcher.java index 201be4a8..f9a9acef 100644 --- a/src/eclipseAgent/lombok/eclipse/agent/EclipsePatcher.java +++ b/src/eclipseAgent/lombok/eclipse/agent/EclipsePatcher.java @@ -333,7 +333,7 @@ public class EclipsePatcher implements AgentLauncher.AgentLaunchable { .transplant() .build()); - sm.addScriptIfComplexWitness(new String[][] {OSGI_TYPES, new String[] {"org/eclipse/jdt/internal/compiler/parser/TerminalToken"}}, ScriptBuilder.replaceMethodCall() + sm.addScriptIfWitness(OSGI_TYPES, ScriptBuilder.replaceMethodCall() .target(new MethodTarget("org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteAnalyzer", "visit")) .methodToReplace(new Hook("org.eclipse.jdt.internal.core.dom.rewrite.TokenScanner", "getTokenEndOffset", "int", "org.eclipse.jdt.internal.compiler.parser.TerminalToken", "int")) .replacementMethod(new Hook("lombok.launch.PatchFixesHider$PatchFixes", "getTokenEndOffsetFixed", "int", "org.eclipse.jdt.internal.core.dom.rewrite.TokenScanner", "java.lang.Object", "int", "java.lang.Object")) From 45f0da2050720ca960c5139b34d4346486e20111 Mon Sep 17 00:00:00 2001 From: Rawi01 Date: Mon, 26 May 2025 22:42:21 +0200 Subject: [PATCH 2/4] [fixes #3883] Support records in upcoming eclipse version --- buildScripts/setup.ant.xml | 2 + src/core/lombok/eclipse/EclipseAST.java | 37 +++++++++++++++---- .../eclipse/handlers/HandleLockedUtil.java | 4 +- .../eclipse/handlers/HandleNonNull.java | 23 +++++++++--- .../eclipse/handlers/HandleSynchronized.java | 4 +- .../lombok/eclipse/agent/EclipsePatcher.java | 19 +++++++++- .../lombok/launch/PatchFixesHider.java | 6 ++- .../after-ecj/BuilderOnNestedRecord.java | 2 - .../after-ecj/BuilderSimpleOnRecord.java | 2 - .../after-ecj/BuilderSingularOnRecord.java | 3 -- .../after-ecj/ConstructorsOnRecord.java | 2 - .../resource/after-ecj/DataOnRecord.java | 2 - .../resource/after-ecj/DelegateOnRecord.java | 1 - .../after-ecj/EqualsAndHashCodeOnRecord.java | 2 - .../after-ecj/FieldDefaultsOnRecord.java | 2 - .../FieldDefaultsViaConfigOnRecord.java | 2 - .../after-ecj/FieldNameConstantsOnRecord.java | 4 -- .../resource/after-ecj/GetterOnRecord.java | 2 - .../after-ecj/JacksonizedOnRecord.java | 2 - .../resource/after-ecj/LockedInRecord.java | 3 -- .../after-ecj/LoggerConfigOnRecord.java | 2 - .../after-ecj/LoggerFloggerRecord.java | 1 - .../after-ecj/LoggerSlf4jOnRecord.java | 2 - .../NonNullExistingConstructorOnRecord.java | 2 - .../NonNullOnRecordExistingConstructor.java | 5 +-- .../NonNullOnRecordExistingSetter.java | 1 - .../after-ecj/NonNullOnRecordSimple.java | 2 - .../after-ecj/NonNullOnRecordTypeUse.java | 3 -- .../resource/after-ecj/SetterOnRecord.java | 2 - .../after-ecj/SynchronizedInRecord.java | 3 -- .../resource/after-ecj/ToStringOnRecord.java | 2 - .../after-ecj/UtilityClassOnRecord.java | 2 - .../resource/after-ecj/ValueOnRecord.java | 2 - .../resource/after-ecj/WithByOnRecord.java | 2 - .../after-ecj/WithByOnRecordComponent.java | 2 - .../after-ecj/WithOnNestedRecord.java | 2 - .../resource/after-ecj/WithOnRecord.java | 2 - .../after-ecj/WithOnRecordComponent.java | 2 - 38 files changed, 80 insertions(+), 83 deletions(-) diff --git a/buildScripts/setup.ant.xml b/buildScripts/setup.ant.xml index 639c7203..9ddf877a 100644 --- a/buildScripts/setup.ant.xml +++ b/buildScripts/setup.ant.xml @@ -205,6 +205,8 @@ This buildfile is part of projectlombok.org. It sets up the build itself. + + diff --git a/src/core/lombok/eclipse/EclipseAST.java b/src/core/lombok/eclipse/EclipseAST.java index 4a0854a4..a7fa876f 100644 --- a/src/core/lombok/eclipse/EclipseAST.java +++ b/src/core/lombok/eclipse/EclipseAST.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2021 The Project Lombok Authors. + * Copyright (C) 2009-2025 The Project Lombok Authors. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -40,6 +40,7 @@ import org.eclipse.core.runtime.Path; import org.eclipse.jdt.internal.compiler.CompilationResult; import org.eclipse.jdt.internal.compiler.ast.ASTNode; import org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration; +import org.eclipse.jdt.internal.compiler.ast.AbstractVariableDeclaration; import org.eclipse.jdt.internal.compiler.ast.Annotation; import org.eclipse.jdt.internal.compiler.ast.Argument; import org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration; @@ -354,7 +355,7 @@ public class EclipseAST extends AST { case TYPE: return buildType((TypeDeclaration) node); case FIELD: - return buildField((FieldDeclaration) node, null); + return buildField((FieldDeclaration) node); case INITIALIZER: return buildInitializer((Initializer) node); case METHOD: @@ -393,17 +394,38 @@ public class EclipseAST extends AST { private EclipseNode buildType(TypeDeclaration type) { if (setAndGetAsHandled(type)) return null; List childNodes = new ArrayList(); - childNodes.addAll(buildFields(type.fields, getRecordFieldAnnotations(type))); + childNodes.addAll(buildRecordComponents(getRecordComponents(type))); + childNodes.addAll(buildFields(type.fields)); childNodes.addAll(buildTypes(type.memberTypes)); childNodes.addAll(buildMethods(type.methods)); childNodes.addAll(buildAnnotations(type.annotations, false)); return putInMap(new EclipseNode(this, type, childNodes, Kind.TYPE)); } - private Collection buildFields(FieldDeclaration[] children, Annotation[][] annotations) { + private Collection buildRecordComponents(AbstractVariableDeclaration[] children) { List childNodes = new ArrayList(); if (children != null) for (int i = 0; i < children.length; i++) { - addIfNotNull(childNodes, buildField(children[i], annotations[i])); + addIfNotNull(childNodes, buildRecordComponent(children[i])); + } + return childNodes; + } + + private EclipseNode buildRecordComponent(AbstractVariableDeclaration field) { + List childNodes = new ArrayList(); + addIfNotNull(childNodes, buildTypeUse(field.type)); + addIfNotNull(childNodes, buildStatement(field.initialization)); + childNodes.addAll(buildAnnotations(field.annotations, true)); + FieldDeclaration fieldDeclaration = new FieldDeclaration(field.name, field.sourceStart, field.sourceEnd); + fieldDeclaration.type = field.type; + fieldDeclaration.modifiers = field.modifiers | Eclipse.AccRecord; + fieldDeclaration.annotations = field.annotations; + return putInMap(new EclipseNode(this, fieldDeclaration, childNodes, Kind.FIELD)); + } + + private Collection buildFields(FieldDeclaration[] children) { + List childNodes = new ArrayList(); + if (children != null) for (int i = 0; i < children.length; i++) { + addIfNotNull(childNodes, buildField(children[i])); } return childNodes; } @@ -414,13 +436,14 @@ public class EclipseAST extends AST { return list; } - private EclipseNode buildField(FieldDeclaration field, Annotation[] annotations) { + private EclipseNode buildField(FieldDeclaration field) { if (field instanceof Initializer) return buildInitializer((Initializer) field); if (setAndGetAsHandled(field)) return null; + if (isRecordField(field)) return null; List childNodes = new ArrayList(); addIfNotNull(childNodes, buildTypeUse(field.type)); addIfNotNull(childNodes, buildStatement(field.initialization)); - childNodes.addAll(buildAnnotations(annotations != null ? annotations : field.annotations, true)); + childNodes.addAll(buildAnnotations(field.annotations, true)); return putInMap(new EclipseNode(this, field, childNodes, Kind.FIELD)); } diff --git a/src/core/lombok/eclipse/handlers/HandleLockedUtil.java b/src/core/lombok/eclipse/handlers/HandleLockedUtil.java index 2e13fd86..a0199913 100644 --- a/src/core/lombok/eclipse/handlers/HandleLockedUtil.java +++ b/src/core/lombok/eclipse/handlers/HandleLockedUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 The Project Lombok Authors. + * Copyright (C) 2024-2025 The Project Lombok Authors. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -87,6 +87,8 @@ public final class HandleLockedUtil { if (methodNode == null || methodNode.getKind() != AST.Kind.METHOD || !(methodNode.get() instanceof MethodDeclaration)) return; MethodDeclaration method = (MethodDeclaration) methodNode.get(); if (method.isAbstract()) return; + EclipseNode typeNode = upToTypeNode(annotationNode); + if (isRecord(typeNode)) return; createLockField(annotationValue, annotationNode, lockTypeClass, lockImplClass, new AtomicBoolean(method.isStatic()), false); } diff --git a/src/core/lombok/eclipse/handlers/HandleNonNull.java b/src/core/lombok/eclipse/handlers/HandleNonNull.java index 0138c7fb..e34fe277 100644 --- a/src/core/lombok/eclipse/handlers/HandleNonNull.java +++ b/src/core/lombok/eclipse/handlers/HandleNonNull.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013-2021 The Project Lombok Authors. + * Copyright (C) 2013-2025 The Project Lombok Authors. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -168,10 +168,15 @@ public class HandleNonNull extends EclipseAnnotationHandler { } } if (posToInsert == -1) { - AbstractMethodDeclaration[] na = new AbstractMethodDeclaration[td.methods.length + 1]; - posToInsert = td.methods.length; - System.arraycopy(td.methods, 0, na, 0, posToInsert); - td.methods = na; + if (td.methods == null) { + td.methods = new AbstractMethodDeclaration[1]; + posToInsert = 0; + } else { + posToInsert = td.methods.length; + AbstractMethodDeclaration[] na = new AbstractMethodDeclaration[posToInsert + 1]; + System.arraycopy(td.methods, 0, na, 0, posToInsert); + td.methods = na; + } } ConstructorDeclaration cd = new ConstructorDeclaration(((CompilationUnitDeclaration) typeNode.top().get()).compilationResult); @@ -186,8 +191,9 @@ public class HandleNonNull extends EclipseAnnotationHandler { for (int i = 0; i < cd.arguments.length; i++) { FieldDeclaration cmp = recordComponents.get(i); - cd.arguments[i] = new Argument(cmp.name, cmp.sourceStart, cmp.type, 0); + cd.arguments[i] = new Argument(cmp.name, cmp.sourceStart, cmp.type, cmp.modifiers); cd.arguments[i].bits = ASTNode.IsArgument | ASTNode.IgnoreRawTypeCheck | ASTNode.IsReachable; + cd.arguments[i].annotations = cmp.annotations; FieldReference lhs = new FieldReference(cmp.name, 0); lhs.receiver = new ThisReference(0, 0); SingleNameReference rhs = new SingleNameReference(cmp.name, 0); @@ -304,6 +310,11 @@ public class HandleNonNull extends EclipseAnnotationHandler { return; } + if ((param.modifiers & AccRecord) != 0) { + addNullCheckIfNeeded(declaration, param, annotationNode); + node.up().rebuild(); + } + if (!force && isGenerated(declaration)) return; if (declaration.isAbstract()) { diff --git a/src/core/lombok/eclipse/handlers/HandleSynchronized.java b/src/core/lombok/eclipse/handlers/HandleSynchronized.java index fb30772c..087bc051 100644 --- a/src/core/lombok/eclipse/handlers/HandleSynchronized.java +++ b/src/core/lombok/eclipse/handlers/HandleSynchronized.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2024 The Project Lombok Authors. + * Copyright (C) 2009-2025 The Project Lombok Authors. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -69,6 +69,8 @@ public class HandleSynchronized extends EclipseAnnotationHandler { if (methodNode == null || methodNode.getKind() != Kind.METHOD || !(methodNode.get() instanceof MethodDeclaration)) return; MethodDeclaration method = (MethodDeclaration) methodNode.get(); if (method.isAbstract()) return; + EclipseNode typeNode = upToTypeNode(annotationNode); + if (isRecord(typeNode)) return; createLockField(annotation, annotationNode, new boolean[] {method.isStatic()}, false); diff --git a/src/eclipseAgent/lombok/eclipse/agent/EclipsePatcher.java b/src/eclipseAgent/lombok/eclipse/agent/EclipsePatcher.java index f9a9acef..0c2de06d 100644 --- a/src/eclipseAgent/lombok/eclipse/agent/EclipsePatcher.java +++ b/src/eclipseAgent/lombok/eclipse/agent/EclipsePatcher.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2024 The Project Lombok Authors. + * Copyright (C) 2009-2025 The Project Lombok Authors. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -1156,6 +1156,23 @@ public class EclipsePatcher implements AgentLauncher.AgentLaunchable { .request(StackRequest.THIS, StackRequest.PARAM2) .transplant() .build()); + + // Remove implicit record fields in tests + sm.addScriptIfWitness(ECLIPSE_TEST_CLASSES, ScriptBuilder.exitEarly() + .target(new MethodTarget("org.eclipse.jdt.internal.compiler.ast.FieldDeclaration", "print", "java.lang.StringBuilder", "int", "java.lang.StringBuilder")) + .decisionMethod(new Hook("lombok.launch.PatchFixesHider$Tests", "isRecordComponent", "boolean", "org.eclipse.jdt.internal.compiler.ast.FieldDeclaration", "java.lang.Object")) + .valueMethod(new Hook("lombok.launch.PatchFixesHider$Tests", "returnStringBuilder", "java.lang.StringBuilder", "java.lang.Object", "java.lang.StringBuilder")) + .request(StackRequest.THIS, StackRequest.PARAM2) + .transplant() + .build()); + + sm.addScriptIfWitness(ECLIPSE_TEST_CLASSES, ScriptBuilder.exitEarly() + .target(new MethodTarget("org.eclipse.jdt.internal.compiler.ast.FieldDeclaration", "print", "java.lang.StringBuffer", "int", "java.lang.StringBuffer")) + .decisionMethod(new Hook("lombok.launch.PatchFixesHider$Tests", "isRecordComponent", "boolean", "org.eclipse.jdt.internal.compiler.ast.FieldDeclaration", "java.lang.Object")) + .valueMethod(new Hook("lombok.launch.PatchFixesHider$Tests", "returnStringBuffer", "java.lang.StringBuffer", "java.lang.Object", "java.lang.StringBuffer")) + .request(StackRequest.THIS, StackRequest.PARAM2) + .transplant() + .build()); } } diff --git a/src/eclipseAgent/lombok/launch/PatchFixesHider.java b/src/eclipseAgent/lombok/launch/PatchFixesHider.java index 673186c0..40af3db2 100755 --- a/src/eclipseAgent/lombok/launch/PatchFixesHider.java +++ b/src/eclipseAgent/lombok/launch/PatchFixesHider.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2024 The Project Lombok Authors. + * Copyright (C) 2010-2025 The Project Lombok Authors. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -1117,6 +1117,10 @@ final class PatchFixesHider { return (method.bits & IsCanonicalConstructor) != 0 && (method.bits & IsImplicit) != 0; } + public static boolean isRecordComponent(FieldDeclaration field, Object parameter) { + return (field.modifiers & AccRecord) != 0; + } + public static StringBuffer returnStringBuffer(Object p1, StringBuffer buffer) { return buffer; } diff --git a/test/transform/resource/after-ecj/BuilderOnNestedRecord.java b/test/transform/resource/after-ecj/BuilderOnNestedRecord.java index 61737b17..8bcc1819 100644 --- a/test/transform/resource/after-ecj/BuilderOnNestedRecord.java +++ b/test/transform/resource/after-ecj/BuilderOnNestedRecord.java @@ -19,10 +19,8 @@ public record BuilderOnNestedRecord(T t) { return (("BuilderOnNestedRecord.Nested.NestedBuilder(a=" + this.a) + ")"); } } -/* Implicit */ private final String a; public static @java.lang.SuppressWarnings("all") @lombok.Generated BuilderOnNestedRecord.Nested.NestedBuilder builder() { return new BuilderOnNestedRecord.Nested.NestedBuilder(); } } -/* Implicit */ private final T t; } diff --git a/test/transform/resource/after-ecj/BuilderSimpleOnRecord.java b/test/transform/resource/after-ecj/BuilderSimpleOnRecord.java index fac87407..022de16a 100644 --- a/test/transform/resource/after-ecj/BuilderSimpleOnRecord.java +++ b/test/transform/resource/after-ecj/BuilderSimpleOnRecord.java @@ -28,8 +28,6 @@ public @lombok.Builder(access = lombok.AccessLevel.PROTECTED) record BuilderSimp return (((("BuilderSimpleOnRecord.BuilderSimpleOnRecordBuilder(l=" + this.l) + ", a=") + this.a) + ")"); } } -/* Implicit */ private final List l; -/* Implicit */ private final String a; protected static @java.lang.SuppressWarnings("all") @lombok.Generated BuilderSimpleOnRecord.BuilderSimpleOnRecordBuilder builder() { return new BuilderSimpleOnRecord.BuilderSimpleOnRecordBuilder(); } diff --git a/test/transform/resource/after-ecj/BuilderSingularOnRecord.java b/test/transform/resource/after-ecj/BuilderSingularOnRecord.java index 4dcdb6eb..3f8aa464 100644 --- a/test/transform/resource/after-ecj/BuilderSingularOnRecord.java +++ b/test/transform/resource/after-ecj/BuilderSingularOnRecord.java @@ -114,9 +114,6 @@ public @Builder record BuilderSingularOnRecord(List children, Collection scarves return (((((("BuilderSingularOnRecord.BuilderSingularOnRecordBuilder(children=" + this.children) + ", scarves=") + this.scarves) + ", rawList=") + this.rawList) + ")"); } } -/* Implicit */ private final List children; -/* Implicit */ private final Collection scarves; -/* Implicit */ private final List rawList; public static @java.lang.SuppressWarnings("all") @lombok.Generated BuilderSingularOnRecord.BuilderSingularOnRecordBuilder builder() { return new BuilderSingularOnRecord.BuilderSingularOnRecordBuilder(); } diff --git a/test/transform/resource/after-ecj/ConstructorsOnRecord.java b/test/transform/resource/after-ecj/ConstructorsOnRecord.java index 87d9e69c..f330e33d 100644 --- a/test/transform/resource/after-ecj/ConstructorsOnRecord.java +++ b/test/transform/resource/after-ecj/ConstructorsOnRecord.java @@ -3,6 +3,4 @@ import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; import lombok.RequiredArgsConstructor; public @AllArgsConstructor @RequiredArgsConstructor @NoArgsConstructor record ConstructorsOnRecord(String a, String b) { -/* Implicit */ private final String a; -/* Implicit */ private final String b; } diff --git a/test/transform/resource/after-ecj/DataOnRecord.java b/test/transform/resource/after-ecj/DataOnRecord.java index 047706a7..f85a6e29 100644 --- a/test/transform/resource/after-ecj/DataOnRecord.java +++ b/test/transform/resource/after-ecj/DataOnRecord.java @@ -1,6 +1,4 @@ // version 14: import lombok.Data; public @Data record DataOnRecord(String a, String b) { -/* Implicit */ private final String a; -/* Implicit */ private final String b; } diff --git a/test/transform/resource/after-ecj/DelegateOnRecord.java b/test/transform/resource/after-ecj/DelegateOnRecord.java index 7194a014..a462b557 100644 --- a/test/transform/resource/after-ecj/DelegateOnRecord.java +++ b/test/transform/resource/after-ecj/DelegateOnRecord.java @@ -1,7 +1,6 @@ // version 14: import lombok.experimental.Delegate; record DelegateOnRecord(Runnable runnable) { -/* Implicit */ private final Runnable runnable; public @java.lang.SuppressWarnings("all") @lombok.Generated void run() { this.runnable.run(); } diff --git a/test/transform/resource/after-ecj/EqualsAndHashCodeOnRecord.java b/test/transform/resource/after-ecj/EqualsAndHashCodeOnRecord.java index 8b36937c..bcbd5e7c 100644 --- a/test/transform/resource/after-ecj/EqualsAndHashCodeOnRecord.java +++ b/test/transform/resource/after-ecj/EqualsAndHashCodeOnRecord.java @@ -1,6 +1,4 @@ // version 14: import lombok.EqualsAndHashCode; public @EqualsAndHashCode record EqualsAndHashCodeOnRecord(String a, String b) { -/* Implicit */ private final String a; -/* Implicit */ private final String b; } diff --git a/test/transform/resource/after-ecj/FieldDefaultsOnRecord.java b/test/transform/resource/after-ecj/FieldDefaultsOnRecord.java index 601d7488..bd853d98 100644 --- a/test/transform/resource/after-ecj/FieldDefaultsOnRecord.java +++ b/test/transform/resource/after-ecj/FieldDefaultsOnRecord.java @@ -1,5 +1,3 @@ // version 14: public @lombok.experimental.FieldDefaults(makeFinal = true) record FieldDefaultsOnRecord(String a, String b) { -/* Implicit */ private final String a; -/* Implicit */ private final String b; } diff --git a/test/transform/resource/after-ecj/FieldDefaultsViaConfigOnRecord.java b/test/transform/resource/after-ecj/FieldDefaultsViaConfigOnRecord.java index 34b70675..5fb4a115 100644 --- a/test/transform/resource/after-ecj/FieldDefaultsViaConfigOnRecord.java +++ b/test/transform/resource/after-ecj/FieldDefaultsViaConfigOnRecord.java @@ -1,5 +1,3 @@ // version 14: public record FieldDefaultsViaConfigOnRecord(String a, String b) { -/* Implicit */ private final String a; -/* Implicit */ private final String b; } \ No newline at end of file diff --git a/test/transform/resource/after-ecj/FieldNameConstantsOnRecord.java b/test/transform/resource/after-ecj/FieldNameConstantsOnRecord.java index 8eca05e3..b9916ef7 100644 --- a/test/transform/resource/after-ecj/FieldNameConstantsOnRecord.java +++ b/test/transform/resource/after-ecj/FieldNameConstantsOnRecord.java @@ -11,10 +11,6 @@ public @FieldNameConstants(level = AccessLevel.PACKAGE) record FieldNameConstant super(); } } -/* Implicit */ private final String iAmADvdPlayer; -/* Implicit */ private final int $skipMe; -/* Implicit */ private final int andMe; -/* Implicit */ private final String butPrintMePlease; static double skipMeToo; () { } diff --git a/test/transform/resource/after-ecj/GetterOnRecord.java b/test/transform/resource/after-ecj/GetterOnRecord.java index 735f0c80..fe51ffe4 100644 --- a/test/transform/resource/after-ecj/GetterOnRecord.java +++ b/test/transform/resource/after-ecj/GetterOnRecord.java @@ -1,6 +1,4 @@ // version 14: import lombok.Getter; public @Getter record GetterOnRecord(String a, String b) { -/* Implicit */ private final String a; -/* Implicit */ private final String b; } diff --git a/test/transform/resource/after-ecj/JacksonizedOnRecord.java b/test/transform/resource/after-ecj/JacksonizedOnRecord.java index c837ce98..5650f6c8 100644 --- a/test/transform/resource/after-ecj/JacksonizedOnRecord.java +++ b/test/transform/resource/after-ecj/JacksonizedOnRecord.java @@ -56,8 +56,6 @@ public @lombok.extern.jackson.Jacksonized @lombok.Builder @JsonIgnoreProperties return (((("JacksonizedOnRecord.JacksonizedOnRecordBuilder(string=" + this.string) + ", values=") + this.values) + ")"); } } -/* Implicit */ private final String string; -/* Implicit */ private final List values; public static @java.lang.SuppressWarnings("all") @lombok.Generated JacksonizedOnRecord.JacksonizedOnRecordBuilder builder() { return new JacksonizedOnRecord.JacksonizedOnRecordBuilder(); } diff --git a/test/transform/resource/after-ecj/LockedInRecord.java b/test/transform/resource/after-ecj/LockedInRecord.java index c453683d..0e705cbe 100644 --- a/test/transform/resource/after-ecj/LockedInRecord.java +++ b/test/transform/resource/after-ecj/LockedInRecord.java @@ -1,8 +1,5 @@ import lombok.Locked; public record LockedInRecord(String a, String b) { -/* Implicit */ private final String a; -/* Implicit */ private final String b; - private final @java.lang.SuppressWarnings("all") @lombok.Generated java.util.concurrent.locks.Lock $lock = new java.util.concurrent.locks.ReentrantLock(); public @Locked void foo() { String foo = "bar"; } diff --git a/test/transform/resource/after-ecj/LoggerConfigOnRecord.java b/test/transform/resource/after-ecj/LoggerConfigOnRecord.java index 2a0057f6..2d6d6573 100644 --- a/test/transform/resource/after-ecj/LoggerConfigOnRecord.java +++ b/test/transform/resource/after-ecj/LoggerConfigOnRecord.java @@ -1,6 +1,4 @@ // version 14: import lombok.extern.slf4j.Slf4j; public @Slf4j record LoggerConfigOnRecord(String a, String b) { -/* Implicit */ private final String a; -/* Implicit */ private final String b; } diff --git a/test/transform/resource/after-ecj/LoggerFloggerRecord.java b/test/transform/resource/after-ecj/LoggerFloggerRecord.java index 43ffda6d..7826fd6c 100644 --- a/test/transform/resource/after-ecj/LoggerFloggerRecord.java +++ b/test/transform/resource/after-ecj/LoggerFloggerRecord.java @@ -1,7 +1,6 @@ import lombok.extern.flogger.Flogger; class LoggerFloggerRecord { public @Flogger record Inner(String x) { -/* Implicit */ private final String x; private static final @java.lang.SuppressWarnings("all") @lombok.Generated com.google.common.flogger.FluentLogger log = com.google.common.flogger.FluentLogger.forEnclosingClass(); () { } diff --git a/test/transform/resource/after-ecj/LoggerSlf4jOnRecord.java b/test/transform/resource/after-ecj/LoggerSlf4jOnRecord.java index f4440cbd..89dca1d7 100644 --- a/test/transform/resource/after-ecj/LoggerSlf4jOnRecord.java +++ b/test/transform/resource/after-ecj/LoggerSlf4jOnRecord.java @@ -1,7 +1,5 @@ import lombok.extern.slf4j.Slf4j; public @Slf4j record LoggerSlf4jOnRecord(String a, String b) { -/* Implicit */ private final String a; -/* Implicit */ private final String b; private static final @java.lang.SuppressWarnings("all") @lombok.Generated org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LoggerSlf4jOnRecord.class); () { } diff --git a/test/transform/resource/after-ecj/NonNullExistingConstructorOnRecord.java b/test/transform/resource/after-ecj/NonNullExistingConstructorOnRecord.java index 88ce76fe..1420382e 100644 --- a/test/transform/resource/after-ecj/NonNullExistingConstructorOnRecord.java +++ b/test/transform/resource/after-ecj/NonNullExistingConstructorOnRecord.java @@ -1,8 +1,6 @@ // version 14: import lombok.NonNull; public record NonNullExistingConstructorOnRecord(String a, String b) { -/* Implicit */ private final String a; -/* Implicit */ private final String b; public NonNullExistingConstructorOnRecord(@NonNull String b) { this("default", b); if ((b == null)) diff --git a/test/transform/resource/after-ecj/NonNullOnRecordExistingConstructor.java b/test/transform/resource/after-ecj/NonNullOnRecordExistingConstructor.java index 4323113f..c16d347e 100644 --- a/test/transform/resource/after-ecj/NonNullOnRecordExistingConstructor.java +++ b/test/transform/resource/after-ecj/NonNullOnRecordExistingConstructor.java @@ -1,14 +1,13 @@ // version 14: +// skip compare content import lombok.NonNull; public record NonNullOnRecordExistingConstructor(String a) { -/* Implicit */ private final String a; - public NonNullOnRecordExistingConstructor(@NonNull String a) { + public NonNullOnRecordExistingConstructor { super(); if ((a == null)) { throw new java.lang.NullPointerException("a is marked non-null but is null"); } System.out.println("Hello"); - this.a = a; } } diff --git a/test/transform/resource/after-ecj/NonNullOnRecordExistingSetter.java b/test/transform/resource/after-ecj/NonNullOnRecordExistingSetter.java index 1bdaf29f..9b9a228c 100644 --- a/test/transform/resource/after-ecj/NonNullOnRecordExistingSetter.java +++ b/test/transform/resource/after-ecj/NonNullOnRecordExistingSetter.java @@ -1,7 +1,6 @@ // version 19: import lombok.NonNull; public record NonNullOnRecordExistingSetter(String a) { -/* Implicit */ private final String a; public NonNullOnRecordExistingSetter(String a) { super(); this.a = a; diff --git a/test/transform/resource/after-ecj/NonNullOnRecordSimple.java b/test/transform/resource/after-ecj/NonNullOnRecordSimple.java index 8a300227..5fe0f1dc 100644 --- a/test/transform/resource/after-ecj/NonNullOnRecordSimple.java +++ b/test/transform/resource/after-ecj/NonNullOnRecordSimple.java @@ -1,8 +1,6 @@ // version 14: import lombok.NonNull; public record NonNullOnRecordSimple(String a, String b) { -/* Implicit */ private final String a; -/* Implicit */ private final String b; public @java.lang.SuppressWarnings("all") @lombok.Generated NonNullOnRecordSimple(@NonNull String a, @NonNull String b) { super(); if ((a == null)) diff --git a/test/transform/resource/after-ecj/NonNullOnRecordTypeUse.java b/test/transform/resource/after-ecj/NonNullOnRecordTypeUse.java index ae2b344f..ffd67d3a 100644 --- a/test/transform/resource/after-ecj/NonNullOnRecordTypeUse.java +++ b/test/transform/resource/after-ecj/NonNullOnRecordTypeUse.java @@ -1,9 +1,6 @@ // version 14: import lombok.NonNull; public record NonNullOnRecordTypeUse(int a, int b, int c) { -/* Implicit */ private final int[] a; -/* Implicit */ private final int @NonNull [] b; -/* Implicit */ private final int[] @NonNull [] c; public @java.lang.SuppressWarnings("all") @lombok.Generated NonNullOnRecordTypeUse(@NonNull int[] a, int @NonNull [] b, int[] @NonNull [] c) { super(); if ((a == null)) diff --git a/test/transform/resource/after-ecj/SetterOnRecord.java b/test/transform/resource/after-ecj/SetterOnRecord.java index f91b68c2..f38d4b86 100644 --- a/test/transform/resource/after-ecj/SetterOnRecord.java +++ b/test/transform/resource/after-ecj/SetterOnRecord.java @@ -1,6 +1,4 @@ // version 14: import lombok.Setter; public @Setter record SetterOnRecord(String a, String b) { -/* Implicit */ private final String a; -/* Implicit */ private final String b; } diff --git a/test/transform/resource/after-ecj/SynchronizedInRecord.java b/test/transform/resource/after-ecj/SynchronizedInRecord.java index 3298cbd0..bf173899 100644 --- a/test/transform/resource/after-ecj/SynchronizedInRecord.java +++ b/test/transform/resource/after-ecj/SynchronizedInRecord.java @@ -1,8 +1,5 @@ import lombok.Synchronized; public record SynchronizedInRecord(String a, String b) { -/* Implicit */ private final String a; -/* Implicit */ private final String b; - private final @java.lang.SuppressWarnings("all") @lombok.Generated java.lang.Object $lock = new java.lang.Object[0]; public @Synchronized void foo() { String foo = "bar"; } diff --git a/test/transform/resource/after-ecj/ToStringOnRecord.java b/test/transform/resource/after-ecj/ToStringOnRecord.java index de153ea2..c25ddbe9 100644 --- a/test/transform/resource/after-ecj/ToStringOnRecord.java +++ b/test/transform/resource/after-ecj/ToStringOnRecord.java @@ -1,6 +1,4 @@ // version 14: import lombok.ToString; public @ToString record ToStringOnRecord(String a, String b) { -/* Implicit */ private final String a; -/* Implicit */ private final String b; } diff --git a/test/transform/resource/after-ecj/UtilityClassOnRecord.java b/test/transform/resource/after-ecj/UtilityClassOnRecord.java index 6a404e26..670fee35 100644 --- a/test/transform/resource/after-ecj/UtilityClassOnRecord.java +++ b/test/transform/resource/after-ecj/UtilityClassOnRecord.java @@ -1,6 +1,4 @@ // version 14: import lombok.experimental.UtilityClass; public @UtilityClass record UtilityClassOnRecord(String a, String b) { -/* Implicit */ private final String a; -/* Implicit */ private final String b; } diff --git a/test/transform/resource/after-ecj/ValueOnRecord.java b/test/transform/resource/after-ecj/ValueOnRecord.java index 13987ca0..0e55308f 100644 --- a/test/transform/resource/after-ecj/ValueOnRecord.java +++ b/test/transform/resource/after-ecj/ValueOnRecord.java @@ -1,6 +1,4 @@ // version 14: import lombok.Value; public @Value record ValueOnRecord(String a, String b) { -/* Implicit */ private final String a; -/* Implicit */ private final String b; } diff --git a/test/transform/resource/after-ecj/WithByOnRecord.java b/test/transform/resource/after-ecj/WithByOnRecord.java index a2363f3f..c4d1d627 100644 --- a/test/transform/resource/after-ecj/WithByOnRecord.java +++ b/test/transform/resource/after-ecj/WithByOnRecord.java @@ -1,8 +1,6 @@ // version 14: import lombok.experimental.WithBy; public @WithBy record WithByOnRecord(String a, String b) { -/* Implicit */ private final String a; -/* Implicit */ private final String b; public @java.lang.SuppressWarnings("all") @lombok.Generated WithByOnRecord withABy(final java.util.function.Function transformer) { return new WithByOnRecord(transformer.apply(this.a), this.b); } diff --git a/test/transform/resource/after-ecj/WithByOnRecordComponent.java b/test/transform/resource/after-ecj/WithByOnRecordComponent.java index 4d3fc72f..2b31efb2 100644 --- a/test/transform/resource/after-ecj/WithByOnRecordComponent.java +++ b/test/transform/resource/after-ecj/WithByOnRecordComponent.java @@ -1,8 +1,6 @@ // version 14: import lombok.experimental.WithBy; public record WithByOnRecordComponent(String a, String b) { -/* Implicit */ private final String a; -/* Implicit */ private final String b; public @java.lang.SuppressWarnings("all") @lombok.Generated WithByOnRecordComponent withABy(final java.util.function.Function transformer) { return new WithByOnRecordComponent(transformer.apply(this.a), this.b); } diff --git a/test/transform/resource/after-ecj/WithOnNestedRecord.java b/test/transform/resource/after-ecj/WithOnNestedRecord.java index ecd76658..61f6f5a3 100644 --- a/test/transform/resource/after-ecj/WithOnNestedRecord.java +++ b/test/transform/resource/after-ecj/WithOnNestedRecord.java @@ -1,8 +1,6 @@ import lombok.With; public record WithOnNestedRecord() { public @With record Nested(String a, String b) { -/* Implicit */ private final String a; -/* Implicit */ private final String b; /** * @return a clone of this object, except with this updated property (returns {@code this} if an identical value is passed). */ diff --git a/test/transform/resource/after-ecj/WithOnRecord.java b/test/transform/resource/after-ecj/WithOnRecord.java index b8bf738e..7745b954 100644 --- a/test/transform/resource/after-ecj/WithOnRecord.java +++ b/test/transform/resource/after-ecj/WithOnRecord.java @@ -1,8 +1,6 @@ // version 14: import lombok.With; public @With record WithOnRecord(String a, String b) { -/* Implicit */ private final String a; -/* Implicit */ private final String b; /** * @return a clone of this object, except with this updated property (returns {@code this} if an identical value is passed). */ diff --git a/test/transform/resource/after-ecj/WithOnRecordComponent.java b/test/transform/resource/after-ecj/WithOnRecordComponent.java index 49c05257..34955c88 100644 --- a/test/transform/resource/after-ecj/WithOnRecordComponent.java +++ b/test/transform/resource/after-ecj/WithOnRecordComponent.java @@ -1,8 +1,6 @@ // version 14: import lombok.With; public record WithOnRecordComponent(String a, String b) { -/* Implicit */ private final String a; -/* Implicit */ private final String b; /** * @return a clone of this object, except with this updated property (returns {@code this} if an identical value is passed). */ From 8747f72365554b6148ccf92ce5e83403a32a7531 Mon Sep 17 00:00:00 2001 From: Rawi01 Date: Tue, 27 May 2025 07:59:36 +0200 Subject: [PATCH 3/4] Add missing test targets to GitHub Actions --- .github/workflows/ant.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ant.yml b/.github/workflows/ant.yml index 7552c536..8bcc8d45 100644 --- a/.github/workflows/ant.yml +++ b/.github/workflows/ant.yml @@ -94,6 +94,9 @@ jobs: - eclipse-oxygen - eclipse-202006 - eclipse-202006-jdk8 + - eclipse-202403 + - eclipse-202503 + - eclipse-I-build - eclipse-oxygen-full - eclipse-202403-full - eclipse-202503-full From 1baa352c69a5e55b897d356f0830d858f681f880 Mon Sep 17 00:00:00 2001 From: Rawi01 Date: Tue, 27 May 2025 08:08:06 +0200 Subject: [PATCH 4/4] Skip downloading artifact sources in CI environments --- .../DownloadEclipseDependencies.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/support/lombok/eclipse/dependencies/DownloadEclipseDependencies.java b/src/support/lombok/eclipse/dependencies/DownloadEclipseDependencies.java index e2ef2bbe..9df6d057 100644 --- a/src/support/lombok/eclipse/dependencies/DownloadEclipseDependencies.java +++ b/src/support/lombok/eclipse/dependencies/DownloadEclipseDependencies.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022-2024 The Project Lombok Authors. + * Copyright (C) 2022-2025 The Project Lombok Authors. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -51,6 +51,7 @@ public class DownloadEclipseDependencies { String updateSiteUrl = args[2]; boolean resolveDependencies = Boolean.parseBoolean(args[3]); List bundles = Arrays.asList(Arrays.copyOfRange(args, 4, args.length)); + boolean isCi = "true".equalsIgnoreCase(System.getenv("CI")); UpdateSite updateSite = new UpdateSite(); updateSite.read(updateSiteUrl); @@ -69,14 +70,16 @@ public class DownloadEclipseDependencies { // Download artifact downloadFile(artifact, pluginSource, pluginTarget); - // Download artifact source - int index = artifact.lastIndexOf("_"); - String source = artifact.substring(0, index) + ".source" + artifact.substring(index); - try { - downloadFile(source, pluginSource, pluginTarget); - } catch (Exception e) { - // It's just the source; sometimes these aren't present (specifically, `org.eclipse.swt` doesn't currently appear to have the sources, at least not using the `_sources` naming scheme). Don't fail, just skip them. - System.out.println("[failed]"); + // Download artifact source for local development + if (!isCi) { + int index = artifact.lastIndexOf("_"); + String source = artifact.substring(0, index) + ".source" + artifact.substring(index); + try { + downloadFile(source, pluginSource, pluginTarget); + } catch (Exception e) { + // It's just the source; sometimes these aren't present (specifically, `org.eclipse.swt` doesn't currently appear to have the sources, at least not using the `_sources` naming scheme). Don't fail, just skip them. + System.out.println("[failed]"); + } } }