Class CodeBlock

java.lang.Object
io.micronaut.sourcegen.javapoet.CodeBlock

public final class CodeBlock extends Object
A fragment of a .java file, potentially containing declarations, statements, and documentation. Code blocks are not necessarily well-formed Java code, and are not validated. This class assumes javac will check correctness later!

Code blocks support placeholders like Format. Where String.format(java.lang.String, java.lang.Object...) uses percent % to reference target values, this class uses dollar sign $ and has its own set of permitted placeholders:

  • $L emits a literal value with no escaping. Arguments for literals may be strings, primitives, type declarations, annotations and even other code blocks.
  • $N emits a name, using name collision avoidance where necessary. Arguments for names may be strings (actually any character sequence), parameters, fields, methods, and types.
  • $S escapes the value as a string, wraps it with double quotes, and emits that. For example, 6" sandwich is emitted "6\" sandwich".
  • $T emits a type reference. Types will be imported if possible. Arguments for types may be classes, ,* type mirrors, and elements.
  • $$ emits a dollar sign.
  • $W emits a space or a newline, depending on its position on the line. This prefers to wrap lines before 100 columns.
  • $Z acts as a zero-width space. This prefers to wrap lines before 100 columns.
  • $> increases the indentation level.
  • $< decreases the indentation level.
  • $[ begins a statement. For multiline statements, every line after the first line is double-indented.
  • $] ends a statement.