private void WriteMethod (MethodTarget target, DisplayOptions options, XmlWriter writer, Dictionary<IndexedTemplateTypeReference, TypeReference> dictionary) { WriteProcedureName(target, options, writer); if ((options & DisplayOptions.ShowTemplates) > 0) { // if this is a generic method, write any template params or args if (target.TemplateArgs != null && target.TemplateArgs.Length > 0) { WriteTemplateArguments(target.TemplateArgs, writer); } } if ((options & DisplayOptions.ShowParameters) > 0) { Parameter[] parameters = target.Parameters; if (target.ConversionOperator) { TypeReference returns = target.returnType; WriteConversionOperatorParameters(parameters, returns, writer, dictionary); } else { WriteMethodParameters(parameters, writer, dictionary); } } }
private static MethodTarget CreateMethodTarget (XPathNavigator api) { MethodTarget target = new MethodTarget(); target.parameters = CreateParameterList(api); target.returnType = CreateReturnType(api); target.conversionOperator = (bool)api.Evaluate(apiIsConversionOperatorExpression); if ((bool)api.Evaluate(apiIsExplicitImplementationExpression)) { target.explicitlyImplements = CreateMemberReference(api.SelectSingleNode(apiImplementedMembersExpression)); } // this selects templates/template or templates/type, because extension methods can have a mix of generic and specialization XPathNodeIterator templateArgNodes = api.Select(methodTemplateArgsExpression); TypeReference[] templateArgumentReferences = null; if (templateArgNodes != null && templateArgNodes.Count > 0) { templateArgumentReferences = new TypeReference[templateArgNodes.Count]; int i = 0; foreach (XPathNavigator templateArgNode in templateArgNodes) { templateArgumentReferences[i] = CreateTypeReference(templateArgNode); i++; } } target.templateArgs = templateArgumentReferences; // get the short name of each template param target.templates = GetTemplateNames(api); return (target); }