diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AnnotationTypeWriterImpl.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AnnotationTypeWriterImpl.java index a4fc6606181..1053a9dc7b2 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AnnotationTypeWriterImpl.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AnnotationTypeWriterImpl.java @@ -43,6 +43,7 @@ import jdk.javadoc.internal.doclets.toolkit.AnnotationTypeWriter; import jdk.javadoc.internal.doclets.toolkit.Content; import jdk.javadoc.internal.doclets.toolkit.util.CommentHelper; import jdk.javadoc.internal.doclets.toolkit.util.DocFileIOException; +import jdk.javadoc.internal.doclets.toolkit.util.DocPath; /** * Generate the Class Information Page. @@ -154,9 +155,9 @@ public class AnnotationTypeWriterImpl extends SubWriterHolderWriter public void printDocument(Content contentTree) throws DocFileIOException { String description = getDescription("declaration", annotationType); PackageElement pkg = utils.containingPackage(this.annotationType); - Content stylesheetContent = getLocalStylesheetContent(pkg); + List localStylesheets = getLocalStylesheets(pkg); printHtmlDocument(configuration.metakeywords.getMetaKeywords(annotationType), - description, stylesheetContent, contentTree); + description, localStylesheets, contentTree); } /** diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java index 840a3588b3c..0712a28d089 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java @@ -55,6 +55,7 @@ import jdk.javadoc.internal.doclets.toolkit.taglets.ParamTaglet; import jdk.javadoc.internal.doclets.toolkit.util.ClassTree; import jdk.javadoc.internal.doclets.toolkit.util.CommentHelper; import jdk.javadoc.internal.doclets.toolkit.util.DocFileIOException; +import jdk.javadoc.internal.doclets.toolkit.util.DocPath; import jdk.javadoc.internal.doclets.toolkit.util.DocletConstants; /** @@ -185,9 +186,9 @@ public class ClassWriterImpl extends SubWriterHolderWriter implements ClassWrite public void printDocument(Content contentTree) throws DocFileIOException { String description = getDescription("declaration", typeElement); PackageElement pkg = utils.containingPackage(typeElement); - Content stylesheetContent = getLocalStylesheetContent(pkg); + List localStylesheets = getLocalStylesheets(pkg); printHtmlDocument(configuration.metakeywords.getMetaKeywords(typeElement), - description, stylesheetContent, contentTree); + description, localStylesheets, contentTree); } /** diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/DocFilesHandlerImpl.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/DocFilesHandlerImpl.java index e244307f18c..f5c558e2afb 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/DocFilesHandlerImpl.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/DocFilesHandlerImpl.java @@ -206,7 +206,7 @@ public class DocFilesHandlerImpl implements DocFilesHandler { footer.add(navBar.getContent(false)); docletWriter.addBottom(footer); htmlContent.add(footer); - docletWriter.printHtmlDocument(Collections.emptyList(), null, localTagsContent, htmlContent); + docletWriter.printHtmlDocument(Collections.emptyList(), null, localTagsContent, Collections.emptyList(), htmlContent); } diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlConfiguration.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlConfiguration.java index b76f3bc7259..9959e2f3921 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlConfiguration.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlConfiguration.java @@ -452,13 +452,17 @@ public class HtmlConfiguration extends BaseConfiguration { return null; } - public DocFile getMainStylesheet() { - return stylesheetfile.isEmpty() ? null : DocFile.createFileForInput(this, stylesheetfile); + public DocPath getMainStylesheet() { + if(!stylesheetfile.isEmpty()){ + DocFile docFile = DocFile.createFileForInput(this, stylesheetfile); + return DocPath.create(docFile.getName()); + } + return null; } - public List getAdditionalStylesheets() { + public List getAdditionalStylesheets() { return additionalStylesheets.stream() - .map(ssf -> DocFile.createFileForInput(this, ssf)) + .map(ssf -> DocFile.createFileForInput(this, ssf)).map(file -> DocPath.create(file.getName())) .collect(Collectors.toList()); } diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java index 2bb4706105a..203961939b4 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java @@ -26,6 +26,7 @@ package jdk.javadoc.internal.doclets.formats.html; import java.util.ArrayList; +import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.ListIterator; @@ -399,7 +400,26 @@ public class HtmlDocletWriter { String description, Content body) throws DocFileIOException { - printHtmlDocument(metakeywords, description, new ContentBuilder(), body); + printHtmlDocument(metakeywords, description, new ContentBuilder(), Collections.emptyList(), body); + } + + /** + * Generates the HTML document tree and prints it out. + * + * @param metakeywords Array of String keywords for META tag. Each element + * of the array is assigned to a separate META tag. + * Pass in null for no array + * @param description the content for the description META tag. + * @param localStylesheets local stylesheets to be included in the HEAD element + * @param body the body htmltree to be included in the document + * @throws DocFileIOException if there is a problem writing the file + */ + public void printHtmlDocument(List metakeywords, + String description, + List localStylesheets, + Content body) + throws DocFileIOException { + printHtmlDocument(metakeywords, description, new ContentBuilder(), localStylesheets, body); } /** @@ -410,15 +430,19 @@ public class HtmlDocletWriter { * Pass in null for no array * @param description the content for the description META tag. * @param extraHeadContent any additional content to be included in the HEAD element + * @param localStylesheets local stylesheets to be included in the HEAD element * @param body the body htmltree to be included in the document * @throws DocFileIOException if there is a problem writing the file */ public void printHtmlDocument(List metakeywords, String description, Content extraHeadContent, + List localStylesheets, Content body) throws DocFileIOException { Content htmlComment = contents.newPage; + List additionalStylesheets = configuration.getAdditionalStylesheets(); + additionalStylesheets.addAll(localStylesheets); Head head = new Head(path, configuration.docletVersion) .setTimestamp(!configuration.notimestamp) .setDescription(description) @@ -426,7 +450,7 @@ public class HtmlDocletWriter { .setTitle(winTitle) .setCharset(configuration.charset) .addKeywords(metakeywords) - .setStylesheets(configuration.getMainStylesheet(), configuration.getAdditionalStylesheets()) + .setStylesheets(configuration.getMainStylesheet(), additionalStylesheets) .setIndex(configuration.createindex, mainBodyScript) .addContent(extraHeadContent); @@ -2188,8 +2212,42 @@ public class HtmlDocletWriter { return mainBodyScript; } - Content getLocalStylesheetContent(Element element) throws DocFileIOException { - Content stylesheetContent = new ContentBuilder(); + /** + * Returns the path of module/package specific stylesheets for the element. + * @param element module/Package element + * @return list of path of module/package specific stylesheets + * @throws DocFileIOException + */ + List getLocalStylesheets(Element element) throws DocFileIOException { + List stylesheets = new ArrayList<>(); + DocPath basePath = null; + if (element instanceof PackageElement) { + stylesheets.addAll(getModuleStylesheets((PackageElement)element)); + basePath = docPaths.forPackage((PackageElement)element); + } else if (element instanceof ModuleElement) { + basePath = DocPaths.forModule((ModuleElement)element); + } + for (DocPath stylesheet : getStylesheets(element)) { + stylesheets.add(basePath.resolve(stylesheet.getPath())); + } + return stylesheets; + } + + private List getModuleStylesheets(PackageElement pkgElement) throws + DocFileIOException { + List moduleStylesheets = new ArrayList<>(); + ModuleElement moduleElement = utils.containingModule(pkgElement); + if (moduleElement != null && !moduleElement.isUnnamed()) { + List localStylesheets = getStylesheets(moduleElement); + DocPath basePath = DocPaths.forModule(moduleElement); + for (DocPath stylesheet : localStylesheets) { + moduleStylesheets.add(basePath.resolve(stylesheet)); + } + } + return moduleStylesheets; + } + + private List getStylesheets(Element element) throws DocFileIOException { List localStylesheets = configuration.localStylesheetMap.get(element); if (localStylesheets == null) { DocFilesHandlerImpl docFilesHandler = (DocFilesHandlerImpl)configuration @@ -2197,11 +2255,7 @@ public class HtmlDocletWriter { localStylesheets = docFilesHandler.getStylesheets(); configuration.localStylesheetMap.put(element, localStylesheets); } - for (DocPath stylesheet : localStylesheets) { - stylesheetContent.add(HtmlTree.LINK("stylesheet", - "text/css", stylesheet.getPath(), "Style")); - } - return stylesheetContent; + return localStylesheets; } } diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleWriterImpl.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleWriterImpl.java index f88c3b6b5f2..d793dcedea4 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleWriterImpl.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleWriterImpl.java @@ -902,8 +902,7 @@ public class ModuleWriterImpl extends HtmlDocletWriter implements ModuleSummaryW @Override public void printDocument(Content contentTree) throws DocFileIOException { printHtmlDocument(configuration.metakeywords.getMetaKeywordsForModule(mdle), - getDescription("declaration", mdle), - contentTree); + getDescription("declaration", mdle), getLocalStylesheets(mdle), contentTree); } /** diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageWriterImpl.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageWriterImpl.java index c379e970731..83e9c3b3b66 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageWriterImpl.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageWriterImpl.java @@ -47,6 +47,7 @@ import jdk.javadoc.internal.doclets.toolkit.Content; import jdk.javadoc.internal.doclets.toolkit.PackageSummaryWriter; import jdk.javadoc.internal.doclets.toolkit.util.CommentHelper; import jdk.javadoc.internal.doclets.toolkit.util.DocFileIOException; +import jdk.javadoc.internal.doclets.toolkit.util.DocPath; import jdk.javadoc.internal.doclets.toolkit.util.DocPaths; /** @@ -317,9 +318,9 @@ public class PackageWriterImpl extends HtmlDocletWriter @Override public void printDocument(Content contentTree) throws DocFileIOException { String description = getDescription("declaration", packageElement); - Content stylesheetContent = getLocalStylesheetContent(packageElement); + List localStylesheets = getLocalStylesheets(packageElement); printHtmlDocument(configuration.metakeywords.getMetaKeywords(packageElement), - description, stylesheetContent, contentTree); + description, localStylesheets, contentTree); } /** diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/Head.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/Head.java index 47cddc7db0b..26d71c63843 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/Head.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/Head.java @@ -59,8 +59,8 @@ public class Head { private String description; private String generator; private boolean showTimestamp; - private DocFile mainStylesheetFile; - private List additionalStylesheetFiles = Collections.emptyList(); + private DocPath mainStylesheet; + private List additionalStylesheets = Collections.emptyList(); private boolean index; private Script mainBodyScript; private final List