private Iterable<GeneratorTask> createGeneratorTasks(IntermediateModel intermediateModel) {
        // For clients built internally, the output directory and source directory are the same.
        GeneratorTaskParams params = GeneratorTaskParams.create(intermediateModel, outputDirectory, outputDirectory);
        if (params.getModel().getMetadata().getProtocol() == Protocol.API_GATEWAY) {
            return new ApiGatewayGeneratorTasks(params);
        } else {
            return new AwsGeneratorTasks(params);
        }
    }
load ServiceModel. load code gen configuration from individual client. load Waiters. generate intermediate model. generate
code.
aws-java-sdk-code-generator/src/main/java/com/amazonaws/codegen/CodeGenerator.java