/// <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> /// 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; } } } } }