Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collector;
import java.util.stream.StreamSupport;
Expand Down Expand Up @@ -70,7 +71,7 @@ public final class CodeBlock {

private CodeBlock(Builder builder) {
this.parts = List.copyOf(builder.parts);
this.args = List.copyOf(builder.args);
this.args = Collections.unmodifiableList(new ArrayList<>(builder.args));
this.imports = List.copyOf(builder.imports);
}

Expand Down Expand Up @@ -143,7 +144,7 @@ private static String quote(String value) {
* @return a new instance
* @see #builder()
*/
public static CodeBlock of(String format, Object... args) {
public static CodeBlock of(String format, @Nullable Object... args) {
return new Builder().add(format, args).build();
}

Expand All @@ -155,7 +156,7 @@ public static CodeBlock of(String format, Object... args) {
* @return a new instance
* @see #builder()
*/
public static CodeBlock ofStatement(String format, Object... args) {
public static CodeBlock ofStatement(String format, @Nullable Object... args) {
return new Builder().addStatement(format, args).build();
}

Expand Down Expand Up @@ -222,7 +223,7 @@ public Builder add(CodeBlock codeBlock) {
* @param args the arguments, if any
* @return this for method chaining
*/
public Builder add(String format, Object... args) {
public Builder add(String format, @Nullable Object... args) {
int relativeParameterCount = 0;

for (int p = 0; p < format.length();) {
Expand Down Expand Up @@ -263,7 +264,7 @@ private boolean isNoArgPlaceholder(char c) {
return c == '$' || c == ']';
}

private void addArgument(String format, char c, Object arg) {
private void addArgument(String format, char c, @Nullable Object arg) {
switch (c) {
case 'L' -> this.args.add(arg(arg));
case 'S' -> this.args.add(argToString(arg));
Expand All @@ -273,7 +274,7 @@ private void addArgument(String format, char c, Object arg) {
}
}

private Object arg(Object arg) {
private @Nullable Object arg(@Nullable Object arg) {
if (arg instanceof CodeBlock code) {
this.imports.addAll(code.getImports());
}
Expand All @@ -284,7 +285,7 @@ private Object arg(Object arg) {
return (arg != null) ? String.valueOf(arg) : null;
}

private String argToType(Object arg) {
private String argToType(@Nullable Object arg) {
if (arg instanceof Class<?> type) {
this.imports.add(type.getName());
return type.getSimpleName();
Expand Down Expand Up @@ -318,7 +319,7 @@ public Builder addStatement(CodeBlock codeBlock) {
* @param args the arguments, if any
* @return this for method chaining
*/
public Builder addStatement(String format, Object... args) {
public Builder addStatement(String format, @Nullable Object... args) {
add(format, args);
this.parts.add("$]");
return this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,12 @@ void codeBlockWithStringPlaceholder() {
assertThat(writeJava(code)).isEqualTo("return myUtil.truncate(\"value\")");
}

@Test
void codeBlockWithNullStringPlaceholder() {
CodeBlock code = CodeBlock.of("return $S", (Object) null);
assertThat(writeJava(code)).isEqualTo("return null");
}

@Test
void codeBlockWithStringPlaceholderAndDoubleQuote() {
CodeBlock code = CodeBlock.of("return myUtil.truncate($S)", "va\"lue");
Expand All @@ -86,6 +92,12 @@ void codeBlockWithLiteralPlaceholder() {
assertThat(writeJava(code)).isEqualTo("return myUtil.truncate(myString)");
}

@Test
void codeBlockWithNullLiteralPlaceholder() {
CodeBlock code = CodeBlock.of("return $L", (Object) null);
assertThat(writeJava(code)).isEqualTo("return null");
}

@Test
void codeBlockWithLiteralPlaceHolderUsingCodeBlock() {
CodeBlock code = CodeBlock.of("return myUtil.add($L, $L)", CodeBlock.of("1"), CodeBlock.of("2"));
Expand Down
Loading