final class CodeWriter
extends java.lang.Object
JavaFile
to a string suitable to both human- and javac-consumption. This
honors imports, indentation, and deferred variable names.Modifier and Type | Field and Description |
---|---|
private boolean |
comment |
private java.util.Map<java.lang.String,ClassName> |
importableTypes |
private java.util.Map<java.lang.String,ClassName> |
importedTypes |
private java.lang.String |
indent |
private int |
indentLevel |
private boolean |
javadoc |
private static java.lang.String |
NO_PACKAGE
Sentinel value that indicates that no user-provided package has been set.
|
private java.lang.Appendable |
out |
private java.lang.String |
packageName |
private java.util.Set<java.lang.String> |
referencedNames |
(package private) int |
statementLine
When emitting a statement, this is the line of the statement currently being written.
|
private java.util.Set<java.lang.String> |
staticImportClassNames |
private java.util.Set<java.lang.String> |
staticImports |
private boolean |
trailingNewline |
private java.util.List<TypeSpec> |
typeSpecStack |
Constructor and Description |
---|
CodeWriter(java.lang.Appendable out) |
CodeWriter(java.lang.Appendable out,
java.lang.String indent,
java.util.Map<java.lang.String,ClassName> importedTypes,
java.util.Set<java.lang.String> staticImports) |
CodeWriter(java.lang.Appendable out,
java.lang.String indent,
java.util.Set<java.lang.String> staticImports) |
Modifier and Type | Method and Description |
---|---|
CodeWriter |
emit(CodeBlock codeBlock) |
CodeWriter |
emit(java.lang.String s) |
CodeWriter |
emit(java.lang.String format,
java.lang.Object... args) |
(package private) CodeWriter |
emitAndIndent(java.lang.String s)
Emits
s with indentation as required. |
void |
emitAnnotations(java.util.List<AnnotationSpec> annotations,
boolean inline) |
void |
emitComment(CodeBlock codeBlock) |
private void |
emitIndentation() |
void |
emitJavadoc(CodeBlock javadocCodeBlock) |
private void |
emitLiteral(java.lang.Object o) |
void |
emitModifiers(java.util.Set<javax.lang.model.element.Modifier> modifiers) |
void |
emitModifiers(java.util.Set<javax.lang.model.element.Modifier> modifiers,
java.util.Set<javax.lang.model.element.Modifier> implicitModifiers)
Emits
modifiers in the standard order. |
private boolean |
emitStaticImportMember(java.lang.String canonical,
java.lang.String part) |
void |
emitTypeVariables(java.util.List<TypeVariableName> typeVariables)
Emit type variables with their bounds.
|
private static java.lang.String |
extractMemberName(java.lang.String part) |
private void |
importableType(ClassName className) |
java.util.Map<java.lang.String,ClassName> |
importedTypes() |
CodeWriter |
indent() |
CodeWriter |
indent(int levels) |
(package private) java.lang.String |
lookupName(ClassName className)
Returns the best name to identify
className with in the current context. |
CodeWriter |
popPackage() |
CodeWriter |
popType() |
CodeWriter |
pushPackage(java.lang.String packageName) |
CodeWriter |
pushType(TypeSpec type) |
private ClassName |
resolve(java.lang.String simpleName)
Returns the class referenced by
simpleName , using the current nesting context and
imports. |
private ClassName |
stackClassName(int stackDepth,
java.lang.String simpleName)
Returns the class named
simpleName when nested in the class at stackDepth . |
(package private) java.util.Map<java.lang.String,ClassName> |
suggestedImports()
Returns the types that should have been imported for this code.
|
CodeWriter |
unindent() |
CodeWriter |
unindent(int levels) |
private static final java.lang.String NO_PACKAGE
private final java.lang.String indent
private final java.lang.Appendable out
private int indentLevel
private boolean javadoc
private boolean comment
private java.lang.String packageName
private final java.util.List<TypeSpec> typeSpecStack
private final java.util.Set<java.lang.String> staticImportClassNames
private final java.util.Set<java.lang.String> staticImports
private final java.util.Map<java.lang.String,ClassName> importedTypes
private final java.util.Map<java.lang.String,ClassName> importableTypes
private final java.util.Set<java.lang.String> referencedNames
private boolean trailingNewline
int statementLine
CodeWriter(java.lang.Appendable out)
CodeWriter(java.lang.Appendable out, java.lang.String indent, java.util.Set<java.lang.String> staticImports)
CodeWriter(java.lang.Appendable out, java.lang.String indent, java.util.Map<java.lang.String,ClassName> importedTypes, java.util.Set<java.lang.String> staticImports)
public java.util.Map<java.lang.String,ClassName> importedTypes()
public CodeWriter indent()
public CodeWriter indent(int levels)
public CodeWriter unindent()
public CodeWriter unindent(int levels)
public CodeWriter pushPackage(java.lang.String packageName)
public CodeWriter popPackage()
public CodeWriter pushType(TypeSpec type)
public CodeWriter popType()
public void emitComment(CodeBlock codeBlock) throws java.io.IOException
java.io.IOException
public void emitJavadoc(CodeBlock javadocCodeBlock) throws java.io.IOException
java.io.IOException
public void emitAnnotations(java.util.List<AnnotationSpec> annotations, boolean inline) throws java.io.IOException
java.io.IOException
public void emitModifiers(java.util.Set<javax.lang.model.element.Modifier> modifiers, java.util.Set<javax.lang.model.element.Modifier> implicitModifiers) throws java.io.IOException
modifiers
in the standard order. Modifiers in implicitModifiers
will not
be emitted.java.io.IOException
public void emitModifiers(java.util.Set<javax.lang.model.element.Modifier> modifiers) throws java.io.IOException
java.io.IOException
public void emitTypeVariables(java.util.List<TypeVariableName> typeVariables) throws java.io.IOException
java.io.IOException
public CodeWriter emit(java.lang.String s) throws java.io.IOException
java.io.IOException
public CodeWriter emit(java.lang.String format, java.lang.Object... args) throws java.io.IOException
java.io.IOException
public CodeWriter emit(CodeBlock codeBlock) throws java.io.IOException
java.io.IOException
private static java.lang.String extractMemberName(java.lang.String part)
private boolean emitStaticImportMember(java.lang.String canonical, java.lang.String part) throws java.io.IOException
java.io.IOException
private void emitLiteral(java.lang.Object o) throws java.io.IOException
java.io.IOException
java.lang.String lookupName(ClassName className)
className
with in the current context. This uses the
available imports and the current scope to find the shortest name available. It does not honor
names visible due to inheritance.private void importableType(ClassName className)
private ClassName resolve(java.lang.String simpleName)
simpleName
, using the current nesting context and
imports.private ClassName stackClassName(int stackDepth, java.lang.String simpleName)
simpleName
when nested in the class at stackDepth
.CodeWriter emitAndIndent(java.lang.String s) throws java.io.IOException
s
with indentation as required. It's important that all code that writes to
out
does it through here, since we emit indentation lazily in order to avoid
unnecessary trailing whitespace.java.io.IOException
private void emitIndentation() throws java.io.IOException
java.io.IOException
java.util.Map<java.lang.String,ClassName> suggestedImports()