aboutsummaryrefslogtreecommitdiff
path: root/src/core/lombok/eclipse
diff options
context:
space:
mode:
authorJan Rieke <rieke@subshell.com>2017-03-13 14:32:57 +0100
committerJan Rieke <rieke@subshell.com>2017-03-13 14:37:26 +0100
commitbd51fa8484fde587eef10fc58e4527f26ec16430 (patch)
treeb5a4d7662347aaac311ac693f823d8da33a4f0bf /src/core/lombok/eclipse
parent4ec2e5135c373242dd00151eedf40997b0d75fe7 (diff)
downloadlombok-bd51fa8484fde587eef10fc58e4527f26ec16430.tar.gz
lombok-bd51fa8484fde587eef10fc58e4527f26ec16430.tar.bz2
lombok-bd51fa8484fde587eef10fc58e4527f26ec16430.zip
activate extendable builders explicitly (ensure backwards compatibility)
Diffstat (limited to 'src/core/lombok/eclipse')
-rw-r--r--src/core/lombok/eclipse/handlers/HandleBuilder.java15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/core/lombok/eclipse/handlers/HandleBuilder.java b/src/core/lombok/eclipse/handlers/HandleBuilder.java
index 4f152fe3..4bfc89f4 100644
--- a/src/core/lombok/eclipse/handlers/HandleBuilder.java
+++ b/src/core/lombok/eclipse/handlers/HandleBuilder.java
@@ -141,6 +141,7 @@ public class HandleBuilder extends EclipseAnnotationHandler<Builder> {
String builderClassName = builderInstance.builderClassName();
boolean inherit = builderInstance.inherit();
+ boolean extendable = inherit || builderInstance.extendable(); // inherit implies extendable
String superclassBuilderClassName = builderInstance.superclassBuilderClassName();
String toBuilderMethodName = "toBuilder";
@@ -203,9 +204,9 @@ public class HandleBuilder extends EclipseAnnotationHandler<Builder> {
superclassBuilderClassName = new String(td.superclass.getLastToken()) + "Builder";
}
- boolean callSuperConstructor = inherit && td.superclass != null;
+ boolean callBuilderBasedSuperConstructor = inherit && td.superclass != null;
new HandleConstructor().generateConstructor(tdParent, AccessLevel.PROTECTED, allFields, false, null, SkipIfConstructorExists.I_AM_BUILDER, true,
- Collections.<Annotation>emptyList(), annotationNode, builderClassName, callSuperConstructor);
+ Collections.<Annotation>emptyList(), annotationNode, extendable ? builderClassName : null, callBuilderBasedSuperConstructor);
returnType = namePlusTypeParamsToTypeReference(td.name, td.typeParameters, p);
typeParams = td.typeParameters;
@@ -216,6 +217,10 @@ public class HandleBuilder extends EclipseAnnotationHandler<Builder> {
annotationNode.addError("@Builder(inherit=true) is only supported for type builders.");
return;
}
+ if (extendable) {
+ annotationNode.addError("@Builder(extendable=true) is only supported for type builders.");
+ return;
+ }
ConstructorDeclaration cd = (ConstructorDeclaration) parent.get();
if (cd.typeParameters != null && cd.typeParameters.length > 0) {
annotationNode.addError("@Builder is not supported on constructors with constructor type parameters.");
@@ -234,6 +239,10 @@ public class HandleBuilder extends EclipseAnnotationHandler<Builder> {
annotationNode.addError("@Builder(inherit=true) is only supported for type builders.");
return;
}
+ if (extendable) {
+ annotationNode.addError("@Builder(extendable=true) is only supported for type builders.");
+ return;
+ }
MethodDeclaration md = (MethodDeclaration) parent.get();
tdParent = parent.up();
isStatic = md.isStatic();
@@ -427,7 +436,7 @@ public class HandleBuilder extends EclipseAnnotationHandler<Builder> {
}
if (methodExists(buildMethodName, builderType, -1) == MemberExistsResult.NOT_EXISTS) {
- boolean useBuilderBasedConstructor = parent.get() instanceof TypeDeclaration;
+ boolean useBuilderBasedConstructor = parent.get() instanceof TypeDeclaration && extendable;
MethodDeclaration md = generateBuildMethod(isStatic, buildMethodName, nameOfStaticBuilderMethod, returnType, builderFields, builderType, thrownExceptions, addCleaning, ast, useBuilderBasedConstructor);
if (md != null) injectMethod(builderType, md);
}