mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-15 14:16:39 +00:00
do not assign values in build() method for extendable builders (WIP)
This commit is contained in:
1 parent
bd51fa8484
commit
f51bbce3e3
2 files changed
+48
-42
No files matched your search
@@ -556,31 +556,34 @@ public class HandleBuilder extends EclipseAnnotationHandler<Builder> {
|
||||
MethodDeclaration out = new MethodDeclaration(((CompilationUnitDeclaration) type.top().get()).compilationResult);
|
||||
out.bits |= ECLIPSE_DO_NOT_TOUCH_FLAG;
|
||||
List<Statement> statements = new ArrayList<Statement>();
|
||||
|
||||
if (addCleaning) {
|
||||
FieldReference thisUnclean = new FieldReference(CLEAN_FIELD_NAME, 0);
|
||||
thisUnclean.receiver = new ThisReference(0, 0);
|
||||
Expression notClean = new UnaryExpression(thisUnclean, OperatorIds.NOT);
|
||||
MessageSend invokeClean = new MessageSend();
|
||||
invokeClean.selector = CLEAN_METHOD_NAME;
|
||||
statements.add(new IfStatement(notClean, invokeClean, 0, 0));
|
||||
}
|
||||
|
||||
for (BuilderFieldData bfd : builderFields) {
|
||||
if (bfd.singularData != null && bfd.singularData.getSingularizer() != null) {
|
||||
bfd.singularData.getSingularizer().appendBuildCode(bfd.singularData, type, statements, bfd.name);
|
||||
}
|
||||
}
|
||||
|
||||
List<Expression> args = new ArrayList<Expression>();
|
||||
for (BuilderFieldData bfd : builderFields) {
|
||||
args.add(new SingleNameReference(bfd.name, 0L));
|
||||
}
|
||||
|
||||
if (addCleaning) {
|
||||
FieldReference thisUnclean = new FieldReference(CLEAN_FIELD_NAME, 0);
|
||||
thisUnclean.receiver = new ThisReference(0, 0);
|
||||
statements.add(new Assignment(thisUnclean, new TrueLiteral(0, 0), 0));
|
||||
// Extendable builders assign their values in the constructor, not in this build() method.
|
||||
if (!useBuilderBasedConstructor) {
|
||||
if (addCleaning) {
|
||||
FieldReference thisUnclean = new FieldReference(CLEAN_FIELD_NAME, 0);
|
||||
thisUnclean.receiver = new ThisReference(0, 0);
|
||||
Expression notClean = new UnaryExpression(thisUnclean, OperatorIds.NOT);
|
||||
MessageSend invokeClean = new MessageSend();
|
||||
invokeClean.selector = CLEAN_METHOD_NAME;
|
||||
statements.add(new IfStatement(notClean, invokeClean, 0, 0));
|
||||
}
|
||||
|
||||
for (BuilderFieldData bfd : builderFields) {
|
||||
if (bfd.singularData != null && bfd.singularData.getSingularizer() != null) {
|
||||
bfd.singularData.getSingularizer().appendBuildCode(bfd.singularData, type, statements, bfd.name);
|
||||
}
|
||||
}
|
||||
|
||||
for (BuilderFieldData bfd : builderFields) {
|
||||
args.add(new SingleNameReference(bfd.name, 0L));
|
||||
}
|
||||
|
||||
if (addCleaning) {
|
||||
FieldReference thisUnclean = new FieldReference(CLEAN_FIELD_NAME, 0);
|
||||
thisUnclean.receiver = new ThisReference(0, 0);
|
||||
statements.add(new Assignment(thisUnclean, new TrueLiteral(0, 0), 0));
|
||||
}
|
||||
}
|
||||
|
||||
out.modifiers = ClassFileConstants.AccPublic;
|
||||
|
||||
@@ -546,27 +546,30 @@ public class HandleBuilder extends JavacAnnotationHandler<Builder> {
|
||||
|
||||
JCExpression call;
|
||||
ListBuffer<JCStatement> statements = new ListBuffer<JCStatement>();
|
||||
|
||||
if (addCleaning) {
|
||||
JCExpression notClean = maker.Unary(CTC_NOT, maker.Select(maker.Ident(type.toName("this")), type.toName("$lombokUnclean")));
|
||||
JCStatement invokeClean = maker.Exec(maker.Apply(List.<JCExpression>nil(), maker.Ident(type.toName("$lombokClean")), List.<JCExpression>nil()));
|
||||
JCIf ifUnclean = maker.If(notClean, invokeClean, null);
|
||||
statements.append(ifUnclean);
|
||||
}
|
||||
|
||||
for (BuilderFieldData bfd : builderFields) {
|
||||
if (bfd.singularData != null && bfd.singularData.getSingularizer() != null) {
|
||||
bfd.singularData.getSingularizer().appendBuildCode(bfd.singularData, type, source, statements, bfd.name);
|
||||
}
|
||||
}
|
||||
|
||||
ListBuffer<JCExpression> args = new ListBuffer<JCExpression>();
|
||||
for (BuilderFieldData bfd : builderFields) {
|
||||
args.append(maker.Ident(bfd.name));
|
||||
}
|
||||
|
||||
// Extendable builders assign their values in the constructor, not in this build() method.
|
||||
if (!useBuilderBasedConstructor) {
|
||||
if (addCleaning) {
|
||||
JCExpression notClean = maker.Unary(CTC_NOT, maker.Select(maker.Ident(type.toName("this")), type.toName("$lombokUnclean")));
|
||||
JCStatement invokeClean = maker.Exec(maker.Apply(List.<JCExpression>nil(), maker.Ident(type.toName("$lombokClean")), List.<JCExpression>nil()));
|
||||
JCIf ifUnclean = maker.If(notClean, invokeClean, null);
|
||||
statements.append(ifUnclean);
|
||||
}
|
||||
|
||||
for (BuilderFieldData bfd : builderFields) {
|
||||
if (bfd.singularData != null && bfd.singularData.getSingularizer() != null) {
|
||||
bfd.singularData.getSingularizer().appendBuildCode(bfd.singularData, type, source, statements, bfd.name);
|
||||
}
|
||||
}
|
||||
|
||||
if (addCleaning) {
|
||||
statements.append(maker.Exec(maker.Assign(maker.Select(maker.Ident(type.toName("this")), type.toName("$lombokUnclean")), maker.Literal(CTC_BOOLEAN, true))));
|
||||
for (BuilderFieldData bfd : builderFields) {
|
||||
args.append(maker.Ident(bfd.name));
|
||||
}
|
||||
|
||||
if (addCleaning) {
|
||||
statements.append(maker.Exec(maker.Assign(maker.Select(maker.Ident(type.toName("this")), type.toName("$lombokUnclean")), maker.Literal(CTC_BOOLEAN, true))));
|
||||
}
|
||||
}
|
||||
|
||||
if (builderName == null) {
|
||||
|
||||
Reference in new issue
Block a user