diff options
| author | Reinier Zwitserloot <r.zwitserloot@projectlombok.org> | 2023-01-12 01:44:52 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-01-12 01:44:52 +0100 |
| commit | e90d497c93ecc7db1d5a901d40f11fc919f31447 (patch) | |
| tree | e85b974b9c8bd42e1e9241d2bd3231cfecaa3ebc | |
| parent | ef916881ad85371b905b0104072df2a2b133eee8 (diff) | |
| parent | d2ae62ac71ebf55406d308dc41e76f36e7cb5ea8 (diff) | |
| download | lombok-e90d497c93ecc7db1d5a901d40f11fc919f31447.tar.gz lombok-e90d497c93ecc7db1d5a901d40f11fc919f31447.tar.bz2 lombok-e90d497c93ecc7db1d5a901d40f11fc919f31447.zip | |
Merge pull request #3232 from janrieke/superBuilderFixMethodExistsChecks
Fix SuperBuilder for fields named "build" or "self"
57 files changed, 535 insertions, 328 deletions
diff --git a/src/core/lombok/eclipse/handlers/HandleSuperBuilder.java b/src/core/lombok/eclipse/handlers/HandleSuperBuilder.java index 19e7c391..e91478e0 100644 --- a/src/core/lombok/eclipse/handlers/HandleSuperBuilder.java +++ b/src/core/lombok/eclipse/handlers/HandleSuperBuilder.java @@ -386,16 +386,16 @@ public class HandleSuperBuilder extends EclipseAnnotationHandler<SuperBuilder> { injectMethod(job.builderType, generateStaticFillValuesMethod(job, annInstance.setterPrefix())); } - // Generate abstract self() and build() methods in the abstract builder. - injectMethod(job.builderType, generateAbstractSelfMethod(job, superclassBuilderClass != null, builderGenericName)); - job.setBuilderToAbstract(); - injectMethod(job.builderType, generateAbstractBuildMethod(job, superclassBuilderClass != null, classGenericName)); - // Create the setter methods in the abstract builder. for (BuilderFieldData bfd : job.builderFields) { generateSetterMethodsForBuilder(job, bfd, builderGenericName, annInstance.setterPrefix()); } + // Generate abstract self() and build() methods in the abstract builder. + injectMethod(job.builderType, generateAbstractSelfMethod(job, superclassBuilderClass != null, builderGenericName)); + job.setBuilderToAbstract(); + injectMethod(job.builderType, generateAbstractBuildMethod(job, superclassBuilderClass != null, classGenericName)); + // Create the toString() method for the abstract builder. if (methodExists("toString", job.builderType, 0) == MemberExistsResult.NOT_EXISTS) { List<Included<EclipseNode, ToString.Include>> fieldNodes = new ArrayList<Included<EclipseNode, ToString.Include>>(); diff --git a/src/core/lombok/javac/handlers/HandleSuperBuilder.java b/src/core/lombok/javac/handlers/HandleSuperBuilder.java index 3b66f076..913f838c 100644 --- a/src/core/lombok/javac/handlers/HandleSuperBuilder.java +++ b/src/core/lombok/javac/handlers/HandleSuperBuilder.java @@ -336,6 +336,11 @@ public class HandleSuperBuilder extends JavacAnnotationHandler<SuperBuilder> { injectMethod(job.builderType, sfvm); } + // Create the setter methods in the abstract builder. + for (BuilderFieldData bfd : job.builderFields) { + generateSetterMethodsForBuilder(job, bfd, builderGenericName, annInstance.setterPrefix()); + } + // Generate abstract self() and build() methods in the abstract builder. JCMethodDecl asm = generateAbstractSelfMethod(job, superclassBuilderClass != null, builderGenericName); recursiveSetGeneratedBy(asm, annotationNode); @@ -344,11 +349,6 @@ public class HandleSuperBuilder extends JavacAnnotationHandler<SuperBuilder> { recursiveSetGeneratedBy(abm, annotationNode); injectMethod(job.builderType, abm); - // Create the setter methods in the abstract builder. - for (BuilderFieldData bfd : job.builderFields) { - generateSetterMethodsForBuilder(job, bfd, builderGenericName, annInstance.setterPrefix()); - } - // Create the toString() method for the abstract builder. java.util.List<Included<JavacNode, ToString.Include>> fieldNodes = new ArrayList<Included<JavacNode, ToString.Include>>(); for (BuilderFieldData bfd : job.builderFields) { diff --git a/test/transform/resource/after-delombok/BuilderCustomName.java b/test/transform/resource/after-delombok/BuilderCustomName.java index 2e5924d3..900fbb03 100644 --- a/test/transform/resource/after-delombok/BuilderCustomName.java +++ b/test/transform/resource/after-delombok/BuilderCustomName.java @@ -5,10 +5,6 @@ class BuilderCustomName<T> { public static abstract class SimpleTestBuilder<T, C extends BuilderCustomName<T>, B extends BuilderCustomName.SimpleTestBuilder<T, C, B>> { @java.lang.SuppressWarnings("all") private int field; - @java.lang.SuppressWarnings("all") - protected abstract B self(); - @java.lang.SuppressWarnings("all") - public abstract C build(); /** * @return {@code this}. */ @@ -17,6 +13,10 @@ class BuilderCustomName<T> { this.field = field; return self(); } + @java.lang.SuppressWarnings("all") + protected abstract B self(); + @java.lang.SuppressWarnings("all") + public abstract C build(); @java.lang.Override @java.lang.SuppressWarnings("all") public java.lang.String toString() { diff --git a/test/transform/resource/after-delombok/CheckerFrameworkSuperBuilder.java b/test/transform/resource/after-delombok/CheckerFrameworkSuperBuilder.java index cab11f3c..cf00f5fc 100644 --- a/test/transform/resource/after-delombok/CheckerFrameworkSuperBuilder.java +++ b/test/transform/resource/after-delombok/CheckerFrameworkSuperBuilder.java @@ -23,12 +23,6 @@ class CheckerFrameworkSuperBuilder { private int z; @java.lang.SuppressWarnings("all") private java.util.ArrayList<String> names; - @org.checkerframework.dataflow.qual.Pure - @java.lang.SuppressWarnings("all") - protected abstract @org.checkerframework.common.returnsreceiver.qual.This B self(); - @org.checkerframework.dataflow.qual.SideEffectFree - @java.lang.SuppressWarnings("all") - public abstract C build(CheckerFrameworkSuperBuilder.Parent.@org.checkerframework.checker.calledmethods.qual.CalledMethods({"y", "z"}) ParentBuilder<C, B> this); /** * @return {@code this}. */ @@ -74,6 +68,12 @@ class CheckerFrameworkSuperBuilder { if (this.names != null) this.names.clear(); return self(); } + @org.checkerframework.dataflow.qual.Pure + @java.lang.SuppressWarnings("all") + protected abstract @org.checkerframework.common.returnsreceiver.qual.This B self(); + @org.checkerframework.dataflow.qual.SideEffectFree + @java.lang.SuppressWarnings("all") + public abstract C build(CheckerFrameworkSuperBuilder.Parent.@org.checkerframework.checker.calledmethods.qual.CalledMethods({"y", "z"}) ParentBuilder<C, B> this); @org.checkerframework.dataflow.qual.SideEffectFree @java.lang.Override @java.lang.SuppressWarnings("all") @@ -140,14 +140,6 @@ class CheckerFrameworkSuperBuilder { private int a$value; @java.lang.SuppressWarnings("all") private int b; - @java.lang.Override - @org.checkerframework.dataflow.qual.Pure - @java.lang.SuppressWarnings("all") - protected abstract @org.checkerframework.common.returnsreceiver.qual.This B self(); - @org.checkerframework.dataflow.qual.SideEffectFree - @java.lang.Override - @java.lang.SuppressWarnings("all") - public abstract C build(CheckerFrameworkSuperBuilder.ZChild.@org.checkerframework.checker.calledmethods.qual.CalledMethods("b") ZChildBuilder<C, B> this); /** * @return {@code this}. */ @@ -165,6 +157,14 @@ class CheckerFrameworkSuperBuilder { this.b = b; return self(); } + @java.lang.Override + @org.checkerframework.dataflow.qual.Pure + @java.lang.SuppressWarnings("all") + protected abstract @org.checkerframework.common.returnsreceiver.qual.This B self(); + @org.checkerframework.dataflow.qual.SideEffectFree + @java.lang.Override + @java.lang.SuppressWarnings("all") + public abstract C build(CheckerFrameworkSuperBuilder.ZChild.@org.checkerframework.checker.calledmethods.qual.CalledMethods("b") ZChildBuilder<C, B> this); @org.checkerframework.dataflow.qual.SideEffectFree @java.lang.Override @java.lang.SuppressWarnings("all") diff --git a/test/transform/resource/after-delombok/ConstructorsWithSuperBuilderDefaults.java b/test/transform/resource/after-delombok/ConstructorsWithSuperBuilderDefaults.java index e7811dd5..c5188bb3 100644 --- a/test/transform/resource/after-delombok/ConstructorsWithSuperBuilderDefaults.java +++ b/test/transform/resource/after-delombok/ConstructorsWithSuperBuilderDefaults.java @@ -17,12 +17,6 @@ class ConstructorsWithSuperBuilderDefaults { @java.lang.SuppressWarnings("all") private int y; - @java.lang.SuppressWarnings("all") - protected abstract B self(); - - @java.lang.SuppressWarnings("all") - public abstract C build(); - /** * @return {@code this}. */ @@ -42,6 +36,12 @@ class ConstructorsWithSuperBuilderDefaults { return self(); } + @java.lang.SuppressWarnings("all") + protected abstract B self(); + + @java.lang.SuppressWarnings("all") + public abstract C build(); + @java.lang.Override @java.lang.SuppressWarnings("all") public java.lang.String toString() { diff --git a/test/transform/resource/after-delombok/JacksonizedSuperBuilderSimple.java b/test/transform/resource/after-delombok/JacksonizedSuperBuilderSimple.java index 88a51f41..a07d9dfc 100644 --- a/test/transform/resource/after-delombok/JacksonizedSuperBuilderSimple.java +++ b/test/transform/resource/after-delombok/JacksonizedSuperBuilderSimple.java @@ -8,10 +8,6 @@ public class JacksonizedSuperBuilderSimple { public static abstract class ParentBuilder<C extends JacksonizedSuperBuilderSimple.Parent, B extends JacksonizedSuperBuilderSimple.Parent.ParentBuilder<C, B>> { @java.lang.SuppressWarnings("all") private int field1; - @java.lang.SuppressWarnings("all") - protected abstract B self(); - @java.lang.SuppressWarnings("all") - public abstract C build(); /** * @return {@code this}. */ @@ -20,6 +16,10 @@ public class JacksonizedSuperBuilderSimple { this.field1 = field1; return self(); } + @java.lang.SuppressWarnings("all") + protected abstract B self(); + @java.lang.SuppressWarnings("all") + public abstract C build(); @java.lang.Override @java.lang.SuppressWarnings("all") public java.lang.String toString() { diff --git a/test/transform/resource/after-delombok/JacksonizedSuperBuilderWithJsonDeserialize.java b/test/transform/resource/after-delombok/JacksonizedSuperBuilderWithJsonDeserialize.java index 1ed38f05..307537ae 100644 --- a/test/transform/resource/after-delombok/JacksonizedSuperBuilderWithJsonDeserialize.java +++ b/test/transform/resource/after-delombok/JacksonizedSuperBuilderWithJsonDeserialize.java @@ -6,10 +6,6 @@ public class JacksonizedSuperBuilderWithJsonDeserialize { public static abstract class JacksonizedSuperBuilderWithJsonDeserializeBuilder<C extends JacksonizedSuperBuilderWithJsonDeserialize, B extends JacksonizedSuperBuilderWithJsonDeserialize.JacksonizedSuperBuilderWithJsonDeserializeBuilder<C, B>> { @java.lang.SuppressWarnings("all") private int field1; - @java.lang.SuppressWarnings("all") - protected abstract B self(); - @java.lang.SuppressWarnings("all") - public abstract C build(); /** * @return {@code this}. */ @@ -18,6 +14,10 @@ public class JacksonizedSuperBuilderWithJsonDeserialize { this.field1 = field1; return self(); } + @java.lang.SuppressWarnings("all") + protected abstract B self(); + @java.lang.SuppressWarnings("all") + public abstract C build(); @java.lang.Override @java.lang.SuppressWarnings("all") public java.lang.String toString() { diff --git a/test/transform/resource/after-delombok/NullAnnotatedCheckerFrameworkSuperBuilder.java b/test/transform/resource/after-delombok/NullAnnotatedCheckerFrameworkSuperBuilder.java index 25a76c6d..ae2bcdfd 100644 --- a/test/transform/resource/after-delombok/NullAnnotatedCheckerFrameworkSuperBuilder.java +++ b/test/transform/resource/after-delombok/NullAnnotatedCheckerFrameworkSuperBuilder.java @@ -29,12 +29,6 @@ class NullAnnotatedCheckerFrameworkSuperBuilder { @java.lang.SuppressWarnings("all") private java.util.ArrayList<String> names; - @java.lang.SuppressWarnings("all") - protected abstract B self(); - - @java.lang.SuppressWarnings("all") - public abstract C build(); - /** * @return {@code this}. */ @@ -92,6 +86,12 @@ class NullAnnotatedCheckerFrameworkSuperBuilder { return self(); } + @java.lang.SuppressWarnings("all") + protected abstract B self(); + + @java.lang.SuppressWarnings("all") + public abstract C build(); + @java.lang.Override @java.lang.SuppressWarnings("all") public java.lang.@org.checkerframework.checker.nullness.qual.NonNull String toString() { @@ -165,14 +165,6 @@ class NullAnnotatedCheckerFrameworkSuperBuilder { @java.lang.SuppressWarnings("all") private int b; - @java.lang.Override - @java.lang.SuppressWarnings("all") - protected abstract B self(); - - @java.lang.Override - @java.lang.SuppressWarnings("all") - public abstract C build(); - /** * @return {@code this}. */ @@ -196,6 +188,14 @@ class NullAnnotatedCheckerFrameworkSuperBuilder { @java.lang.Override @java.lang.SuppressWarnings("all") + protected abstract B self(); + + @java.lang.Override + @java.lang.SuppressWarnings("all") + public abstract C build(); + + @java.lang.Override + @java.lang.SuppressWarnings("all") public java.lang.@org.checkerframework.checker.nullness.qual.NonNull String toString() { return "NullAnnotatedCheckerFrameworkSuperBuilder.ZChild.ZChildBuilder(super=" + super.toString() + ", a$value=" + this.a$value + ", b=" + this.b + ")"; } diff --git a/test/transform/resource/after-delombok/SuperBuilderAbstract.java b/test/transform/resource/after-delombok/SuperBuilderAbstract.java index 727c5beb..f92eede2 100644 --- a/test/transform/resource/after-delombok/SuperBuilderAbstract.java +++ b/test/transform/resource/after-delombok/SuperBuilderAbstract.java @@ -5,10 +5,6 @@ public class SuperBuilderAbstract { public static abstract class ParentBuilder<C extends SuperBuilderAbstract.Parent, B extends SuperBuilderAbstract.Parent.ParentBuilder<C, B>> { @java.lang.SuppressWarnings("all") private int parentField; - @java.lang.SuppressWarnings("all") - protected abstract B self(); - @java.lang.SuppressWarnings("all") - public abstract C build(); /** * @return {@code this}. */ @@ -17,6 +13,10 @@ public class SuperBuilderAbstract { this.parentField = parentField; return self(); } + @java.lang.SuppressWarnings("all") + protected abstract B self(); + @java.lang.SuppressWarnings("all") + public abstract C build(); @java.lang.Override @java.lang.SuppressWarnings("all") public java.lang.String toString() { @@ -54,12 +54,6 @@ public class SuperBuilderAbstract { public static abstract class ChildBuilder<C extends SuperBuilderAbstract.Child, B extends SuperBuilderAbstract.Child.ChildBuilder<C, B>> extends Parent.ParentBuilder<C, B> { @java.lang.SuppressWarnings("all") private double childField; - @java.lang.Override - @java.lang.SuppressWarnings("all") - protected abstract B self(); - @java.lang.Override - @java.lang.SuppressWarnings("all") - public abstract C build(); /** * @return {@code this}. */ @@ -70,6 +64,12 @@ public class SuperBuilderAbstract { } @java.lang.Override @java.lang.SuppressWarnings("all") + protected abstract B self(); + @java.lang.Override + @java.lang.SuppressWarnings("all") + public abstract C build(); + @java.lang.Override + @java.lang.SuppressWarnings("all") public java.lang.String toString() { return "SuperBuilderAbstract.Child.ChildBuilder(super=" + super.toString() + ", childField=" + this.childField + ")"; } @@ -86,12 +86,6 @@ public class SuperBuilderAbstract { public static abstract class GrandChildBuilder<C extends SuperBuilderAbstract.GrandChild, B extends SuperBuilderAbstract.GrandChild.GrandChildBuilder<C, B>> extends Child.ChildBuilder<C, B> { @java.lang.SuppressWarnings("all") private String grandChildField; - @java.lang.Override - @java.lang.SuppressWarnings("all") - protected abstract B self(); - @java.lang.Override - @java.lang.SuppressWarnings("all") - public abstract C build(); /** * @return {@code this}. */ @@ -102,6 +96,12 @@ public class SuperBuilderAbstract { } @java.lang.Override @java.lang.SuppressWarnings("all") + protected abstract B self(); + @java.lang.Override + @java.lang.SuppressWarnings("all") + public abstract C build(); + @java.lang.Override + @java.lang.SuppressWarnings("all") public java.lang.String toString() { return "SuperBuilderAbstract.GrandChild.GrandChildBuilder(super=" + super.toString() + ", grandChildField=" + this.grandChildField + ")"; } diff --git a/test/transform/resource/after-delombok/SuperBuilderAbstractToBuilder.java b/test/transform/resource/after-delombok/SuperBuilderAbstractToBuilder.java index 53962c60..c9ed6ad7 100644 --- a/test/transform/resource/after-delombok/SuperBuilderAbstractToBuilder.java +++ b/test/transform/resource/after-delombok/SuperBuilderAbstractToBuilder.java @@ -14,10 +14,6 @@ public class SuperBuilderAbstractToBuilder { private static void $fillValuesFromInstanceIntoBuilder(final SuperBuilderAbstractToBuilder.Parent instance, final SuperBuilderAbstractToBuilder.Parent.ParentBuilder<?, ?> b) { b.parentField(instance.parentField); } - @java.lang.SuppressWarnings("all") - protected abstract B self(); - @java.lang.SuppressWarnings("all") - public abstract C build(); /** * @return {@code this}. */ @@ -26,6 +22,10 @@ public class SuperBuilderAbstractToBuilder { this.parentField = parentField; return self(); } + @java.lang.SuppressWarnings("all") + protected abstract B self(); + @java.lang.SuppressWarnings("all") + public abstract C build(); @java.lang.Override @java.lang.SuppressWarnings("all") public java.lang.String toString() { @@ -78,12 +78,6 @@ public class SuperBuilderAbstractToBuilder { private static void $fillValuesFromInstanceIntoBuilder(final SuperBuilderAbstractToBuilder.Child instance, final SuperBuilderAbstractToBuilder.Child.ChildBuilder<?, ?> b) { b.childField(instance.childField); } - @java.lang.Override - @java.lang.SuppressWarnings("all") - protected abstract B self(); - @java.lang.Override - @java.lang.SuppressWarnings("all") - public abstract C build(); /** * @return {@code this}. */ @@ -94,6 +88,12 @@ public class SuperBuilderAbstractToBuilder { } @java.lang.Override @java.lang.SuppressWarnings("all") + protected abstract B self(); + @java.lang.Override + @java.lang.SuppressWarnings("all") + public abstract C build(); + @java.lang.Override + @java.lang.SuppressWarnings("all") public java.lang.String toString() { return "SuperBuilderAbstractToBuilder.Child.ChildBuilder(super=" + super.toString() + ", childField=" + this.ch |
