public void WriteExtensionMethod(ExtensionMethodReference extMethod, DisplayOptions options, XmlWriter writer) { if (extMethod == null) throw new ArgumentNullException("extMethod"); if (writer == null) throw new ArgumentNullException("writer"); // write the unqualified method name writer.WriteString(extMethod.Name); // if this is a generic method, write any template params or args if (extMethod.TemplateArgs != null && extMethod.TemplateArgs.Length > 0) { WriteTemplateArguments(extMethod.TemplateArgs, writer); } // write parameters if ((options & DisplayOptions.ShowParameters) > 0) { Parameter[] parameters = extMethod.Parameters; WriteMethodParameters(extMethod.Parameters, writer); } }
/// <summary> /// Create an object to store the information to generate the display string for an extension method /// </summary> /// <param name="node">xml node containing the extension method data</param> /// <returns></returns> public static ExtensionMethodReference CreateExtensionMethodReference(XPathNavigator node) { string methodName = (string)node.Evaluate(apiNameExpression); Parameter[] parameters = CreateParameterList(node); TypeReference[] templateArgumentReferences = null; // List<TemplateName> templateNames = new List<TemplateName>(); // this selects templates/template or templates/type, because extension methods can have a mix of generic and specialization // get the short name of each template param or template arg XPathNodeIterator templateNodes = node.Select(methodTemplateArgsExpression); if (templateNodes != null && templateNodes.Count > 0) { templateArgumentReferences = new TypeReference[templateNodes.Count]; int i = 0; foreach (XPathNavigator templateNode in templateNodes) { templateArgumentReferences[i] = CreateTypeReference(templateNode); i++; } } ExtensionMethodReference extMethod = new ExtensionMethodReference(methodName, parameters, templateArgumentReferences); return extMethod; }