mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-03 07:13:15 +00:00
Merge pull request #2719 from Rawi01/superbuilder-initializer-npe
SuperBuilder now skips initializers while gathering types
This commit is contained in:
4 files changed
+146
No files matched your search
@@ -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;
|
||||
@@ -1102,6 +1103,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]));
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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";
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user