8213354: Support package-specific stylesheets

Reviewed-by: jjg
This commit is contained in:
Priya Lakshmi Muthuswamy 2019-02-21 11:26:39 +05:30
parent e6f6863cbc
commit dcf38e3cfe
8 changed files with 137 additions and 10 deletions

View file

@ -153,10 +153,10 @@ public class AnnotationTypeWriterImpl extends SubWriterHolderWriter
@Override
public void printDocument(Content contentTree) throws DocFileIOException {
String description = getDescription("declaration", annotationType);
PackageElement pkg = utils.containingPackage(this.annotationType);
Content stylesheetContent = getLocalStylesheetContent(pkg);
printHtmlDocument(configuration.metakeywords.getMetaKeywords(annotationType),
description,
true,
contentTree);
description, true, stylesheetContent, contentTree);
}
/**

View file

@ -178,10 +178,10 @@ public class ClassWriterImpl extends SubWriterHolderWriter implements ClassWrite
@Override
public void printDocument(Content contentTree) throws DocFileIOException {
String description = getDescription("declaration", typeElement);
PackageElement pkg = utils.containingPackage(typeElement);
Content stylesheetContent = getLocalStylesheetContent(pkg);
printHtmlDocument(configuration.metakeywords.getMetaKeywords(typeElement),
description,
true,
contentTree);
description, true, stylesheetContent, contentTree);
}
/**

View file

@ -31,7 +31,6 @@ import com.sun.source.doctree.StartElementTree;
import com.sun.source.doctree.TextTree;
import com.sun.source.util.DocTreeFactory;
import com.sun.tools.doclint.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
import jdk.javadoc.internal.doclets.formats.html.markup.Navigation;
import jdk.javadoc.internal.doclets.toolkit.Content;
@ -125,6 +124,16 @@ public class DocFilesHandlerImpl implements DocFilesHandler {
}
}
public List<DocPath> getStylesheets() throws DocFileIOException {
List<DocPath> stylesheets = new ArrayList<DocPath>();
for (DocFile srcdir : DocFile.list(configuration, location, source)) {
for (DocFile srcFile : srcdir.list()) {
if (srcFile.getName().endsWith(".css"))
stylesheets.add(DocPaths.DOC_FILES.resolve(srcFile.getName()));
}
}
return stylesheets;
}
private void copyDirectory(DocFile srcdir, final DocPath dstDocPath,
boolean first) throws DocFileIOException {

View file

@ -240,6 +240,8 @@ public class HtmlConfiguration extends BaseConfiguration {
public DocPaths docPaths;
public Map<Element, List<DocPath>> localStylesheetMap = new HashMap<>();
/**
* Creates an object to hold the configuration for a doclet.
*

View file

@ -2219,4 +2219,21 @@ public class HtmlDocletWriter {
Script getMainBodyScript() {
return mainBodyScript;
}
Content getLocalStylesheetContent(Element element) throws DocFileIOException {
Content stylesheetContent = new ContentBuilder();
List<DocPath> localStylesheets = configuration.localStylesheetMap.get(element);
if (localStylesheets == null) {
DocFilesHandlerImpl docFilesHandler = (DocFilesHandlerImpl)configuration
.getWriterFactory().getDocFilesHandler(element);
localStylesheets = docFilesHandler.getStylesheets();
configuration.localStylesheetMap.put(element, localStylesheets);
}
for (DocPath stylesheet : localStylesheets) {
stylesheetContent.addContent(HtmlTree.LINK("stylesheet",
"text/css", stylesheet.getPath(), "Style"));
}
return stylesheetContent;
}
}

View file

@ -317,9 +317,8 @@ public class PackageWriterImpl extends HtmlDocletWriter
@Override
public void printDocument(Content contentTree) throws DocFileIOException {
String description = getDescription("declaration", packageElement);
Content stylesheetContent = getLocalStylesheetContent(packageElement);
printHtmlDocument(configuration.metakeywords.getMetaKeywords(packageElement),
description,
true,
contentTree);
description, true, stylesheetContent, contentTree);
}
}

View file

@ -26,6 +26,9 @@
package jdk.javadoc.internal.doclets.toolkit;
import java.util.List;
import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
/**
* The interface for copying doc-files to the output.
*
@ -37,4 +40,5 @@ package jdk.javadoc.internal.doclets.toolkit;
public interface DocFilesHandler {
void copyDocFiles() throws DocletException;
List<DocPath> getStylesheets() throws DocletException;
}