private MethodSpec ruleParams()

in codegen/src/main/java/software/amazon/awssdk/codegen/poet/rules/EndpointResolverInterceptorSpec.java [295:362]


    private MethodSpec ruleParams() {
        MethodSpec.Builder b = MethodSpec.methodBuilder("ruleParams")
                                         .addModifiers(Modifier.PUBLIC, Modifier.STATIC)
                                         .returns(endpointRulesSpecUtils.parametersClassName())
                                         .addParameter(SdkRequest.class, "request")
                                         .addParameter(ExecutionAttributes.class, "executionAttributes");

        b.addStatement("$T builder = $T.builder()", paramsBuilderClass(), endpointRulesSpecUtils.parametersClassName());

        Map<String, ParameterModel> parameters = model.getEndpointRuleSetModel().getParameters();

        parameters.forEach((n, m) -> {
            if (m.getBuiltInEnum() == null) {
                return;
            }
            String setter = Utils.unCapitalize(CodegenNamingUtils.pascalCase(n));
            switch (m.getBuiltInEnum()) {
                case AWS_REGION:
                    b.addStatement(endpointProviderUtilsSetter("regionBuiltIn", setter));
                    break;
                case AWS_USE_DUAL_STACK:
                    b.addStatement(endpointProviderUtilsSetter("dualStackEnabledBuiltIn", setter));
                    break;
                case AWS_USE_FIPS:
                    b.addStatement(endpointProviderUtilsSetter("fipsEnabledBuiltIn", setter));
                    break;
                case SDK_ENDPOINT:
                    b.addStatement(endpointProviderUtilsSetter("endpointBuiltIn", setter));
                    break;
                case AWS_AUTH_ACCOUNT_ID:
                    b.addStatement("builder.$N(resolveAndRecordAccountIdFromIdentity(executionAttributes))", setter);
                    break;
                case AWS_AUTH_ACCOUNT_ID_ENDPOINT_MODE:
                    b.addStatement("builder.$N(recordAccountIdEndpointMode(executionAttributes))", setter);
                    break;
                case AWS_S3_USE_GLOBAL_ENDPOINT:
                    b.addStatement("builder.$N(executionAttributes.getAttribute($T.$N))",
                                   setter, AwsExecutionAttribute.class, model.getNamingStrategy().getEnumValueName(n));
                    break;
                // The S3 specific built-ins are set through the existing S3Configuration and set through client context params
                case AWS_S3_ACCELERATE:
                case AWS_S3_DISABLE_MULTI_REGION_ACCESS_POINTS:
                case AWS_S3_FORCE_PATH_STYLE:
                case AWS_S3_USE_ARN_REGION:
                case AWS_S3_CONTROL_USE_ARN_REGION:
                // end of S3 specific builtins

                // V2 doesn't support this, only regional endpoints
                case AWS_STS_USE_GLOBAL_ENDPOINT:
                    return;
                default:
                    throw new RuntimeException("Don't know how to set built-in " + m.getBuiltInEnum());
            }
        });

        if (hasClientContextParams()) {
            b.addStatement("setClientContextParams(builder, executionAttributes)");
        }
        b.addStatement("setContextParams(builder, executionAttributes.getAttribute($T.OPERATION_NAME), request)",
                       AwsExecutionAttribute.class);
        b.addStatement("setStaticContextParams(builder, executionAttributes.getAttribute($T.OPERATION_NAME))",
                       AwsExecutionAttribute.class);
        b.addStatement("setOperationContextParams(builder, executionAttributes.getAttribute($T.OPERATION_NAME), request)",
                       AwsExecutionAttribute.class);

        b.addStatement("return builder.build()");
        return b.build();
    }