public class SuperBuilderSingularToBuilderGuava { public static @lombok.experimental.SuperBuilder(toBuilder = true) class Parent { public static abstract @java.lang.SuppressWarnings("all") class ParentBuilder, B extends SuperBuilderSingularToBuilderGuava.Parent.ParentBuilder> { private @java.lang.SuppressWarnings("all") com.google.common.collect.ImmutableList.Builder cards; private @java.lang.SuppressWarnings("all") com.google.common.collect.ImmutableList.Builder frogs; private @java.lang.SuppressWarnings("all") com.google.common.collect.ImmutableSet.Builder rawSet; private @java.lang.SuppressWarnings("all") com.google.common.collect.ImmutableSortedSet.Builder passes; private @java.lang.SuppressWarnings("all") com.google.common.collect.ImmutableTable.Builder users; public ParentBuilder() { super(); } protected @java.lang.SuppressWarnings("all") B $fillValuesFrom(final C instance) { SuperBuilderSingularToBuilderGuava.Parent.ParentBuilder.$fillValuesFromInstanceIntoBuilder(instance, this); return self(); } private static @java.lang.SuppressWarnings("all") void $fillValuesFromInstanceIntoBuilder(final SuperBuilderSingularToBuilderGuava.Parent instance, final SuperBuilderSingularToBuilderGuava.Parent.ParentBuilder b) { b.cards(((instance.cards == null) ? com.google.common.collect.ImmutableList.of() : instance.cards)); b.frogs(((instance.frogs == null) ? com.google.common.collect.ImmutableList.of() : instance.frogs)); b.rawSet(((instance.rawSet == null) ? com.google.common.collect.ImmutableSet.of() : instance.rawSet)); b.passes(((instance.passes == null) ? com.google.common.collect.ImmutableSortedSet.of() : instance.passes)); b.users(((instance.users == null) ? com.google.common.collect.ImmutableTable.of() : instance.users)); } protected abstract @java.lang.SuppressWarnings("all") B self(); public abstract @java.lang.SuppressWarnings("all") C build(); public @java.lang.SuppressWarnings("all") B card(final T card) { if ((this.cards == null)) this.cards = com.google.common.collect.ImmutableList.builder(); this.cards.add(card); return self(); } public @java.lang.SuppressWarnings("all") B cards(final java.lang.Iterable cards) { if ((cards == null)) { throw new java.lang.NullPointerException("cards cannot be null"); } if ((this.cards == null)) this.cards = com.google.common.collect.ImmutableList.builder(); this.cards.addAll(cards); return self(); } public @java.lang.SuppressWarnings("all") B clearCards() { this.cards = null; return self(); } public @java.lang.SuppressWarnings("all") B frog(final Number frog) { if ((this.frogs == null)) this.frogs = com.google.common.collect.ImmutableList.builder(); this.frogs.add(frog); return self(); } public @java.lang.SuppressWarnings("all") B frogs(final java.lang.Iterable frogs) { if ((frogs == null)) { throw new java.lang.NullPointerException("frogs cannot be null"); } if ((this.frogs == null)) this.frogs = com.google.common.collect.ImmutableList.builder(); this.frogs.addAll(frogs); return self(); } public @java.lang.SuppressWarnings("all") B clearFrogs() { this.frogs = null; return self(); } public @java.lang.SuppressWarnings("all") B rawSet(final java.lang.Object rawSet) { if ((this.rawSet == null)) this.rawSet = com.google.common.collect.ImmutableSet.builder(); this.rawSet.add(rawSet); return self(); } public @java.lang.SuppressWarnings("all") B rawSet(final java.lang.Iterable rawSet) { if ((rawSet == null)) { throw new java.lang.NullPointerException("rawSet cannot be null"); } if ((this.rawSet == null)) this.rawSet = com.google.common.collect.ImmutableSet.builder(); this.rawSet.addAll(rawSet); return self(); } public @java.lang.SuppressWarnings("all") B clearRawSet() { this.rawSet = null; return self(); } public @java.lang.SuppressWarnings("all") B pass(final String pass) { if ((this.passes == null)) this.passes = com.google.common.collect.ImmutableSortedSet.naturalOrder(); this.passes.add(pass); return self(); } public @java.lang.SuppressWarnings("all") B passes(final java.lang.Iterable passes) { if ((passes == null)) { throw new java.lang.NullPointerException("passes cannot be null"); } if ((this.passes == null)) this.passes = com.google.common.collect.ImmutableSortedSet.naturalOrder(); this.passes.addAll(passes); return self(); } public @java.lang.SuppressWarnings("all") B clearPasses() { this.passes = null; return self(); } public @java.lang.SuppressWarnings("all") B user(final Number rowKey, final Number columnKey, final String value) { if ((this.users == null)) this.users = com.google.common.collect.ImmutableTable.builder(); this.users.put(rowKey, columnKey, value); return self(); } public @java.lang.SuppressWarnings("all") B users(final com.google.common.collect.Table users) { if ((users == null)) { throw new java.lang.NullPointerException("users cannot be null"); } if ((this.users == null)) this.users = com.google.common.collect.ImmutableTable.builder(); this.users.putAll(users); return self(); } public @java.lang.SuppressWarnings("all") B clearUsers() { this.users = null; return self(); } public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() { return (((((((((("SuperBuilderSingularToBuilderGuava.Parent.ParentBuilder(cards=" + this.cards) + ", frogs=") + this.frogs) + ", rawSet=") + this.rawSet) + ", passes=") + this.passes) + ", users=") + this.users) + ")"); } } private static final @java.lang.SuppressWarnings("all") class ParentBuilderImpl extends SuperBuilderSingularToBuilderGuava.Parent.ParentBuilder, SuperBuilderSingularToBuilderGuava.Parent.ParentBuilderImpl> { private ParentBuilderImpl() { super(); } protected @java.lang.Override @java.lang.SuppressWarnings("all") SuperBuilderSingularToBuilderGuava.Parent.ParentBuilderImpl self() { return this; } public @java.lang.Override @java.lang.SuppressWarnings("all") SuperBuilderSingularToBuilderGuava.Parent build() { return new SuperBuilderSingularToBuilderGuava.Parent(this); } } private @lombok.Singular com.google.common.collect.ImmutableList cards; private @lombok.Singular com.google.common.collect.ImmutableCollection frogs; private @SuppressWarnings("all") @lombok.Singular("rawSet") com.google.common.collect.ImmutableSet rawSet; private @lombok.Singular com.google.common.collect.ImmutableSortedSet passes; private @lombok.Singular com.google.common.collect.ImmutableTable users; protected @java.lang.SuppressWarnings("all") Parent(final SuperBuilderSingularToBuilderGuava.Parent.ParentBuilder b) { super(); com.google.common.collect.ImmutableList cards = ((b.cards == null) ? com.google.common.collect.ImmutableList.of() : b.cards.build()); this.cards = cards; com.google.common.collect.ImmutableCollection frogs = ((b.frogs == null) ? com.google.common.collect.ImmutableList.of() : b.frogs.build()); this.frogs = frogs; com.google.common.collect.ImmutableSet rawSet = ((b.rawSet == null) ? com.google.common.collect.ImmutableSet.of() : b.rawSet.build()); this.rawSet = rawSet; com.google.common.collect.ImmutableSortedSet passes = ((b.passes == null) ? com.google.common.collect.ImmutableSortedSet.of() : b.passes.build()); this.passes = passes; com.google.common.collect.ImmutableTable users = ((b.users == null) ? com.google.common.collect.ImmutableTable.of() : b.users.build()); this.users = users; } public @java.lang.SuppressWarnings("all") SuperBuilderSingularToBuilderGuava.Parent.ParentBuilder toBuilder() { return new SuperBuilderSingularToBuilderGuava.Parent.ParentBuilderImpl().$fillValuesFrom(this); } public static @java.lang.SuppressWarnings("all") SuperBuilderSingularToBuilderGuava.Parent.ParentBuilder builder() { return new SuperBuilderSingularToBuilderGuava.Parent.ParentBuilderImpl(); } } public static @lombok.experimental.SuperBuilder(toBuilder = true) class Child extends Parent { public static abstract @java.lang.SuppressWarnings("all") class ChildBuilder, B extends SuperBuilderSingularToBuilderGuava.Child.ChildBuilder> extends Parent.ParentBuilder { private @java.lang.SuppressWarnings("all") double field3; public ChildBuilder() { super(); } protected @java.lang.Override @java.lang.SuppressWarnings("all") B $fillValuesFrom(final C instance) { super.$fillValuesFrom(instance); SuperBuilderSingularToBuilderGuava.Child.ChildBuilder.$fillValuesFromInstanceIntoBuilder(instance, this); return self(); } private static @java.lang.SuppressWarnings("all") void $fillValuesFromInstanceIntoBuilder(final SuperBuilderSingularToBuilderGuava.Child instance, final SuperBuilderSingularToBuilderGuava.Child.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(); /** * @return {@code this}. */ public @java.lang.SuppressWarnings("all") B field3(final double field3) { this.field3 = field3; return self(); } public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() { return (((("SuperBuilderSingularToBuilderGuava.Child.ChildBuilder(super=" + super.toString()) + ", field3=") + this.field3) + ")"); } } private static final @java.lang.SuppressWarnings("all") class ChildBuilderImpl extends SuperBuilderSingularToBuilderGuava.Child.ChildBuilder, SuperBuilderSingularToBuilderGuava.Child.ChildBuilderImpl> { private ChildBuilderImpl() { super(); } protected @java.lang.Override @java.lang.SuppressWarnings("all") SuperBuilderSingularToBuilderGuava.Child.ChildBuilderImpl self() { return this; } public @java.lang.Override @java.lang.SuppressWarnings("all") SuperBuilderSingularToBuilderGuava.Child build() { return new SuperBuilderSingularToBuilderGuava.Child(this); } } private double field3; protected @java.lang.SuppressWarnings("all") Child(final SuperBuilderSingularToBuilderGuava.Child.ChildBuilder b) { super(b); this.field3 = b.field3; } public @java.lang.SuppressWarnings("all") SuperBuilderSingularToBuilderGuava.Child.ChildBuilder toBuilder() { return new SuperBuilderSingularToBuilderGuava.Child.ChildBuilderImpl().$fillValuesFrom(this); } public static @java.lang.SuppressWarnings("all") SuperBuilderSingularToBuilderGuava.Child.ChildBuilder builder() { return new SuperBuilderSingularToBuilderGuava.Child.ChildBuilderImpl(); } } public SuperBuilderSingularToBuilderGuava() { super(); } public static void test() { Child x = Child.builder().card(1).build().toBuilder().build(); } }