Beispiel #1
0
        /// <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);
                }
            }
        }
Beispiel #2
0
        /// <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;
                        } 
                    }
                }
            }
        }