private void copyTopLevelElement(Element e, Element parent) { if (e.getNamespaceURI() == null) { switch (e.getLocalName()) { case "summary": case "remarks": case "value": case "returns": case "example": parent.appendChild(copyContainer(e)); break; case "include": include(e, parent, false); break; case "exception": parent.appendChild(copyException(e)); break; case "param": parent.appendChild(copyParam(e)); break; case "typeparam": parent.appendChild(copyTypeparam(e)); break; case "seealso": parent.appendChild(copySeealso(e)); break; case "code": default: parent.appendChild((Element)document.importNode(e, true)); break; } } else { parent.appendChild((Element)document.importNode(e, true)); } }
private void copyNestedElement(Element nested, Element parent) { if (nested.getNamespaceURI() == null) { switch (nested.getLocalName()) { case "c": case "para": case "list": case "listheader": case "item": case "term": case "description": parent.appendChild(copyContainer(nested)); break; case "include": include(nested, parent, true); break; case "see": parent.appendChild(copySee(nested)); break; case "paramref": parent.appendChild(copyParamref(nested)); break; case "typeparamref": parent.appendChild(copyTypeparamref(nested)); break; default: parent.appendChild((Element)document.importNode(nested, true)); break; } } else { parent.appendChild((Element)document.importNode(nested, true)); } }
private void validateTypeparam(Element typeparam) { if (memberKind == MemberKind.Type) { var name = typeparam.getAttribute("name"); if (!type.GenericArguments.any(p => p.FullName.equals(name))) { context.addWarning(CompileErrorId.InvalidTypeparamNameAttribute, node, name); } } else if (memberKind == MemberKind.Method) { var name = typeparam.getAttribute("name"); if (Helper.isNullOrEmpty(name)) { context.addWarning(CompileErrorId.MissingDocAttribute, node, "name", typeparam.getLocalName()); } else if (!method.GenericArguments.any(p => p.FullName.equals(name))) { context.addWarning(CompileErrorId.InvalidTypeparamNameAttribute, node, name); } } else { context.addWarning(CompileErrorId.InvalidTypeparamElement, node); } }
private void validateParam(Element param) { if (memberKind != MemberKind.Method && memberKind != MemberKind.Indexer) { context.addWarning(CompileErrorId.InvalidParamElement, node); } else { var name = param.getAttribute("name"); if (Helper.isNullOrEmpty(name)) { context.addWarning(CompileErrorId.MissingDocAttribute, node, "name", param.getLocalName()); } else if (!method.Parameters.any(p => p.Name.equals(name))) { context.addWarning(CompileErrorId.InvalidParamNameAttribute, node, name); } } }
private void replaceCref(Element element, bool exception) { var cref = element.getAttribute("cref"); if (Helper.isNullOrEmpty(cref)) { context.addWarning(CompileErrorId.MissingDocAttribute, node, "cref", element.getLocalName()); } else { if (cref.length() > 1 && cref[1] == ':') { return; } String arguments = null; int idx = cref.indexOf('('); if (idx != -1) { arguments = cref.substring(idx); cref = cref.substring(0, idx); } idx = cref.indexOf('.'); String name; if (idx == -1) { name = cref; cref = null; } else { name = cref.substring(0, idx); cref = cref.substring(idx + 1); } var members = context.MemberResolver.resolveName(context.CurrentType, name, Query.empty <TypeInfo>()).toList(); if (!members.any()) { if (cref == null) { context.addWarning(CompileErrorId.UnresolvedCref, node, element.getAttribute("cref")); element.setAttribute("cref", "!" + element.getAttribute("cref")); return; } var packageName = context.MemberResolver.getPackageFromAlias(name); if (packageName == null) { if (context.MemberResolver.TypeFinder.getSubPackages(name).any() || context.MemberResolver.TypeFinder.getClasses(name).any()) { packageName = name; } else { context.addWarning(CompileErrorId.UnresolvedCref, node, element.getAttribute("cref")); element.setAttribute("cref", "!" + element.getAttribute("cref")); return; } } bool found; do { idx = cref.indexOf('.'); if (idx == -1) { name = cref; cref = null; } else { name = cref.substring(0, idx); cref = cref.substring(idx + 1); } found = false; foreach (var s in context.MemberResolver.TypeFinder.getSubPackages(packageName)) { if (s.equals(name)) { packageName = packageName + '/' + name; found = true; break; } } if (!found && !context.MemberResolver.TypeFinder.getClasses(packageName).contains(name)) { context.addWarning(CompileErrorId.UnresolvedCref, node, element.getAttribute("cref")); element.setAttribute("cref", "!" + element.getAttribute("cref")); return; } } while (cref != null && found); var type = context.TypeSystem.getType(packageName + '/' + name); replaceCref(element, exception, type, cref, arguments); } else { replaceCref(element, exception, members, cref, arguments); } } }
private void copyNestedElement(Element nested, Element parent) { if (nested.getNamespaceURI() == null) { switch (nested.getLocalName()) { case "c": case "para": case "list": case "listheader": case "item": case "term": case "description": parent.appendChild(copyContainer(nested)); break; case "include": include(nested, parent, true); break; case "see": parent.appendChild(copySee(nested)); break; case "paramref": parent.appendChild(copyParamref(nested)); break; case "typeparamref": parent.appendChild(copyTypeparamref(nested)); break; default: parent.appendChild((Element)document.importNode(nested, true)); break; } } else { parent.appendChild((Element)document.importNode(nested, true)); } }
private void validateTypeparam(Element typeparam) { if (memberKind == MemberKind.Type) { var name = typeparam.getAttribute("name"); if (!type.GenericArguments.any(p => p.FullName.equals(name))) { context.addWarning(CompileErrorId.InvalidTypeparamNameAttribute, node, name); } } else if (memberKind == MemberKind.Method) { var name = typeparam.getAttribute("name"); if (Helper.isNullOrEmpty(name)) { context.addWarning(CompileErrorId.MissingDocAttribute, node, "name", typeparam.getLocalName()); } else if (!method.GenericArguments.any(p => p.FullName.equals(name))) { context.addWarning(CompileErrorId.InvalidTypeparamNameAttribute, node, name); } } else { context.addWarning(CompileErrorId.InvalidTypeparamElement, node); } }
private void validateParam(Element param) { if (memberKind != MemberKind.Method && memberKind != MemberKind.Indexer) { context.addWarning(CompileErrorId.InvalidParamElement, node); } else { var name = param.getAttribute("name"); if (Helper.isNullOrEmpty(name)) { context.addWarning(CompileErrorId.MissingDocAttribute, node, "name", param.getLocalName()); } else if (!method.Parameters.any(p => p.Name.equals(name))) { context.addWarning(CompileErrorId.InvalidParamNameAttribute, node, name); } } }
private void replaceCref(Element element, bool exception) { var cref = element.getAttribute("cref"); if (Helper.isNullOrEmpty(cref)) { context.addWarning(CompileErrorId.MissingDocAttribute, node, "cref", element.getLocalName()); } else { if (cref.length() > 1 && cref[1] == ':') { return; } String arguments = null; int idx = cref.indexOf('('); if (idx != -1) { arguments = cref.substring(idx); cref = cref.substring(0, idx); } idx = cref.indexOf('.'); String name; if (idx == -1) { name = cref; cref = null; } else { name = cref.substring(0, idx); cref = cref.substring(idx + 1); } var members = context.MemberResolver.resolveName(context.CurrentType, name, Query.empty<TypeInfo>()).toList(); if (!members.any()) { if (cref == null) { context.addWarning(CompileErrorId.UnresolvedCref, node, element.getAttribute("cref")); element.setAttribute("cref", "!" + element.getAttribute("cref")); return; } var packageName = context.MemberResolver.getPackageFromAlias(name); if (packageName == null) { if (context.MemberResolver.TypeFinder.getSubPackages(name).any() || context.MemberResolver.TypeFinder.getClasses(name).any()) { packageName = name; } else { context.addWarning(CompileErrorId.UnresolvedCref, node, element.getAttribute("cref")); element.setAttribute("cref", "!" + element.getAttribute("cref")); return; } } bool found; do { idx = cref.indexOf('.'); if (idx == -1) { name = cref; cref = null; } else { name = cref.substring(0, idx); cref = cref.substring(idx + 1); } found = false; foreach (var s in context.MemberResolver.TypeFinder.getSubPackages(packageName)) { if (s.equals(name)) { packageName = packageName + '/' + name; found = true; break; } } if (!found && !context.MemberResolver.TypeFinder.getClasses(packageName).contains(name)) { context.addWarning(CompileErrorId.UnresolvedCref, node, element.getAttribute("cref")); element.setAttribute("cref", "!" + element.getAttribute("cref")); return; } } while (cref != null && found); var type = context.TypeSystem.getType(packageName + '/' + name); replaceCref(element, exception, type, cref, arguments); } else { replaceCref(element, exception, members, cref, arguments); } } }
private void copyTopLevelElement(Element e, Element parent) { if (e.getNamespaceURI() == null) { switch (e.getLocalName()) { case "summary": case "remarks": case "value": case "returns": case "example": parent.appendChild(copyContainer(e)); break; case "include": include(e, parent, false); break; case "exception": parent.appendChild(copyException(e)); break; case "param": parent.appendChild(copyParam(e)); break; case "typeparam": parent.appendChild(copyTypeparam(e)); break; case "seealso": parent.appendChild(copySeealso(e)); break; case "code": default: parent.appendChild((Element)document.importNode(e, true)); break; } } else { parent.appendChild((Element)document.importNode(e, true)); } }