[fixes #2104] superbuilder + non-list-singulars wouldn’t work due to hardcoded call to emptyList.

This commit is contained in:
Reinier Zwitserloot committed 2019-05-01 05:45:10 +02:00
1 parent bf0499263b
commit 2335f25166
16 files changed
+167 -57

No files matched your search

@@ -1,14 +1,16 @@
import java.util.List;
import java.util.Map;
public class SuperBuilderWithGenericsAndToBuilder {
public static class Parent<A> {
A field1;
List<String> items;
Map<Integer, String> items;
@java.lang.SuppressWarnings("all")
public static abstract class ParentBuilder<A, C extends Parent<A>, B extends ParentBuilder<A, C, B>> {
@java.lang.SuppressWarnings("all")
private A field1;
@java.lang.SuppressWarnings("all")
private java.util.ArrayList<String> items;
private java.util.ArrayList<Integer> items$key;
@java.lang.SuppressWarnings("all")
private java.util.ArrayList<String> items$value;
@java.lang.SuppressWarnings("all")
protected B $fillValuesFrom(final C instance) {
ParentBuilder.$fillValuesFromInstanceIntoBuilder(instance, this);
@@ -17,7 +19,7 @@ public class SuperBuilderWithGenericsAndToBuilder {
@java.lang.SuppressWarnings("all")
private static <A> void $fillValuesFromInstanceIntoBuilder(final Parent<A> instance, final ParentBuilder<A, ?, ?> b) {
b.field1(instance.field1);
b.items(instance.items == null ? java.util.Collections.emptyList() : instance.items);
b.items(instance.items == null ? java.util.Collections.emptyMap() : instance.items);
}
@java.lang.SuppressWarnings("all")
protected abstract B self();
@@ -29,26 +31,39 @@ public class SuperBuilderWithGenericsAndToBuilder {
return self();
}
@java.lang.SuppressWarnings("all")
public B item(final String item) {
if (this.items == null) this.items = new java.util.ArrayList<String>();
this.items.add(item);
public B item(final Integer itemKey, final String itemValue) {
if (this.items$key == null) {
this.items$key = new java.util.ArrayList<Integer>();
this.items$value = new java.util.ArrayList<String>();
}
this.items$key.add(itemKey);
this.items$value.add(itemValue);
return self();
}
@java.lang.SuppressWarnings("all")
public B items(final java.util.Collection<? extends String> items) {
if (this.items == null) this.items = new java.util.ArrayList<String>();
this.items.addAll(items);
public B items(final java.util.Map<? extends Integer, ? extends String> items) {
if (this.items$key == null) {
this.items$key = new java.util.ArrayList<Integer>();
this.items$value = new java.util.ArrayList<String>();
}
for (final java.util.Map.Entry<? extends Integer, ? extends String> $lombokEntry : items.entrySet()) {
this.items$key.add($lombokEntry.getKey());
this.items$value.add($lombokEntry.getValue());
}
return self();
}
@java.lang.SuppressWarnings("all")
public B clearItems() {
if (this.items != null) this.items.clear();
if (this.items$key != null) {
this.items$key.clear();
this.items$value.clear();
}
return self();
}
@java.lang.Override
@java.lang.SuppressWarnings("all")
public java.lang.String toString() {
return "SuperBuilderWithGenericsAndToBuilder.Parent.ParentBuilder(field1=" + this.field1 + ", items=" + this.items + ")";
return "SuperBuilderWithGenericsAndToBuilder.Parent.ParentBuilder(field1=" + this.field1 + ", items$key=" + this.items$key + ", items$value=" + this.items$value + ")";
}
}
@java.lang.SuppressWarnings("all")
@@ -70,16 +85,18 @@ public class SuperBuilderWithGenericsAndToBuilder {
@java.lang.SuppressWarnings("all")
protected Parent(final ParentBuilder<A, ?, ?> b) {
this.field1 = b.field1;
java.util.List<String> items;
switch (b.items == null ? 0 : b.items.size()) {
java.util.Map<Integer, String> items;
switch (b.items$key == null ? 0 : b.items$key.size()) {
case 0:
items = java.util.Collections.emptyList();
items = java.util.Collections.emptyMap();
break;
case 1:
items = java.util.Collections.singletonList(b.items.get(0));
items = java.util.Collections.singletonMap(b.items$key.get(0), b.items$value.get(0));
break;
default:
items = java.util.Collections.unmodifiableList(new java.util.ArrayList<String>(b.items));
items = new java.util.LinkedHashMap<Integer, String>(b.items$key.size() < 1073741824 ? 1 + b.items$key.size() + (b.items$key.size() - 3) / 3 : java.lang.Integer.MAX_VALUE);
for (int $i = 0; $i < b.items$key.size(); $i++) items.put(b.items$key.get($i), (String) b.items$value.get($i));
items = java.util.Collections.unmodifiableMap(items);
}
this.items = items;
}
@@ -157,6 +174,6 @@ public class SuperBuilderWithGenericsAndToBuilder {
}
}
public static void test() {
Child<Integer> x = Child.<Integer>builder().field3(0.0).field1(5).item("").build().toBuilder().build();
Child<Integer> x = Child.<Integer>builder().field3(0.0).field1(5).item(5, "").build().toBuilder().build();
}
}