/// <summary> /// Ensures that global parameters that are tagged with x-ms-paramater-location: "method" are not client properties /// </summary> /// <param name="codeModelient"></param> public static void ProcessGlobalParameters(CodeModel codeModel) { if (codeModel == null) { throw new ArgumentNullException("codeModel"); } List <Property> propertiesToProcess = new List <Property>(); foreach (var property in codeModel.Properties) { if (property.Extensions.ContainsKey(ParameterLocationExtension) && property.Extensions[ParameterLocationExtension].ToString().EqualsIgnoreCase("method")) { propertiesToProcess.Add(property); } } //set the clientProperty to null for such parameters in the method. foreach (var prop in propertiesToProcess) { codeModel.Remove(prop); foreach (var method in codeModel.Operations.SelectMany(each => each.Methods)) { foreach (var parameter in method.Parameters) { if (parameter.Name.FixedValue == prop.Name.FixedValue && parameter.IsClientProperty) { parameter.ClientProperty = null; } } } } }
/// <summary> /// Cleans all model types that are not used /// </summary> /// <param name="codeModelient"></param> /// <param name="typeNames"></param> public static void RemoveUnreferencedTypes(CodeModel codeModel, HashSet <string> typeNames) { if (codeModel == null) { throw new ArgumentNullException("codeModel"); } if (typeNames == null) { throw new ArgumentNullException("typeNames"); } while (typeNames.Count > 0) { string typeName = typeNames.First(); typeNames.Remove(typeName); var typeToDelete = codeModel.ModelTypes.First(t => t.Name == typeName); var isUsedInErrorTypes = codeModel.ErrorTypes.Any(e => e.Name == typeName); var isUsedInResponses = codeModel.Methods.Any(m => m.Responses.Any(r => r.Value.Body == typeToDelete)); var isUsedInParameters = codeModel.Methods.Any(m => m.Parameters.Any(p => p.ModelType == typeToDelete)); var isBaseType = codeModel.ModelTypes.Any(t => t.BaseModelType == typeToDelete); var isUsedInProperties = codeModel.ModelTypes.Where(t => !typeNames.Contains(t.Name)) .Any(t => t.Properties.Any(p => p.ModelType == typeToDelete)); if (!isUsedInErrorTypes && !isUsedInResponses && !isUsedInParameters && !isBaseType && !isUsedInProperties) { codeModel.Remove(typeToDelete); } } }
/// <summary> /// Creates azure specific properties. /// </summary> /// <param name="codeModelient"></param> private static void AddAzureProperties(CodeModel codeModel) { var acceptLanguage = codeModel.Properties .FirstOrDefault(p => AzureExtensions.AcceptLanguage.EqualsIgnoreCase(p.SerializedName)); AzureExtensions.AddAzureProperties(codeModel); codeModel.Remove(codeModel.Properties.FirstOrDefault(p => p.Name == "long_running_operation_retry_timeout")); codeModel.Remove(codeModel.Properties.FirstOrDefault(p => p.Name == "generate_client_request_id")); codeModel.Remove(codeModel.Properties.FirstOrDefault(p => p.Name == "accept_language")); if (acceptLanguage != null) // && acceptLanguage.DefaultValue != "en-US" { acceptLanguage.IsReadOnly = true; acceptLanguage.IsRequired = false; acceptLanguage.ModelType = New <PrimaryType>(KnownPrimaryType.String); codeModel.Add(acceptLanguage); } }