internal void AddParameter(MethodParameter parameter) { parameters.Add(parameter); }
private void AddMethod(List<Namespace> namespaces, List<IReferencable> references, DocumentedMethod association) { if (association.Method == null) return; NamespaceIdentifier namespaceName = Identifier.FromNamespace(association.TargetType.Namespace); TypeIdentifier typeName = Identifier.FromType(association.TargetType); Namespace @namespace = namespaces.Find(x => x.IsIdentifiedBy(namespaceName)); if (@namespace == null) { AddNamespace(namespaces, new DocumentedType(association.Name.CloneAsNamespace(), null, association.TargetType)); @namespace = namespaces.Find(x => x.IsIdentifiedBy(namespaceName)); } DeclaredType type = @namespace.Types.FirstOrDefault(x => x.IsIdentifiedBy(typeName)); if (type == null) { AddType(namespaces, references, new DocumentedType(association.Name.CloneAsType(), null, association.TargetType)); type = @namespace.Types.FirstOrDefault(x => x.IsIdentifiedBy(typeName)); } DeclaredType methodReturnType = DeclaredType.Unresolved( Identifier.FromType(association.Method.ReturnType), association.Method.ReturnType, Namespace.Unresolved(Identifier.FromNamespace(association.Method.ReturnType.Namespace))); Method doc = Method.Unresolved(Identifier.FromMethod(association.Method, association.TargetType), association.Method, methodReturnType); references.Add(methodReturnType); if (association.Xml != null) { XmlNode summaryNode = association.Xml.SelectSingleNode("summary"); if (summaryNode != null) doc.Summary = commentContentParser.Parse(summaryNode); GetReferencesFromComment(references, doc.Summary); } foreach (var parameter in association.Method.GetParameters()) { var reference = DeclaredType.Unresolved( Identifier.FromType(parameter.ParameterType), parameter.ParameterType, Namespace.Unresolved(Identifier.FromNamespace(parameter.ParameterType.Namespace))); var docParam = new MethodParameter(parameter.Name, reference); references.Add(reference); if (association.Xml != null) { XmlNode paramNode = association.Xml.SelectSingleNode("param[@name='" + parameter.Name + "']"); if (paramNode != null) docParam.Summary = commentContentParser.Parse(paramNode); GetReferencesFromComment(references, docParam.Summary); } doc.AddParameter(docParam); } if (matchedAssociations.ContainsKey(association.Name)) return; // weird case when a type has the same method declared twice references.Add(doc); matchedAssociations.Add(association.Name, doc); type.AddMethod(doc); }