public static void Transform()

in src/AutoRest.CSharp/Common/Decorator/ConstantSchemaTransformer.cs [13:63]


        public static void Transform(CodeModel codeModel)
        {
            var constantSchemas = new HashSet<ConstantSchema>(codeModel.Schemas.Constants);
            if (!constantSchemas.Any())
                return;

            Dictionary<ConstantSchema, ChoiceSchema> convertedChoiceSchemas = new();

            foreach (var operation in codeModel.OperationGroups.SelectMany(og => og.Operations))
            {
                // change the schema on operations (only for optional)
                foreach (var parameter in operation.Parameters)
                {
                    if (parameter.IsRequired || parameter.Schema is not ConstantSchema constantSchema || ShouldSkipReplace(constantSchema))
                        continue;

                    var choiceSchema = ComputeIfAbsent(convertedChoiceSchemas, constantSchema, ConvertToChoiceSchema);
                    constantSchema.ValueType = choiceSchema;
                    operation.SignatureParameters.Add(parameter);
                }

                foreach (var request in operation.Requests)
                {
                    foreach (var parameter in request.Parameters)
                    {
                        if (parameter.IsRequired || parameter.Schema is not ConstantSchema constantSchema || ShouldSkipReplace(constantSchema))
                            continue;

                        var choiceSchema = ComputeIfAbsent(convertedChoiceSchemas, constantSchema, ConvertToChoiceSchema);
                        constantSchema.ValueType = choiceSchema;
                        request.SignatureParameters.Add(parameter);
                    }
                }

                // change the schema on models (optional and required)
                foreach (var obj in codeModel.Schemas.Objects)
                {
                    foreach (var property in obj.Properties)
                    {
                        if (property.Schema is not ConstantSchema constantSchema || ShouldSkipReplace(constantSchema) || CheckPropertyExtension(property))
                            continue;

                        var choiceSchema = ComputeIfAbsent(convertedChoiceSchemas, constantSchema, ConvertToChoiceSchema);
                        constantSchema.ValueType = choiceSchema;
                    }
                }
            }

            foreach (var choiceSchema in convertedChoiceSchemas.Values)
                codeModel.Schemas.Choices.Add(choiceSchema);
        }