[#4070] Add tests for complex superclass names for @SuperBuilder as well.

This commit is contained in:
Reinier Zwitserloot committed 2026-09-08 23:44:04 +02:00
1 parent 4bbc653394
commit 2e5bff41ea
5 files changed
+259 -2

No files matched your search

@@ -252,7 +252,7 @@ public class HandleConstructor {
ASTNode source = sourceNode.get();
boolean staticConstrRequired = staticName != null && !staticName.equals("");
if (skipIfConstructorExists != SkipIfConstructorExists.NO) {
for (EclipseNode child : typeNode.down()) {
if (child.getKind() == Kind.ANNOTATION) {
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2013-2025 The Project Lombok Authors.
* Copyright (C) 2013-2026 The Project Lombok Authors.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -269,6 +269,7 @@ public class HandleSuperBuilder extends JavacAnnotationHandler<SuperBuilder> {
String superclassBuilderClassName = job.replaceBuilderClassName(superclassName.toString(), builderClassNameTemplate);
superclassBuilderClass = chainDots(parent, superclassName.toString(), superclassBuilderClassName);
} else if (extendsClause != null) {
// This is dangerous; `toString()` breaks on non-ascii. We should optimally never get here. This fallback mechanism will remain (better than hardcrash; `toString()` is likely to work in _some_ cases).
String builderClassNameTemplate = BuilderJob.getBuilderClassNameTemplate(annotationNode, null);
String superclassBuilderClassName = job.replaceBuilderClassName(extendsClause.toString(), builderClassNameTemplate);
superclassBuilderClass = chainDots(parent, extendsClause.toString(), superclassBuilderClassName);
@@ -0,0 +1,144 @@
public class SuperBuilderNonAsciiComplex {
public static class 부모<T> {
Long a;
T z;
@java.lang.SuppressWarnings("all")
@lombok.Generated
public static abstract class 부모Builder<T, C extends SuperBuilderNonAsciiComplex.부모<T>, B extends SuperBuilderNonAsciiComplex.부모.부모Builder<T, C, B>> {
@java.lang.SuppressWarnings("all")
@lombok.Generated
private Long a;
@java.lang.SuppressWarnings("all")
@lombok.Generated
private T z;
/**
* @return {@code this}.
*/
@java.lang.SuppressWarnings("all")
@lombok.Generated
public B a(final Long a) {
this.a = a;
return self();
}
/**
* @return {@code this}.
*/
@java.lang.SuppressWarnings("all")
@lombok.Generated
public B z(final T z) {
this.z = z;
return self();
}
@java.lang.SuppressWarnings("all")
@lombok.Generated
protected abstract B self();
@java.lang.SuppressWarnings("all")
@lombok.Generated
public abstract C build();
@java.lang.Override
@java.lang.SuppressWarnings("all")
@lombok.Generated
public java.lang.String toString() {
return "SuperBuilderNonAsciiComplex.부모.부모Builder(a=" + this.a + ", z=" + this.z + ")";
}
}
@java.lang.SuppressWarnings("all")
@lombok.Generated
private static final class 부모BuilderImpl<T> extends SuperBuilderNonAsciiComplex.부모.부모Builder<T, SuperBuilderNonAsciiComplex.부모<T>, SuperBuilderNonAsciiComplex.부모.부모BuilderImpl<T>> {
@java.lang.SuppressWarnings("all")
@lombok.Generated
private 부모BuilderImpl() {
}
@java.lang.Override
@java.lang.SuppressWarnings("all")
@lombok.Generated
protected SuperBuilderNonAsciiComplex.부모.부모BuilderImpl<T> self() {
return this;
}
@java.lang.Override
@java.lang.SuppressWarnings("all")
@lombok.Generated
public SuperBuilderNonAsciiComplex.부모<T> build() {
return new SuperBuilderNonAsciiComplex.부모<T>(this);
}
}
@java.lang.SuppressWarnings("all")
@lombok.Generated
protected 부모(final SuperBuilderNonAsciiComplex.부모.부모Builder<T, ?, ?> b) {
this.a = b.a;
this.z = b.z;
}
@java.lang.SuppressWarnings("all")
@lombok.Generated
public static <T> SuperBuilderNonAsciiComplex.부모.부모Builder<T, ?, ?> builder() {
return new SuperBuilderNonAsciiComplex.부모.부모BuilderImpl<T>();
}
}
public static class 자식 extends SuperBuilderNonAsciiComplex.부모<String> {
String b;
@java.lang.SuppressWarnings("all")
@lombok.Generated
public static abstract class 자식Builder<C extends SuperBuilderNonAsciiComplex.자식, B extends SuperBuilderNonAsciiComplex.자식.자식Builder<C, B>> extends SuperBuilderNonAsciiComplex.부모.부모Builder<String, C, B> {
@java.lang.SuppressWarnings("all")
@lombok.Generated
private String b;
/**
* @return {@code this}.
*/
@java.lang.SuppressWarnings("all")
@lombok.Generated
public B b(final String b) {
this.b = b;
return self();
}
@java.lang.Override
@java.lang.SuppressWarnings("all")
@lombok.Generated
protected abstract B self();
@java.lang.Override
@java.lang.SuppressWarnings("all")
@lombok.Generated
public abstract C build();
@java.lang.Override
@java.lang.SuppressWarnings("all")
@lombok.Generated
public java.lang.String toString() {
return "SuperBuilderNonAsciiComplex.자식.자식Builder(super=" + super.toString() + ", b=" + this.b + ")";
}
}
@java.lang.SuppressWarnings("all")
@lombok.Generated
private static final class 자식BuilderImpl extends SuperBuilderNonAsciiComplex.자식.자식Builder<SuperBuilderNonAsciiComplex.자식, SuperBuilderNonAsciiComplex.자식.자식BuilderImpl> {
@java.lang.SuppressWarnings("all")
@lombok.Generated
private 자식BuilderImpl() {
}
@java.lang.Override
@java.lang.SuppressWarnings("all")
@lombok.Generated
protected SuperBuilderNonAsciiComplex.자식.자식BuilderImpl self() {
return this;
}
@java.lang.Override
@java.lang.SuppressWarnings("all")
@lombok.Generated
public SuperBuilderNonAsciiComplex.자식 build() {
return new SuperBuilderNonAsciiComplex.자식(this);
}
}
@java.lang.SuppressWarnings("all")
@lombok.Generated
protected 자식(final SuperBuilderNonAsciiComplex.자식.자식Builder<?, ?> b) {
super(b);
this.b = b.b;
}
@java.lang.SuppressWarnings("all")
@lombok.Generated
public static SuperBuilderNonAsciiComplex.자식.자식Builder<?, ?> builder() {
return new SuperBuilderNonAsciiComplex.자식.자식BuilderImpl();
}
}
public static void test() {
부모<String> x = 자식.builder().b("").a(5L).build();
}
}
@@ -0,0 +1,96 @@
public class SuperBuilderNonAsciiComplex {
public static @lombok.SuperBuilder class 부모<T> {
public static abstract @java.lang.SuppressWarnings("all") @lombok.Generated class 부모Builder<T, C extends SuperBuilderNonAsciiComplex.부모<T>, B extends SuperBuilderNonAsciiComplex.부모.부모Builder<T, C, B>> {
private @java.lang.SuppressWarnings("all") @lombok.Generated Long a;
private @java.lang.SuppressWarnings("all") @lombok.Generated T z;
public 부모Builder() {
super();
}
/**
* @return {@code this}.
*/
public @java.lang.SuppressWarnings("all") @lombok.Generated B a(final Long a) {
this.a = a;
return self();
}
/**
* @return {@code this}.
*/
public @java.lang.SuppressWarnings("all") @lombok.Generated B z(final T z) {
this.z = z;
return self();
}
protected abstract @java.lang.SuppressWarnings("all") @lombok.Generated B self();
public abstract @java.lang.SuppressWarnings("all") @lombok.Generated C build();
public @java.lang.Override @java.lang.SuppressWarnings("all") @lombok.Generated java.lang.String toString() {
return (((("SuperBuilderNonAsciiComplex.부모.부모Builder(a=" + this.a) + ", z=") + this.z) + ")");
}
}
private static final @java.lang.SuppressWarnings("all") @lombok.Generated class 부모BuilderImpl<T> extends SuperBuilderNonAsciiComplex.부모.부모Builder<T, SuperBuilderNonAsciiComplex.부모<T>, SuperBuilderNonAsciiComplex.부모.부모BuilderImpl<T>> {
private 부모BuilderImpl() {
super();
}
protected @java.lang.Override @java.lang.SuppressWarnings("all") @lombok.Generated SuperBuilderNonAsciiComplex.부모.부모BuilderImpl<T> self() {
return this;
}
public @java.lang.Override @java.lang.SuppressWarnings("all") @lombok.Generated SuperBuilderNonAsciiComplex.부모<T> build() {
return new SuperBuilderNonAsciiComplex.부모<T>(this);
}
}
Long a;
T z;
protected @java.lang.SuppressWarnings("all") @lombok.Generated 부모(final SuperBuilderNonAsciiComplex.부모.부모Builder<T, ?, ?> b) {
super();
this.a = b.a;
this.z = b.z;
}
public static @java.lang.SuppressWarnings("all") @lombok.Generated <T>SuperBuilderNonAsciiComplex.부모.부모Builder<T, ?, ?> builder() {
return new SuperBuilderNonAsciiComplex.부모.부모BuilderImpl<T>();
}
}
public static @lombok.SuperBuilder class 자식 extends SuperBuilderNonAsciiComplex.부모<String> {
public static abstract @java.lang.SuppressWarnings("all") @lombok.Generated class 자식Builder<C extends SuperBuilderNonAsciiComplex.자식, B extends SuperBuilderNonAsciiComplex.자식.자식Builder<C, B>> extends SuperBuilderNonAsciiComplex.부모.부모Builder<String, C, B> {
private @java.lang.SuppressWarnings("all") @lombok.Generated String b;
public 자식Builder() {
super();
}
/**
* @return {@code this}.
*/
public @java.lang.SuppressWarnings("all") @lombok.Generated B b(final String b) {
this.b = b;
return self();
}
protected abstract @java.lang.Override @java.lang.SuppressWarnings("all") @lombok.Generated B self();
public abstract @java.lang.Override @java.lang.SuppressWarnings("all") @lombok.Generated C build();
public @java.lang.Override @java.lang.SuppressWarnings("all") @lombok.Generated java.lang.String toString() {
return (((("SuperBuilderNonAsciiComplex.자식.자식Builder(super=" + super.toString()) + ", b=") + this.b) + ")");
}
}
private static final @java.lang.SuppressWarnings("all") @lombok.Generated class 자식BuilderImpl extends SuperBuilderNonAsciiComplex.자식.자식Builder<SuperBuilderNonAsciiComplex.자식, SuperBuilderNonAsciiComplex.자식.자식BuilderImpl> {
private 자식BuilderImpl() {
super();
}
protected @java.lang.Override @java.lang.SuppressWarnings("all") @lombok.Generated SuperBuilderNonAsciiComplex.자식.자식BuilderImpl self() {
return this;
}
public @java.lang.Override @java.lang.SuppressWarnings("all") @lombok.Generated SuperBuilderNonAsciiComplex.자식 build() {
return new SuperBuilderNonAsciiComplex.자식(this);
}
}
String b;
protected @java.lang.SuppressWarnings("all") @lombok.Generated 자식(final SuperBuilderNonAsciiComplex.자식.자식Builder<?, ?> b) {
super(b);
this.b = b.b;
}
public static @java.lang.SuppressWarnings("all") @lombok.Generated SuperBuilderNonAsciiComplex.자식.자식Builder<?, ?> builder() {
return new SuperBuilderNonAsciiComplex.자식.자식BuilderImpl();
}
}
public SuperBuilderNonAsciiComplex() {
super();
}
public static void test() {
부모<String> x = 자식.builder().b("").a(5L).build();
}
}
@@ -0,0 +1,16 @@
public class SuperBuilderNonAsciiComplex {
@lombok.SuperBuilder
public static class 부모<T> {
Long a;
T z;
}
@lombok.SuperBuilder
public static class 자식 extends SuperBuilderNonAsciiComplex.부모<String> {
String b;
}
public static void test() {
부모<String> x = 자식.builder().b("").a(5L).build();
}
}