mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-11 03:13:38 +00:00
[fixes #3306] Convert short array initializers to long version
This commit is contained in:
1 parent
731bb18507
commit
f13b4dbbfc
5 files changed
+171
-1
No files matched your search
@@ -36,6 +36,7 @@ import org.eclipse.jdt.internal.compiler.ast.AbstractVariableDeclaration;
|
||||
import org.eclipse.jdt.internal.compiler.ast.AllocationExpression;
|
||||
import org.eclipse.jdt.internal.compiler.ast.Annotation;
|
||||
import org.eclipse.jdt.internal.compiler.ast.Argument;
|
||||
import org.eclipse.jdt.internal.compiler.ast.ArrayAllocationExpression;
|
||||
import org.eclipse.jdt.internal.compiler.ast.ArrayInitializer;
|
||||
import org.eclipse.jdt.internal.compiler.ast.Assignment;
|
||||
import org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration;
|
||||
@@ -918,7 +919,20 @@ public class HandleBuilder extends EclipseAnnotationHandler<Builder> {
|
||||
out.bits |= ECLIPSE_DO_NOT_TOUCH_FLAG;
|
||||
FieldDeclaration fd = (FieldDeclaration) fieldNode.get();
|
||||
out.returnType = copyType(fd.type, source);
|
||||
out.statements = new Statement[] {new ReturnStatement(fd.initialization, pS, pE)};
|
||||
|
||||
// Convert short array initializers from `{1,2}` to `new int[]{1,2}`
|
||||
Expression initialization;
|
||||
if (fd.initialization instanceof ArrayInitializer) {
|
||||
ArrayAllocationExpression arrayAllocationExpression = new ArrayAllocationExpression();
|
||||
arrayAllocationExpression.initializer = (ArrayInitializer) fd.initialization;
|
||||
arrayAllocationExpression.type = generateQualifiedTypeRef(fd, fd.type.getTypeName());
|
||||
arrayAllocationExpression.dimensions = new Expression[fd.type.dimensions()];
|
||||
initialization = arrayAllocationExpression;
|
||||
} else {
|
||||
initialization = fd.initialization;
|
||||
}
|
||||
|
||||
out.statements = new Statement[] {new ReturnStatement(initialization, pS, pE)};
|
||||
fd.initialization = null;
|
||||
|
||||
out.traverse(new SetGeneratedByVisitor(source), ((TypeDeclaration) fieldNode.up().get()).scope);
|
||||
|
||||
@@ -45,6 +45,7 @@ import com.sun.tools.javac.tree.JCTree.JCLiteral;
|
||||
import com.sun.tools.javac.tree.JCTree.JCMethodDecl;
|
||||
import com.sun.tools.javac.tree.JCTree.JCMethodInvocation;
|
||||
import com.sun.tools.javac.tree.JCTree.JCModifiers;
|
||||
import com.sun.tools.javac.tree.JCTree.JCNewArray;
|
||||
import com.sun.tools.javac.tree.JCTree.JCNewClass;
|
||||
import com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree;
|
||||
import com.sun.tools.javac.tree.JCTree.JCReturn;
|
||||
@@ -817,6 +818,14 @@ public class HandleBuilder extends JavacAnnotationHandler<Builder> {
|
||||
JCBlock body = maker.Block(0, List.<JCStatement>of(statement));
|
||||
int modifiers = Flags.PRIVATE | Flags.STATIC;
|
||||
JCMethodDecl defaultProvider = maker.MethodDef(maker.Modifiers(modifiers), methodName, cloneType(maker, field.vartype, fieldNode), copyTypeParams(fieldNode, params), List.<JCVariableDecl>nil(), List.<JCExpression>nil(), body, null);
|
||||
// ... then we convert short array initializers from `{1,2}` to `new int[]{1,2}` ...
|
||||
if (init instanceof JCNewArray && field.vartype instanceof JCArrayTypeTree) {
|
||||
JCNewArray arrayInitializer = (JCNewArray) init;
|
||||
JCArrayTypeTree fieldType = (JCArrayTypeTree) field.vartype;
|
||||
if (arrayInitializer.elemtype == null) {
|
||||
arrayInitializer.elemtype = cloneType(maker, fieldType.elemtype, fieldNode);
|
||||
}
|
||||
}
|
||||
// ... then we set positions for everything else ...
|
||||
recursiveSetGeneratedBy(defaultProvider, job.sourceNode);
|
||||
// ... and finally add back the original expression
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
import lombok.Value;
|
||||
|
||||
public class BuilderDefaultsArray {
|
||||
int[] x;
|
||||
java.lang.String[][] y;
|
||||
|
||||
@java.lang.SuppressWarnings("all")
|
||||
private static int[] $default$x() {
|
||||
return new int[] {1, 2};
|
||||
}
|
||||
|
||||
@java.lang.SuppressWarnings("all")
|
||||
private static java.lang.String[][] $default$y() {
|
||||
return new java.lang.String[][] {};
|
||||
}
|
||||
|
||||
@java.lang.SuppressWarnings("all")
|
||||
BuilderDefaultsArray(final int[] x, final java.lang.String[][] y) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public static class BuilderDefaultsArrayBuilder {
|
||||
@java.lang.SuppressWarnings("all")
|
||||
private boolean x$set;
|
||||
@java.lang.SuppressWarnings("all")
|
||||
private int[] x$value;
|
||||
@java.lang.SuppressWarnings("all")
|
||||
private boolean y$set;
|
||||
@java.lang.SuppressWarnings("all")
|
||||
private java.lang.String[][] y$value;
|
||||
|
||||
@java.lang.SuppressWarnings("all")
|
||||
BuilderDefaultsArrayBuilder() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @return {@code this}.
|
||||
*/
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public BuilderDefaultsArray.BuilderDefaultsArrayBuilder x(final int[] x) {
|
||||
this.x$value = x;
|
||||
x$set = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return {@code this}.
|
||||
*/
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public BuilderDefaultsArray.BuilderDefaultsArrayBuilder y(final java.lang.String[][] y) {
|
||||
this.y$value = y;
|
||||
y$set = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public BuilderDefaultsArray build() {
|
||||
int[] x$value = this.x$value;
|
||||
if (!this.x$set) x$value = BuilderDefaultsArray.$default$x();
|
||||
java.lang.String[][] y$value = this.y$value;
|
||||
if (!this.y$set) y$value = BuilderDefaultsArray.$default$y();
|
||||
return new BuilderDefaultsArray(x$value, y$value);
|
||||
}
|
||||
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public java.lang.String toString() {
|
||||
return "BuilderDefaultsArray.BuilderDefaultsArrayBuilder(x$value=" + java.util.Arrays.toString(this.x$value) + ", y$value=" + java.util.Arrays.deepToString(this.y$value) + ")";
|
||||
}
|
||||
}
|
||||
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public static BuilderDefaultsArray.BuilderDefaultsArrayBuilder builder() {
|
||||
return new BuilderDefaultsArray.BuilderDefaultsArrayBuilder();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
import lombok.Builder;
|
||||
import lombok.Value;
|
||||
public @Builder class BuilderDefaultsArray {
|
||||
public static @java.lang.SuppressWarnings("all") class BuilderDefaultsArrayBuilder {
|
||||
private @java.lang.SuppressWarnings("all") int[] x$value;
|
||||
private @java.lang.SuppressWarnings("all") boolean x$set;
|
||||
private @java.lang.SuppressWarnings("all") java.lang.String[][] y$value;
|
||||
private @java.lang.SuppressWarnings("all") boolean y$set;
|
||||
@java.lang.SuppressWarnings("all") BuilderDefaultsArrayBuilder() {
|
||||
super();
|
||||
}
|
||||
/**
|
||||
* @return {@code this}.
|
||||
*/
|
||||
public @java.lang.SuppressWarnings("all") BuilderDefaultsArray.BuilderDefaultsArrayBuilder x(final int[] x) {
|
||||
this.x$value = x;
|
||||
x$set = true;
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* @return {@code this}.
|
||||
*/
|
||||
public @java.lang.SuppressWarnings("all") BuilderDefaultsArray.BuilderDefaultsArrayBuilder y(final java.lang.String[][] y) {
|
||||
this.y$value = y;
|
||||
y$set = true;
|
||||
return this;
|
||||
}
|
||||
public @java.lang.SuppressWarnings("all") BuilderDefaultsArray build() {
|
||||
int[] x$value = this.x$value;
|
||||
if ((! this.x$set))
|
||||
x$value = BuilderDefaultsArray.$default$x();
|
||||
java.lang.String[][] y$value = this.y$value;
|
||||
if ((! this.y$set))
|
||||
y$value = BuilderDefaultsArray.$default$y();
|
||||
return new BuilderDefaultsArray(x$value, y$value);
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() {
|
||||
return (((("BuilderDefaultsArray.BuilderDefaultsArrayBuilder(x$value=" + java.util.Arrays.toString(this.x$value)) + ", y$value=") + java.util.Arrays.deepToString(this.y$value)) + ")");
|
||||
}
|
||||
}
|
||||
@Builder.Default int[] x;
|
||||
@Builder.Default java.lang.String[][] y;
|
||||
private static @java.lang.SuppressWarnings("all") int[] $default$x() {
|
||||
return new int[]{1, 2};
|
||||
}
|
||||
private static @java.lang.SuppressWarnings("all") java.lang.String[][] $default$y() {
|
||||
return new java.lang.String[][]{};
|
||||
}
|
||||
@java.lang.SuppressWarnings("all") BuilderDefaultsArray(final int[] x, final java.lang.String[][] y) {
|
||||
super();
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
}
|
||||
public static @java.lang.SuppressWarnings("all") BuilderDefaultsArray.BuilderDefaultsArrayBuilder builder() {
|
||||
return new BuilderDefaultsArray.BuilderDefaultsArrayBuilder();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
import lombok.Builder;
|
||||
import lombok.Value;
|
||||
|
||||
@Builder
|
||||
public class BuilderDefaultsArray {
|
||||
@Builder.Default
|
||||
int[] x = {1,2};
|
||||
|
||||
@Builder.Default
|
||||
java.lang.String[][] y = {};
|
||||
}
|
||||
Reference in new issue
Block a user