import java.util.Set; import lombok.Builder; import lombok.Value; public class BuilderWithRecursiveGenerics { interface Inter> { } public static final @Builder(setterPrefix = "with(setterPrefix = "with")") @Value class Test, Quz extends Inter> { public static @java.lang.SuppressWarnings("all") class TestBuilder, Quz extends Inter> { private @java.lang.SuppressWarnings("all") Foo foo; private @java.lang.SuppressWarnings("all") Bar bar; @java.lang.SuppressWarnings("all") TestBuilder() { super(); } public @java.lang.SuppressWarnings("all") TestBuilder withFoo(final Foo foo) { this.foo = foo; return this; } public @java.lang.SuppressWarnings("all") TestBuilder withBar(final Bar bar) { this.bar = bar; return this; } public @java.lang.SuppressWarnings("all") Test build() { return new Test(foo, bar); } public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() { return (((("BuilderWithRecursiveGenerics.Test.TestBuilder(foo=" + this.foo) + ", bar=") + this.bar) + ")"); } } private final Foo foo; private final Bar bar; @java.lang.SuppressWarnings("all") Test(final Foo foo, final Bar bar) { super(); this.foo = foo; this.bar = bar; } public static @java.lang.SuppressWarnings("all") , Quz extends Inter>TestBuilder builder() { return new TestBuilder(); } public @java.lang.SuppressWarnings("all") Foo getFoo() { return this.foo; } public @java.lang.SuppressWarnings("all") Bar getBar() { return this.bar; } public @java.lang.Override @java.lang.SuppressWarnings("all") boolean equals(final java.lang.Object o) { if ((o == this)) return true; if ((! (o instanceof BuilderWithRecursiveGenerics.Test))) return false; final BuilderWithRecursiveGenerics.Test other = (BuilderWithRecursiveGenerics.Test) o; final java.lang.Object this$foo = this.getFoo(); final java.lang.Object other$foo = other.getFoo(); if (((this$foo == null) ? (other$foo != null) : (! this$foo.equals(other$foo)))) return false; final java.lang.Object this$bar = this.getBar(); final java.lang.Object other$bar = other.getBar(); if (((this$bar == null) ? (other$bar != null) : (! this$bar.equals(other$bar)))) return false; return true; } public @java.lang.Override @java.lang.SuppressWarnings("all") int hashCode() { final int PRIME = 59; int result = 1; final java.lang.Object $foo = this.getFoo(); result = ((result * PRIME) + (($foo == null) ? 43 : $foo.hashCode())); final java.lang.Object $bar = this.getBar(); result = ((result * PRIME) + (($bar == null) ? 43 : $bar.hashCode())); return result; } public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() { return (((("BuilderWithRecursiveGenerics.Test(foo=" + this.getFoo()) + ", bar=") + this.getBar()) + ")"); } } public BuilderWithRecursiveGenerics() { super(); } }