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 Model simplifyModelForServiceCodegen​(Model model,
                                                           ShapeId service,
                                                           ModelTransformer transformer)
        Simplifies a Smithy model for code generation of a single service.
        • Flattens error hierarchies onto every operation.
        • Flattens mixins
        • Converts enum strings to enum shapes.

        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​(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​(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,
                          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​(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​(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)
      • 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.