diff options
author | Rawi01 <Rawi01@users.noreply.github.com> | 2021-01-21 09:42:31 +0100 |
---|---|---|
committer | Rawi01 <Rawi01@users.noreply.github.com> | 2021-01-21 09:43:57 +0100 |
commit | 5ee6271902c05a3cad28b611be60bce94f6904a8 (patch) | |
tree | 5014f66ce24f886cb540531f766b2a6e82b0440e | |
parent | 04f17f4dcfbb0e7881d605708467498e3ec56521 (diff) | |
download | lombok-5ee6271902c05a3cad28b611be60bce94f6904a8.tar.gz lombok-5ee6271902c05a3cad28b611be60bce94f6904a8.tar.bz2 lombok-5ee6271902c05a3cad28b611be60bce94f6904a8.zip |
[fixes #2716] SuperBuilder now skips initializers while gathering types
4 files changed, 146 insertions, 0 deletions
diff --git a/src/core/lombok/eclipse/handlers/HandleSuperBuilder.java b/src/core/lombok/eclipse/handlers/HandleSuperBuilder.java index 8fdfd315..a0bd0600 100644 --- a/src/core/lombok/eclipse/handlers/HandleSuperBuilder.java +++ b/src/core/lombok/eclipse/handlers/HandleSuperBuilder.java @@ -50,6 +50,7 @@ import org.eclipse.jdt.internal.compiler.ast.FalseLiteral; import org.eclipse.jdt.internal.compiler.ast.FieldDeclaration; import org.eclipse.jdt.internal.compiler.ast.FieldReference; import org.eclipse.jdt.internal.compiler.ast.IfStatement; +import org.eclipse.jdt.internal.compiler.ast.Initializer; import org.eclipse.jdt.internal.compiler.ast.MessageSend; import org.eclipse.jdt.internal.compiler.ast.MethodDeclaration; import org.eclipse.jdt.internal.compiler.ast.NullLiteral; @@ -1093,6 +1094,7 @@ public class HandleSuperBuilder extends EclipseAnnotationHandler<SuperBuilder> { // 3. Add used type names. if (td.fields != null) { for (FieldDeclaration field : td.fields) { + if (field instanceof Initializer) continue; char[][] typeName = field.type.getTypeName(); if (typeName.length >= 1) // Add the first token, because only that can collide. usedNames.add(String.valueOf(typeName[0])); diff --git a/test/transform/resource/after-delombok/SuperBuilderInitializer.java b/test/transform/resource/after-delombok/SuperBuilderInitializer.java new file mode 100644 index 00000000..95943aa9 --- /dev/null +++ b/test/transform/resource/after-delombok/SuperBuilderInitializer.java @@ -0,0 +1,74 @@ +class SuperBuilderInitializer { + + public static class One { + private String world; + + { + world = "Hello"; + } + + private static final String world2; + + static { + world2 = "Hello"; + } + + + @java.lang.SuppressWarnings("all") + public static abstract class OneBuilder<C extends SuperBuilderInitializer.One, B extends SuperBuilderInitializer.One.OneBuilder<C, B>> { + @java.lang.SuppressWarnings("all") + private String world; + + @java.lang.SuppressWarnings("all") + protected abstract B self(); + + @java.lang.SuppressWarnings("all") + public abstract C build(); + + /** + * @return {@code this}. + */ + @java.lang.SuppressWarnings("all") + public B world(final String world) { + this.world = world; + return self(); + } + + @java.lang.Override + @java.lang.SuppressWarnings("all") + public java.lang.String toString() { + return "SuperBuilderInitializer.One.OneBuilder(world=" + this.world + ")"; + } + } + + + @java.lang.SuppressWarnings("all") + private static final class OneBuilderImpl extends SuperBuilderInitializer.One.OneBuilder<SuperBuilderInitializer.One, SuperBuilderInitializer.One.OneBuilderImpl> { + @java.lang.SuppressWarnings("all") + private OneBuilderImpl() { + } + + @java.lang.Override + @java.lang.SuppressWarnings("all") + protected SuperBuilderInitializer.One.OneBuilderImpl self() { + return this; + } + + @java.lang.Override + @java.lang.SuppressWarnings("all") + public SuperBuilderInitializer.One build() { + return new SuperBuilderInitializer.One(this); + } + } + + @java.lang.SuppressWarnings("all") + protected One(final SuperBuilderInitializer.One.OneBuilder<?, ?> b) { + this.world = b.world; + } + + @java.lang.SuppressWarnings("all") + public static SuperBuilderInitializer.One.OneBuilder<?, ?> builder() { + return new SuperBuilderInitializer.One.OneBuilderImpl(); + } + } +} diff --git a/test/transform/resource/after-ecj/SuperBuilderInitializer.java b/test/transform/resource/after-ecj/SuperBuilderInitializer.java new file mode 100644 index 00000000..0425fb89 --- /dev/null +++ b/test/transform/resource/after-ecj/SuperBuilderInitializer.java @@ -0,0 +1,54 @@ +import lombok.experimental.SuperBuilder; +class SuperBuilderInitializer { + public static @SuperBuilder class One { + public static abstract @java.lang.SuppressWarnings("all") class OneBuilder<C extends SuperBuilderInitializer.One, B extends SuperBuilderInitializer.One.OneBuilder<C, B>> { + private @java.lang.SuppressWarnings("all") String world; + public OneBuilder() { + super(); + } + protected abstract @java.lang.SuppressWarnings("all") B self(); + public abstract @java.lang.SuppressWarnings("all") C build(); + /** + * @return {@code this}. + */ + public @java.lang.SuppressWarnings("all") B world(final String world) { + this.world = world; + return self(); + } + public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() { + return (("SuperBuilderInitializer.One.OneBuilder(world=" + this.world) + ")"); + } + } + private static final @java.lang.SuppressWarnings("all") class OneBuilderImpl extends SuperBuilderInitializer.One.OneBuilder<SuperBuilderInitializer.One, SuperBuilderInitializer.One.OneBuilderImpl> { + private OneBuilderImpl() { + super(); + } + protected @java.lang.Override @java.lang.SuppressWarnings("all") SuperBuilderInitializer.One.OneBuilderImpl self() { + return this; + } + public @java.lang.Override @java.lang.SuppressWarnings("all") SuperBuilderInitializer.One build() { + return new SuperBuilderInitializer.One(this); + } + } + private String world; + { + world = "Hello"; + } + private static final String world2; + static { + world2 = "Hello"; + } + <clinit>() { + } + protected @java.lang.SuppressWarnings("all") One(final SuperBuilderInitializer.One.OneBuilder<?, ?> b) { + super(); + this.world = b.world; + } + public static @java.lang.SuppressWarnings("all") SuperBuilderInitializer.One.OneBuilder<?, ?> builder() { + return new SuperBuilderInitializer.One.OneBuilderImpl(); + } + } + SuperBuilderInitializer() { + super(); + } +} diff --git a/test/transform/resource/before/SuperBuilderInitializer.java b/test/transform/resource/before/SuperBuilderInitializer.java new file mode 100644 index 00000000..966a4daf --- /dev/null +++ b/test/transform/resource/before/SuperBuilderInitializer.java @@ -0,0 +1,16 @@ +import lombok.experimental.SuperBuilder; + +class SuperBuilderInitializer { + @SuperBuilder + public static class One { + private String world; + { + world = "Hello"; + } + + private static final String world2; + static { + world2 = "Hello"; + } + } +} |