Skip to content

Commit

Permalink
projectlombok#2596 Builder's setter prefix configurable from lombok.c…
Browse files Browse the repository at this point in the history
…onfig
  • Loading branch information
sadv1r committed May 20, 2021
1 parent 6758714 commit ca9ef77
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 6 deletions.
9 changes: 8 additions & 1 deletion src/core/lombok/ConfigurationKeys.java
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,14 @@ private ConfigurationKeys() {}
* If set, <em>any</em> usage of {@code @Builder} results in a warning / error.
*/
public static final ConfigurationKey<FlagUsageType> BUILDER_FLAG_USAGE = new ConfigurationKey<FlagUsageType>("lombok.builder.flagUsage", "Emit a warning or error if @Builder is used.") {};


/**
* lombok configuration: {@code lombok.builder.setterPrefix} = &lt;String: prefix&gt;.
*
* For any usage of the {@code @Builder} annotation without an explicit {@code setterPrefix} parameter, this prefix is used.
*/
public static final ConfigurationKey<FlagUsageType> BUILDER_SETTER_PREFIX = new ConfigurationKey<FlagUsageType>("lombok.builder.setterPrefix", "The prefix to prepend to generated @Builder setter method names") {};

// ----- Singular -----

/**
Expand Down
24 changes: 19 additions & 5 deletions src/core/lombok/eclipse/handlers/HandleBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,21 @@ private static final char[] prefixWith(char[] prefix, char[] name) {
System.arraycopy(name, 0, out, prefix.length, name.length);
return out;
}


// TODO Maybe replace to isExplicit(annotationMethodName)
private static String getBuilderSetterPrefix(EclipseNode node, String setterPrefix) {
boolean explicitPrefix = setterPrefix != null && !setterPrefix.isEmpty();

if (explicitPrefix) {
return setterPrefix;
}

String configurationPrefix = node.getAst().readConfiguration(ConfigurationKeys.BUILDER_SETTER_PREFIX);
if (configurationPrefix != null && !configurationPrefix.isEmpty()) return configurationPrefix;

return setterPrefix;
}

@Override public void handle(AnnotationValues<Builder> annotation, Annotation ast, EclipseNode annotationNode) {
final String BUILDER_NODE_NOT_SUPPORTED_ERR = "@Builder is only supported on classes, records, constructors, and methods.";

Expand Down Expand Up @@ -315,7 +329,7 @@ private static final char[] prefixWith(char[] prefix, char[] name) {
bfd.builderFieldName = bfd.name;
bfd.annotations = copyAnnotations(fd, findCopyableAnnotations(fieldNode));
bfd.type = fd.type;
bfd.singularData = getSingularData(fieldNode, ast, annInstance.setterPrefix());
bfd.singularData = getSingularData(fieldNode, ast, getBuilderSetterPrefix(annotationNode, annInstance.setterPrefix()));
bfd.originalFieldNode = fieldNode;

if (bfd.singularData != null && isDefault != null) {
Expand Down Expand Up @@ -478,7 +492,7 @@ private static final char[] prefixWith(char[] prefix, char[] name) {
bfd.builderFieldName = bfd.name;
bfd.annotations = copyAnnotations(arg, copyableAnnotations);
bfd.type = arg.type;
bfd.singularData = getSingularData(param, ast, annInstance.setterPrefix());
bfd.singularData = getSingularData(param, ast, getBuilderSetterPrefix(annotationNode, annInstance.setterPrefix()));
bfd.originalFieldNode = param;
addObtainVia(bfd, param);
job.builderFields.add(bfd);
Expand Down Expand Up @@ -547,7 +561,7 @@ private static final char[] prefixWith(char[] prefix, char[] name) {
}

for (BuilderFieldData bfd : job.builderFields) {
makePrefixedSetterMethodsForBuilder(job, bfd, annInstance.setterPrefix());
makePrefixedSetterMethodsForBuilder(job, bfd, getBuilderSetterPrefix(annotationNode, annInstance.setterPrefix()));
}

{
Expand Down Expand Up @@ -594,7 +608,7 @@ private static final char[] prefixWith(char[] prefix, char[] name) {
tps[i].name = typeArgsForToBuilder.get(i);
}
}
MethodDeclaration md = generateToBuilderMethod(job, tps, annInstance.setterPrefix());
MethodDeclaration md = generateToBuilderMethod(job, tps, getBuilderSetterPrefix(annotationNode, annInstance.setterPrefix()));

if (md != null) injectMethod(job.parentType, md);
}
Expand Down

0 comments on commit ca9ef77

Please sign in to comment.