From 3b1792c39701fad8a8abc8d0d508b90ab2832e05 Mon Sep 17 00:00:00 2001 From: Reinier Zwitserloot Date: Wed, 22 Mar 2017 23:32:28 +0100 Subject: Added tests to check warnings/errors emitted by Builder.Default support. --- .../after-delombok/BuilderDefaultsWarnings.java | 71 +++++++++++++++++++++- .../after-ecj/BuilderDefaultsWarnings.java | 58 +++++++++++++++++- .../resource/before/BuilderDefaultsWarnings.java | 10 +++ .../BuilderDefaultsWarnings.java.messages | 6 +- .../BuilderDefaultsWarnings.java.messages | 6 +- website/features/Builder.html | 3 +- 6 files changed, 143 insertions(+), 11 deletions(-) diff --git a/test/transform/resource/after-delombok/BuilderDefaultsWarnings.java b/test/transform/resource/after-delombok/BuilderDefaultsWarnings.java index e8247f52..ccc39a9e 100644 --- a/test/transform/resource/after-delombok/BuilderDefaultsWarnings.java +++ b/test/transform/resource/after-delombok/BuilderDefaultsWarnings.java @@ -2,11 +2,13 @@ public class BuilderDefaultsWarnings { long x = System.currentTimeMillis(); final int y = 5; int z; + java.util.List items; @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") - BuilderDefaultsWarnings(final long x, final int z) { + BuilderDefaultsWarnings(final long x, final int z, final java.util.List items) { this.x = x; this.z = z; + this.items = items; } @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") @@ -19,6 +21,9 @@ public class BuilderDefaultsWarnings { private int z; @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") + private java.util.ArrayList items; + @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") BuilderDefaultsWarningsBuilder() { } @java.lang.SuppressWarnings("all") @@ -35,14 +40,45 @@ public class BuilderDefaultsWarnings { } @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") + public BuilderDefaultsWarningsBuilder item(final String item) { + if (this.items == null) this.items = new java.util.ArrayList(); + this.items.add(item); + return this; + } + @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") + public BuilderDefaultsWarningsBuilder items(final java.util.Collection items) { + if (this.items == null) this.items = new java.util.ArrayList(); + this.items.addAll(items); + return this; + } + @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") + public BuilderDefaultsWarningsBuilder clearItems() { + if (this.items != null) this.items.clear(); + return this; + } + @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderDefaultsWarnings build() { - return new BuilderDefaultsWarnings(x, z); + java.util.List items; + switch (this.items == null ? 0 : this.items.size()) { + case 0: + items = java.util.Collections.emptyList(); + break; + case 1: + items = java.util.Collections.singletonList(this.items.get(0)); + break; + default: + items = java.util.Collections.unmodifiableList(new java.util.ArrayList(this.items)); + } + return new BuilderDefaultsWarnings(x, z, items); } @java.lang.Override @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") public java.lang.String toString() { - return "BuilderDefaultsWarnings.BuilderDefaultsWarningsBuilder(x=" + this.x + ", z=" + this.z + ")"; + return "BuilderDefaultsWarnings.BuilderDefaultsWarningsBuilder(x=" + this.x + ", z=" + this.z + ", items=" + this.items + ")"; } } @java.lang.SuppressWarnings("all") @@ -51,3 +87,32 @@ public class BuilderDefaultsWarnings { return new BuilderDefaultsWarningsBuilder(); } } +class NoBuilderButHasDefaults { + private final long z = 5; + public NoBuilderButHasDefaults() { + } + @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") + public static class NoBuilderButHasDefaultsBuilder { + @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") + NoBuilderButHasDefaultsBuilder() { + } + @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") + public NoBuilderButHasDefaults build() { + return new NoBuilderButHasDefaults(); + } + @java.lang.Override + @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") + public java.lang.String toString() { + return "NoBuilderButHasDefaults.NoBuilderButHasDefaultsBuilder()"; + } + } + @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") + public static NoBuilderButHasDefaultsBuilder builder() { + return new NoBuilderButHasDefaultsBuilder(); + } +} diff --git a/test/transform/resource/after-ecj/BuilderDefaultsWarnings.java b/test/transform/resource/after-ecj/BuilderDefaultsWarnings.java index 3b93f046..275d6166 100644 --- a/test/transform/resource/after-ecj/BuilderDefaultsWarnings.java +++ b/test/transform/resource/after-ecj/BuilderDefaultsWarnings.java @@ -1,8 +1,10 @@ import lombok.Builder; +import lombok.Singular; public @Builder class BuilderDefaultsWarnings { public static @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") class BuilderDefaultsWarningsBuilder { private @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") long x; private @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") int z; + private @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") java.util.ArrayList items; @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderDefaultsWarningsBuilder() { super(); } @@ -14,22 +16,72 @@ public @Builder class BuilderDefaultsWarnings { this.z = z; return this; } + public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderDefaultsWarningsBuilder item(String item) { + if ((this.items == null)) + this.items = new java.util.ArrayList(); + this.items.add(item); + return this; + } + public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderDefaultsWarningsBuilder items(java.util.Collection items) { + if ((this.items == null)) + this.items = new java.util.ArrayList(); + this.items.addAll(items); + return this; + } + public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderDefaultsWarningsBuilder clearItems() { + if ((this.items != null)) + this.items.clear(); + return this; + } public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderDefaultsWarnings build() { - return new BuilderDefaultsWarnings(x, z); + java.util.List items; + switch (((this.items == null) ? 0 : this.items.size())) { + case 0 : + items = java.util.Collections.emptyList(); + break; + case 1 : + items = java.util.Collections.singletonList(this.items.get(0)); + break; + default : + items = java.util.Collections.unmodifiableList(new java.util.ArrayList(this.items)); + } + return new BuilderDefaultsWarnings(x, z, items); } public @java.lang.Override @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") java.lang.String toString() { - return (((("BuilderDefaultsWarnings.BuilderDefaultsWarningsBuilder(x=" + this.x) + ", z=") + this.z) + ")"); + return (((((("BuilderDefaultsWarnings.BuilderDefaultsWarningsBuilder(x=" + this.x) + ", z=") + this.z) + ", items=") + this.items) + ")"); } } long x = System.currentTimeMillis(); final int y = 5; @Builder.Default int z; - @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderDefaultsWarnings(final long x, final int z) { + @Builder.Default @Singular java.util.List items; + @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderDefaultsWarnings(final long x, final int z, final java.util.List items) { super(); this.x = x; this.z = z; + this.items = items; } public static @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderDefaultsWarningsBuilder builder() { return new BuilderDefaultsWarningsBuilder(); } } +class NoBuilderButHasDefaults { + public static @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") class NoBuilderButHasDefaultsBuilder { + @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") NoBuilderButHasDefaultsBuilder() { + super(); + } + public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") NoBuilderButHasDefaults build() { + return new NoBuilderButHasDefaults(); + } + public @java.lang.Override @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") java.lang.String toString() { + return "NoBuilderButHasDefaults.NoBuilderButHasDefaultsBuilder()"; + } + } + private final @Builder.Default long z = 5; + public @Builder NoBuilderButHasDefaults() { + super(); + } + public static @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") NoBuilderButHasDefaultsBuilder builder() { + return new NoBuilderButHasDefaultsBuilder(); + } +} \ No newline at end of file diff --git a/test/transform/resource/before/BuilderDefaultsWarnings.java b/test/transform/resource/before/BuilderDefaultsWarnings.java index a93f0f17..8ef3dc59 100644 --- a/test/transform/resource/before/BuilderDefaultsWarnings.java +++ b/test/transform/resource/before/BuilderDefaultsWarnings.java @@ -1,8 +1,18 @@ import lombok.Builder; +import lombok.Singular; @Builder public class BuilderDefaultsWarnings { long x = System.currentTimeMillis(); final int y = 5; @Builder.Default int z; + @Builder.Default @Singular java.util.List items; +} + +class NoBuilderButHasDefaults { + @Builder.Default private final long z = 5; + + @Builder + public NoBuilderButHasDefaults() { + } } diff --git a/test/transform/resource/messages-delombok/BuilderDefaultsWarnings.java.messages b/test/transform/resource/messages-delombok/BuilderDefaultsWarnings.java.messages index 5f607134..bbee62be 100644 --- a/test/transform/resource/messages-delombok/BuilderDefaultsWarnings.java.messages +++ b/test/transform/resource/messages-delombok/BuilderDefaultsWarnings.java.messages @@ -1,2 +1,4 @@ -5 @Builder will ignore the initializing expression entirely. If you want the initializing expression to serve as default, add @Builder.Default. if it is not supposed to be settable during building, add @Builder.Constant. -7 @Builder.Default requires an initializing expression (' = something;'). +13 @Builder.Default requires @Builder on the class for it to mean anything. +6 @Builder will ignore the initializing expression entirely. If you want the initializing expression to serve as default, add @Builder.Default. if it is not supposed to be settable during building, add @Builder.Constant. +8 @Builder.Default requires an initializing expression (' = something;'). +9 @Builder.Default and @Singular cannot be mixed. diff --git a/test/transform/resource/messages-ecj/BuilderDefaultsWarnings.java.messages b/test/transform/resource/messages-ecj/BuilderDefaultsWarnings.java.messages index e369db9c..43f1e553 100644 --- a/test/transform/resource/messages-ecj/BuilderDefaultsWarnings.java.messages +++ b/test/transform/resource/messages-ecj/BuilderDefaultsWarnings.java.messages @@ -1,3 +1,5 @@ -5 @Builder will ignore the initializing expression entirely. If you want the initializing expression to serve as default, add @Builder.Default. if it is not supposed to be settable during building, add @Builder.Constant. -7 @Builder.Default requires an initializing expression (' = something;'). +6 @Builder will ignore the initializing expression entirely. If you want the initializing expression to serve as default, add @Builder.Default. if it is not supposed to be settable during building, add @Builder.Constant. +8 @Builder.Default requires an initializing expression (' = something;'). +9 @Builder.Default and @Singular cannot be mixed. +13 @Builder.Default requires @Builder on the class for it to mean anything. diff --git a/website/features/Builder.html b/website/features/Builder.html index 20518226..d7453c5b 100644 --- a/website/features/Builder.html +++ b/website/features/Builder.html @@ -83,7 +83,8 @@

@Builder.Default

- To specify a default value, which will be used if, during the build process this value is never set, initialize the field and add the @Builder.Default annotation:
+ If a certain field/parameter is never set during a build session, then it always gets 0 / null / false. If you've put @Builder on a class + (and not a method or constructor) you can instead specify the default directly on the field, and annotate the field with @Builder.Default:
@Builder.Default private final long created = System.currentTimeMillis();

-- cgit