Class CodegenWriterDelegator<T extends CodegenWriter<T,?>>
- Type Parameters:
T
- The type ofCodegenWriter
to create and manage.
Creates and manages CodegenWriter
s for files and namespaces based
on Symbol
s created for a Shape
.
Overview
CodegenWriterDelegator
is designed to generate code in files
returned by the Symbol.getDefinitionFile()
method of a Symbol
.
If multiple Symbol
s are created that need to be defined in the same
file, then the CodegenWriterDelegator
ensures that the state of code
generator associated with the file is persisted and only written when all
shapes have been generated.
CodegenWriter
s are lazily created each time a new filename is
requested. If a CodegenWriter
is already associated with a filename,
a newline (\n) is written to the file before providing access to the
CodegenWriter
. All of the files and CodegenWriters stored in the
delegator are eventually written to the provided FileManifest
when
the flushWriters()
method is called.
This class is not thread-safe.
Extending CodegenWriterDelegator
Language-specific code generators that utilize Symbol
and
SymbolDependency
should extend both
CodegenWriterDelegator
and CodegenWriter
to implement
language specific functionality. Extending these classes also makes it
easier to create new instances of them because they will be easier to work
with since generic types aren't needed in concrete implementations.
-
Constructor Summary
ConstructorDescriptionCodegenWriterDelegator
(FileManifest fileManifest, SymbolProvider symbolProvider, CodegenWriterFactory<T> codegenWriterFactory) Deprecated. -
Method Summary
Modifier and TypeMethodDescriptionvoid
Deprecated.Writes each pendingCodegenWriter
to theFileManifest
.Deprecated.Gets all of the dependencies that have been registered in writers created by theCodegenWriterDelegator
.Deprecated.Returns an immutableMap
of createdCodegenWriter
s.final void
setAutomaticSeparator
(String automaticSeparator) Deprecated.Sets the automatic separator that is written to aCodegenWriter
each time the writer is reused.final void
useFileWriter
(String filename, String namespace, Consumer<T> writerConsumer) Deprecated.Gets a previously created writer or creates a new one if needed.final void
useFileWriter
(String filename, Consumer<T> writerConsumer) Deprecated.Gets a previously createdCodegenWriter
or creates a new one if needed.final void
useShapeWriter
(Shape shape, Consumer<T> writerConsumer)
-
Constructor Details
-
CodegenWriterDelegator
public CodegenWriterDelegator(FileManifest fileManifest, SymbolProvider symbolProvider, CodegenWriterFactory<T> codegenWriterFactory) Deprecated.- Parameters:
fileManifest
- Where code is written whenflushWriters()
is called.symbolProvider
- MapsShape
toSymbol
to determine the "namespace" and file of a shape.codegenWriterFactory
- Factory used to create newCodegenWriter
s.
-
-
Method Details
-
getDependencies
Deprecated.Gets all of the dependencies that have been registered in writers created by theCodegenWriterDelegator
.This method essentially just aggregates the results of calling
CodegenWriter.getDependencies()
of each created writer into a single array.This method may be overridden as needed (for example, to add in some list of default dependencies or to inject other generative dependencies).
- Returns:
- Returns all the dependencies used in each
CodegenWriter
.
-
flushWriters
public void flushWriters()Deprecated.Writes each pendingCodegenWriter
to theFileManifest
.The
toString
method is called on each writer to generate the code to write to the manifest.This method clears out the managed
CodegenWriter
s, meaning a subsequent call togetWriters()
will return an empty map.This method may be overridden as needed.
-
getWriters
Deprecated.Returns an immutableMap
of createdCodegenWriter
s.Each map key is the relative filename where the code will be written in the
FileManifest
, and each map value is the associatedCodegenWriter
of typeT
.- Returns:
- Returns the immutable map of files to writers.
-
useFileWriter
Deprecated.Gets a previously createdCodegenWriter
or creates a new one if needed.If a writer already exists, a newline is automatically appended to the writer (either a newline or whatever value was set on
setAutomaticSeparator(java.lang.String)
).- Parameters:
filename
- Name of the file to create.writerConsumer
- Consumer that is expected to write to theCodegenWriter
.
-
useFileWriter
Deprecated.Gets a previously created writer or creates a new one if needed.If a writer already exists, a newline is automatically appended to the writer (either a newline or whatever value was set on
setAutomaticSeparator(java.lang.String)
).- Parameters:
filename
- Name of the file to create.namespace
- Namespace associated with the file (or an empty string).writerConsumer
- Consumer that is expected to write to theCodegenWriter
.
-
useShapeWriter
Deprecated.Gets or creates a writer for aShape
by converting theShape
to aSymbol
.Any dependencies (i.e.,
SymbolDependency
) required by theSymbol
are automatically registered with the writer.Any imports required to declare the
Symbol
in code (i.e.,SymbolReference.ContextOption.DECLARE
) are automatically registered with the writer.If a writer already exists, a newline is automatically appended to the writer (either a newline or whatever value was set on
setAutomaticSeparator(java.lang.String)
).- Parameters:
shape
- Shape to create the writer for.writerConsumer
- Consumer that is expected to write to theCodegenWriter
.
-
setAutomaticSeparator
Deprecated.Sets the automatic separator that is written to aCodegenWriter
each time the writer is reused.The default line separator is a newline ("\n"), but some implementations may wish to use an alternative value (e.g., "\r\n") or to disable the newline separator altogether by proving an empty string.
- Parameters:
automaticSeparator
- The non-null line separator to use.
-
WriterDelegator
. This class will be removed in a future release.