private static void ProcessParameter(MethodInfo info, StringBuilder parameterString) { if (parameterString == null || parameterString.Length == 0) { return; } string value = parameterString.ToString(); if (value.StartsWith("@return")) { info.Returns = value.Substring(7).Trim(); } else if (value.StartsWith("@param")) { var split = value.IndexOf(" "); var paramDefinition = value.Substring(0, split); var p = value.Substring(split).Trim(); split = p.IndexOf(" "); string orgParamName = split > 0 ? p.Substring(0, split).Trim() : p; string paramName = orgParamName; string description = split > 0 ? p.Substring(split).Trim() : ""; paramName = MethodSignatureAnalyzer.SafeParameterName(paramName); while (info.Parameters.ContainsKey(paramName)) { paramName = paramName + "_"; //Sometimes args are duplicated. Rename for now } bool isIn = paramDefinition.Contains("[in]") || paramDefinition.Contains("[in,out]") || !paramDefinition.Contains("["); bool isOut = paramDefinition.Contains("[out]") || paramDefinition.Contains("[in,out]"); PropertyInfo pi = new PropertyInfo() { Name = paramName, OriginalName = orgParamName, Description = description, IsInput = isIn, IsOutput = isOut }; info.Parameters.Add(paramName, pi); } }