📄 htmldoclet.java
字号:
if (null == node) { node = new TreeNode(classDoc); treeMap.put(classDoc.qualifiedName(), node); ClassDoc superClassDoc = (ClassDoc)classDoc.superclass(); if (null != superClassDoc) { TreeNode parentNode = addClassTreeNode(treeMap, superClassDoc); parentNode.children.add(node); } } return node; } private TreeNode addInterfaceTreeNode(Map treeMap, ClassDoc classDoc) { TreeNode node = (TreeNode)treeMap.get(classDoc.qualifiedName()); if (null == node) { node = new TreeNode(classDoc); treeMap.put(classDoc.qualifiedName(), node); ClassDoc[] superInterfaces = classDoc.interfaces(); if (null != superInterfaces && superInterfaces.length > 0) { for (int i=0; i<superInterfaces.length; ++i) { TreeNode parentNode = addInterfaceTreeNode(treeMap, superInterfaces[i]); parentNode.children.add(node); } } else { TreeNode rootNode = (TreeNode)treeMap.get("<root>"); if (null == rootNode) { rootNode = new TreeNode(null); treeMap.put("<root>", rootNode); } rootNode.children.add(node); } } return node; } private void printPackageTreeRec(HtmlPage output, TreeNode node, TreeNode parentNode) { output.beginElement("li", "class", "node"); output.beginElement("div"); if (node.classDoc.isIncluded()) { String packageName = node.classDoc.containingPackage().name(); if (packageName.length() > 0) { output.print(packageName); output.print("."); } output.beginSpan(CssClass.TREE_LINK); printType(output, node.classDoc); output.endSpan(CssClass.TREE_LINK); } else { output.print(possiblyQualifiedName(node.classDoc)); } ClassDoc[] interfaces = node.classDoc.interfaces(); ClassDoc parentClassDoc = null; if (null != parentNode) { parentClassDoc = parentNode.classDoc; } if (interfaces.length > 0 && !(interfaces.length == 1 && interfaces[0].equals(parentClassDoc))) { if (node.classDoc.isInterface()) { output.print(" (also implements "); } else { output.print(" (implements "); } boolean firstItem = true; for (int i=0; i<interfaces.length; ++i) { ClassDoc implemented = interfaces[i]; if (!implemented.equals(parentClassDoc)) { if (!firstItem) { output.print(", "); } firstItem = false; if (implemented.isIncluded()) { output.print(implemented.containingPackage().name()); output.print("."); printType(output, implemented); } else { output.print(possiblyQualifiedName(implemented)); } } } output.print(")"); } output.endElement("div"); output.endElement("li"); if (!node.children.isEmpty()) { output.beginElement("li", "class", "level"); output.beginElement("ul"); Iterator it = node.children.iterator(); while (it.hasNext()) { TreeNode child = (TreeNode)it.next(); printPackageTreeRec(output, child, node); } output.endElement("ul"); output.endElement("li"); } } private void printClassTree(HtmlPage output, ClassDoc[] classDocs) { Map classTreeMap = new HashMap(); for (int i=0; i<classDocs.length; ++i) { ClassDoc classDoc = classDocs[i]; if (!classDoc.isInterface()) { addClassTreeNode(classTreeMap, classDoc); } } TreeNode root = (TreeNode)classTreeMap.get("java.lang.Object"); if (null != root) { output.div(CssClass.PACKAGE_TREE_SECTION_TITLE, "Class Hierarchy"); output.beginDiv(CssClass.PACKAGE_TREE); printPackageTreeRec(output, root, null); output.endDiv(CssClass.PACKAGE_TREE); } } private void printInterfaceTree(HtmlPage output, ClassDoc[] classDocs) { Map interfaceTreeMap = new HashMap(); for (int i=0; i<classDocs.length; ++i) { ClassDoc classDoc = classDocs[i]; if (classDoc.isInterface()) { addInterfaceTreeNode(interfaceTreeMap, classDoc); } } TreeNode interfaceRoot = (TreeNode)interfaceTreeMap.get("<root>"); if (null != interfaceRoot) { Iterator it = interfaceRoot.children.iterator(); if (it.hasNext()) { output.div(CssClass.PACKAGE_TREE_SECTION_TITLE, "Interface Hierarchy"); output.beginDiv(CssClass.PACKAGE_TREE); while (it.hasNext()) { TreeNode node = (TreeNode)it.next(); printPackageTreeRec(output, node, null); } output.endDiv(CssClass.PACKAGE_TREE); } } } private void printPackageTreePage(File packageDir, String pathToRoot, PackageDoc packageDoc) throws IOException { HtmlPage output = newHtmlPage(new File(packageDir, "tree" + filenameExtension), pathToRoot); output.beginPage(getPageTitle(packageDoc.name() + " Hierarchy"), getOutputCharset(), getStylesheets()); output.beginBody(CssClass.BODY_CONTENT_PACKAGE_TREE); printNavBarTop(output, "package-tree"); output.div(CssClass.PACKAGE_TREE_TITLE, "Hierarchy for Package " + packageDoc.name()); ClassDoc[] classDocs = packageDoc.allClasses(); printClassTree(output, classDocs); printInterfaceTree(output, classDocs); printNavBarBottom(output, "package-tree"); output.endBody(); output.endPage(); output.close(); } private void printFullTreePage() throws IOException { HtmlPage output = newHtmlPage(new File(getTargetDirectory(), "tree" + filenameExtension), "."); output.beginPage(getPageTitle("Hierarchy"), getOutputCharset(), getStylesheets()); output.beginBody(CssClass.BODY_CONTENT_FULL_TREE); printNavBarTop(output, "full-tree"); output.div(CssClass.PACKAGE_TREE_TITLE, "Hierarchy for All Packages"); output.beginDiv(CssClass.FULL_TREE_PACKAGELIST); output.div(CssClass.FULL_TREE_PACKAGELIST_HEADER, "Package Hierarchies:"); output.beginDiv(CssClass.FULL_TREE_PACKAGELIST_ITEM); Set allPackages = getAllPackages(); Iterator it = allPackages.iterator(); while (it.hasNext()) { PackageDoc packageDoc = (PackageDoc)it.next(); output.beginAnchor(getPackageURL(packageDoc) + "tree" + filenameExtension); output.print(packageDoc.name()); output.endAnchor(); if (it.hasNext()) { output.print(", "); } } output.endDiv(CssClass.FULL_TREE_PACKAGELIST_ITEM); output.endDiv(CssClass.FULL_TREE_PACKAGELIST); ClassDoc[] classDocs = getRootDoc().classes(); printClassTree(output, classDocs); printInterfaceTree(output, classDocs); printNavBarBottom(output, "full-tree"); output.endBody(); output.endPage(); output.close(); } private void printIndexEntry(HtmlPage output, Doc entry) { output.beginDiv(CssClass.INDEX_ENTRY); output.beginDiv(CssClass.INDEX_ENTRY_KEY); String anchor = null; String description = null; if (entry instanceof PackageDoc) { output.beginAnchor(getPackageURL((PackageDoc)entry) + "package-summary" + filenameExtension); output.print(entry.name()); output.endAnchor(); output.print(" - package"); } else if (entry instanceof ClassDoc) { ClassDoc classDoc = (ClassDoc)entry; output.beginAnchor(getClassURL(classDoc)); output.print(entry.name() + getTypeParameters(classDoc)); output.endAnchor(); output.print(" - "); if (entry.isInterface()) { output.print("interface "); } else if (entry.isException()) { output.print("exception "); } else if (entry.isError()) { output.print("error "); } else { output.print("class "); } String packageName = classDoc.containingPackage().name(); if (packageName.length() > 0) { output.print(packageName); output.print("."); } printType(output, classDoc); } else { ProgramElementDoc memberDoc = (ProgramElementDoc)entry; output.beginAnchor(getMemberDocURL(output, memberDoc)); output.print(entry.name()); if (memberDoc instanceof ExecutableMemberDoc) { output.print(((ExecutableMemberDoc)memberDoc).signature()); } output.endAnchor(); output.print(" - "); if (memberDoc.isStatic()) { output.print("static "); } if (entry.isConstructor()) { output.print("constructor for class "); } else if (entry.isMethod()) { output.print("method in class "); } else if (entry.isField()) { output.print("field in class "); } ClassDoc containingClass = memberDoc.containingClass(); String packageName = containingClass.containingPackage().name(); if (packageName.length() > 0) { output.print(packageName); output.print("."); } printType(output, containingClass); } output.endDiv(CssClass.INDEX_ENTRY_KEY); output.beginDiv(CssClass.INDEX_ENTRY_DESCRIPTION); printTags(output, entry, entry.firstSentenceTags(), true); output.endDiv(CssClass.INDEX_ENTRY_DESCRIPTION); output.endDiv(CssClass.INDEX_ENTRY); } private void printFrameSetPage() throws IOException { HtmlPage output = newHtmlPage(new File(getTargetDirectory(), "index" + filenameExtension), ".", HtmlPage.DOCTYPE_FRAMESET); String title = getWindowTitle(); output.beginPage(title, getOutputCharset(), getStylesheets()); output.beginElement("frameset", "cols", "20%,80%"); String contentURL; if (isSinglePackage()) { output.atomicElement("frame", new String[] { "src", "name" }, new String[] { getPackageURL(getSinglePackage()) + "classes" + filenameExtension, "classes" }); contentURL = getPackageURL(getSinglePackage()) + "package-summary.html"; } else { output.beginElement("frameset", "rows", "25%,75%"); output.atomicElement("frame", new String[] { "src", "name" }, new String[] { "all-packages" + filenameExtension, "packages" }); output.atomicElement("frame", new String[] { "src", "name" }, new String[] { "all-classes" + filenameExtension, "classes" }); output.endElement("frameset"); contentURL = "overview-summary" + filenameExtension; } output.atomicElement("frame", new String[] { "src", "name" }, new String[] { contentURL, "content" }); output.endElement("frameset"); output.endPage(); output.close(); } private void printPackagesMenuPage() throws IOException { HtmlPage output = newHtmlPage(new File(getTargetDirectory(), "all-packages" + filenameExtension), "."); output.beginPage(getPageTitle("Package Menu"), getOutputCharset(), getStylesheets()); output.beginBody(CssClass.BODY_MENU_PACKAGES, false); output.beginSpan(CssClass.PACKAGE_MENU_ENTRY); output.beginAnchor("all-classes" + filenameExtension, null, "classes"); output.print("All Classes"); output.endAnchor(); output.endSpan(CssClass.PACKAGE_MENU_ENTRY); output.div(CssClass.PACKAGE_MENU_TITLE, "Packages"); output.beginDiv(CssClass.PACKAGE_MENU_LIST); Set packageDocs = getAllPackages(); Iterator it = packageDocs.iterator(); while (it.hasNext()) { PackageDoc packageDoc = (PackageDoc)it.next(); output.beginSpan(CssClass.PACKAGE_MENU_ENTRY); output.beginAnchor(getPackageURL(packageDoc) + "classes" + filenameExtension, null, "classes"); if (packageDoc.name().length() > 0) { output.print(packageDoc.name()); } else { output.print("<unnamed package>"); } output.endAnchor(); output.endSpan(CssClass.PACKAGE_MENU_ENTRY); output.br();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -