Skip to content

Commit 074f236

Browse files
author
Nathaniel Troutman
committed
feat: allow generics with SuperBuilder customization
1 parent 9dc7e7f commit 074f236

File tree

4 files changed

+24
-24
lines changed

4 files changed

+24
-24
lines changed

src/core/lombok/javac/handlers/HandleSuperBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1160,7 +1160,7 @@ private boolean constructorExists(JavacNode type, String builderClassName) {
11601160
if (lastIndexOfDot >= 0) {
11611161
typeName = typeName.substring(lastIndexOfDot+1);
11621162
}
1163-
if ((builderClassName+"<?, ?>").equals(typeName))
1163+
if (typeName.startsWith(builderClassName) && typeName.endsWith("?, ?>"))
11641164
return true;
11651165
}
11661166
}

test/transform/resource/after-delombok/SuperBuilderCustomized.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import java.util.List;
22
public class SuperBuilderCustomized {
3-
public static class Parent {
4-
public static abstract class ParentBuilder<C extends Parent, B extends ParentBuilder<C, B>> {
3+
public static class Parent<T> {
4+
public static abstract class ParentBuilder<T, C extends Parent<T>, B extends ParentBuilder<T, C, B>> {
55
@java.lang.SuppressWarnings("all")
66
private int field1;
77
public B resetToDefault() {
@@ -23,31 +23,31 @@ public java.lang.String toString() {
2323
}
2424
}
2525
int field1;
26-
protected Parent(ParentBuilder<?, ?> b) {
26+
protected Parent(ParentBuilder<?, ?, ?> b) {
2727
if (b.field1 == 0) throw new IllegalArgumentException("field1 must be != 0");
2828
this.field1 = b.field1;
2929
}
30-
public static SuperBuilderCustomized.Parent.ParentBuilder<?, ?> builder(int field1) {
30+
public static SuperBuilderCustomized.Parent.ParentBuilder<?, ?, ?> builder(int field1) {
3131
return new SuperBuilderCustomized.Parent.ParentBuilderImpl().field1(field1);
3232
}
3333
@java.lang.SuppressWarnings("all")
34-
private static final class ParentBuilderImpl extends SuperBuilderCustomized.Parent.ParentBuilder<SuperBuilderCustomized.Parent, SuperBuilderCustomized.Parent.ParentBuilderImpl> {
34+
private static final class ParentBuilderImpl<T> extends SuperBuilderCustomized.Parent.ParentBuilder<T, SuperBuilderCustomized.Parent<T>, SuperBuilderCustomized.Parent.ParentBuilderImpl<T>> {
3535
@java.lang.SuppressWarnings("all")
3636
private ParentBuilderImpl() {
3737
}
3838
@java.lang.Override
3939
@java.lang.SuppressWarnings("all")
40-
protected SuperBuilderCustomized.Parent.ParentBuilderImpl self() {
40+
protected SuperBuilderCustomized.Parent.ParentBuilderImpl<T> self() {
4141
return this;
4242
}
4343
@java.lang.Override
4444
@java.lang.SuppressWarnings("all")
45-
public SuperBuilderCustomized.Parent build() {
46-
return new SuperBuilderCustomized.Parent(this);
45+
public SuperBuilderCustomized.Parent<T> build() {
46+
return new SuperBuilderCustomized.Parent<T>(this);
4747
}
4848
}
4949
}
50-
public static class Child extends Parent {
50+
public static class Child extends Parent<String> {
5151
private static final class ChildBuilderImpl extends ChildBuilder<Child, ChildBuilderImpl> {
5252
@Override
5353
public Child build() {
@@ -68,7 +68,7 @@ protected SuperBuilderCustomized.Child.ChildBuilderImpl self() {
6868
return new ChildBuilderImpl().field2(10.0);
6969
}
7070
@java.lang.SuppressWarnings("all")
71-
public static abstract class ChildBuilder<C extends SuperBuilderCustomized.Child, B extends SuperBuilderCustomized.Child.ChildBuilder<C, B>> extends Parent.ParentBuilder<C, B> {
71+
public static abstract class ChildBuilder<C extends SuperBuilderCustomized.Child, B extends SuperBuilderCustomized.Child.ChildBuilder<C, B>> extends Parent.ParentBuilder<String, C, B> {
7272
@java.lang.SuppressWarnings("all")
7373
private double field2;
7474
/**

test/transform/resource/after-ecj/SuperBuilderCustomized.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import java.util.List;
22
public class SuperBuilderCustomized {
3-
public static @lombok.experimental.SuperBuilder class Parent {
4-
public static abstract class ParentBuilder<C extends Parent, B extends ParentBuilder<C, B>> {
3+
public static @lombok.experimental.SuperBuilder class Parent<T> {
4+
public static abstract class ParentBuilder<T, C extends Parent<T>, B extends ParentBuilder<T, C, B>> {
55
private @java.lang.SuppressWarnings("all") int field1;
66
public ParentBuilder() {
77
super();
@@ -20,25 +20,25 @@ public B field1(int field1) {
2020
return (("SuperBuilderCustomized.Parent.ParentBuilder(field1=" + this.field1) + ")");
2121
}
2222
}
23-
private static final @java.lang.SuppressWarnings("all") class ParentBuilderImpl extends SuperBuilderCustomized.Parent.ParentBuilder<SuperBuilderCustomized.Parent, SuperBuilderCustomized.Parent.ParentBuilderImpl> {
23+
private static final @java.lang.SuppressWarnings("all") class ParentBuilderImpl<T> extends SuperBuilderCustomized.Parent.ParentBuilder<T, SuperBuilderCustomized.Parent<T>, SuperBuilderCustomized.Parent.ParentBuilderImpl<T>> {
2424
private ParentBuilderImpl() {
2525
super();
2626
}
27-
protected @java.lang.Override @java.lang.SuppressWarnings("all") SuperBuilderCustomized.Parent.ParentBuilderImpl self() {
27+
protected @java.lang.Override @java.lang.SuppressWarnings("all") SuperBuilderCustomized.Parent.ParentBuilderImpl<T> self() {
2828
return this;
2929
}
30-
public @java.lang.Override @java.lang.SuppressWarnings("all") SuperBuilderCustomized.Parent build() {
31-
return new SuperBuilderCustomized.Parent(this);
30+
public @java.lang.Override @java.lang.SuppressWarnings("all") SuperBuilderCustomized.Parent<T> build() {
31+
return new SuperBuilderCustomized.Parent<T>(this);
3232
}
3333
}
3434
int field1;
35-
protected Parent(ParentBuilder<?, ?> b) {
35+
protected Parent(ParentBuilder<?, ?, ?> b) {
3636
super();
3737
if ((b.field1 == 0))
3838
throw new IllegalArgumentException("field1 must be != 0");
3939
this.field1 = b.field1;
4040
}
41-
public static SuperBuilderCustomized.Parent.ParentBuilder<?, ?> builder(int field1) {
41+
public static SuperBuilderCustomized.Parent.ParentBuilder<?, ?, ?> builder(int field1) {
4242
return new SuperBuilderCustomized.Parent.ParentBuilderImpl().field1(field1);
4343
}
4444
}

test/transform/resource/before/SuperBuilderCustomized.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33

44
public class SuperBuilderCustomized {
55
@lombok.experimental.SuperBuilder
6-
public static class Parent {
7-
public static abstract class ParentBuilder<C extends Parent, B extends ParentBuilder<C, B>> {
6+
public static class Parent<T> {
7+
public static abstract class ParentBuilder<T, C extends Parent<T>, B extends ParentBuilder<T, C, B>> {
88
public B resetToDefault() {
99
field1 = 0;
1010
return self();
@@ -16,19 +16,19 @@ public B field1(int field1) {
1616
}
1717
int field1;
1818

19-
protected Parent(ParentBuilder<?, ?> b) {
19+
protected Parent(ParentBuilder<?, ?, ?> b) {
2020
if (b.field1 == 0)
2121
throw new IllegalArgumentException("field1 must be != 0");
2222
this.field1 = b.field1;
2323
}
2424

25-
public static SuperBuilderCustomized.Parent.ParentBuilder<?, ?> builder(int field1) {
25+
public static SuperBuilderCustomized.Parent.ParentBuilder<?, ?, ?> builder(int field1) {
2626
return new SuperBuilderCustomized.Parent.ParentBuilderImpl().field1(field1);
2727
}
2828
}
2929

3030
@lombok.experimental.SuperBuilder
31-
public static class Child extends Parent {
31+
public static class Child extends Parent<String> {
3232
private static final class ChildBuilderImpl extends ChildBuilder<Child, ChildBuilderImpl> {
3333
@Override
3434
public Child build() {

0 commit comments

Comments
 (0)