Class CodegenDirector<W extends SymbolWriter<W,​? extends ImportContainer>,​I extends SmithyIntegration<S,​W,​C>,​C extends CodegenContext<S,​W,​I>,​S>

    • Constructor Detail

      • CodegenDirector

        public CodegenDirector()
    • Method Detail

      • simplifyModelForServiceCodegen

        public static software.amazon.smithy.model.Model simplifyModelForServiceCodegen​(software.amazon.smithy.model.Model model,
                                                                                        software.amazon.smithy.model.shapes.ShapeId service,
                                                                                        software.amazon.smithy.model.transform.ModelTransformer transformer)
        Simplifies a Smithy model for code generation of a single service.
        • Flattens error hierarchies onto every operation.
        • Flattens mixins

        Note: This transform is applied automatically by a code generator if performDefaultCodegenTransforms() is set to true.

        Parameters:
        model - Model being code generated.
        service - Service being generated.
        transformer - Model transformer to use.
        Returns:
        Returns the updated model.
      • integrationClass

        public void integrationClass​(java.lang.Class<I> integrationClass)
        Sets the required class used for SmithyIntegrations.
        Parameters:
        integrationClass - SmithyIntegration class.
      • service

        public void service​(software.amazon.smithy.model.shapes.ShapeId service)
        Sets the required service being generated.
        Parameters:
        service - Service to generate.
      • directedCodegen

        public void directedCodegen​(DirectedCodegen<C,​S,​I> directedCodegen)
        Sets the required DirectedCodegen implementation to invoke.
        Parameters:
        directedCodegen - Directed code generator to run.
      • model

        public void model​(software.amazon.smithy.model.Model model)
        Sets the required model to generate from.
        Parameters:
        model - Model to generate from.
      • settings

        public void settings​(S settings)
        Sets the required settings object used for code generation.
        Parameters:
        settings - Settings object.
      • settings

        public S settings​(java.lang.Class<S> settingsType,
                          software.amazon.smithy.model.node.Node settingsNode)
        Sets the required settings object used for code generation using a Node.

        A Node value is used by Smithy-Build plugins to configure settings. This method is a helper method that uses Smithy's fairly simple object-mapper to deserialize a node into the desired settings type. You will need to manually deserialize your settings if using types that are not supported by Smithy's NodeMapper.

        Parameters:
        settingsType - Settings type to deserialize into.
        settingsNode - Settings node value to deserialize.
        Returns:
        Returns the deserialized settings as this is needed to provide a service shape ID.
      • fileManifest

        public void fileManifest​(software.amazon.smithy.build.FileManifest fileManifest)
        Sets the required file manifest used to write files to disk.
        Parameters:
        fileManifest - File manifest to write files.
      • integrationFinder

        public void integrationFinder​(java.util.function.Supplier<java.lang.Iterable<I>> integrationFinder)
        Sets a custom implementation for finding SmithyIntegrations.

        Most implementations can use integrationClassLoader(ClassLoader).

        Parameters:
        integrationFinder - Smithy integration finder.
      • integrationClassLoader

        public void integrationClassLoader​(java.lang.ClassLoader classLoader)
        Sets a custom class loader for finding implementations of SmithyIntegration.
        Parameters:
        classLoader - Class loader to find integrations.* @return Returns self.
      • createDedicatedInputsAndOutputs

        public void createDedicatedInputsAndOutputs()
        Generates dedicated input and output shapes for every operation if the operation doesn't already have them.

        This method uses "Input" as the default suffix for input, and "Output" as the default suffix for output shapes. Use createDedicatedInputsAndOutputs(String, String) to use custom suffixes.

        See Also:
        ModelTransformer.createDedicatedInputAndOutput(Model, String, String)
      • createDedicatedInputsAndOutputs

        public void createDedicatedInputsAndOutputs​(java.lang.String inputSuffix,
                                                    java.lang.String outputSuffix)
        Generates dedicated input and output shapes for every operation if the operation doesn't already have them.
        Parameters:
        inputSuffix - Suffix to use for input shapes (e.g., "Input").
        outputSuffix - Suffix to use for output shapes (e.g., "Output").
        See Also:
        ModelTransformer.createDedicatedInputAndOutput(Model, String, String)
      • changeStringEnumsToEnumShapes

        public void changeStringEnumsToEnumShapes​(boolean synthesizeEnumNames)
        Changes each compatible string shape with the enum trait to an enum shape.
        Parameters:
        synthesizeEnumNames - Whether enums without names should have names synthesized if possible.
        See Also:
        ModelTransformer.changeStringEnumsToEnumShapes(Model, boolean)
      • sortMembers

        public void sortMembers()
        Sorts all members of the model prior to codegen.

        This should only be used by languages where changing the order of members in a structure or union is a backward compatible change (i.e., not C, C++, Rust, etc). Once this is performed, there's no need to ever explicitly sort members throughout the rest of code generation.

      • run

        public void run()
        Finalizes the Runner and performs directed code generation.
        Throws:
        java.lang.IllegalStateException - if a required value has not been provided.