public List <NVClassNode> GetHelpers() { List <string> assemblies = GetAssembliesInBinaryDirectory(); List <NVClassNode> types = new List <NVClassNode>(); foreach (string assemblyFileName in assemblies) { if (!IsIgnored(assemblyFileName)) { AssemblyDefinition assemblyDefinition = AssemblyFactory.GetAssembly(assemblyFileName); TypeDefinitionCollection typeDefs = assemblyDefinition.MainModule.Types; foreach (TypeDefinition type in typeDefs) { if (type.Name != "<Module>" && !type.IsAbstract && type.BaseType != null && TypeInherits(typeDefs, type, AbstractHelperTypeName)) { NVClassNode classNode = new NVClassNode(type.Name, type.FullName); classNode.ClassPurpose = NVClassNodePurpose.Helper; classNode.AssemblyFileName = assemblyFileName; foreach (MethodDefinition method in type.Methods) { // Properties have the special name IL flag so ignore get_ and set_ methods if ((method.Attributes & MethodAttributes.Public) == MethodAttributes.Public && method.SemanticsAttributes != MethodSemanticsAttributes.Getter && method.SemanticsAttributes != MethodSemanticsAttributes.Setter) { NVMethodNode methodNode = new NVMethodNode(method.Name, new NVClassNode( method.ReturnType.ReturnType.Name, method.ReturnType.ReturnType.FullName)); List <NVParameterNode> parameters = new List <NVParameterNode>(); foreach (ParameterDefinition parameter in method.Parameters) { parameters.Add(new NVParameterNode( parameter.Name, new NVClassNode(parameter.ParameterType.Name, parameter.ParameterType.FullName), parameter.Sequence)); } methodNode.Parameters = parameters; classNode.AddMethod(methodNode); } } types.Add(classNode); } } } } return(types); }
/// <summary> /// Returns information about the specified parameter on the specified method signature. /// </summary> /// <param name="index">An index into the list of method signatures.</param> /// <param name="parameter">An index into the parameter list of the specified method signature.</param> /// <param name="name">Returns the name of the parameter.</param> /// <param name="display">Returns the parameter name and type formatted for display.</param> /// <param name="description">Returns a string containing a description of the parameter.</param> public override void GetParameterInfo(int index, int parameter, out string name, out string display, out string description) { NVMethodNode methodNode = _methodNodes[index]; NVParameterNode parameterNode = methodNode.Parameters[parameter]; NVClassNode classNode = (NVClassNode)methodNode.Parent; name = parameterNode.Name; display = string.Format("{0} {1}", parameterNode.Type.Name, parameterNode.Name); // Retrieve XML documentation XmlDocumentationProvider documentationProvider = new XmlDocumentationProvider(classNode.AssemblyFileName); description = documentationProvider.GetParameterDocumentation( classNode.FullName, methodNode.Name, parameterNode.Name); if (string.IsNullOrEmpty(description)) { description = string.Format("Could not retrieve documentation for parameter '{0}'.", parameterNode.Name); } }