mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-13 20:15:09 +00:00
only assign value once so that final fields work (javac)
This commit is contained in:
1 parent
46837d6d8b
commit
31aef5219d
3 files changed
+8
-7
No files matched your search
@@ -420,14 +420,15 @@ public class HandleSuperBuilder extends JavacAnnotationHandler<SuperBuilder> {
|
||||
JCFieldAccess fieldInThis = maker.Select(maker.Ident(typeNode.toName("this")), bfd.rawName);
|
||||
|
||||
JCStatement assign = maker.Exec(maker.Assign(fieldInThis, rhs));
|
||||
statements.append(assign);
|
||||
|
||||
// In case of @Builder.Default, set the value to the default if it was NOT set in the builder.
|
||||
// In case of @Builder.Default, set the value to the default if it was not set in the builder.
|
||||
if (bfd.nameOfSetFlag != null) {
|
||||
JCFieldAccess setField = maker.Select(maker.Ident(builderVariableName), bfd.nameOfSetFlag);
|
||||
fieldInThis = maker.Select(maker.Ident(typeNode.toName("this")), bfd.rawName);
|
||||
JCAssign assignDefault = maker.Assign(fieldInThis, maker.Apply(typeParameterNames(maker, ((JCClassDecl) typeNode.get()).typarams), maker.Select(maker.Ident(((JCClassDecl) typeNode.get()).name), bfd.nameOfDefaultProvider), List.<JCExpression>nil()));
|
||||
statements.append(maker.If(maker.Unary(CTC_NOT, setField), maker.Exec(assignDefault), null));
|
||||
statements.append(maker.If(setField, assign, maker.Exec(assignDefault)));
|
||||
} else {
|
||||
statements.append(assign);
|
||||
}
|
||||
|
||||
List<JCAnnotation> nonNulls = findAnnotations(bfd.originalFieldNode, NON_NULL_PATTERN);
|
||||
|
||||
@@ -2,7 +2,7 @@ import java.util.List;
|
||||
public class SuperBuilderWithNonNull {
|
||||
public static class Parent {
|
||||
@lombok.NonNull
|
||||
String nonNullParentField;
|
||||
final String nonNullParentField;
|
||||
@java.lang.SuppressWarnings("all")
|
||||
private static String $default$nonNullParentField() {
|
||||
return "default";
|
||||
@@ -47,8 +47,8 @@ public class SuperBuilderWithNonNull {
|
||||
}
|
||||
@java.lang.SuppressWarnings("all")
|
||||
protected Parent(final ParentBuilder<?, ?> b) {
|
||||
this.nonNullParentField = b.nonNullParentField;
|
||||
if (!b.nonNullParentField$set) this.nonNullParentField = Parent.$default$nonNullParentField();
|
||||
if (b.nonNullParentField$set) this.nonNullParentField = b.nonNullParentField;
|
||||
else this.nonNullParentField = Parent.$default$nonNullParentField();
|
||||
if (nonNullParentField == null) {
|
||||
throw new java.lang.NullPointerException("nonNullParentField is marked @NonNull but is null");
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ public class SuperBuilderWithNonNull {
|
||||
public static class Parent {
|
||||
@lombok.NonNull
|
||||
@lombok.Builder.Default
|
||||
String nonNullParentField = "default";
|
||||
final String nonNullParentField = "default";
|
||||
}
|
||||
|
||||
@lombok.experimental.SuperBuilder
|
||||
|
||||
Reference in new issue
Block a user