From 790e060380f01ea113bfeee25b3138ea267ebcb4 Mon Sep 17 00:00:00 2001 From: Jan Rieke Date: Sun, 16 Sep 2018 17:24:39 +0200 Subject: SuperBuilder toBuilder: moved static helper method to builder impl --- .../SuperBuilderAbstractToBuilder.java | 168 +++++++++++++++++++++ .../after-delombok/SuperBuilderBasicToBuilder.java | 28 ++-- .../after-ecj/SuperBuilderAbstractToBuilder.java | 131 ++++++++++++++++ .../after-ecj/SuperBuilderBasicToBuilder.java | 24 +-- .../before/SuperBuilderAbstractToBuilder.java | 20 +++ 5 files changed, 345 insertions(+), 26 deletions(-) create mode 100644 test/transform/resource/after-delombok/SuperBuilderAbstractToBuilder.java create mode 100644 test/transform/resource/after-ecj/SuperBuilderAbstractToBuilder.java create mode 100644 test/transform/resource/before/SuperBuilderAbstractToBuilder.java (limited to 'test') diff --git a/test/transform/resource/after-delombok/SuperBuilderAbstractToBuilder.java b/test/transform/resource/after-delombok/SuperBuilderAbstractToBuilder.java new file mode 100644 index 00000000..096bd533 --- /dev/null +++ b/test/transform/resource/after-delombok/SuperBuilderAbstractToBuilder.java @@ -0,0 +1,168 @@ +public class SuperBuilderAbstractToBuilder { + public static class Parent { + int parentField; + @java.lang.SuppressWarnings("all") + public static abstract class ParentBuilder> { + @java.lang.SuppressWarnings("all") + private int parentField; + @java.lang.SuppressWarnings("all") + protected B $fillValuesFrom(final C instance) { + ParentBuilder.$fillValuesFromInstanceIntoBuilder(instance, this); + return self(); + } + @java.lang.SuppressWarnings("all") + private static void $fillValuesFromInstanceIntoBuilder(final Parent instance, final ParentBuilder b) { + b.parentField(instance.parentField); + } + @java.lang.SuppressWarnings("all") + protected abstract B self(); + @java.lang.SuppressWarnings("all") + public abstract C build(); + @java.lang.SuppressWarnings("all") + public B parentField(final int parentField) { + this.parentField = parentField; + return self(); + } + @java.lang.Override + @java.lang.SuppressWarnings("all") + public java.lang.String toString() { + return "SuperBuilderAbstractToBuilder.Parent.ParentBuilder(parentField=" + this.parentField + ")"; + } + } + @java.lang.SuppressWarnings("all") + private static final class ParentBuilderImpl extends ParentBuilder { + @java.lang.SuppressWarnings("all") + private ParentBuilderImpl() { + } + @java.lang.Override + @java.lang.SuppressWarnings("all") + protected ParentBuilderImpl self() { + return this; + } + @java.lang.Override + @java.lang.SuppressWarnings("all") + public Parent build() { + return new Parent(this); + } + } + @java.lang.SuppressWarnings("all") + protected Parent(final ParentBuilder b) { + this.parentField = b.parentField; + } + @java.lang.SuppressWarnings("all") + public static ParentBuilder builder() { + return new ParentBuilderImpl(); + } + @java.lang.SuppressWarnings("all") + public ParentBuilder toBuilder() { + return new ParentBuilderImpl().$fillValuesFrom(this); + } + } + public static abstract class Child extends Parent { + double childField; + @java.lang.SuppressWarnings("all") + public static abstract class ChildBuilder> extends Parent.ParentBuilder { + @java.lang.SuppressWarnings("all") + private double childField; + @java.lang.Override + @java.lang.SuppressWarnings("all") + protected B $fillValuesFrom(final C instance) { + super.$fillValuesFrom(instance); + ChildBuilder.$fillValuesFromInstanceIntoBuilder(instance, this); + return self(); + } + @java.lang.SuppressWarnings("all") + private static void $fillValuesFromInstanceIntoBuilder(final Child instance, final 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(); + @java.lang.SuppressWarnings("all") + public B childField(final double childField) { + this.childField = childField; + return self(); + } + @java.lang.Override + @java.lang.SuppressWarnings("all") + public java.lang.String toString() { + return "SuperBuilderAbstractToBuilder.Child.ChildBuilder(super=" + super.toString() + ", childField=" + this.childField + ")"; + } + } + @java.lang.SuppressWarnings("all") + protected Child(final ChildBuilder b) { + super(b); + this.childField = b.childField; + } + } + public static class GrandChild extends Child { + String grandChildField; + @java.lang.SuppressWarnings("all") + public static abstract class GrandChildBuilder> extends Child.ChildBuilder { + @java.lang.SuppressWarnings("all") + private String grandChildField; + @java.lang.Override + @java.lang.SuppressWarnings("all") + protected B $fillValuesFrom(final C instance) { + super.$fillValuesFrom(instance); + GrandChildBuilder.$fillValuesFromInstanceIntoBuilder(instance, this); + return self(); + } + @java.lang.SuppressWarnings("all") + private static void $fillValuesFromInstanceIntoBuilder(final GrandChild instance, final GrandChildBuilder b) { + b.grandChildField(instance.grandChildField); + } + @java.lang.Override + @java.lang.SuppressWarnings("all") + protected abstract B self(); + @java.lang.Override + @java.lang.SuppressWarnings("all") + public abstract C build(); + @java.lang.SuppressWarnings("all") + public B grandChildField(final String grandChildField) { + this.grandChildField = grandChildField; + return self(); + } + @java.lang.Override + @java.lang.SuppressWarnings("all") + public java.lang.String toString() { + return "SuperBuilderAbstractToBuilder.GrandChild.GrandChildBuilder(super=" + super.toString() + ", grandChildField=" + this.grandChildField + ")"; + } + } + @java.lang.SuppressWarnings("all") + private static final class GrandChildBuilderImpl extends GrandChildBuilder { + @java.lang.SuppressWarnings("all") + private GrandChildBuilderImpl() { + } + @java.lang.Override + @java.lang.SuppressWarnings("all") + protected GrandChildBuilderImpl self() { + return this; + } + @java.lang.Override + @java.lang.SuppressWarnings("all") + public GrandChild build() { + return new GrandChild(this); + } + } + @java.lang.SuppressWarnings("all") + protected GrandChild(final GrandChildBuilder b) { + super(b); + this.grandChildField = b.grandChildField; + } + @java.lang.SuppressWarnings("all") + public static GrandChildBuilder builder() { + return new GrandChildBuilderImpl(); + } + @java.lang.SuppressWarnings("all") + public GrandChildBuilder toBuilder() { + return new GrandChildBuilderImpl().$fillValuesFrom(this); + } + } + public static void test() { + GrandChild x = GrandChild.builder().grandChildField("").parentField(5).childField(2.5).build().toBuilder().build(); + } +} diff --git a/test/transform/resource/after-delombok/SuperBuilderBasicToBuilder.java b/test/transform/resource/after-delombok/SuperBuilderBasicToBuilder.java index 7a80f019..dc0b4e70 100644 --- a/test/transform/resource/after-delombok/SuperBuilderBasicToBuilder.java +++ b/test/transform/resource/after-delombok/SuperBuilderBasicToBuilder.java @@ -26,10 +26,18 @@ public class SuperBuilderBasicToBuilder { private java.util.ArrayList items; @java.lang.SuppressWarnings("all") protected B $fillValuesFrom(final C instance) { - ParentBuilderImpl.$fillValuesFromInstanceIntoBuilder(instance, this); + ParentBuilder.$fillValuesFromInstanceIntoBuilder(instance, this); return self(); } @java.lang.SuppressWarnings("all") + private static void $fillValuesFromInstanceIntoBuilder(final Parent instance, final ParentBuilder b) { + b.field1(instance.field1); + b.obtainViaField(instance.field1); + b.obtainViaMethod(instance.method()); + b.obtainViaStaticMethod(Parent.staticMethod(instance)); + b.items(instance.items == null ? java.util.Collections.emptyList() : instance.items); + } + @java.lang.SuppressWarnings("all") protected abstract B self(); @java.lang.SuppressWarnings("all") public abstract C build(); @@ -78,14 +86,6 @@ public class SuperBuilderBasicToBuilder { } @java.lang.SuppressWarnings("all") private static final class ParentBuilderImpl extends ParentBuilder { - @java.lang.SuppressWarnings("all") - private static void $fillValuesFromInstanceIntoBuilder(final Parent instance, final ParentBuilder b) { - b.field1(instance.field1); - b.obtainViaField(instance.field1); - b.obtainViaMethod(instance.method()); - b.obtainViaStaticMethod(Parent.staticMethod(instance)); - b.items(instance.items == null ? java.util.Collections.emptyList() : instance.items); - } @java.lang.SuppressWarnings("all") private ParentBuilderImpl() { } @@ -138,9 +138,13 @@ public class SuperBuilderBasicToBuilder { @java.lang.SuppressWarnings("all") protected B $fillValuesFrom(final C instance) { super.$fillValuesFrom(instance); - ChildBuilderImpl.$fillValuesFromInstanceIntoBuilder(instance, this); + ChildBuilder.$fillValuesFromInstanceIntoBuilder(instance, this); return self(); } + @java.lang.SuppressWarnings("all") + private static void $fillValuesFromInstanceIntoBuilder(final Child instance, final ChildBuilder b) { + b.field3(instance.field3); + } @java.lang.Override @java.lang.SuppressWarnings("all") protected abstract B self(); @@ -160,10 +164,6 @@ public class SuperBuilderBasicToBuilder { } @java.lang.SuppressWarnings("all") private static final class ChildBuilderImpl extends ChildBuilder { - @java.lang.SuppressWarnings("all") - private static void $fillValuesFromInstanceIntoBuilder(final Child instance, final ChildBuilder b) { - b.field3(instance.field3); - } @java.lang.SuppressWarnings("all") private ChildBuilderImpl() { } diff --git a/test/transform/resource/after-ecj/SuperBuilderAbstractToBuilder.java b/test/transform/resource/after-ecj/SuperBuilderAbstractToBuilder.java new file mode 100644 index 00000000..668f6acf --- /dev/null +++ b/test/transform/resource/after-ecj/SuperBuilderAbstractToBuilder.java @@ -0,0 +1,131 @@ +public class SuperBuilderAbstractToBuilder { + public static @lombok.experimental.SuperBuilder(toBuilder = true) class Parent { + public static abstract @java.lang.SuppressWarnings("all") class ParentBuilder> { + private @java.lang.SuppressWarnings("all") int parentField; + public ParentBuilder() { + super(); + } + protected @java.lang.SuppressWarnings("all") B $fillValuesFrom(final C instance) { + ParentBuilder.$fillValuesFromInstanceIntoBuilder(instance, this); + return self(); + } + private static @java.lang.SuppressWarnings("all") void $fillValuesFromInstanceIntoBuilder(final Parent instance, final ParentBuilder b) { + b.parentField(instance.parentField); + } + protected abstract @java.lang.SuppressWarnings("all") B self(); + public abstract @java.lang.SuppressWarnings("all") C build(); + public @java.lang.SuppressWarnings("all") B parentField(final int parentField) { + this.parentField = parentField; + return self(); + } + public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() { + return (("SuperBuilderAbstractToBuilder.Parent.ParentBuilder(parentField=" + this.parentField) + ")"); + } + } + private static final @java.lang.SuppressWarnings("all") class ParentBuilderImpl extends ParentBuilder { + private ParentBuilderImpl() { + super(); + } + protected @java.lang.Override @java.lang.SuppressWarnings("all") ParentBuilderImpl self() { + return this; + } + public @java.lang.Override @java.lang.SuppressWarnings("all") Parent build() { + return new Parent(this); + } + } + int parentField; + protected @java.lang.SuppressWarnings("all") Parent(final ParentBuilder b) { + super(); + this.parentField = b.parentField; + } + public @java.lang.SuppressWarnings("all") ParentBuilder toBuilder() { + return new ParentBuilderImpl().$fillValuesFrom(this); + } + public static @java.lang.SuppressWarnings("all") ParentBuilder builder() { + return new ParentBuilderImpl(); + } + } + public static abstract @lombok.experimental.SuperBuilder(toBuilder = true) class Child extends Parent { + public static abstract @java.lang.SuppressWarnings("all") class ChildBuilder> extends Parent.ParentBuilder { + private @java.lang.SuppressWarnings("all") double childField; + public ChildBuilder() { + super(); + } + protected @java.lang.Override @java.lang.SuppressWarnings("all") B $fillValuesFrom(final C instance) { + super.$fillValuesFrom(instance); + ChildBuilder.$fillValuesFromInstanceIntoBuilder(instance, this); + return self(); + } + private static @java.lang.SuppressWarnings("all") void $fillValuesFromInstanceIntoBuilder(final Child instance, final ChildBuilder b) { + b.childField(instance.childField); + } + protected abstract @java.lang.Override @java.lang.SuppressWarnings("all") B self(); + public abstract @java.lang.Override @java.lang.SuppressWarnings("all") C build(); + public @java.lang.SuppressWarnings("all") B childField(final double childField) { + this.childField = childField; + return self(); + } + public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() { + return (((("SuperBuilderAbstractToBuilder.Child.ChildBuilder(super=" + super.toString()) + ", childField=") + this.childField) + ")"); + } + } + double childField; + protected @java.lang.SuppressWarnings("all") Child(final ChildBuilder b) { + super(b); + this.childField = b.childField; + } + } + public static @lombok.experimental.SuperBuilder(toBuilder = true) class GrandChild extends Child { + public static abstract @java.lang.SuppressWarnings("all") class GrandChildBuilder> extends Child.ChildBuilder { + private @java.lang.SuppressWarnings("all") String grandChildField; + public GrandChildBuilder() { + super(); + } + protected @java.lang.Override @java.lang.SuppressWarnings("all") B $fillValuesFrom(final C instance) { + super.$fillValuesFrom(instance); + GrandChildBuilder.$fillValuesFromInstanceIntoBuilder(instance, this); + return self(); + } + private static @java.lang.SuppressWarnings("all") void $fillValuesFromInstanceIntoBuilder(final GrandChild instance, final GrandChildBuilder b) { + b.grandChildField(instance.grandChildField); + } + protected abstract @java.lang.Override @java.lang.SuppressWarnings("all") B self(); + public abstract @java.lang.Override @java.lang.SuppressWarnings("all") C build(); + public @java.lang.SuppressWarnings("all") B grandChildField(final String grandChildField) { + this.grandChildField = grandChildField; + return self(); + } + public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() { + return (((("SuperBuilderAbstractToBuilder.GrandChild.GrandChildBuilder(super=" + super.toString()) + ", grandChildField=") + this.grandChildField) + ")"); + } + } + private static final @java.lang.SuppressWarnings("all") class GrandChildBuilderImpl extends GrandChildBuilder { + private GrandChildBuilderImpl() { + super(); + } + protected @java.lang.Override @java.lang.SuppressWarnings("all") GrandChildBuilderImpl self() { + return this; + } + public @java.lang.Override @java.lang.SuppressWarnings("all") GrandChild build() { + return new GrandChild(this); + } + } + String grandChildField; + protected @java.lang.SuppressWarnings("all") GrandChild(final GrandChildBuilder b) { + super(b); + this.grandChildField = b.grandChildField; + } + public @java.lang.SuppressWarnings("all") GrandChildBuilder toBuilder() { + return new GrandChildBuilderImpl().$fillValuesFrom(this); + } + public static @java.lang.SuppressWarnings("all") GrandChildBuilder builder() { + return new GrandChildBuilderImpl(); + } + } + public SuperBuilderAbstractToBuilder() { + super(); + } + public static void test() { + GrandChild x = GrandChild.builder().grandChildField("").parentField(5).childField(2.5).build().toBuilder().build(); + } +} diff --git a/test/transform/resource/after-ecj/SuperBuilderBasicToBuilder.java b/test/transform/resource/after-ecj/SuperBuilderBasicToBuilder.java index be819d05..a491430a 100644 --- a/test/transform/resource/after-ecj/SuperBuilderBasicToBuilder.java +++ b/test/transform/resource/after-ecj/SuperBuilderBasicToBuilder.java @@ -11,9 +11,16 @@ public class SuperBuilderBasicToBuilder { super(); } protected @java.lang.SuppressWarnings("all") B $fillValuesFrom(final C instance) { - ParentBuilderImpl.$fillValuesFromInstanceIntoBuilder(instance, this); + ParentBuilder.$fillValuesFromInstanceIntoBuilder(instance, this); return self(); } + private static @java.lang.SuppressWarnings("all") void $fillValuesFromInstanceIntoBuilder(final Parent instance, final ParentBuilder b) { + b.field1(instance.field1); + b.obtainViaField(instance.field1); + b.obtainViaMethod(instance.method()); + b.obtainViaStaticMethod(Parent.staticMethod(instance)); + b.items(((instance.items == null) ? java.util.Collections.emptyList() : instance.items)); + } protected abstract @java.lang.SuppressWarnings("all") B self(); public abstract @java.lang.SuppressWarnings("all") C build(); public @java.lang.SuppressWarnings("all") B field1(final int field1) { @@ -57,13 +64,6 @@ public class SuperBuilderBasicToBuilder { private ParentBuilderImpl() { super(); } - private static @java.lang.SuppressWarnings("all") void $fillValuesFromInstanceIntoBuilder(final Parent instance, final ParentBuilder b) { - b.field1(instance.field1); - b.obtainViaField(instance.field1); - b.obtainViaMethod(instance.method()); - b.obtainViaStaticMethod(Parent.staticMethod(instance)); - b.items(((instance.items == null) ? java.util.Collections.emptyList() : instance.items)); - } protected @java.lang.Override @java.lang.SuppressWarnings("all") ParentBuilderImpl self() { return this; } @@ -116,9 +116,12 @@ public class SuperBuilderBasicToBuilder { } protected @java.lang.Override @java.lang.SuppressWarnings("all") B $fillValuesFrom(final C instance) { super.$fillValuesFrom(instance); - ChildBuilderImpl.$fillValuesFromInstanceIntoBuilder(instance, this); + ChildBuilder.$fillValuesFromInstanceIntoBuilder(instance, this); return self(); } + private static @java.lang.SuppressWarnings("all") void $fillValuesFromInstanceIntoBuilder(final Child instance, final ChildBuilder b) { + b.field3(instance.field3); + } protected abstract @java.lang.Override @java.lang.SuppressWarnings("all") B self(); public abstract @java.lang.Override @java.lang.SuppressWarnings("all") C build(); public @java.lang.SuppressWarnings("all") B field3(final double field3) { @@ -133,9 +136,6 @@ public class SuperBuilderBasicToBuilder { private ChildBuilderImpl() { super(); } - private static @java.lang.SuppressWarnings("all") void $fillValuesFromInstanceIntoBuilder(final Child instance, final ChildBuilder b) { - b.field3(instance.field3); - } protected @java.lang.Override @java.lang.SuppressWarnings("all") ChildBuilderImpl self() { return this; } diff --git a/test/transform/resource/before/SuperBuilderAbstractToBuilder.java b/test/transform/resource/before/SuperBuilderAbstractToBuilder.java new file mode 100644 index 00000000..3359829c --- /dev/null +++ b/test/transform/resource/before/SuperBuilderAbstractToBuilder.java @@ -0,0 +1,20 @@ +public class SuperBuilderAbstractToBuilder { + @lombok.experimental.SuperBuilder(toBuilder = true) + public static class Parent { + int parentField; + } + + @lombok.experimental.SuperBuilder(toBuilder = true) + public abstract static class Child extends Parent { + double childField; + } + + @lombok.experimental.SuperBuilder(toBuilder = true) + public static class GrandChild extends Child { + String grandChildField; + } + + public static void test() { + GrandChild x = GrandChild.builder().grandChildField("").parentField(5).childField(2.5).build().toBuilder().build(); + } +} -- cgit