OpenJDK / loom / loom
changeset 48295:c79d31ba84b9
8164407: Add module support for -link and -linkoffline javadoc option
Reviewed-by: jjg, ksrini
line wrap: on
line diff
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java Wed Dec 13 21:25:49 2017 +0100 +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java Wed Dec 13 12:45:06 2017 -0800 @@ -1119,7 +1119,7 @@ (label == null) || label.isEmpty() ? defaultLabel : label, strong, resources.getText("doclet.Href_Class_Or_Interface_Title", packageName), - ""); + "", true); } } return null; @@ -1137,6 +1137,11 @@ DocPaths.PACKAGE_SUMMARY.getPath()); } + public DocLink getCrossModuleLink(String mdleName) { + return configuration.extern.getExternalLink(mdleName, pathToRoot, + DocPaths.moduleSummary(mdleName).getPath()); + } + /** * Get the class link. * @@ -1411,13 +1416,14 @@ new StringContent(refPackage.getQualifiedName())); return getPackageLink(refPackage, label); } else { - // @see is not referencing an included class or package. Check for cross links. + // @see is not referencing an included class, module or package. Check for cross links. Content classCrossLink; - DocLink packageCrossLink = getCrossPackageLink(refClassName); - if (packageCrossLink != null) { - // Package cross link found - return Links.createLink(packageCrossLink, - (label.isEmpty() ? text : label)); + DocLink elementCrossLink = (configuration.extern.isModule(refClassName)) + ? getCrossModuleLink(refClassName) : getCrossPackageLink(refClassName); + if (elementCrossLink != null) { + // Element cross link found + return Links.createLink(elementCrossLink, + (label.isEmpty() ? text : label), true); } else if ((classCrossLink = getCrossClassLink(refClassName, refMemName, label, false, !isLinkPlain)) != null) { // Class cross link found (possibly to a member in the class)
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlStyle.java Wed Dec 13 21:25:49 2017 +0100 +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlStyle.java Wed Dec 13 12:45:06 2017 -0800 @@ -63,6 +63,7 @@ details, docSummary, emphasizedPhrase, + externalLink, fixedNav, header, horizontal,
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/Links.java Wed Dec 13 21:25:49 2017 +0100 +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/Links.java Wed Dec 13 12:45:06 2017 -0800 @@ -259,6 +259,24 @@ */ public static Content createLink(DocLink link, Content label, boolean strong, String title, String target) { + return createLink(link, label, strong, title, target, false); + } + + /** + * Creates a link of the form {@code <a href="link" title="title" target="target">label</a>}. + * If {@code strong} is set, the label will be wrapped in + * {@code <span style="typeNameLink">...</span>}. + * + * @param link the details for the link + * @param label the content for the link + * @param strong whether to wrap the {@code label} in a SPAN element + * @param title the title for the link + * @param target the target for the link, or null + * @param isExternal is the link external to the generated documentation + * @return a content tree for the link + */ + public static Content createLink(DocLink link, Content label, boolean strong, + String title, String target, boolean isExternal) { Content body = label; if (strong) { body = HtmlTree.SPAN(HtmlStyle.typeNameLink, body); @@ -270,9 +288,26 @@ if (target != null && target.length() != 0) { l.addAttr(HtmlAttr.TARGET, target); } + if (isExternal) { + l.setStyle(HtmlStyle.externalLink); + } return l; } + /** + * Creates a link. + * + * @param link the details for the link + * @param label the content for the link + * @param isExternal is the link external to the generated documentation + * @return a content tree for the link + */ + public static Content createLink(DocLink link, Content label, boolean isExternal) { + HtmlTree anchor = HtmlTree.A(link.toString(), label); + anchor.setStyle(HtmlStyle.externalLink); + return anchor; + } + /** * Converts a name to a valid HTML name (id).
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/AbstractDoclet.java Wed Dec 13 21:25:49 2017 +0100 +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/AbstractDoclet.java Wed Dec 13 12:45:06 2017 -0800 @@ -42,7 +42,7 @@ import jdk.javadoc.internal.doclets.toolkit.util.DocFileIOException; import jdk.javadoc.internal.doclets.toolkit.util.UncheckedDocletException; import jdk.javadoc.internal.doclets.toolkit.util.InternalException; -import jdk.javadoc.internal.doclets.toolkit.util.PackageListWriter; +import jdk.javadoc.internal.doclets.toolkit.util.ElementListWriter; import jdk.javadoc.internal.doclets.toolkit.util.ResourceIOException; import jdk.javadoc.internal.doclets.toolkit.util.SimpleDocletException; import jdk.javadoc.internal.doclets.toolkit.util.Utils; @@ -210,7 +210,7 @@ generateClassFiles(docEnv, classtree); - PackageListWriter.generate(configuration); + ElementListWriter.generate(configuration); generatePackageFiles(classtree); generateModuleFiles();
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/CommentHelper.java Wed Dec 13 21:25:49 2017 +0100 +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/CommentHelper.java Wed Dec 13 12:45:06 2017 -0800 @@ -31,6 +31,7 @@ import javax.lang.model.element.Element; import javax.lang.model.element.ExecutableElement; +import javax.lang.model.element.ModuleElement; import javax.lang.model.element.PackageElement; import javax.lang.model.element.TypeElement; import javax.lang.model.type.TypeMirror;
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DocPaths.java Wed Dec 13 21:25:49 2017 +0100 +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DocPaths.java Wed Dec 13 12:45:06 2017 -0800 @@ -62,6 +62,9 @@ /** The name of the subdirectory for user-provided additional documentation files. */ public static final DocPath DOC_FILES = DocPath.create("doc-files"); + /** The name of the file for the element list. */ + public static final DocPath ELEMENT_LIST = DocPath.create("element-list"); + /** The name of the image file showing a magnifying glass on the search box. */ public static final DocPath GLASS_IMG = DocPath.create("glass.png"); @@ -149,7 +152,7 @@ /** The name of the file for the package frame. */ public static final DocPath PACKAGE_FRAME = DocPath.create("package-frame.html"); - /** The name of the file for the package list. */ + /** The name of the file for the package list. This is to support the legacy mode. */ public static final DocPath PACKAGE_LIST = DocPath.create("package-list"); /** The name of the package search index file. */ @@ -182,7 +185,12 @@ /** The name of the file for the module summary. */ public static DocPath moduleSummary(ModuleElement mdle) { - return DocPath.create(mdle.getQualifiedName() + "-summary.html"); + return DocPaths.moduleSummary(mdle.getQualifiedName().toString()); + } + + /** The name of the file for the module summary. */ + public static DocPath moduleSummary(String mdleName) { + return DocPath.create(mdleName + "-summary.html"); } /** The name of the file for the module frame. */
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DocletConstants.java Wed Dec 13 21:25:49 2017 +0100 +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DocletConstants.java Wed Dec 13 12:45:06 2017 -0800 @@ -54,6 +54,16 @@ public static final String DEFAULT_PACKAGE_NAME = "<Unnamed>"; /** + * The default module or a package name. + */ + public static final String DEFAULT_ELEMENT_NAME = "<Unnamed>"; + + /** + * The module prefix in the element-list file. + */ + public static final String MODULE_PREFIX = "module:"; + + /** * The default package file name. */ public static final String DEFAULT_PACKAGE_FILE_NAME = "default";
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/ElementListWriter.java Wed Dec 13 12:45:06 2017 -0800 @@ -0,0 +1,102 @@ +/* + * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.javadoc.internal.doclets.toolkit.util; + +import java.io.*; + +import javax.lang.model.element.ModuleElement; +import javax.lang.model.element.PackageElement; + +import jdk.javadoc.doclet.DocletEnvironment; +import jdk.javadoc.internal.doclets.toolkit.BaseConfiguration; + + +/** + * Write out the element index. + * + * <p><b>This is NOT part of any supported API. + * If you write code that depends on this, you do so at your own risk. + * This code and its internal interfaces are subject to change or + * deletion without notice.</b> + * + * @author Atul M Dambalkar + */ +public class ElementListWriter { + + private final BaseConfiguration configuration; + private final Utils utils; + private final DocFile file; + + /** + * Constructor. + * + * @param configuration the current configuration of the doclet. + */ + public ElementListWriter(BaseConfiguration configuration) { + file = DocFile.createFileForOutput(configuration, DocPaths.ELEMENT_LIST); + this.configuration = configuration; + this.utils = configuration.utils; + } + + /** + * Generate the element index. + * + * @param configuration the current configuration of the doclet. + * @throws DocFileIOException if there is a problem writing the output + */ + public static void generate(BaseConfiguration configuration) throws DocFileIOException { + ElementListWriter elemgen = new ElementListWriter(configuration); + elemgen.generateElementListFile(configuration.docEnv); + } + + protected void generateElementListFile(DocletEnvironment docEnv) throws DocFileIOException { + try (BufferedWriter out = new BufferedWriter(file.openWriter())) { + if (configuration.showModules) { + for (ModuleElement mdle : configuration.modulePackages.keySet()) { + if (!(configuration.nodeprecated && utils.isDeprecated(mdle))) { + out.write(DocletConstants.MODULE_PREFIX + mdle.toString()); + out.newLine(); + for (PackageElement pkg : configuration.modulePackages.get(mdle)) { + out.write(pkg.toString()); + out.newLine(); + } + } + } + } else { + for (PackageElement pkg : configuration.packages) { + // if the -nodeprecated option is set and the package is marked as + // deprecated, do not include it in the packages list. + if (!(configuration.nodeprecated && utils.isDeprecated(pkg))) { + out.write(pkg.toString()); + out.newLine(); + } + } + } + } catch (IOException e) { + throw new DocFileIOException(file, DocFileIOException.Mode.WRITE, e); + } + } +}
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Extern.java Wed Dec 13 21:25:49 2017 +0100 +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Extern.java Wed Dec 13 12:45:06 2017 -0800 @@ -56,10 +56,10 @@ public class Extern { /** - * Map package names onto Extern Item objects. + * Map element names onto Extern Item objects. * Lazily initialized. */ - private Map<String, Item> packageToItemMap; + private Map<String, Item> elementToItemMap; /** * The global configuration information for this run. @@ -77,12 +77,12 @@ private class Item { /** - * Package name, found in the "package-list" file in the {@link path}. + * Element name, found in the "element-list" file in the {@link path}. */ - final String packageName; + final String elementName; /** - * The URL or the directory path at which the package documentation will be + * The URL or the directory path at which the element documentation will be * avaliable. */ final String path; @@ -93,33 +93,40 @@ final boolean relative; /** - * Constructor to build a Extern Item object and map it with the package name. - * If the same package name is found in the map, then the first mapped + * If the item is a module then true else if it is a package then false. + */ + boolean isModule = false; + + /** + * Constructor to build a Extern Item object and map it with the element name. + * If the same element name is found in the map, then the first mapped * Item object or offline location will be retained. * - * @param packageName Package name found in the "package-list" file. - * @param path URL or Directory path from where the "package-list" + * @param elementName Element name found in the "element-list" file. + * @param path URL or Directory path from where the "element-list" * file is picked. * @param relative True if path is URL, false if directory path. + * @param isModule True if the item is a module. False if it is a package. */ - Item(String packageName, String path, boolean relative) { - this.packageName = packageName; + Item(String elementName, String path, boolean relative, boolean isModule) { + this.elementName = elementName; this.path = path; this.relative = relative; - if (packageToItemMap == null) { - packageToItemMap = new HashMap<>(); + this.isModule = isModule; + if (elementToItemMap == null) { + elementToItemMap = new HashMap<>(); } - if (!packageToItemMap.containsKey(packageName)) { // save the previous - packageToItemMap.put(packageName, this); // mapped location + if (!elementToItemMap.containsKey(elementName)) { // save the previous + elementToItemMap.put(elementName, this); // mapped location } } /** - * String representation of "this" with packagename and the path. + * String representation of "this" with elementname and the path. */ @Override public String toString() { - return packageName + (relative? " -> " : " => ") + path; + return elementName + (relative? " -> " : " => ") + path; } } @@ -134,31 +141,42 @@ * @return true if the element is externally documented */ public boolean isExternal(Element element) { - if (packageToItemMap == null) { + if (elementToItemMap == null) { return false; } PackageElement pe = configuration.utils.containingPackage(element); if (pe.isUnnamed()) { return false; } - return packageToItemMap.get(configuration.utils.getPackageName(pe)) != null; + return elementToItemMap.get(configuration.utils.getPackageName(pe)) != null; + } + + /** + * Determine if a element item is a module or not. + * + * @param elementName name of the element. + * @return true if the element is a module + */ + public boolean isModule(String elementName) { + Item elem = findElementItem(elementName); + return (elem == null) ? false : elem.isModule; } /** * Convert a link to be an external link if appropriate. * - * @param pkgName The package name. + * @param elemName The element name. * @param relativepath The relative path. * @param filename The link to convert. * @return if external return converted link else return null */ - public DocLink getExternalLink(String pkgName, DocPath relativepath, String filename) { - return getExternalLink(pkgName, relativepath, filename, null); + public DocLink getExternalLink(String elemName, DocPath relativepath, String filename) { + return getExternalLink(elemName, relativepath, filename, null); } - public DocLink getExternalLink(String pkgName, DocPath relativepath, String filename, + public DocLink getExternalLink(String elemName, DocPath relativepath, String filename, String memberName) { - Item fnd = findPackageItem(pkgName); + Item fnd = findElementItem(elemName); if (fnd == null) return null; @@ -170,56 +188,56 @@ } /** - * Build the extern package list from given URL or the directory path, + * Build the extern element list from given URL or the directory path, * as specified with the "-link" flag. * Flag error if the "-link" or "-linkoffline" option is already used. * * @param url URL or Directory path. * @param reporter The <code>DocErrorReporter</code> used to report errors. * @return true if successful, false otherwise - * @throws DocFileIOException if there is a problem reading a package list file + * @throws DocFileIOException if there is a problem reading a element list file */ public boolean link(String url, Reporter reporter) throws DocFileIOException { return link(url, url, reporter, false); } /** - * Build the extern package list from given URL or the directory path, + * Build the extern element list from given URL or the directory path, * as specified with the "-linkoffline" flag. * Flag error if the "-link" or "-linkoffline" option is already used. * * @param url URL or Directory path. - * @param pkglisturl This can be another URL for "package-list" or ordinary + * @param elemlisturl This can be another URL for "element-list" or ordinary * file. * @param reporter The <code>DocErrorReporter</code> used to report errors. * @return true if successful, false otherwise - * @throws DocFileIOException if there is a problem reading a package list file + * @throws DocFileIOException if there is a problem reading the element list file */ - public boolean link(String url, String pkglisturl, Reporter reporter) throws DocFileIOException { - return link(url, pkglisturl, reporter, true); + public boolean link(String url, String elemlisturl, Reporter reporter) throws DocFileIOException { + return link(url, elemlisturl, reporter, true); } /* - * Build the extern package list from given URL or the directory path. + * Build the extern element list from given URL or the directory path. * Flag error if the "-link" or "-linkoffline" option is already used. * * @param url URL or Directory path. - * @param pkglisturl This can be another URL for "package-list" or ordinary + * @param elemlisturl This can be another URL for "element-list" or ordinary * file. * @param reporter The <code>DocErrorReporter</code> used to report errors. * @param linkoffline True if -linkoffline is used and false if -link is used. * @return true if successful, false otherwise - * @throws DocFileIOException if there is a problem reading a package list file + * @throws DocFileIOException if there is a problem reading the element list file */ - private boolean link(String url, String pkglisturl, Reporter reporter, boolean linkoffline) + private boolean link(String url, String elemlisturl, Reporter reporter, boolean linkoffline) throws DocFileIOException { this.linkoffline = linkoffline; try { url = adjustEndFileSeparator(url); - if (isUrl(pkglisturl)) { - readPackageListFromURL(url, toURL(adjustEndFileSeparator(pkglisturl))); + if (isUrl(elemlisturl)) { + readElementListFromURL(url, toURL(adjustEndFileSeparator(elemlisturl))); } else { - readPackageListFromFile(url, DocFile.createFileForInput(configuration, pkglisturl)); + readElementListFromFile(url, DocFile.createFileForInput(configuration, elemlisturl)); } return true; } catch (Fault f) { @@ -245,15 +263,15 @@ } /** - * Get the Extern Item object associated with this package name. + * Get the Extern Item object associated with this element name. * - * @param pkgName Package name. + * @param elemName Element name. */ - private Item findPackageItem(String pkgName) { - if (packageToItemMap == null) { + private Item findElementItem(String elemName) { + if (elementToItemMap == null) { return null; } - return packageToItemMap.get(pkgName); + return elementToItemMap.get(elemName); } /** @@ -264,42 +282,75 @@ } /** + * Fetch the URL and read the "element-list" file. + * + * @param urlpath Path to the elements. + * @param elemlisturlpath URL or the path to the "element-list" file. + */ + private void readElementListFromURL(String urlpath, URL elemlisturlpath) throws Fault { + try { + URL link = elemlisturlpath.toURI().resolve(DocPaths.ELEMENT_LIST.getPath()).toURL(); + readElementList(link.openStream(), urlpath, false); + } catch (URISyntaxException | MalformedURLException exc) { + throw new Fault(configuration.getText("doclet.MalformedURL", elemlisturlpath.toString()), exc); + } catch (IOException exc) { + readAlternateURL(urlpath, elemlisturlpath); + } + } + + /** * Fetch the URL and read the "package-list" file. * * @param urlpath Path to the packages. - * @param pkglisturlpath URL or the path to the "package-list" file. + * @param elemlisturlpath URL or the path to the "package-list" file. */ - private void readPackageListFromURL(String urlpath, URL pkglisturlpath) throws Fault { + private void readAlternateURL(String urlpath, URL elemlisturlpath) throws Fault { try { - URL link = pkglisturlpath.toURI().resolve(DocPaths.PACKAGE_LIST.getPath()).toURL(); - readPackageList(link.openStream(), urlpath, false); + URL link = elemlisturlpath.toURI().resolve(DocPaths.PACKAGE_LIST.getPath()).toURL(); + readElementList(link.openStream(), urlpath, false); } catch (URISyntaxException | MalformedURLException exc) { - throw new Fault(configuration.getText("doclet.MalformedURL", pkglisturlpath.toString()), exc); + throw new Fault(configuration.getText("doclet.MalformedURL", elemlisturlpath.toString()), exc); } catch (IOException exc) { - throw new Fault(configuration.getText("doclet.URL_error", pkglisturlpath.toString()), exc); + throw new Fault(configuration.getText("doclet.URL_error", elemlisturlpath.toString()), exc); } } /** - * Read the "package-list" file which is available locally. + * Read the "element-list" file which is available locally. * - * @param path URL or directory path to the packages. - * @param pkgListPath Path to the local "package-list" file. + * @param path URL or directory path to the elements. + * @param elemListPath Path to the local "element-list" file. * @throws Fault if an error occurs that can be treated as a warning - * @throws DocFileIOException if there is a problem opening the package list file + * @throws DocFileIOException if there is a problem opening the element list file */ - private void readPackageListFromFile(String path, DocFile pkgListPath) + private void readElementListFromFile(String path, DocFile elemListPath) throws Fault, DocFileIOException { - DocFile file = pkgListPath.resolve(DocPaths.PACKAGE_LIST); + DocFile file = elemListPath.resolve(DocPaths.ELEMENT_LIST); if (! (file.isAbsolute() || linkoffline)){ file = file.resolveAgainst(DocumentationTool.Location.DOCUMENTATION_OUTPUT); } + if (file.exists()) { + readElementList(file, path); + } else { + DocFile file1 = elemListPath.resolve(DocPaths.PACKAGE_LIST); + if (!(file1.isAbsolute() || linkoffline)) { + file1 = file1.resolveAgainst(DocumentationTool.Location.DOCUMENTATION_OUTPUT); + } + if (file1.exists()) { + readElementList(file1, path); + } else { + throw new Fault(configuration.getText("doclet.File_error", file.getPath()), null); + } + } + } + + private void readElementList(DocFile file, String path) throws Fault, DocFileIOException { try { - if (file.exists() && file.canRead()) { - boolean pathIsRelative = - !isUrl(path) + if (file.canRead()) { + boolean pathIsRelative + = !isUrl(path) && !DocFile.createFileForInput(configuration, path).isAbsolute(); - readPackageList(file.openInputStream(), path, pathIsRelative); + readElementList(file.openInputStream(), path, pathIsRelative); } else { throw new Fault(configuration.getText("doclet.File_error", file.getPath()), null); } @@ -309,33 +360,32 @@ } /** - * Read the file "package-list" and for each package name found, create - * Extern object and associate it with the package name in the map. + * Read the file "element-list" and for each element name found, create + * Extern object and associate it with the element name in the map. * - * @param input InputStream from the "package-list" file. - * @param path URL or the directory path to the packages. + * @param input InputStream from the "element-list" file. + * @param path URL or the directory path to the elements. * @param relative Is path relative? * @throws IOException if there is a problem reading or closing the stream */ - private void readPackageList(InputStream input, String path, boolean relative) + private void readElementList(InputStream input, String path, boolean relative) throws IOException { try (BufferedReader in = new BufferedReader(new InputStreamReader(input))) { - StringBuilder strbuf = new StringBuilder(); - int c; - while ((c = in.read()) >= 0) { - char ch = (char) c; - if (ch == '\n' || ch == '\r') { - if (strbuf.length() > 0) { - String packname = strbuf.toString(); - String packpath = path - + packname.replace('.', '/') + '/'; - Item ignore = new Item(packname, packpath, relative); - strbuf.setLength(0); + in.lines().forEach((elemname) -> { + if (elemname.length() > 0) { + boolean module; + String elempath; + if (elemname.startsWith(DocletConstants.MODULE_PREFIX)) { + elemname = elemname.replace(DocletConstants.MODULE_PREFIX, ""); + elempath = path; + module = true; + } else { + elempath = path + elemname.replace('.', '/') + '/'; + module = false; } - } else { - strbuf.append(ch); + Item ignore = new Item(elemname, elempath, relative, module); } - } + }); } }
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/PackageListWriter.java Wed Dec 13 21:25:49 2017 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,88 +0,0 @@ -/* - * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package jdk.javadoc.internal.doclets.toolkit.util; - -import java.io.*; - -import javax.lang.model.element.PackageElement; - -import jdk.javadoc.doclet.DocletEnvironment; -import jdk.javadoc.internal.doclets.toolkit.BaseConfiguration; - - -/** - * Write out the package index. - * - * <p><b>This is NOT part of any supported API. - * If you write code that depends on this, you do so at your own risk. - * This code and its internal interfaces are subject to change or - * deletion without notice.</b> - * - * @author Atul M Dambalkar - */ -public class PackageListWriter { - - private final BaseConfiguration configuration; - private final Utils utils; - private final DocFile file; - - /** - * Constructor. - * - * @param configuration the current configuration of the doclet. - */ - public PackageListWriter(BaseConfiguration configuration) { - file = DocFile.createFileForOutput(configuration, DocPaths.PACKAGE_LIST); - this.configuration = configuration; - this.utils = configuration.utils; - } - - /** - * Generate the package index. - * - * @param configuration the current configuration of the doclet. - * @throws DocFileIOException if there is a problem writing the output - */ - public static void generate(BaseConfiguration configuration) throws DocFileIOException { - PackageListWriter packgen = new PackageListWriter(configuration); - packgen.generatePackageListFile(configuration.docEnv); - } - - protected void generatePackageListFile(DocletEnvironment docEnv) throws DocFileIOException { - try (BufferedWriter out = new BufferedWriter(file.openWriter())) { - for (PackageElement pkg : configuration.packages) { - // if the -nodeprecated option is set and the package is marked as - // deprecated, do not include it in the packages list. - if (!(configuration.nodeprecated && utils.isDeprecated(pkg))) { - out.write(pkg.toString()); - out.newLine(); - } - } - } catch (IOException e) { - throw new DocFileIOException(file, DocFileIOException.Mode.WRITE, e); - } - } -}
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Utils.java Wed Dec 13 21:25:49 2017 +0100 +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Utils.java Wed Dec 13 12:45:06 2017 -0800 @@ -2673,7 +2673,8 @@ } /** - * package name, an unnamed package is returned as <Unnamed> + * Get the package name for a given package element. An unnamed package is returned as <Unnamed> + * * @param pkg * @return */ @@ -2684,6 +2685,19 @@ return pkg.getQualifiedName().toString(); } + /** + * Get the module name for a given module element. An unnamed module is returned as <Unnamed> + * + * @param mdle a ModuleElement + * @return + */ + public String getModuleName(ModuleElement mdle) { + if (mdle == null || mdle.isUnnamed()) { + return DocletConstants.DEFAULT_ELEMENT_NAME; + } + return mdle.getQualifiedName().toString(); + } + public boolean isAttribute(DocTree doctree) { return isKind(doctree, ATTRIBUTE); }
--- a/test/langtools/jdk/javadoc/doclet/testClassCrossReferences/TestClassCrossReferences.java Wed Dec 13 21:25:49 2017 +0100 +++ b/test/langtools/jdk/javadoc/doclet/testClassCrossReferences/TestClassCrossReferences.java Wed Dec 13 12:45:06 2017 -0800 @@ -23,7 +23,7 @@ /* * @test - * @bug 4652655 4857717 8025633 8026567 8071982 + * @bug 4652655 4857717 8025633 8026567 8071982 8164407 * @summary This test verifies that class cross references work properly. * @author jamieh * @library ../lib @@ -52,16 +52,16 @@ checkExit(Exit.OK); checkOutput("C.html", true, - "<a href=\"" + uri + "java/math/package-summary.html?is-external=true\">" + "<a href=\"" + uri + "java/math/package-summary.html?is-external=true\" class=\"externalLink\">" + "<code>Link to math package</code></a>", "<a href=\"" + uri + "javax/swing/text/AbstractDocument.AttributeContext.html?is-external=true\" " - + "title=\"class or interface in javax.swing.text\"><code>Link to AttributeContext innerclass</code></a>", + + "title=\"class or interface in javax.swing.text\" class=\"externalLink\"><code>Link to AttributeContext innerclass</code></a>", "<a href=\"" + uri + "java/math/BigDecimal.html?is-external=true\" " - + "title=\"class or interface in java.math\"><code>Link to external class BigDecimal</code></a>", + + "title=\"class or interface in java.math\" class=\"externalLink\"><code>Link to external class BigDecimal</code></a>", "<a href=\"" + uri + "java/math/BigInteger.html?is-external=true#gcd-java.math.BigInteger-\" " - + "title=\"class or interface in java.math\"><code>Link to external member gcd</code></a>", + + "title=\"class or interface in java.math\" class=\"externalLink\"><code>Link to external member gcd</code></a>", "<a href=\"" + uri + "javax/tools/SimpleJavaFileObject.html?is-external=true#URI\" " - + "title=\"class or interface in javax.tools\"><code>Link to external member URI</code></a>", + + "title=\"class or interface in javax.tools\" class=\"externalLink\"><code>Link to external member URI</code></a>", "<dl>\n" + "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" + "<dd><code>toString</code> in class <code>java.lang.Object</code></dd>\n"
--- a/test/langtools/jdk/javadoc/doclet/testDocRootInlineTag/TestDocRootInlineTag.java Wed Dec 13 21:25:49 2017 +0100 +++ b/test/langtools/jdk/javadoc/doclet/testDocRootInlineTag/TestDocRootInlineTag.java Wed Dec 13 12:45:06 2017 -0800 @@ -23,7 +23,7 @@ /* * @test - * @bug 4369014 4851991 + * @bug 4369014 4851991 8164407 * @summary Determine if the docRoot inline tag works properly. * If docRoot performs as documented, the test passes. * Make sure that the docRoot tag works with the -bottom option. @@ -54,10 +54,10 @@ checkOutput("TestDocRootTag.html", true, "<a href=\"" + uri + "/java/io/File.html?is-external=true\" " - + "title=\"class or interface in java.io\"><code>File</code></a>", + + "title=\"class or interface in java.io\" class=\"externalLink\"><code>File</code></a>", "<a href=\"./glossary.html\">glossary</a>", "<a href=\"" + uri + "/java/io/File.html?is-external=true\" " - + "title=\"class or interface in java.io\"><code>Second File Link</code></a>", + + "title=\"class or interface in java.io\" class=\"externalLink\"><code>Second File Link</code></a>", "The value of @docRoot is \"./\""); checkOutput("index-all.html", true,
--- a/test/langtools/jdk/javadoc/doclet/testExternalOverridenMethod/TestExternalOverridenMethod.java Wed Dec 13 21:25:49 2017 +0100 +++ b/test/langtools/jdk/javadoc/doclet/testExternalOverridenMethod/TestExternalOverridenMethod.java Wed Dec 13 12:45:06 2017 -0800 @@ -23,7 +23,7 @@ /* * @test - * @bug 4857717 8025633 8026567 + * @bug 4857717 8025633 8026567 8164407 * @summary Test to make sure that externally overriden and implemented methods * are documented properly. The method should still include "implements" or * "overrides" documentation even though the method is external. @@ -53,14 +53,14 @@ checkOutput("pkg/XReader.html", true, "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" + "<dd><code><a href=\"" + uri + "/java/io/FilterReader.html?is-external=true#read--\" " - + "title=\"class or interface in java.io\">read</a></code> in class <code>" + + "title=\"class or interface in java.io\" class=\"externalLink\">read</a></code> in class <code>" + "<a href=\"" + uri + "/java/io/FilterReader.html?is-external=true\" " - + "title=\"class or interface in java.io\">FilterReader</a></code></dd>", + + "title=\"class or interface in java.io\" class=\"externalLink\">FilterReader</a></code></dd>", "<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n" + "<dd><code><a href=\"" + uri + "/java/io/DataInput.html?is-external=true#readInt--\" " - + "title=\"class or interface in java.io\">readInt</a></code> in interface <code>" + + "title=\"class or interface in java.io\" class=\"externalLink\">readInt</a></code> in interface <code>" + "<a href=\"" + uri + "/java/io/DataInput.html?is-external=true\" " - + "title=\"class or interface in java.io\">DataInput</a></code></dd>" + + "title=\"class or interface in java.io\" class=\"externalLink\">DataInput</a></code></dd>" ); } }
--- a/test/langtools/jdk/javadoc/doclet/testLinkOption/TestLinkOption.java Wed Dec 13 21:25:49 2017 +0100 +++ b/test/langtools/jdk/javadoc/doclet/testLinkOption/TestLinkOption.java Wed Dec 13 12:45:06 2017 -0800 @@ -23,7 +23,7 @@ /* * @test - * @bug 4720957 5020118 8026567 8038976 8184969 + * @bug 4720957 5020118 8026567 8038976 8184969 8164407 * @summary Test to make sure that -link and -linkoffline link to * right files, and URLs with and without trailing slash are accepted. * @author jamieh @@ -70,26 +70,26 @@ checkOutput("pkg/C.html", true, "<a href=\"" + url + "java/lang/String.html?is-external=true\" " - + "title=\"class or interface in java.lang\"><code>Link to String Class</code></a>", + + "title=\"class or interface in java.lang\" class=\"externalLink\"><code>Link to String Class</code></a>", //Make sure the parameters are indented properly when the -link option is used. "(int p1,\n" + " int p2,\n" + " int p3)", "(int p1,\n" + " int p2,\n" - + " <a href=\"" + url + "java/lang/Object.html?is-external=true\" title=\"class or interface in java.lang\">" + + " <a href=\"" + url + "java/lang/Object.html?is-external=true\" title=\"class or interface in java.lang\" class=\"externalLink\">" + "Object</a> p3)"); checkOutput("pkg/B.html", true, "<div class=\"block\">A method with html tag the method " + "<a href=\"" + url + "java/lang/ClassLoader.html?is-external=true#getSystemClassLoader--\"" - + " title=\"class or interface in java.lang\"><code><tt>getSystemClassLoader()</tt>" + + " title=\"class or interface in java.lang\" class=\"externalLink\"><code><tt>getSystemClassLoader()</tt>" + "</code></a> as the parent class loader.</div>", "<div class=\"block\">is equivalent to invoking <code>" + "<a href=\"../pkg/B.html#createTempFile-java.lang.String-java.lang.String-java.io.File-\">" + "<code>createTempFile(prefix, suffix, null)</code></a></code>.</div>", "<a href=\"" + url + "java/lang/String.html?is-external=true\" " - + "title=\"class or interface in java.lang\">Link-Plain to String Class</a>", + + "title=\"class or interface in java.lang\" class=\"externalLink\">Link-Plain to String Class</a>", "<code><tt>getSystemClassLoader()</tt></code>", "<code>createTempFile(prefix, suffix, null)</code>", "<dd><a href=\"http://www.ietf.org/rfc/rfc2279.txt\"><i>RFC 2279: UTF-8, a\n" + @@ -106,7 +106,7 @@ checkOutput("mylib/lang/StringBuilderChild.html", true, "<pre>public abstract class <span class=\"typeNameLabel\">StringBuilderChild</span>\n" + "extends <a href=\"" + url + "java/lang/Object.html?is-external=true\" " - + "title=\"class or interface in java.lang\">Object</a></pre>" + + "title=\"class or interface in java.lang\" class=\"externalLink\">Object</a></pre>" ); // Generate the documentation using -linkoffline and a relative path as the first parameter. @@ -120,7 +120,7 @@ checkExit(Exit.OK); checkOutput("pkg2/C2.html", true, "This is a link to <a href=\"../../" + out1 + "/pkg/C.html?is-external=true\" " + - "title=\"class or interface in pkg\"><code>Class C</code></a>." + "title=\"class or interface in pkg\" class=\"externalLink\"><code>Class C</code></a>." ); String out3 = "out3"; @@ -149,10 +149,10 @@ + "<div class=\"block\">Test links.\n" + " <br>\n" + " <a href=\"../../out2/pkg2/C2.html?is-external=true\" " - + "title=\"class or interface in pkg2\"><code>link to pkg2.C2</code></a>\n" + + "title=\"class or interface in pkg2\" class=\"externalLink\"><code>link to pkg2.C2</code></a>\n" + " <br>\n" + " <a href=\"../../out1/mylib/lang/StringBuilderChild.html?is-external=true\" " - + "title=\"class or interface in mylib.lang\">" + + "title=\"class or interface in mylib.lang\" class=\"externalLink\">" + "<code>link to mylib.lang.StringBuilderChild</code></a>.</div>\n" ); @@ -169,10 +169,10 @@ + "<div class=\"block\">Test links.\n" + " <br>\n" + " <a href=\"../../copy/out2/pkg2/C2.html?is-external=true\" " - + "title=\"class or interface in pkg2\"><code>link to pkg2.C2</code></a>\n" + + "title=\"class or interface in pkg2\" class=\"externalLink\"><code>link to pkg2.C2</code></a>\n" + " <br>\n" + " <a href=\"../../copy/out1/mylib/lang/StringBuilderChild.html?is-external=true\" " - + "title=\"class or interface in mylib.lang\">" + + "title=\"class or interface in mylib.lang\" class=\"externalLink\">" + "<code>link to mylib.lang.StringBuilderChild</code></a>.</div>\n" ); }
--- a/test/langtools/jdk/javadoc/doclet/testModules/TestModules.java Wed Dec 13 21:25:49 2017 +0100 +++ b/test/langtools/jdk/javadoc/doclet/testModules/TestModules.java Wed Dec 13 12:45:06 2017 -0800 @@ -26,6 +26,7 @@ * @bug 8154119 8154262 8156077 8157987 8154261 8154817 8135291 8155995 8162363 * 8168766 8168688 8162674 8160196 8175799 8174974 8176778 8177562 8175218 * 8175823 8166306 8178043 8181622 8183511 8169819 8074407 8183037 8191464 + 8164407 * @summary Test modules support in javadoc. * @author bpatel * @library ../lib @@ -45,7 +46,7 @@ */ @Test void testHtml4() { - javadoc("-d", "out", "-use", + javadoc("-d", "out", "-use", "-Xdoclint:none", "-overview", testSrc("overview.html"), "--module-source-path", testSrc, "--module", "moduleA,moduleB", @@ -67,7 +68,7 @@ */ @Test void testHtml5() { - javadoc("-d", "out-html5", "-html5", "-use", + javadoc("-d", "out-html5", "-html5", "-use", "-Xdoclint:none", "-overview", testSrc("overview.html"), "--module-source-path", testSrc, "--module", "moduleA,moduleB", @@ -89,7 +90,7 @@ */ @Test void testHtml4NoComment() { - javadoc("-d", "out-nocomment", "-nocomment", "-use", + javadoc("-d", "out-nocomment", "-nocomment", "-use", "-Xdoclint:none", "-overview", testSrc("overview.html"), "--module-source-path", testSrc, "--module", "moduleA,moduleB", @@ -107,7 +108,7 @@ */ @Test void testHtml5NoComment() { - javadoc("-d", "out-html5-nocomment", "-nocomment", "-html5", "-use", + javadoc("-d", "out-html5-nocomment", "-nocomment", "-html5", "-use", "-Xdoclint:none", "-overview", testSrc("overview.html"), "--module-source-path", testSrc, "--module", "moduleA,moduleB", @@ -158,7 +159,7 @@ */ @Test void testJDTagsInModules() { - javadoc("-d", "out-mdltags", "-author", "-version", + javadoc("-d", "out-mdltags", "-author", "-version", "-Xdoclint:none", "-tag", "regular:a:Regular Tag:", "-tag", "moduletag:s:Module Tag:", "--module-source-path", testSrc, @@ -173,7 +174,7 @@ */ @Test void testModuleSummary() { - javadoc("-d", "out-moduleSummary", "-use", + javadoc("-d", "out-moduleSummary", "-use", "-Xdoclint:none", "--module-source-path", testSrc, "--module", "moduleA,moduleB", "testpkgmdlA", "testpkgmdlB", "moduleB/testpkg2mdlB"); @@ -200,7 +201,7 @@ */ @Test void testModuleFilesAndLinks() { - javadoc("-d", "out-modulelinks", + javadoc("-d", "out-modulelinks", "-Xdoclint:none", "--module-source-path", testSrc, "--module", "moduleA,moduleB", "testpkgmdlA", "testpkgmdlB"); @@ -214,7 +215,7 @@ */ @Test void testModuleDeprecation() { - javadoc("-d", "out-moduledepr", + javadoc("-d", "out-moduledepr", "-Xdoclint:none", "-tag", "regular:a:Regular Tag:", "-tag", "moduletag:s:Module Tag:", "--module-source-path", testSrc, @@ -229,7 +230,7 @@ */ @Test void testModuleAnnotation() { - javadoc("-d", "out-moduleanno", + javadoc("-d", "out-moduleanno", "-Xdoclint:none", "--module-source-path", testSrc, "--module", "moduleA,moduleB", "testpkgmdlA", "testpkgmdlB"); @@ -242,7 +243,7 @@ */ @Test void testApiMode() { - javadoc("-d", "out-api", "-use", "--show-module-contents=api", "-author", "-version", + javadoc("-d", "out-api", "-use", "--show-module-contents=api", "-author", "-version", "-Xdoclint:none", "-tag", "regular:a:Regular Tag:", "-tag", "moduletag:s:Module Tag:", "--module-source-path", testSrc, @@ -261,7 +262,7 @@ */ @Test void testAllMode() { - javadoc("-d", "out-all", "-use", "--show-module-contents=all", "-author", "-version", + javadoc("-d", "out-all", "-use", "--show-module-contents=all", "-author", "-version", "-Xdoclint:none", "-tag", "regular:a:Regular Tag:", "-tag", "moduletag:s:Module Tag:", "--module-source-path", testSrc, @@ -319,7 +320,7 @@ */ @Test void testSingleModuleMultiplePkg() { - javadoc("-d", "out-singlemodmultiplepkg", "--show-module-contents=all", + javadoc("-d", "out-singlemodmultiplepkg", "--show-module-contents=all", "-Xdoclint:none", "--module-source-path", testSrc, "--module", "moduleB", "testpkg2mdlB", "testpkgmdlB"); @@ -332,7 +333,7 @@ */ @Test void testGroupOption() { - javadoc("-d", "out-group", "--show-module-contents=all", + javadoc("-d", "out-group", "--show-module-contents=all", "-Xdoclint:none", "-tag", "regular:a:Regular Tag:", "-tag", "moduletag:s:Module Tag:", "--module-source-path", testSrc, @@ -353,7 +354,7 @@ */ @Test void testGroupOptionOrdering() { - javadoc("-d", "out-groupOrder", "--show-module-contents=all", + javadoc("-d", "out-groupOrder", "--show-module-contents=all", "-Xdoclint:none", "-tag", "regular:a:Regular Tag:", "-tag", "moduletag:s:Module Tag:", "--module-source-path", testSrc, @@ -373,7 +374,7 @@ */ @Test void testUnnamedModuleGroupOption() { - javadoc("-d", "out-groupnomodule", "-use", + javadoc("-d", "out-groupnomodule", "-use", "-Xdoclint:none", "-overview", testSrc("overview.html"), "-sourcepath", testSrc, "-group", "Package Group 0", "testpkgnomodule", @@ -390,7 +391,7 @@ */ @Test void testGroupOptionPackageOrdering() { - javadoc("-d", "out-groupPkgOrder", "-use", + javadoc("-d", "out-groupPkgOrder", "-use", "-Xdoclint:none", "-overview", testSrc("overview.html"), "-sourcepath", testSrc, "-group", "Z Group", "testpkgnomodule", @@ -405,7 +406,7 @@ */ @Test void testGroupOptionSingleModule() { - javadoc("-d", "out-groupsinglemodule", "-use", + javadoc("-d", "out-groupsinglemodule", "-use", "-Xdoclint:none", "--module-source-path", testSrc, "-group", "Module Group B", "moduleB*", "--module", "moduleB", @@ -419,7 +420,7 @@ */ @Test void testModuleName() { - javadoc("-d", "out-modulename", "-use", + javadoc("-d", "out-modulename", "-use", "-Xdoclint:none", "--module-source-path", testSrc, "--module", "moduleB,test.moduleFullName", "testpkg2mdlB", "testpkgmdlB", "testpkgmdlfullname"); @@ -427,6 +428,21 @@ checkModuleName(true); } + /** + * Test -linkoffline option. + */ + @Test + void testLinkOffline() { + String url = "https://docs.oracle.com/javase/9/docs/api/"; + javadoc("-d", "out-linkoffline", "-use", "--show-module-contents=all", "-Xdoclint:none", + "--module-source-path", testSrc, + "--module", "moduleA,moduleB", + "-linkoffline", url, testSrc + "/jdk", + "testpkgmdlA", "testpkgmdlB", "testpkg3mdlB"); + checkExit(Exit.OK); + checkLinkOffline(); + } + void checkDescription(boolean found) { checkOutput("moduleA-summary.html", found, "<!-- ============ MODULE DESCRIPTION =========== -->\n" @@ -1205,4 +1221,16 @@ + "</dd>\n" + "</dl>"); } + + void checkLinkOffline() { + checkOutput("testpkg3mdlB/package-summary.html", true, + "<a href=\"https://docs.oracle.com/javase/9/docs/api/java/lang/String.html?is-external=true\" " + + "title=\"class or interface in java.lang\" class=\"externalLink\"><code>Link to String Class</code></a>"); + checkOutput("testpkg3mdlB/package-summary.html", true, + "<a href=\"https://docs.oracle.com/javase/9/docs/api/java/lang/package-summary.html?is-external=true\" " + + "class=\"externalLink\"><code>Link to java.lang package</code></a>"); + checkOutput("testpkg3mdlB/package-summary.html", true, + "<a href=\"https://docs.oracle.com/javase/9/docs/api/java.base-summary.html?is-external=true\" " + + "class=\"externalLink\"><code>Link to java.base module</code></a>"); } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/langtools/jdk/javadoc/doclet/testModules/jdk/element-list Wed Dec 13 12:45:06 2017 -0800 @@ -0,0 +1,343 @@ +module:java.activation +javax.activation +module:java.base +java.io +java.lang +java.lang.annotation +java.lang.invoke +java.lang.module +java.lang.ref +java.lang.reflect +java.math +java.net +java.net.spi +java.nio +java.nio.channels +java.nio.channels.spi +java.nio.charset +java.nio.charset.spi +java.nio.file +java.nio.file.attribute +java.nio.file.spi +java.security +java.security.acl +java.security.cert +java.security.interfaces +java.security.spec +java.text +java.text.spi +java.time +java.time.chrono +java.time.format +java.time.temporal +java.time.zone +java.util +java.util.concurrent +java.util.concurrent.atomic +java.util.concurrent.locks +java.util.function +java.util.jar +java.util.regex +java.util.spi +java.util.stream +java.util.zip +javax.crypto +javax.crypto.interfaces +javax.crypto.spec +javax.net +javax.net.ssl +javax.security.auth +javax.security.auth.callback +javax.security.auth.login +javax.security.auth.spi +javax.security.auth.x500 +javax.security.cert +module:java.compiler +javax.annotation.processing +javax.lang.model +javax.lang.model.element +javax.lang.model.type +javax.lang.model.util +javax.tools +module:java.corba +javax.activity +javax.rmi +javax.rmi.CORBA +org.omg.CORBA +org.omg.CORBA_2_3 +org.omg.CORBA_2_3.portable +org.omg.CORBA.DynAnyPackage +org.omg.CORBA.ORBPackage +org.omg.CORBA.portable +org.omg.CORBA.TypeCodePackage +org.omg.CosNaming +org.omg.CosNaming.NamingContextExtPackage +org.omg.CosNaming.NamingContextPackage +org.omg.Dynamic +org.omg.DynamicAny +org.omg.DynamicAny.DynAnyFactoryPackage +org.omg.DynamicAny.DynAnyPackage +org.omg.IOP +org.omg.IOP.CodecFactoryPackage +org.omg.IOP.CodecPackage +org.omg.Messaging +org.omg.PortableInterceptor +org.omg.PortableInterceptor.ORBInitInfoPackage +org.omg.PortableServer +org.omg.PortableServer.CurrentPackage +org.omg.PortableServer.POAManagerPackage +org.omg.PortableServer.POAPackage +org.omg.PortableServer.portable +org.omg.PortableServer.ServantLocatorPackage +org.omg.SendingContext +org.omg.stub.java.rmi +module:java.datatransfer +java.awt.datatransfer +module:java.desktop +java.applet +java.awt +java.awt.color +java.awt.desktop +java.awt.dnd +java.awt.event +java.awt.font +java.awt.geom +java.awt.im +java.awt.im.spi +java.awt.image +java.awt.image.renderable +java.awt.print +java.beans +java.beans.beancontext +javax.accessibility +javax.imageio +javax.imageio.event +javax.imageio.metadata +javax.imageio.plugins.bmp +javax.imageio.plugins.jpeg +javax.imageio.plugins.tiff +javax.imageio.spi +javax.imageio.stream +javax.print +javax.print.attribute +javax.print.attribute.standard +javax.print.event +javax.sound.midi +javax.sound.midi.spi +javax.sound.sampled +javax.sound.sampled.spi +javax.swing +javax.swing.border +javax.swing.colorchooser +javax.swing.event +javax.swing.filechooser +javax.swing.plaf +javax.swing.plaf.basic +javax.swing.plaf.metal +javax.swing.plaf.multi +javax.swing.plaf.nimbus +javax.swing.plaf.synth +javax.swing.table +javax.swing.text +javax.swing.text.html +javax.swing.text.html.parser +javax.swing.text.rtf +javax.swing.tree +javax.swing.undo +module:java.instrument +java.lang.instrument +module:java.logging +java.util.logging +module:java.management +java.lang.management +javax.management +javax.management.loading +javax.management.modelmbean +javax.management.monitor +javax.management.openmbean +javax.management.relation +javax.management.remote +javax.management.timer +module:java.management.rmi +javax.management.remote.rmi +module:java.naming +javax.naming +javax.naming.directory +javax.naming.event +javax.naming.ldap +javax.naming.spi +module:java.prefs +java.util.prefs +module:java.rmi +java.rmi +java.rmi.activation +java.rmi.dgc +java.rmi.registry +java.rmi.server +javax.rmi.ssl +module:java.scripting +javax.script +module:java.se +module:java.se.ee +module:java.security.jgss +javax.security.auth.kerberos +org.ietf.jgss +module:java.security.sasl +javax.security.sasl +module:java.smartcardio +javax.smartcardio +module:java.sql +java.sql +javax.sql +javax.transaction.xa +module:java.sql.rowset +javax.sql.rowset +javax.sql.rowset.serial +javax.sql.rowset.spi +module:java.transaction +javax.transaction +module:java.xml +javax.xml +javax.xml.catalog +javax.xml.datatype +javax.xml.namespace +javax.xml.parsers +javax.xml.stream +javax.xml.stream.events +javax.xml.stream.util +javax.xml.transform +javax.xml.transform.dom +javax.xml.transform.sax +javax.xml.transform.stax +javax.xml.transform.stream +javax.xml.validation +javax.xml.xpath +org.w3c.dom +org.w3c.dom.bootstrap +org.w3c.dom.events +org.w3c.dom.ls +org.w3c.dom.ranges +org.w3c.dom.traversal +org.w3c.dom.views +org.xml.sax +org.xml.sax.ext +org.xml.sax.helpers +module:java.xml.bind +javax.xml.bind +javax.xml.bind.annotation +javax.xml.bind.annotation.adapters +javax.xml.bind.attachment +javax.xml.bind.helpers +javax.xml.bind.util +module:java.xml.crypto +javax.xml.crypto +javax.xml.crypto.dom +javax.xml.crypto.dsig +javax.xml.crypto.dsig.dom +javax.xml.crypto.dsig.keyinfo +javax.xml.crypto.dsig.spec +module:java.xml.ws +javax.jws +javax.jws.soap +javax.xml.soap +javax.xml.ws +javax.xml.ws.handler +javax.xml.ws.handler.soap +javax.xml.ws.http +javax.xml.ws.soap +javax.xml.ws.spi +javax.xml.ws.spi.http +javax.xml.ws.wsaddressing +module:java.xml.ws.annotation +javax.annotation +module:jdk.accessibility +com.sun.java.accessibility.util +module:jdk.attach +com.sun.tools.attach +com.sun.tools.attach.spi +module:jdk.charsets +module:jdk.compiler +com.sun.source.doctree +com.sun.source.tree +com.sun.source.util +com.sun.tools.javac +module:jdk.crypto.cryptoki +module:jdk.crypto.ec +module:jdk.dynalink +jdk.dynalink +jdk.dynalink.beans +jdk.dynalink.linker +jdk.dynalink.linker.support +jdk.dynalink.support +module:jdk.editpad +module:jdk.hotspot.agent +module:jdk.httpserver +com.sun.net.httpserver +com.sun.net.httpserver.spi +module:jdk.incubator.httpclient +jdk.incubator.http +module:jdk.jartool +com.sun.jarsigner +jdk.security.jarsigner +module:jdk.javadoc +com.sun.javadoc +com.sun.tools.javadoc +jdk.javadoc.doclet +module:jdk.jcmd +module:jdk.jconsole +com.sun.tools.jconsole +module:jdk.jdeps +module:jdk.jdi +com.sun.jdi +com.sun.jdi.connect +com.sun.jdi.connect.spi +com.sun.jdi.event +com.sun.jdi.request +module:jdk.jdwp.agent +module:jdk.jfr +jdk.jfr +jdk.jfr.consumer +module:jdk.jlink +module:jdk.jshell +jdk.jshell +jdk.jshell.execution +jdk.jshell.spi +jdk.jshell.tool +module:jdk.jsobject +netscape.javascript +module:jdk.jstatd +module:jdk.localedata +module:jdk.management +com.sun.management +module:jdk.management.agent +module:jdk.management.cmm +jdk.management.cmm +module:jdk.management.jfr +jdk.management.jfr +module:jdk.management.resource +jdk.management.resource +module:jdk.naming.dns +module:jdk.naming.rmi +module:jdk.net +jdk.net +module:jdk.pack +module:jdk.rmic +module:jdk.scripting.nashorn +jdk.nashorn.api.scripting +jdk.nashorn.api.tree +module:jdk.sctp +com.sun.nio.sctp +module:jdk.security.auth +com.sun.security.auth +com.sun.security.auth.callback +com.sun.security.auth.login +com.sun.security.auth.module +module:jdk.security.jgss +com.sun.security.jgss +module:jdk.snmp +module:jdk.xml.dom +org.w3c.dom.css +org.w3c.dom.html +org.w3c.dom.stylesheets +org.w3c.dom.xpath +module:jdk.zipfs
--- a/test/langtools/jdk/javadoc/doclet/testModules/moduleB/module-info.java Wed Dec 13 21:25:49 2017 +0100 +++ b/test/langtools/jdk/javadoc/doclet/testModules/moduleB/module-info.java Wed Dec 13 12:45:06 2017 -0800 @@ -36,6 +36,7 @@ opens testpkgmdlB; exports testpkg2mdlB to moduleA; + exports testpkg3mdlB to moduleA; uses testpkgmdlB.TestClassInModuleB; uses testpkgmdlB.TestClass2InModuleB;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/langtools/jdk/javadoc/doclet/testModules/moduleB/testpkg3mdlB/TestClassLinkOption.java Wed Dec 13 12:45:06 2017 -0800 @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package testpkg3mdlB; + +/** + * {@link java.lang.String Link to String Class}.<br> + * {@link java.lang Link to java.lang package}.<br> + * {@link java.base Link to java.base module}. + * + * @author bhavespa + */ +public class TestClassLinkOption { + public String testMethod() { + return "foo"; + } +}
--- a/test/langtools/jdk/javadoc/doclet/testTitleInHref/TestTitleInHref.java Wed Dec 13 21:25:49 2017 +0100 +++ b/test/langtools/jdk/javadoc/doclet/testTitleInHref/TestTitleInHref.java Wed Dec 13 12:45:06 2017 -0800 @@ -23,7 +23,7 @@ /* * @test - * @bug 4714257 + * @bug 4714257 8164407 * @summary Test to make sure that the title attribute shows up in links. * @author jamieh * @library ../lib @@ -55,7 +55,7 @@ "<a href=\"../pkg/Interface.html\" title=\"interface in pkg\">", //Test to make sure that the title shows up in cross link shows up "<a href=\"" + uri + "/java/io/File.html?is-external=true\" " - + "title=\"class or interface in java.io\">" + + "title=\"class or interface in java.io\" class=\"externalLink\">" + "<code>This is a cross link to class File</code></a>"); } }
--- a/test/langtools/jdk/javadoc/tool/api/basic/APITest.java Wed Dec 13 21:25:49 2017 +0100 +++ b/test/langtools/jdk/javadoc/tool/api/basic/APITest.java Wed Dec 13 12:45:06 2017 -0800 @@ -227,7 +227,7 @@ "member-search-index.js", "member-search-index.zip", "overview-tree.html", - "package-list", + "element-list", "package-search-index.js", "package-search-index.zip", "pkg/C.html",
--- a/test/langtools/tools/javadoc/api/basic/APITest.java Wed Dec 13 21:25:49 2017 +0100 +++ b/test/langtools/tools/javadoc/api/basic/APITest.java Wed Dec 13 12:45:06 2017 -0800 @@ -227,7 +227,7 @@ "member-search-index.js", "member-search-index.zip", "overview-tree.html", - "package-list", + "element-list", "package-search-index.js", "package-search-index.zip", "pkg/C.html",