From 965f2367e0e57744c51b10ac341400b8ec57287a Mon Sep 17 00:00:00 2001 From: Rawi01 Date: Wed, 25 Nov 2020 09:25:57 +0100 Subject: [fixes #2657] Use the correct field to query parent type parameters --- src/core/lombok/javac/handlers/HandleBuilder.java | 2 +- .../after-delombok/BuilderWithToBuilder.java | 48 ++++++++++++++++++++++ .../resource/after-ecj/BuilderWithToBuilder.java | 32 +++++++++++++++ .../resource/before/BuilderWithToBuilder.java | 13 ++++++ 4 files changed, 94 insertions(+), 1 deletion(-) diff --git a/src/core/lombok/javac/handlers/HandleBuilder.java b/src/core/lombok/javac/handlers/HandleBuilder.java index 1c74ce37..40b59183 100644 --- a/src/core/lombok/javac/handlers/HandleBuilder.java +++ b/src/core/lombok/javac/handlers/HandleBuilder.java @@ -371,7 +371,7 @@ public class HandleBuilder extends JavacAnnotationHandler { } List tpOnMethod = jmd.typarams; - List tpOnType = ((JCClassDecl) job.builderType.get()).typarams; + List tpOnType = ((JCClassDecl) job.parentType.get()).typarams; typeArgsForToBuilder = new ArrayList(); for (JCTypeParameter tp : tpOnMethod) { diff --git a/test/transform/resource/after-delombok/BuilderWithToBuilder.java b/test/transform/resource/after-delombok/BuilderWithToBuilder.java index d98d09f6..3eeadcc5 100644 --- a/test/transform/resource/after-delombok/BuilderWithToBuilder.java +++ b/test/transform/resource/after-delombok/BuilderWithToBuilder.java @@ -147,4 +147,52 @@ class ConstructorWithToBuilder { public ConstructorWithToBuilder.ConstructorWithToBuilderBuilder toBuilder() { return new ConstructorWithToBuilder.ConstructorWithToBuilderBuilder().mOne(this.mOne).baz(this.foo).bars(this.bars); } +} +class StaticMethodWithToBuilder { + private T foo; + + public StaticMethodWithToBuilder(T foo) { + this.foo = foo; + } + + public static StaticMethodWithToBuilder of(T foo) { + return new StaticMethodWithToBuilder(foo); + } + + @java.lang.SuppressWarnings("all") + public static class StaticMethodWithToBuilderBuilder { + @java.lang.SuppressWarnings("all") + private T foo; + + @java.lang.SuppressWarnings("all") + StaticMethodWithToBuilderBuilder() { + } + + @java.lang.SuppressWarnings("all") + public StaticMethodWithToBuilder.StaticMethodWithToBuilderBuilder foo(final T foo) { + this.foo = foo; + return this; + } + + @java.lang.SuppressWarnings("all") + public StaticMethodWithToBuilder build() { + return StaticMethodWithToBuilder.of(this.foo); + } + + @java.lang.Override + @java.lang.SuppressWarnings("all") + public java.lang.String toString() { + return "StaticMethodWithToBuilder.StaticMethodWithToBuilderBuilder(foo=" + this.foo + ")"; + } + } + + @java.lang.SuppressWarnings("all") + public static StaticMethodWithToBuilder.StaticMethodWithToBuilderBuilder builder() { + return new StaticMethodWithToBuilder.StaticMethodWithToBuilderBuilder(); + } + + @java.lang.SuppressWarnings("all") + public StaticMethodWithToBuilder.StaticMethodWithToBuilderBuilder toBuilder() { + return new StaticMethodWithToBuilder.StaticMethodWithToBuilderBuilder().foo(this.foo); + } } \ No newline at end of file diff --git a/test/transform/resource/after-ecj/BuilderWithToBuilder.java b/test/transform/resource/after-ecj/BuilderWithToBuilder.java index 72fa3721..857caa17 100644 --- a/test/transform/resource/after-ecj/BuilderWithToBuilder.java +++ b/test/transform/resource/after-ecj/BuilderWithToBuilder.java @@ -126,3 +126,35 @@ import lombok.Builder; return new ConstructorWithToBuilder.ConstructorWithToBuilderBuilder().mOne(this.mOne).baz(this.foo).bars(this.bars); } } +class StaticMethodWithToBuilder { + public static @java.lang.SuppressWarnings("all") class StaticMethodWithToBuilderBuilder { + private @java.lang.SuppressWarnings("all") T foo; + @java.lang.SuppressWarnings("all") StaticMethodWithToBuilderBuilder() { + super(); + } + public @java.lang.SuppressWarnings("all") StaticMethodWithToBuilder.StaticMethodWithToBuilderBuilder foo(final T foo) { + this.foo = foo; + return this; + } + public @java.lang.SuppressWarnings("all") StaticMethodWithToBuilder build() { + return StaticMethodWithToBuilder.of(this.foo); + } + public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() { + return (("StaticMethodWithToBuilder.StaticMethodWithToBuilderBuilder(foo=" + this.foo) + ")"); + } + } + private T foo; + public StaticMethodWithToBuilder(T foo) { + super(); + this.foo = foo; + } + public static @Builder(toBuilder = true) StaticMethodWithToBuilder of(T foo) { + return new StaticMethodWithToBuilder(foo); + } + public static @java.lang.SuppressWarnings("all") StaticMethodWithToBuilder.StaticMethodWithToBuilderBuilder builder() { + return new StaticMethodWithToBuilder.StaticMethodWithToBuilderBuilder(); + } + public @java.lang.SuppressWarnings("all") StaticMethodWithToBuilder.StaticMethodWithToBuilderBuilder toBuilder() { + return new StaticMethodWithToBuilder.StaticMethodWithToBuilderBuilder().foo(this.foo); + } +} \ No newline at end of file diff --git a/test/transform/resource/before/BuilderWithToBuilder.java b/test/transform/resource/before/BuilderWithToBuilder.java index 50938ab2..5b87a18f 100644 --- a/test/transform/resource/before/BuilderWithToBuilder.java +++ b/test/transform/resource/before/BuilderWithToBuilder.java @@ -18,3 +18,16 @@ class ConstructorWithToBuilder { public ConstructorWithToBuilder(String mOne, @Builder.ObtainVia(field = "foo") T baz, com.google.common.collect.ImmutableList bars) { } } + +class StaticMethodWithToBuilder { + private T foo; + + public StaticMethodWithToBuilder(T foo) { + this.foo = foo; + } + + @Builder(toBuilder = true) + public static StaticMethodWithToBuilder of(T foo) { + return new StaticMethodWithToBuilder(foo); + } +} \ No newline at end of file -- cgit