Skip to content

Commit 9e6f66c

Browse files
authored
Merge pull request #3325 from Rawi01/builder-default-array
Convert short array initializers to long version
2 parents 8bb4dc5 + f13b4db commit 9e6f66c

File tree

5 files changed

+171
-1
lines changed

5 files changed

+171
-1
lines changed

src/core/lombok/eclipse/handlers/HandleBuilder.java

+15-1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.eclipse.jdt.internal.compiler.ast.AllocationExpression;
3737
import org.eclipse.jdt.internal.compiler.ast.Annotation;
3838
import org.eclipse.jdt.internal.compiler.ast.Argument;
39+
import org.eclipse.jdt.internal.compiler.ast.ArrayAllocationExpression;
3940
import org.eclipse.jdt.internal.compiler.ast.ArrayInitializer;
4041
import org.eclipse.jdt.internal.compiler.ast.Assignment;
4142
import org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration;
@@ -918,7 +919,20 @@ public static MethodDeclaration generateDefaultProvider(char[] methodName, TypeP
918919
out.bits |= ECLIPSE_DO_NOT_TOUCH_FLAG;
919920
FieldDeclaration fd = (FieldDeclaration) fieldNode.get();
920921
out.returnType = copyType(fd.type, source);
921-
out.statements = new Statement[] {new ReturnStatement(fd.initialization, pS, pE)};
922+
923+
// Convert short array initializers from `{1,2}` to `new int[]{1,2}`
924+
Expression initialization;
925+
if (fd.initialization instanceof ArrayInitializer) {
926+
ArrayAllocationExpression arrayAllocationExpression = new ArrayAllocationExpression();
927+
arrayAllocationExpression.initializer = (ArrayInitializer) fd.initialization;
928+
arrayAllocationExpression.type = generateQualifiedTypeRef(fd, fd.type.getTypeName());
929+
arrayAllocationExpression.dimensions = new Expression[fd.type.dimensions()];
930+
initialization = arrayAllocationExpression;
931+
} else {
932+
initialization = fd.initialization;
933+
}
934+
935+
out.statements = new Statement[] {new ReturnStatement(initialization, pS, pE)};
922936
fd.initialization = null;
923937

924938
out.traverse(new SetGeneratedByVisitor(source), ((TypeDeclaration) fieldNode.up().get()).scope);

src/core/lombok/javac/handlers/HandleBuilder.java

+9
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import com.sun.tools.javac.tree.JCTree.JCMethodDecl;
4646
import com.sun.tools.javac.tree.JCTree.JCMethodInvocation;
4747
import com.sun.tools.javac.tree.JCTree.JCModifiers;
48+
import com.sun.tools.javac.tree.JCTree.JCNewArray;
4849
import com.sun.tools.javac.tree.JCTree.JCNewClass;
4950
import com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree;
5051
import com.sun.tools.javac.tree.JCTree.JCReturn;
@@ -817,6 +818,14 @@ public static JCMethodDecl generateDefaultProvider(Name methodName, JavacNode fi
817818
JCBlock body = maker.Block(0, List.<JCStatement>of(statement));
818819
int modifiers = Flags.PRIVATE | Flags.STATIC;
819820
JCMethodDecl defaultProvider = maker.MethodDef(maker.Modifiers(modifiers), methodName, cloneType(maker, field.vartype, fieldNode), copyTypeParams(fieldNode, params), List.<JCVariableDecl>nil(), List.<JCExpression>nil(), body, null);
821+
// ... then we convert short array initializers from `{1,2}` to `new int[]{1,2}` ...
822+
if (init instanceof JCNewArray && field.vartype instanceof JCArrayTypeTree) {
823+
JCNewArray arrayInitializer = (JCNewArray) init;
824+
JCArrayTypeTree fieldType = (JCArrayTypeTree) field.vartype;
825+
if (arrayInitializer.elemtype == null) {
826+
arrayInitializer.elemtype = cloneType(maker, fieldType.elemtype, fieldNode);
827+
}
828+
}
820829
// ... then we set positions for everything else ...
821830
recursiveSetGeneratedBy(defaultProvider, job.sourceNode);
822831
// ... and finally add back the original expression
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
import lombok.Value;
2+
3+
public class BuilderDefaultsArray {
4+
int[] x;
5+
java.lang.String[][] y;
6+
7+
@java.lang.SuppressWarnings("all")
8+
private static int[] $default$x() {
9+
return new int[] {1, 2};
10+
}
11+
12+
@java.lang.SuppressWarnings("all")
13+
private static java.lang.String[][] $default$y() {
14+
return new java.lang.String[][] {};
15+
}
16+
17+
@java.lang.SuppressWarnings("all")
18+
BuilderDefaultsArray(final int[] x, final java.lang.String[][] y) {
19+
this.x = x;
20+
this.y = y;
21+
}
22+
23+
24+
@java.lang.SuppressWarnings("all")
25+
public static class BuilderDefaultsArrayBuilder {
26+
@java.lang.SuppressWarnings("all")
27+
private boolean x$set;
28+
@java.lang.SuppressWarnings("all")
29+
private int[] x$value;
30+
@java.lang.SuppressWarnings("all")
31+
private boolean y$set;
32+
@java.lang.SuppressWarnings("all")
33+
private java.lang.String[][] y$value;
34+
35+
@java.lang.SuppressWarnings("all")
36+
BuilderDefaultsArrayBuilder() {
37+
}
38+
39+
/**
40+
* @return {@code this}.
41+
*/
42+
@java.lang.SuppressWarnings("all")
43+
public BuilderDefaultsArray.BuilderDefaultsArrayBuilder x(final int[] x) {
44+
this.x$value = x;
45+
x$set = true;
46+
return this;
47+
}
48+
49+
/**
50+
* @return {@code this}.
51+
*/
52+
@java.lang.SuppressWarnings("all")
53+
public BuilderDefaultsArray.BuilderDefaultsArrayBuilder y(final java.lang.String[][] y) {
54+
this.y$value = y;
55+
y$set = true;
56+
return this;
57+
}
58+
59+
@java.lang.SuppressWarnings("all")
60+
public BuilderDefaultsArray build() {
61+
int[] x$value = this.x$value;
62+
if (!this.x$set) x$value = BuilderDefaultsArray.$default$x();
63+
java.lang.String[][] y$value = this.y$value;
64+
if (!this.y$set) y$value = BuilderDefaultsArray.$default$y();
65+
return new BuilderDefaultsArray(x$value, y$value);
66+
}
67+
68+
@java.lang.Override
69+
@java.lang.SuppressWarnings("all")
70+
public java.lang.String toString() {
71+
return "BuilderDefaultsArray.BuilderDefaultsArrayBuilder(x$value=" + java.util.Arrays.toString(this.x$value) + ", y$value=" + java.util.Arrays.deepToString(this.y$value) + ")";
72+
}
73+
}
74+
75+
@java.lang.SuppressWarnings("all")
76+
public static BuilderDefaultsArray.BuilderDefaultsArrayBuilder builder() {
77+
return new BuilderDefaultsArray.BuilderDefaultsArrayBuilder();
78+
}
79+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import lombok.Builder;
2+
import lombok.Value;
3+
public @Builder class BuilderDefaultsArray {
4+
public static @java.lang.SuppressWarnings("all") class BuilderDefaultsArrayBuilder {
5+
private @java.lang.SuppressWarnings("all") int[] x$value;
6+
private @java.lang.SuppressWarnings("all") boolean x$set;
7+
private @java.lang.SuppressWarnings("all") java.lang.String[][] y$value;
8+
private @java.lang.SuppressWarnings("all") boolean y$set;
9+
@java.lang.SuppressWarnings("all") BuilderDefaultsArrayBuilder() {
10+
super();
11+
}
12+
/**
13+
* @return {@code this}.
14+
*/
15+
public @java.lang.SuppressWarnings("all") BuilderDefaultsArray.BuilderDefaultsArrayBuilder x(final int[] x) {
16+
this.x$value = x;
17+
x$set = true;
18+
return this;
19+
}
20+
/**
21+
* @return {@code this}.
22+
*/
23+
public @java.lang.SuppressWarnings("all") BuilderDefaultsArray.BuilderDefaultsArrayBuilder y(final java.lang.String[][] y) {
24+
this.y$value = y;
25+
y$set = true;
26+
return this;
27+
}
28+
public @java.lang.SuppressWarnings("all") BuilderDefaultsArray build() {
29+
int[] x$value = this.x$value;
30+
if ((! this.x$set))
31+
x$value = BuilderDefaultsArray.$default$x();
32+
java.lang.String[][] y$value = this.y$value;
33+
if ((! this.y$set))
34+
y$value = BuilderDefaultsArray.$default$y();
35+
return new BuilderDefaultsArray(x$value, y$value);
36+
}
37+
public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() {
38+
return (((("BuilderDefaultsArray.BuilderDefaultsArrayBuilder(x$value=" + java.util.Arrays.toString(this.x$value)) + ", y$value=") + java.util.Arrays.deepToString(this.y$value)) + ")");
39+
}
40+
}
41+
@Builder.Default int[] x;
42+
@Builder.Default java.lang.String[][] y;
43+
private static @java.lang.SuppressWarnings("all") int[] $default$x() {
44+
return new int[]{1, 2};
45+
}
46+
private static @java.lang.SuppressWarnings("all") java.lang.String[][] $default$y() {
47+
return new java.lang.String[][]{};
48+
}
49+
@java.lang.SuppressWarnings("all") BuilderDefaultsArray(final int[] x, final java.lang.String[][] y) {
50+
super();
51+
this.x = x;
52+
this.y = y;
53+
}
54+
public static @java.lang.SuppressWarnings("all") BuilderDefaultsArray.BuilderDefaultsArrayBuilder builder() {
55+
return new BuilderDefaultsArray.BuilderDefaultsArrayBuilder();
56+
}
57+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import lombok.Builder;
2+
import lombok.Value;
3+
4+
@Builder
5+
public class BuilderDefaultsArray {
6+
@Builder.Default
7+
int[] x = {1,2};
8+
9+
@Builder.Default
10+
java.lang.String[][] y = {};
11+
}

0 commit comments

Comments
 (0)