mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-11 12:19:00 +00:00
Merge pull request #2687 from janrieke/superBuilderConfigBuilderClassName
SuperBuilder: consider lombok.builder.className for builder extends clause
This commit is contained in:
7 files changed
+180
-17
No files matched your search
@@ -183,14 +183,14 @@ public class HandleBuilder extends EclipseAnnotationHandler<Builder> {
|
||||
|
||||
builderMethodName = ann.builderMethodName();
|
||||
buildMethodName = ann.buildMethodName();
|
||||
setBuilderClassName(fixBuilderClassName(node, ann.builderClassName()));
|
||||
setBuilderClassName(getBuilderClassNameTemplate(node, ann.builderClassName()));
|
||||
toBuilder = ann.toBuilder();
|
||||
|
||||
if (builderMethodName == null) builderMethodName = "builder";
|
||||
if (buildMethodName == null) buildMethodName = "build";
|
||||
}
|
||||
|
||||
static String fixBuilderClassName(EclipseNode node, String override) {
|
||||
static String getBuilderClassNameTemplate(EclipseNode node, String override) {
|
||||
if (override != null && !override.isEmpty()) return override;
|
||||
override = node.getAst().readConfiguration(ConfigurationKeys.BUILDER_CLASS_NAME);
|
||||
if (override != null && !override.isEmpty()) return override;
|
||||
@@ -202,8 +202,12 @@ public class HandleBuilder extends EclipseAnnotationHandler<Builder> {
|
||||
}
|
||||
|
||||
String replaceBuilderClassName(char[] name) {
|
||||
if (builderClassName.indexOf('*') == -1) return builderClassName;
|
||||
return builderClassName.replace("*", new String(name));
|
||||
return replaceBuilderClassName(name, builderClassName);
|
||||
}
|
||||
|
||||
String replaceBuilderClassName(char[] name, String template) {
|
||||
if (template.indexOf('*') == -1) return template;
|
||||
return template.replace("*", new String(name));
|
||||
}
|
||||
|
||||
String replaceBuilderClassName(String name) {
|
||||
|
||||
@@ -124,7 +124,7 @@ public class HandleSuperBuilder extends EclipseAnnotationHandler<SuperBuilder> {
|
||||
|
||||
if (builderMethodName == null) builderMethodName = "builder";
|
||||
if (buildMethodName == null) buildMethodName = "build";
|
||||
builderClassName = fixBuilderClassName(node, "");
|
||||
builderClassName = getBuilderClassNameTemplate(node, null);
|
||||
}
|
||||
|
||||
EclipseNode builderAbstractType;
|
||||
@@ -274,8 +274,9 @@ public class HandleSuperBuilder extends EclipseAnnotationHandler<SuperBuilder> {
|
||||
};
|
||||
if (extendsClause instanceof QualifiedTypeReference) {
|
||||
QualifiedTypeReference qualifiedTypeReference = (QualifiedTypeReference)extendsClause;
|
||||
String superclassClassName = String.valueOf(qualifiedTypeReference.getLastToken());
|
||||
String superclassBuilderClassName = job.replaceBuilderClassName(superclassClassName);
|
||||
char[] superclassClassName = qualifiedTypeReference.getLastToken();
|
||||
String builderClassNameTemplate = BuilderJob.getBuilderClassNameTemplate(annotationNode, null);
|
||||
String superclassBuilderClassName = job.replaceBuilderClassName(superclassClassName, builderClassNameTemplate);
|
||||
|
||||
char[][] tokens = Arrays.copyOf(qualifiedTypeReference.tokens, qualifiedTypeReference.tokens.length + 1);
|
||||
tokens[tokens.length-1] = superclassBuilderClassName.toCharArray();
|
||||
@@ -291,10 +292,11 @@ public class HandleSuperBuilder extends EclipseAnnotationHandler<SuperBuilder> {
|
||||
|
||||
superclassBuilderClass = new ParameterizedQualifiedTypeReference(tokens, typeArgsForTokens, 0, poss);
|
||||
} else if (extendsClause != null) {
|
||||
String superClass = String.valueOf(extendsClause.getTypeName()[0]);
|
||||
String superclassBuilderClassName = superClass + "Builder";
|
||||
char[] superclassClassName = extendsClause.getTypeName()[0];
|
||||
String builderClassNameTemplate = BuilderJob.getBuilderClassNameTemplate(annotationNode, null);
|
||||
String superclassBuilderClassName = job.replaceBuilderClassName(superclassClassName, builderClassNameTemplate);
|
||||
|
||||
char[][] tokens = new char[][] {superClass.toCharArray(), superclassBuilderClassName.toCharArray()};
|
||||
char[][] tokens = new char[][] {superclassClassName, superclassBuilderClassName.toCharArray()};
|
||||
long[] poss = new long[tokens.length];
|
||||
Arrays.fill(poss, job.getPos());
|
||||
|
||||
|
||||
@@ -130,7 +130,7 @@ public class HandleBuilder extends JavacAnnotationHandler<Builder> {
|
||||
|
||||
builderMethodName = ann.builderMethodName();
|
||||
buildMethodName = ann.buildMethodName();
|
||||
builderClassName = fixBuilderClassName(node, ann.builderClassName());
|
||||
builderClassName = getBuilderClassNameTemplate(node, ann.builderClassName());
|
||||
toBuilder = ann.toBuilder();
|
||||
|
||||
if (builderMethodName == null) builderMethodName = "builder";
|
||||
@@ -138,7 +138,7 @@ public class HandleBuilder extends JavacAnnotationHandler<Builder> {
|
||||
if (builderClassName == null) builderClassName = "";
|
||||
}
|
||||
|
||||
static String fixBuilderClassName(JavacNode node, String override) {
|
||||
static String getBuilderClassNameTemplate(JavacNode node, String override) {
|
||||
if (override != null && !override.isEmpty()) return override;
|
||||
override = node.getAst().readConfiguration(ConfigurationKeys.BUILDER_CLASS_NAME);
|
||||
if (override != null && !override.isEmpty()) return override;
|
||||
@@ -146,8 +146,12 @@ public class HandleBuilder extends JavacAnnotationHandler<Builder> {
|
||||
}
|
||||
|
||||
String replaceBuilderClassName(Name name) {
|
||||
if (builderClassName.indexOf('*') == -1) return builderClassName;
|
||||
return builderClassName.replace("*", name.toString());
|
||||
return replaceBuilderClassName(name.toString(), builderClassName);
|
||||
}
|
||||
|
||||
String replaceBuilderClassName(String name, String template) {
|
||||
if (template.indexOf('*') == -1) return template;
|
||||
return template.replace("*", name);
|
||||
}
|
||||
|
||||
JCExpression createBuilderParentTypeReference() {
|
||||
|
||||
@@ -111,7 +111,7 @@ public class HandleSuperBuilder extends JavacAnnotationHandler<SuperBuilder> {
|
||||
|
||||
if (builderMethodName == null) builderMethodName = "builder";
|
||||
if (buildMethodName == null) buildMethodName = "build";
|
||||
builderClassName = fixBuilderClassName(node, "");
|
||||
builderClassName = getBuilderClassNameTemplate(node, null);
|
||||
}
|
||||
|
||||
void setBuilderToImpl() {
|
||||
@@ -253,10 +253,12 @@ public class HandleSuperBuilder extends JavacAnnotationHandler<SuperBuilder> {
|
||||
}
|
||||
if (extendsClause instanceof JCFieldAccess) {
|
||||
Name superclassName = ((JCFieldAccess) extendsClause).getIdentifier();
|
||||
String superclassBuilderClassName = superclassName.toString() + "Builder";
|
||||
String builderClassNameTemplate = BuilderJob.getBuilderClassNameTemplate(annotationNode, null);
|
||||
String superclassBuilderClassName = job.replaceBuilderClassName(superclassName.toString(), builderClassNameTemplate);
|
||||
superclassBuilderClass = parent.getTreeMaker().Select((JCFieldAccess) extendsClause, parent.toName(superclassBuilderClassName));
|
||||
} else if (extendsClause != null) {
|
||||
String superclassBuilderClassName = extendsClause.toString() + "Builder";
|
||||
String builderClassNameTemplate = BuilderJob.getBuilderClassNameTemplate(annotationNode, null);
|
||||
String superclassBuilderClassName = job.replaceBuilderClassName(extendsClause.toString(), builderClassNameTemplate);
|
||||
superclassBuilderClass = chainDots(parent, extendsClause.toString(), superclassBuilderClassName);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
class SuperBuilderWithCustomBuilderClassName {
|
||||
static class SuperClass {
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public static abstract class Builder<C extends SuperBuilderWithCustomBuilderClassName.SuperClass, B extends SuperBuilderWithCustomBuilderClassName.SuperClass.Builder<C, B>> {
|
||||
@java.lang.SuppressWarnings("all")
|
||||
protected abstract B self();
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public abstract C build();
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public java.lang.String toString() {
|
||||
return "SuperBuilderWithCustomBuilderClassName.SuperClass.Builder()";
|
||||
}
|
||||
}
|
||||
@java.lang.SuppressWarnings("all")
|
||||
private static final class BuilderImpl extends SuperBuilderWithCustomBuilderClassName.SuperClass.Builder<SuperBuilderWithCustomBuilderClassName.SuperClass, SuperBuilderWithCustomBuilderClassName.SuperClass.BuilderImpl> {
|
||||
@java.lang.SuppressWarnings("all")
|
||||
private BuilderImpl() {
|
||||
}
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
protected SuperBuilderWithCustomBuilderClassName.SuperClass.BuilderImpl self() {
|
||||
return this;
|
||||
}
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public SuperBuilderWithCustomBuilderClassName.SuperClass build() {
|
||||
return new SuperBuilderWithCustomBuilderClassName.SuperClass(this);
|
||||
}
|
||||
}
|
||||
@java.lang.SuppressWarnings("all")
|
||||
protected SuperClass(final SuperBuilderWithCustomBuilderClassName.SuperClass.Builder<?, ?> b) {
|
||||
}
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public static SuperBuilderWithCustomBuilderClassName.SuperClass.Builder<?, ?> builder() {
|
||||
return new SuperBuilderWithCustomBuilderClassName.SuperClass.BuilderImpl();
|
||||
}
|
||||
}
|
||||
static class SubClass extends SuperClass {
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public static abstract class Builder<C extends SuperBuilderWithCustomBuilderClassName.SubClass, B extends SuperBuilderWithCustomBuilderClassName.SubClass.Builder<C, B>> extends SuperClass.Builder<C, B> {
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
protected abstract B self();
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public abstract C build();
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public java.lang.String toString() {
|
||||
return "SuperBuilderWithCustomBuilderClassName.SubClass.Builder(super=" + super.toString() + ")";
|
||||
}
|
||||
}
|
||||
@java.lang.SuppressWarnings("all")
|
||||
private static final class BuilderImpl extends SuperBuilderWithCustomBuilderClassName.SubClass.Builder<SuperBuilderWithCustomBuilderClassName.SubClass, SuperBuilderWithCustomBuilderClassName.SubClass.BuilderImpl> {
|
||||
@java.lang.SuppressWarnings("all")
|
||||
private BuilderImpl() {
|
||||
}
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
protected SuperBuilderWithCustomBuilderClassName.SubClass.BuilderImpl self() {
|
||||
return this;
|
||||
}
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public SuperBuilderWithCustomBuilderClassName.SubClass build() {
|
||||
return new SuperBuilderWithCustomBuilderClassName.SubClass(this);
|
||||
}
|
||||
}
|
||||
@java.lang.SuppressWarnings("all")
|
||||
protected SubClass(final SuperBuilderWithCustomBuilderClassName.SubClass.Builder<?, ?> b) {
|
||||
super(b);
|
||||
}
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public static SuperBuilderWithCustomBuilderClassName.SubClass.Builder<?, ?> builder() {
|
||||
return new SuperBuilderWithCustomBuilderClassName.SubClass.BuilderImpl();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
class SuperBuilderWithCustomBuilderClassName {
|
||||
static @lombok.experimental.SuperBuilder class SuperClass {
|
||||
public static abstract @java.lang.SuppressWarnings("all") class Builder<C extends SuperBuilderWithCustomBuilderClassName.SuperClass, B extends SuperBuilderWithCustomBuilderClassName.SuperClass.Builder<C, B>> {
|
||||
public Builder() {
|
||||
super();
|
||||
}
|
||||
protected abstract @java.lang.SuppressWarnings("all") B self();
|
||||
public abstract @java.lang.SuppressWarnings("all") C build();
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() {
|
||||
return "SuperBuilderWithCustomBuilderClassName.SuperClass.Builder()";
|
||||
}
|
||||
}
|
||||
private static final @java.lang.SuppressWarnings("all") class BuilderImpl extends SuperBuilderWithCustomBuilderClassName.SuperClass.Builder<SuperBuilderWithCustomBuilderClassName.SuperClass, SuperBuilderWithCustomBuilderClassName.SuperClass.BuilderImpl> {
|
||||
private BuilderImpl() {
|
||||
super();
|
||||
}
|
||||
protected @java.lang.Override @java.lang.SuppressWarnings("all") SuperBuilderWithCustomBuilderClassName.SuperClass.BuilderImpl self() {
|
||||
return this;
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") SuperBuilderWithCustomBuilderClassName.SuperClass build() {
|
||||
return new SuperBuilderWithCustomBuilderClassName.SuperClass(this);
|
||||
}
|
||||
}
|
||||
protected @java.lang.SuppressWarnings("all") SuperClass(final SuperBuilderWithCustomBuilderClassName.SuperClass.Builder<?, ?> b) {
|
||||
super();
|
||||
}
|
||||
public static @java.lang.SuppressWarnings("all") SuperBuilderWithCustomBuilderClassName.SuperClass.Builder<?, ?> builder() {
|
||||
return new SuperBuilderWithCustomBuilderClassName.SuperClass.BuilderImpl();
|
||||
}
|
||||
}
|
||||
static @lombok.experimental.SuperBuilder class SubClass extends SuperClass {
|
||||
public static abstract @java.lang.SuppressWarnings("all") class Builder<C extends SuperBuilderWithCustomBuilderClassName.SubClass, B extends SuperBuilderWithCustomBuilderClassName.SubClass.Builder<C, B>> extends SuperClass.Builder<C, B> {
|
||||
public Builder() {
|
||||
super();
|
||||
}
|
||||
protected abstract @java.lang.Override @java.lang.SuppressWarnings("all") B self();
|
||||
public abstract @java.lang.Override @java.lang.SuppressWarnings("all") C build();
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() {
|
||||
return (("SuperBuilderWithCustomBuilderClassName.SubClass.Builder(super=" + super.toString()) + ")");
|
||||
}
|
||||
}
|
||||
private static final @java.lang.SuppressWarnings("all") class BuilderImpl extends SuperBuilderWithCustomBuilderClassName.SubClass.Builder<SuperBuilderWithCustomBuilderClassName.SubClass, SuperBuilderWithCustomBuilderClassName.SubClass.BuilderImpl> {
|
||||
private BuilderImpl() {
|
||||
super();
|
||||
}
|
||||
protected @java.lang.Override @java.lang.SuppressWarnings("all") SuperBuilderWithCustomBuilderClassName.SubClass.BuilderImpl self() {
|
||||
return this;
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") SuperBuilderWithCustomBuilderClassName.SubClass build() {
|
||||
return new SuperBuilderWithCustomBuilderClassName.SubClass(this);
|
||||
}
|
||||
}
|
||||
protected @java.lang.SuppressWarnings("all") SubClass(final SuperBuilderWithCustomBuilderClassName.SubClass.Builder<?, ?> b) {
|
||||
super(b);
|
||||
}
|
||||
public static @java.lang.SuppressWarnings("all") SuperBuilderWithCustomBuilderClassName.SubClass.Builder<?, ?> builder() {
|
||||
return new SuperBuilderWithCustomBuilderClassName.SubClass.BuilderImpl();
|
||||
}
|
||||
}
|
||||
SuperBuilderWithCustomBuilderClassName() {
|
||||
super();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
//CONF: lombok.builder.className=Builder
|
||||
class SuperBuilderWithCustomBuilderClassName {
|
||||
@lombok.experimental.SuperBuilder
|
||||
static class SuperClass {
|
||||
}
|
||||
@lombok.experimental.SuperBuilder
|
||||
static class SubClass extends SuperClass {
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user