packages, String text,
String tableSummary, Content body) {
Content heading = HtmlTree.HEADING(HtmlConstants.PACKAGE_HEADING, true,
- packagesLabel);
+ contents.packagesLabel);
HtmlTree htmlTree = (configuration.allowTag(HtmlTag.MAIN))
? HtmlTree.MAIN(HtmlStyle.indexContainer, heading)
: HtmlTree.DIV(HtmlStyle.indexContainer, heading);
HtmlTree ul = new HtmlTree(HtmlTag.UL);
- ul.setTitle(packagesLabel);
+ ul.setTitle(contents.packagesLabel);
for (PackageElement aPackage : packages) {
// Do not list the package if -nodeprecated option is set and the
// package is marked as deprecated.
@@ -161,7 +161,7 @@ public class PackageIndexFrameWriter extends AbstractPackageIndexWriter {
*/
protected void addAllClassesLink(Content ul) {
Content linkContent = getHyperLink(DocPaths.ALLCLASSES_FRAME,
- allclassesLabel, "", "packageFrame");
+ contents.allClassesLabel, "", "packageFrame");
Content li = HtmlTree.LI(linkContent);
ul.addContent(li);
}
@@ -174,7 +174,7 @@ public class PackageIndexFrameWriter extends AbstractPackageIndexWriter {
*/
protected void addAllModulesLink(Content ul) {
Content linkContent = getHyperLink(DocPaths.MODULE_OVERVIEW_FRAME,
- allmodulesLabel, "", "packageListFrame");
+ contents.allModulesLabel, "", "packageListFrame");
Content li = HtmlTree.LI(linkContent);
ul.addContent(li);
}
@@ -183,7 +183,7 @@ public class PackageIndexFrameWriter extends AbstractPackageIndexWriter {
* {@inheritDoc}
*/
protected void addNavigationBarFooter(Content body) {
- Content p = HtmlTree.P(getSpace());
+ Content p = HtmlTree.P(Contents.SPACE);
body.addContent(p);
}
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageIndexWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageIndexWriter.java
index d6d839cac28..fa1a9abb571 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageIndexWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageIndexWriter.java
@@ -31,11 +31,13 @@ import java.util.*;
import javax.lang.model.element.PackageElement;
import jdk.javadoc.doclet.DocletEnvironment;
+import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
import jdk.javadoc.internal.doclets.formats.html.markup.RawHtml;
import jdk.javadoc.internal.doclets.toolkit.Content;
+import jdk.javadoc.internal.doclets.toolkit.Messages;
import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
import jdk.javadoc.internal.doclets.toolkit.util.DocPaths;
import jdk.javadoc.internal.doclets.toolkit.util.DocletAbortException;
@@ -103,10 +105,9 @@ public class PackageIndexWriter extends AbstractPackageIndexWriter {
try {
packgen = new PackageIndexWriter(configuration, filename);
packgen.buildPackageIndexFile("doclet.Window_Overview_Summary", true);
- packgen.close();
} catch (IOException exc) {
- configuration.standardmessage.error(
- "doclet.exception_encountered",
+ Messages messages = configuration.getMessages();
+ messages.error("doclet.exception_encountered",
exc.toString(), filename);
throw new DocletAbortException(exc);
}
@@ -189,12 +190,13 @@ public class PackageIndexWriter extends AbstractPackageIndexWriter {
subTitleDiv.addStyle(HtmlStyle.subTitle);
addSummaryComment(configuration.overviewElement, subTitleDiv);
Content div = HtmlTree.DIV(HtmlStyle.header, subTitleDiv);
- Content see = seeLabel;
- see.addContent(" ");
- Content descPara = HtmlTree.P(see);
+ Content descBody = new ContentBuilder();
+ descBody.addContent(contents.seeLabel);
+ descBody.addContent(" ");
+ Content descPara = HtmlTree.P(descBody);
Content descLink = getHyperLink(getDocLink(
SectionName.OVERVIEW_DESCRIPTION),
- descriptionLabel, "", "");
+ contents.descriptionLabel, "", "");
descPara.addContent(descLink);
div.addContent(descPara);
if (configuration.allowTag(HtmlTag.MAIN)) {
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageTreeWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageTreeWriter.java
index 4db9a00c804..d48e0e17704 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageTreeWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageTreeWriter.java
@@ -34,6 +34,7 @@ import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
import jdk.javadoc.internal.doclets.toolkit.Content;
+import jdk.javadoc.internal.doclets.toolkit.Messages;
import jdk.javadoc.internal.doclets.toolkit.util.ClassTree;
import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
import jdk.javadoc.internal.doclets.toolkit.util.DocPaths;
@@ -112,10 +113,9 @@ public class PackageTreeWriter extends AbstractTreeWriter {
packgen = new PackageTreeWriter(configuration, path, pkg,
prev, next);
packgen.generatePackageTreeFile();
- packgen.close();
} catch (IOException exc) {
- configuration.standardmessage.error(
- "doclet.exception_encountered",
+ Messages messages = configuration.getMessages();
+ messages.error("doclet.exception_encountered",
exc.toString(), path.getPath());
throw new DocletAbortException(exc);
}
@@ -130,7 +130,7 @@ public class PackageTreeWriter extends AbstractTreeWriter {
HtmlTree htmlTree = (configuration.allowTag(HtmlTag.MAIN))
? HtmlTree.MAIN()
: body;
- Content headContent = getResource("doclet.Hierarchy_For_Package",
+ Content headContent = contents.getContent("doclet.Hierarchy_For_Package",
utils.getPackageName(packageElement));
Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, false,
HtmlStyle.title, headContent);
@@ -187,7 +187,7 @@ public class PackageTreeWriter extends AbstractTreeWriter {
*/
protected void addLinkToMainTree(Content div) {
Content span = HtmlTree.SPAN(HtmlStyle.packageHierarchyLabel,
- getResource("doclet.Package_Hierarchies"));
+ contents.packageHierarchies);
div.addContent(span);
HtmlTree ul = new HtmlTree (HtmlTag.UL);
ul.addStyle(HtmlStyle.horizontal);
@@ -231,7 +231,7 @@ public class PackageTreeWriter extends AbstractTreeWriter {
@Override
protected Content getNavLinkModule() {
Content linkContent = getModuleLink(utils.elementUtils.getModuleOf(packageElement),
- moduleLabel);
+ contents.moduleLabel);
Content li = HtmlTree.LI(linkContent);
return li;
}
@@ -243,7 +243,7 @@ public class PackageTreeWriter extends AbstractTreeWriter {
*/
protected Content getNavLinkPackage() {
Content linkContent = getHyperLink(DocPaths.PACKAGE_SUMMARY,
- packageLabel);
+ contents.packageLabel);
Content li = HtmlTree.LI(linkContent);
return li;
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageUseWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageUseWriter.java
index d73fab18f8d..b653aedf77a 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageUseWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageUseWriter.java
@@ -38,6 +38,7 @@ import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
import jdk.javadoc.internal.doclets.toolkit.Content;
+import jdk.javadoc.internal.doclets.toolkit.Messages;
import jdk.javadoc.internal.doclets.toolkit.util.ClassUseMapper;
import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
import jdk.javadoc.internal.doclets.toolkit.util.DocPaths;
@@ -108,11 +109,9 @@ public class PackageUseWriter extends SubWriterHolderWriter {
try {
pkgusegen = new PackageUseWriter(configuration, mapper, filename, pkgElement);
pkgusegen.generatePackageUseFile();
- pkgusegen.close();
} catch (IOException exc) {
- configuration.standardmessage.error(
- "doclet.exception_encountered",
- exc.toString(), filename);
+ Messages messages = configuration.getMessages();
+ messages.error(exc.toString(), filename);
throw new DocletAbortException(exc);
}
}
@@ -125,7 +124,7 @@ public class PackageUseWriter extends SubWriterHolderWriter {
HtmlTree div = new HtmlTree(HtmlTag.DIV);
div.addStyle(HtmlStyle.contentContainer);
if (usingPackageToUsedClasses.isEmpty()) {
- div.addContent(getResource("doclet.ClassUse_No.usage.of.0", utils.getPackageName(packageElement)));
+ div.addContent(contents.getContent("doclet.ClassUse_No.usage.of.0", utils.getPackageName(packageElement)));
} else {
addPackageUse(div);
}
@@ -167,7 +166,7 @@ public class PackageUseWriter extends SubWriterHolderWriter {
* @param contentTree the content tree to which the package list will be added
*/
protected void addPackageList(Content contentTree) throws IOException {
- Content caption = getTableCaption(configuration.getResource(
+ Content caption = getTableCaption(configuration.getContent(
"doclet.ClassUse_Packages.that.use.0",
getPackageLink(packageElement, utils.getPackageName(packageElement))));
Content table = (configuration.isOutputHtml5())
@@ -208,7 +207,7 @@ public class PackageUseWriter extends SubWriterHolderWriter {
}
String tableSummary = configuration.getText("doclet.Use_Table_Summary",
configuration.getText("doclet.classes"));
- Content caption = getTableCaption(configuration.getResource(
+ Content caption = getTableCaption(configuration.getContent(
"doclet.ClassUse_Classes.in.0.used.by.1",
getPackageLink(packageElement, utils.getPackageName(packageElement)),
getPackageLink(usingPackage, utils.getPackageName(usingPackage))));
@@ -265,7 +264,7 @@ public class PackageUseWriter extends SubWriterHolderWriter {
if (pkg != null && !pkg.isUnnamed()) {
addSummaryComment(pkg, tdLast);
} else {
- tdLast.addContent(getSpace());
+ tdLast.addContent(Contents.SPACE);
}
contentTree.addContent(tdLast);
}
@@ -289,7 +288,7 @@ public class PackageUseWriter extends SubWriterHolderWriter {
bodyTree.addContent(htmlTree);
}
ContentBuilder headContent = new ContentBuilder();
- headContent.addContent(getResource("doclet.ClassUse_Title", packageText));
+ headContent.addContent(contents.getContent("doclet.ClassUse_Title", packageText));
headContent.addContent(new HtmlTree(HtmlTag.BR));
headContent.addContent(name);
Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, true,
@@ -311,7 +310,7 @@ public class PackageUseWriter extends SubWriterHolderWriter {
@Override
protected Content getNavLinkModule() {
Content linkContent = getModuleLink(utils.elementUtils.getModuleOf(packageElement),
- moduleLabel);
+ contents.moduleLabel);
Content li = HtmlTree.LI(linkContent);
return li;
}
@@ -323,7 +322,7 @@ public class PackageUseWriter extends SubWriterHolderWriter {
*/
protected Content getNavLinkPackage() {
Content linkContent = getHyperLink(DocPaths.PACKAGE_SUMMARY,
- packageLabel);
+ contents.packageLabel);
Content li = HtmlTree.LI(linkContent);
return li;
}
@@ -334,7 +333,7 @@ public class PackageUseWriter extends SubWriterHolderWriter {
* @return a content tree for the use link
*/
protected Content getNavLinkClassUse() {
- Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, useLabel);
+ Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, contents.useLabel);
return li;
}
@@ -345,7 +344,7 @@ public class PackageUseWriter extends SubWriterHolderWriter {
*/
protected Content getNavLinkTree() {
Content linkContent = getHyperLink(DocPaths.PACKAGE_TREE,
- treeLabel);
+ contents.treeLabel);
Content li = HtmlTree.LI(linkContent);
return li;
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageWriterImpl.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageWriterImpl.java
index 759f7a5a8b9..7ca79165032 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageWriterImpl.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageWriterImpl.java
@@ -100,8 +100,7 @@ public class PackageWriterImpl extends HtmlDocletWriter
* @param next Next package in the sorted array.
*/
public PackageWriterImpl(ConfigurationImpl configuration,
- PackageElement packageElement, PackageElement prev, PackageElement next)
- throws IOException {
+ PackageElement packageElement, PackageElement prev, PackageElement next) {
super(configuration, DocPath
.forPackage(packageElement)
.resolve(DocPaths.PACKAGE_SUMMARY));
@@ -127,9 +126,9 @@ public class PackageWriterImpl extends HtmlDocletWriter
div.addStyle(HtmlStyle.header);
ModuleElement mdle = configuration.docEnv.getElementUtils().getModuleOf(packageElement);
if (mdle != null && !mdle.isUnnamed()) {
- Content classModuleLabel = HtmlTree.SPAN(HtmlStyle.moduleLabelInClass, moduleLabel);
+ Content classModuleLabel = HtmlTree.SPAN(HtmlStyle.moduleLabelInClass, contents.moduleLabel);
Content moduleNameDiv = HtmlTree.DIV(HtmlStyle.subTitle, classModuleLabel);
- moduleNameDiv.addContent(getSpace());
+ moduleNameDiv.addContent(Contents.SPACE);
moduleNameDiv.addContent(getModuleLink(mdle,
new StringContent(mdle.getQualifiedName().toString())));
div.addContent(moduleNameDiv);
@@ -138,8 +137,8 @@ public class PackageWriterImpl extends HtmlDocletWriter
addAnnotationInfo(packageElement, annotationContent);
div.addContent(annotationContent);
Content tHeading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, true,
- HtmlStyle.title, packageLabel);
- tHeading.addContent(getSpace());
+ HtmlStyle.title, contents.packageLabel);
+ tHeading.addContent(Contents.SPACE);
Content packageHead = new StringContent(heading);
tHeading.addContent(packageHead);
div.addContent(tHeading);
@@ -149,11 +148,11 @@ public class PackageWriterImpl extends HtmlDocletWriter
docSummaryDiv.addStyle(HtmlStyle.docSummary);
addSummaryComment(packageElement, docSummaryDiv);
div.addContent(docSummaryDiv);
- Content space = getSpace();
+ Content space = Contents.SPACE;
Content descLink = getHyperLink(getDocLink(
SectionName.PACKAGE_DESCRIPTION),
- descriptionLabel, "", "");
- Content descPara = new HtmlTree(HtmlTag.P, seeLabel, space, descLink);
+ contents.descriptionLabel, "", "");
+ Content descPara = new HtmlTree(HtmlTag.P, contents.seeLabel, space, descLink);
div.addContent(descPara);
}
if (configuration.allowTag(HtmlTag.MAIN)) {
@@ -184,7 +183,7 @@ public class PackageWriterImpl extends HtmlDocletWriter
CommentHelper ch = utils.getCommentHelper(packageElement);
HtmlTree deprDiv = new HtmlTree(HtmlTag.DIV);
deprDiv.addStyle(HtmlStyle.deprecatedContent);
- Content deprPhrase = HtmlTree.SPAN(HtmlStyle.deprecatedLabel, deprecatedPhrase);
+ Content deprPhrase = HtmlTree.SPAN(HtmlStyle.deprecatedLabel, contents.deprecatedPhrase);
deprDiv.addContent(deprPhrase);
if (!deprs.isEmpty()) {
List extends DocTree> commentTags = ch.getDescription(configuration, deprs.get(0));
@@ -233,7 +232,7 @@ public class PackageWriterImpl extends HtmlDocletWriter
HtmlTree tdClassDescription = new HtmlTree(HtmlTag.TD);
tdClassDescription.addStyle(HtmlStyle.colLast);
if (utils.isDeprecated(klass)) {
- tdClassDescription.addContent(deprecatedLabel);
+ tdClassDescription.addContent(contents.deprecatedLabel);
List extends DocTree> tags = utils.getDeprecatedTrees(klass);
if (!tags.isEmpty()) {
addSummaryDeprecatedComment(klass, tags.get(0), tdClassDescription);
@@ -323,7 +322,7 @@ public class PackageWriterImpl extends HtmlDocletWriter
*/
protected Content getNavLinkClassUse() {
Content useLink = getHyperLink(DocPaths.PACKAGE_USE,
- useLabel, "", "");
+ contents.useLabel, "", "");
Content li = HtmlTree.LI(useLink);
return li;
}
@@ -336,11 +335,11 @@ public class PackageWriterImpl extends HtmlDocletWriter
public Content getNavLinkPrevious() {
Content li;
if (prev == null) {
- li = HtmlTree.LI(prevpackageLabel);
+ li = HtmlTree.LI(contents.prevPackageLabel);
} else {
DocPath path = DocPath.relativePath(packageElement, prev);
li = HtmlTree.LI(getHyperLink(path.resolve(DocPaths.PACKAGE_SUMMARY),
- prevpackageLabel, "", ""));
+ contents.prevPackageLabel, "", ""));
}
return li;
}
@@ -353,11 +352,11 @@ public class PackageWriterImpl extends HtmlDocletWriter
public Content getNavLinkNext() {
Content li;
if (next == null) {
- li = HtmlTree.LI(nextpackageLabel);
+ li = HtmlTree.LI(contents.nextPackageLabel);
} else {
DocPath path = DocPath.relativePath(packageElement, next);
li = HtmlTree.LI(getHyperLink(path.resolve(DocPaths.PACKAGE_SUMMARY),
- nextpackageLabel, "", ""));
+ contents.nextPackageLabel, "", ""));
}
return li;
}
@@ -370,7 +369,7 @@ public class PackageWriterImpl extends HtmlDocletWriter
*/
protected Content getNavLinkTree() {
Content useLink = getHyperLink(DocPaths.PACKAGE_TREE,
- treeLabel, "", "");
+ contents.treeLabel, "", "");
Content li = HtmlTree.LI(useLink);
return li;
}
@@ -383,7 +382,7 @@ public class PackageWriterImpl extends HtmlDocletWriter
@Override
protected Content getNavLinkModule() {
Content linkContent = getModuleLink(utils.elementUtils.getModuleOf(packageElement),
- moduleLabel);
+ contents.moduleLabel);
Content li = HtmlTree.LI(linkContent);
return li;
}
@@ -394,7 +393,7 @@ public class PackageWriterImpl extends HtmlDocletWriter
* @return a content tree for the package link
*/
protected Content getNavLinkPackage() {
- Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, packageLabel);
+ Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, contents.packageLabel);
return li;
}
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PropertyWriterImpl.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PropertyWriterImpl.java
index 9b7ca5da8ed..24c9f96776c 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PropertyWriterImpl.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PropertyWriterImpl.java
@@ -94,7 +94,7 @@ public class PropertyWriterImpl extends AbstractMemberWriter
propertyDetailsTree.addContent(writer.getMarkerAnchor(
SectionName.PROPERTY_DETAIL));
Content heading = HtmlTree.HEADING(HtmlConstants.DETAILS_HEADING,
- writer.propertyDetailsLabel);
+ contents.propertyDetailsLabel);
propertyDetailsTree.addContent(heading);
return propertyDetailsTree;
}
@@ -163,9 +163,9 @@ public class PropertyWriterImpl extends AbstractMemberWriter
Content codeLink = HtmlTree.CODE(link);
Content descfrmLabel = HtmlTree.SPAN(HtmlStyle.descfrmTypeLabel,
utils.isClass(holder)
- ? writer.descfrmClassLabel
- : writer.descfrmInterfaceLabel);
- descfrmLabel.addContent(writer.getSpace());
+ ? contents.descfrmClassLabel
+ : contents.descfrmInterfaceLabel);
+ descfrmLabel.addContent(Contents.SPACE);
descfrmLabel.addContent(codeLink);
propertyDocTree.addContent(HtmlTree.DIV(HtmlStyle.block, descfrmLabel));
writer.addInlineComment(property, propertyDocTree);
@@ -202,21 +202,13 @@ public class PropertyWriterImpl extends AbstractMemberWriter
return getMemberTree(propertyDocTree, isLastContent);
}
- /**
- * Close the writer.
- */
- @Override
- public void close() throws IOException {
- writer.close();
- }
-
/**
* {@inheritDoc}
*/
@Override
public void addSummaryLabel(Content memberTree) {
Content label = HtmlTree.HEADING(HtmlConstants.SUMMARY_HEADING,
- writer.getResource("doclet.Property_Summary"));
+ contents.propertySummary);
memberTree.addContent(label);
}
@@ -225,9 +217,9 @@ public class PropertyWriterImpl extends AbstractMemberWriter
*/
@Override
public String getTableSummary() {
- return configuration.getText("doclet.Member_Table_Summary",
- configuration.getText("doclet.Property_Summary"),
- configuration.getText("doclet.properties"));
+ return resources.getText("doclet.Member_Table_Summary",
+ resources.getText("doclet.Property_Summary"),
+ resources.getText("doclet.properties"));
}
/**
@@ -235,7 +227,7 @@ public class PropertyWriterImpl extends AbstractMemberWriter
*/
@Override
public Content getCaption() {
- return configuration.getResource("doclet.Properties");
+ return contents.properties;
}
/**
@@ -282,7 +274,7 @@ public class PropertyWriterImpl extends AbstractMemberWriter
: configuration.getText("doclet.Properties_Inherited_From_Interface"));
Content labelHeading = HtmlTree.HEADING(HtmlConstants.INHERITED_SUMMARY_HEADING,
label);
- labelHeading.addContent(writer.getSpace());
+ labelHeading.addContent(Contents.SPACE);
labelHeading.addContent(classLink);
inheritedTree.addContent(labelHeading);
}
@@ -342,14 +334,14 @@ public class PropertyWriterImpl extends AbstractMemberWriter
if (typeElement == null) {
return writer.getHyperLink(
SectionName.PROPERTY_SUMMARY,
- writer.getResource("doclet.navProperty"));
+ contents.navProperty);
} else {
return writer.getHyperLink(
SectionName.PROPERTIES_INHERITANCE,
- configuration.getClassName(typeElement), writer.getResource("doclet.navProperty"));
+ configuration.getClassName(typeElement), contents.navProperty);
}
} else {
- return writer.getResource("doclet.navProperty");
+ return contents.navProperty;
}
}
@@ -361,9 +353,9 @@ public class PropertyWriterImpl extends AbstractMemberWriter
if (link) {
liNav.addContent(writer.getHyperLink(
SectionName.PROPERTY_DETAIL,
- writer.getResource("doclet.navProperty")));
+ contents.navProperty));
} else {
- liNav.addContent(writer.getResource("doclet.navProperty"));
+ liNav.addContent(contents.navProperty);
}
}
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SerializedFormWriterImpl.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SerializedFormWriterImpl.java
index 601aa7b4cac..3d1daeeb464 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SerializedFormWriterImpl.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SerializedFormWriterImpl.java
@@ -136,8 +136,8 @@ public class SerializedFormWriterImpl extends SubWriterHolderWriter
*/
public Content getPackageHeader(String packageName) {
Content heading = HtmlTree.HEADING(HtmlConstants.PACKAGE_HEADING, true,
- packageLabel);
- heading.addContent(getSpace());
+ contents.packageLabel);
+ heading.addContent(Contents.SPACE);
heading.addContent(packageName);
return heading;
}
@@ -183,9 +183,9 @@ public class SerializedFormWriterImpl extends SubWriterHolderWriter
//Print the heading.
Content className = superClassLink == null ?
- configuration.getResource(
+ configuration.getContent(
"doclet.Class_0_implements_serializable", classLink) :
- configuration.getResource(
+ configuration.getContent(
"doclet.Class_0_extends_implements_serializable", classLink,
superClassLink);
li.addContent(HtmlTree.HEADING(HtmlConstants.SERIALIZED_MEMBER_HEADING,
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SingleIndexWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SingleIndexWriter.java
index 81189d6ee61..42a09f8aa85 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SingleIndexWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SingleIndexWriter.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2016, 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
@@ -33,6 +33,7 @@ import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
import jdk.javadoc.internal.doclets.toolkit.Content;
+import jdk.javadoc.internal.doclets.toolkit.Messages;
import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
import jdk.javadoc.internal.doclets.toolkit.util.DocPaths;
import jdk.javadoc.internal.doclets.toolkit.util.DocletAbortException;
@@ -84,10 +85,9 @@ public class SingleIndexWriter extends AbstractIndexWriter {
indexgen = new SingleIndexWriter(configuration,
filename, indexbuilder);
indexgen.generateIndexFile();
- indexgen.close();
} catch (IOException exc) {
- configuration.standardmessage.error(
- "doclet.exception_encountered",
+ Messages messages = configuration.getMessages();
+ messages.error("doclet.exception_encountered",
exc.toString(), filename);
throw new DocletAbortException(exc);
}
@@ -150,7 +150,7 @@ public class SingleIndexWriter extends AbstractIndexWriter {
contentTree.addContent(
getHyperLink(getNameForIndex(unicode),
new StringContent(unicode)));
- contentTree.addContent(getSpace());
+ contentTree.addContent(Contents.SPACE);
}
}
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SourceToHTMLConverter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SourceToHTMLConverter.java
index a9759c933ad..decebffe4fd 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SourceToHTMLConverter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SourceToHTMLConverter.java
@@ -40,6 +40,7 @@ import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
import jdk.javadoc.internal.doclets.toolkit.Content;
+import jdk.javadoc.internal.doclets.toolkit.Messages;
import jdk.javadoc.internal.doclets.toolkit.util.DocFile;
import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
import jdk.javadoc.internal.doclets.toolkit.util.DocPaths;
@@ -73,6 +74,7 @@ public class SourceToHTMLConverter {
private static final String NEW_LINE = DocletConstants.NL;
private final ConfigurationImpl configuration;
+ private final Messages messages;
private final Utils utils;
private final DocletEnvironment docEnv;
@@ -88,6 +90,7 @@ public class SourceToHTMLConverter {
private SourceToHTMLConverter(ConfigurationImpl configuration, DocletEnvironment rd,
DocPath outputdir) {
this.configuration = configuration;
+ this.messages = configuration.getMessages();
this.utils = configuration.utils;
this.docEnv = rd;
this.outputdir = outputdir;
@@ -200,7 +203,7 @@ public class SourceToHTMLConverter {
Content htmlTree = HtmlTree.HTML(configuration.getLocale().getLanguage(),
head, body);
Content htmlDocument = new HtmlDocument(htmlDocType, htmlTree);
- configuration.message.notice("doclet.Generating_0", path.getPath());
+ messages.notice("doclet.Generating_0", path.getPath());
DocFile df = DocFile.createFileForOutput(configuration, path);
try (Writer w = df.openWriter()) {
htmlDocument.write(w, true);
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SplitIndexWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SplitIndexWriter.java
index f73407cd5e2..8b7bbc9eca1 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SplitIndexWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SplitIndexWriter.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2016, 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
@@ -32,11 +32,13 @@ import java.util.List;
import java.util.ListIterator;
import java.util.Set;
import java.util.TreeSet;
+
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
import jdk.javadoc.internal.doclets.toolkit.Content;
+import jdk.javadoc.internal.doclets.toolkit.Messages;
import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
import jdk.javadoc.internal.doclets.toolkit.util.DocPaths;
import jdk.javadoc.internal.doclets.toolkit.util.DocletAbortException;
@@ -115,11 +117,10 @@ public class SplitIndexWriter extends AbstractIndexWriter {
if (!li.hasNext()) {
indexgen.createSearchIndexFiles();
}
- indexgen.close();
}
} catch (IOException exc) {
- configuration.standardmessage.error(
- "doclet.exception_encountered",
+ Messages messages = configuration.getMessages();
+ messages.error("doclet.exception_encountered",
exc.toString(), filename.getPath());
throw new DocletAbortException(exc);
}
@@ -178,7 +179,7 @@ public class SplitIndexWriter extends AbstractIndexWriter {
int j = i + 1;
contentTree.addContent(getHyperLink(DocPaths.indexN(j),
new StringContent(indexElements.get(i).toString())));
- contentTree.addContent(getSpace());
+ contentTree.addContent(Contents.SPACE);
}
}
@@ -188,7 +189,7 @@ public class SplitIndexWriter extends AbstractIndexWriter {
* @return a content tree for the link
*/
public Content getNavLinkPrevious() {
- Content prevletterLabel = getResource("doclet.Prev_Letter");
+ Content prevletterLabel = contents.prevLetter;
if (prev == -1) {
return HtmlTree.LI(prevletterLabel);
}
@@ -205,7 +206,7 @@ public class SplitIndexWriter extends AbstractIndexWriter {
* @return a content tree for the link
*/
public Content getNavLinkNext() {
- Content nextletterLabel = getResource("doclet.Next_Letter");
+ Content nextletterLabel = contents.nextLetter;
if (next == -1) {
return HtmlTree.LI(nextletterLabel);
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SubWriterHolderWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SubWriterHolderWriter.java
index 11888eb26db..f21c71168dc 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SubWriterHolderWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SubWriterHolderWriter.java
@@ -35,7 +35,6 @@ import com.sun.source.doctree.DocTree;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
-import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
import jdk.javadoc.internal.doclets.toolkit.Content;
import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
import jdk.javadoc.internal.doclets.toolkit.util.MethodTypes;
@@ -67,8 +66,7 @@ public abstract class SubWriterHolderWriter extends HtmlDocletWriter {
*/
protected HtmlTree mainTree = HtmlTree.MAIN();
- public SubWriterHolderWriter(ConfigurationImpl configuration, DocPath filename)
- throws IOException {
+ public SubWriterHolderWriter(ConfigurationImpl configuration, DocPath filename) {
super(configuration, filename);
}
@@ -126,7 +124,7 @@ public abstract class SubWriterHolderWriter extends HtmlDocletWriter {
Content captionSpan;
Content span;
if (type.isDefaultTab()) {
- captionSpan = HtmlTree.SPAN(configuration.getResource(type.resourceKey()));
+ captionSpan = HtmlTree.SPAN(configuration.getContent(type.resourceKey()));
span = HtmlTree.SPAN(type.tabId(),
HtmlStyle.activeTableTab, captionSpan);
} else {
@@ -134,7 +132,7 @@ public abstract class SubWriterHolderWriter extends HtmlDocletWriter {
span = HtmlTree.SPAN(type.tabId(),
HtmlStyle.tableTab, captionSpan);
}
- Content tabSpan = HtmlTree.SPAN(HtmlStyle.tabEnd, getSpace());
+ Content tabSpan = HtmlTree.SPAN(HtmlStyle.tabEnd, Contents.SPACE);
span.addContent(tabSpan);
tabbedCaption.addContent(span);
}
@@ -149,7 +147,7 @@ public abstract class SubWriterHolderWriter extends HtmlDocletWriter {
*/
public Content getMethodTypeLinks(MethodTypes methodType) {
String jsShow = "javascript:show(" + methodType.value() +");";
- HtmlTree link = HtmlTree.A(jsShow, configuration.getResource(methodType.resourceKey()));
+ HtmlTree link = HtmlTree.A(jsShow, configuration.getContent(methodType.resourceKey()));
return link;
}
@@ -189,9 +187,9 @@ public abstract class SubWriterHolderWriter extends HtmlDocletWriter {
List extends DocTree> deprs = utils.getBlockTags(member, DocTree.Kind.DEPRECATED);
Content div;
if (utils.isDeprecated(member)) {
- Content deprLabel = HtmlTree.SPAN(HtmlStyle.deprecatedLabel, deprecatedPhrase);
+ Content deprLabel = HtmlTree.SPAN(HtmlStyle.deprecatedLabel, contents.deprecatedPhrase);
div = HtmlTree.DIV(HtmlStyle.block, deprLabel);
- div.addContent(getSpace());
+ div.addContent(Contents.SPACE);
if (!deprs.isEmpty()) {
addInlineDeprecatedComment(member, deprs.get(0), div);
}
@@ -200,9 +198,9 @@ public abstract class SubWriterHolderWriter extends HtmlDocletWriter {
} else {
Element te = member.getEnclosingElement();
if (te != null && utils.isTypeElement(te) && utils.isDeprecated(te)) {
- Content deprLabel = HtmlTree.SPAN(HtmlStyle.deprecatedLabel, deprecatedPhrase);
+ Content deprLabel = HtmlTree.SPAN(HtmlStyle.deprecatedLabel, contents.deprecatedPhrase);
div = HtmlTree.DIV(HtmlStyle.block, deprLabel);
- div.addContent(getSpace());
+ div.addContent(Contents.SPACE);
tdSummary.addContent(div);
}
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/TagletWriterImpl.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/TagletWriterImpl.java
index 80a4cccf532..7e9a055dad9 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/TagletWriterImpl.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/TagletWriterImpl.java
@@ -26,6 +26,7 @@
package jdk.javadoc.internal.doclets.formats.html;
import java.util.List;
+
import javax.lang.model.element.Element;
import javax.lang.model.element.PackageElement;
import javax.lang.model.element.TypeElement;
@@ -51,7 +52,6 @@ import jdk.javadoc.internal.doclets.toolkit.util.DocLink;
import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
import jdk.javadoc.internal.doclets.toolkit.util.DocPaths;
import jdk.javadoc.internal.doclets.toolkit.util.DocletConstants;
-import jdk.javadoc.internal.doclets.toolkit.util.MessageRetriever;
import jdk.javadoc.internal.doclets.toolkit.util.Utils;
/**
@@ -144,7 +144,7 @@ public class TagletWriterImpl extends TagletWriter {
return null;
}
}.visit(element);
- si.setCategory(configuration.getResource("doclet.SearchTags").toString());
+ si.setCategory(configuration.getContent("doclet.SearchTags").toString());
configuration.tagSearchIndex.add(si);
}
return result;
@@ -212,13 +212,6 @@ public class TagletWriterImpl extends TagletWriter {
return result;
}
- /**
- * {@inheritDoc}
- */
- public MessageRetriever getMsgRetriever() {
- return configuration.message;
- }
-
/**
* {@inheritDoc}
*/
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/TreeWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/TreeWriter.java
index 0987cc2d825..3a6f31b1ce2 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/TreeWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/TreeWriter.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2016, 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
@@ -36,6 +36,7 @@ import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
import jdk.javadoc.internal.doclets.toolkit.Content;
+import jdk.javadoc.internal.doclets.toolkit.Messages;
import jdk.javadoc.internal.doclets.toolkit.util.ClassTree;
import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
import jdk.javadoc.internal.doclets.toolkit.util.DocPaths;
@@ -96,10 +97,9 @@ public class TreeWriter extends AbstractTreeWriter {
try {
treegen = new TreeWriter(configuration, filename, classtree);
treegen.generateTreeFile();
- treegen.close();
} catch (IOException exc) {
- configuration.standardmessage.error(
- "doclet.exception_encountered",
+ Messages messages = configuration.getMessages();
+ messages.error("doclet.exception_encountered",
exc.toString(), filename);
throw new DocletAbortException(exc);
}
@@ -110,7 +110,7 @@ public class TreeWriter extends AbstractTreeWriter {
*/
public void generateTreeFile() throws IOException {
HtmlTree body = getTreeHeader();
- Content headContent = getResource("doclet.Hierarchy_For_All_Packages");
+ Content headContent = contents.hierarchyForAllPackages;
Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, false,
HtmlStyle.title, headContent);
Content div = HtmlTree.DIV(HtmlStyle.header, heading);
@@ -154,7 +154,7 @@ public class TreeWriter extends AbstractTreeWriter {
}
if (!classesonly) {
Content span = HtmlTree.SPAN(HtmlStyle.packageHierarchyLabel,
- getResource("doclet.Package_Hierarchies"));
+ contents.packageHierarchies);
contentTree.addContent(span);
HtmlTree ul = new HtmlTree(HtmlTag.UL);
ul.addStyle(HtmlStyle.horizontal);
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/FixedStringContent.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/FixedStringContent.java
new file mode 100644
index 00000000000..78b27a58c21
--- /dev/null
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/FixedStringContent.java
@@ -0,0 +1,138 @@
+/*
+ * Copyright (c) 2010, 2016, 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.formats.html.markup;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import jdk.javadoc.internal.doclets.toolkit.Content;
+import jdk.javadoc.internal.doclets.toolkit.util.DocletAbortException;
+import jdk.javadoc.internal.doclets.toolkit.util.DocletConstants;
+
+/**
+ * Class for containing fixed string content for HTML tags of javadoc output.
+ *
+ * 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.
+ */
+public class FixedStringContent extends Content {
+ private final String string;
+
+ /**
+ * Constructor to construct FixedStringContent object.
+ *
+ * @param content content for the object
+ */
+ public FixedStringContent(CharSequence content) {
+ string = needEscape(content)
+ ? escape(content)
+ : content.toString();
+ }
+
+ /**
+ * This method is not supported by the class.
+ *
+ * @param content content that needs to be added
+ * @throws DocletAbortException this method will always throw a
+ * DocletAbortException because it
+ * is not supported.
+ */
+ @Override
+ public void addContent(Content content) {
+ throw new DocletAbortException("not supported");
+ }
+
+ /**
+ * Adds content for the StringContent object. The method escapes
+ * HTML characters for the string content that is added.
+ *
+ * @param strContent string content to be added
+ * @throws DocletAbortException this method will always throw a
+ * DocletAbortException because it
+ * is not supported.
+ */
+ @Override
+ public void addContent(CharSequence strContent) {
+ throw new DocletAbortException("not supported");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean isEmpty() {
+ return string.isEmpty();
+ }
+
+ @Override
+ public int charCount() {
+ return RawHtml.charCount(string);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String toString() {
+ return string;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean write(Writer out, boolean atNewline) throws IOException {
+ out.write(string);
+ return string.endsWith(DocletConstants.NL);
+ }
+
+ private boolean needEscape(CharSequence cs) {
+ for (int i = 0; i < cs.length(); i++) {
+ switch (cs.charAt(i)) {
+ case '<':
+ case '>':
+ case '&':
+ return true;
+ }
+ }
+ return false;
+ }
+ private String escape(CharSequence s) {
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < s.length(); i++) {
+ char ch = s.charAt(i);
+ switch (ch) {
+ case '<': sb.append("<"); break;
+ case '>': sb.append(">"); break;
+ case '&': sb.append("&"); break;
+ default: sb.append(ch); break;
+ }
+ }
+ return sb.toString();
+ }
+
+}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlDocWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlDocWriter.java
index 080041e1b6a..e15c2ada422 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlDocWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlDocWriter.java
@@ -36,6 +36,7 @@ import jdk.javadoc.internal.doclets.formats.html.ConfigurationImpl;
import jdk.javadoc.internal.doclets.formats.html.SectionName;
import jdk.javadoc.internal.doclets.toolkit.Configuration;
import jdk.javadoc.internal.doclets.toolkit.Content;
+import jdk.javadoc.internal.doclets.toolkit.Messages;
import jdk.javadoc.internal.doclets.toolkit.util.DocFile;
import jdk.javadoc.internal.doclets.toolkit.util.DocLink;
import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
@@ -67,11 +68,11 @@ public abstract class HtmlDocWriter extends HtmlWriter {
*
* @param filename String file name.
*/
- public HtmlDocWriter(Configuration configuration, DocPath filename)
- throws IOException {
+ public HtmlDocWriter(Configuration configuration, DocPath filename) {
super(configuration, filename);
this.pathToRoot = filename.parent().invert();
- configuration.message.notice("doclet.Generating_0",
+ Messages messages = configuration.getMessages();
+ messages.notice("doclet.Generating_0",
DocFile.createFileForOutput(configuration, filename).getPath());
}
@@ -310,10 +311,6 @@ public abstract class HtmlDocWriter extends HtmlWriter {
return (encl.isUnnamed()) ? "" : (encl.getQualifiedName() + ".");
}
- public boolean getMemberDetailsListPrinted() {
- return memberDetailsListPrinted;
- }
-
/**
* Print the frames version of the Html file header.
* Called only when generating an HTML frames file.
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlWriter.java
index 79184184107..b69f8546253 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlWriter.java
@@ -30,6 +30,7 @@ import java.util.*;
import jdk.javadoc.internal.doclets.toolkit.Configuration;
import jdk.javadoc.internal.doclets.toolkit.Content;
+import jdk.javadoc.internal.doclets.toolkit.Resources;
import jdk.javadoc.internal.doclets.toolkit.util.DocFile;
import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
import jdk.javadoc.internal.doclets.toolkit.util.DocletConstants;
@@ -61,11 +62,6 @@ public class HtmlWriter {
*/
protected Configuration configuration;
- /**
- * The flag to indicate whether a member details list is printed or not.
- */
- protected boolean memberDetailsListPrinted;
-
/**
* Header for table displaying modules and description..
*/
@@ -106,89 +102,7 @@ public class HtmlWriter {
*/
protected final String modifierTypeHeader;
- public final Content overviewLabel;
-
- public final Content defaultPackageLabel;
-
- public final Content packageLabel;
-
- public final Content moduleLabel;
-
- public final Content useLabel;
-
- public final Content prevLabel;
-
- public final Content nextLabel;
-
- public final Content prevclassLabel;
-
- public final Content nextclassLabel;
-
- public final Content summaryLabel;
-
- public final Content detailLabel;
-
- public final Content moduleSubNavLabel;
-
- public final Content framesLabel;
-
- public final Content noframesLabel;
-
- public final Content treeLabel;
-
- public final Content classLabel;
-
- public final Content deprecatedLabel;
-
- public final Content deprecatedPhrase;
-
- public final Content allclassesLabel;
-
- public final Content allpackagesLabel;
-
- public final Content allmodulesLabel;
-
- public final Content indexLabel;
-
- public final Content helpLabel;
-
- public final Content seeLabel;
-
- public final Content descriptionLabel;
-
- public final Content prevpackageLabel;
-
- public final Content nextpackageLabel;
-
- public final Content prevmoduleLabel;
-
- public final Content nextmoduleLabel;
-
- public final Content packagesLabel;
-
- public final Content modulesLabel;
-
- public final Content methodDetailsLabel;
-
- public final Content annotationTypeDetailsLabel;
-
- public final Content fieldDetailsLabel;
-
- public final Content propertyDetailsLabel;
-
- public final Content constructorDetailsLabel;
-
- public final Content enumConstantsDetailsLabel;
-
- public final Content specifiedByLabel;
-
- public final Content overridesLabel;
-
- public final Content descfrmClassLabel;
-
- public final Content descfrmInterfaceLabel;
-
- private final Writer writer;
+ private final DocFile docFile;
protected Content script;
@@ -198,143 +112,45 @@ public class HtmlWriter {
*
* @param path The directory path to be created for this file
* or null if none to be created.
- * @exception IOException Exception raised by the FileWriter is passed on
- * to next level.
- * @exception UnsupportedEncodingException Exception raised by the
- * OutputStreamWriter is passed on to next level.
*/
- public HtmlWriter(Configuration configuration, DocPath path)
- throws IOException, UnsupportedEncodingException {
- writer = DocFile.createFileForOutput(configuration, path).openWriter();
+ public HtmlWriter(Configuration configuration, DocPath path) {
+ docFile = DocFile.createFileForOutput(configuration, path);
this.configuration = configuration;
- this.memberDetailsListPrinted = false;
+
+ // The following should be converted to shared Content objects
+ // and moved to Contents, but that will require additional
+ // changes at the use sites.
+ Resources resources = configuration.getResources();
moduleTableHeader = Arrays.asList(
- configuration.getText("doclet.Module"),
- configuration.getText("doclet.Description"));
+ resources.getText("doclet.Module"),
+ resources.getText("doclet.Description"));
packageTableHeader = new ArrayList<>();
- packageTableHeader.add(configuration.getText("doclet.Package"));
- packageTableHeader.add(configuration.getText("doclet.Description"));
+ packageTableHeader.add(resources.getText("doclet.Package"));
+ packageTableHeader.add(resources.getText("doclet.Description"));
requiresTableHeader = new ArrayList<>();
- requiresTableHeader.add(configuration.getText("doclet.Module"));
- requiresTableHeader.add(configuration.getText("doclet.Description"));
+ requiresTableHeader.add(resources.getText("doclet.Module"));
+ requiresTableHeader.add(resources.getText("doclet.Description"));
exportedPackagesTableHeader = new ArrayList<>();
- exportedPackagesTableHeader.add(configuration.getText("doclet.Package"));
- exportedPackagesTableHeader.add(configuration.getText("doclet.Module"));
- exportedPackagesTableHeader.add(configuration.getText("doclet.Description"));
+ exportedPackagesTableHeader.add(resources.getText("doclet.Package"));
+ exportedPackagesTableHeader.add(resources.getText("doclet.Module"));
+ exportedPackagesTableHeader.add(resources.getText("doclet.Description"));
usesTableHeader = new ArrayList<>();
- usesTableHeader.add(configuration.getText("doclet.Type"));
- usesTableHeader.add(configuration.getText("doclet.Description"));
+ usesTableHeader.add(resources.getText("doclet.Type"));
+ usesTableHeader.add(resources.getText("doclet.Description"));
providesTableHeader = new ArrayList<>();
- providesTableHeader.add(configuration.getText("doclet.Type"));
- providesTableHeader.add(configuration.getText("doclet.Description"));
- useTableSummary = configuration.getText("doclet.Use_Table_Summary",
- configuration.getText("doclet.packages"));
- modifierTypeHeader = configuration.getText("doclet.0_and_1",
- configuration.getText("doclet.Modifier"),
- configuration.getText("doclet.Type"));
- overviewLabel = getResource("doclet.Overview");
- defaultPackageLabel = new StringContent(DocletConstants.DEFAULT_PACKAGE_NAME);
- packageLabel = getResource("doclet.Package");
- moduleLabel = getResource("doclet.Module");
- useLabel = getResource("doclet.navClassUse");
- prevLabel = getResource("doclet.Prev");
- nextLabel = getResource("doclet.Next");
- prevclassLabel = getNonBreakResource("doclet.Prev_Class");
- nextclassLabel = getNonBreakResource("doclet.Next_Class");
- summaryLabel = getResource("doclet.Summary");
- detailLabel = getResource("doclet.Detail");
- moduleSubNavLabel = getResource("doclet.Module_Sub_Nav");
- framesLabel = getResource("doclet.Frames");
- noframesLabel = getNonBreakResource("doclet.No_Frames");
- treeLabel = getResource("doclet.Tree");
- classLabel = getResource("doclet.Class");
- deprecatedLabel = getResource("doclet.navDeprecated");
- deprecatedPhrase = getResource("doclet.Deprecated");
- allclassesLabel = getNonBreakResource("doclet.All_Classes");
- allpackagesLabel = getNonBreakResource("doclet.All_Packages");
- allmodulesLabel = getNonBreakResource("doclet.All_Modules");
- indexLabel = getResource("doclet.Index");
- helpLabel = getResource("doclet.Help");
- seeLabel = getResource("doclet.See");
- descriptionLabel = getResource("doclet.Description");
- prevpackageLabel = getNonBreakResource("doclet.Prev_Package");
- nextpackageLabel = getNonBreakResource("doclet.Next_Package");
- prevmoduleLabel = getNonBreakResource("doclet.Prev_Module");
- nextmoduleLabel = getNonBreakResource("doclet.Next_Module");
- packagesLabel = getResource("doclet.Packages");
- modulesLabel = getResource("doclet.Modules");
- methodDetailsLabel = getResource("doclet.Method_Detail");
- annotationTypeDetailsLabel = getResource("doclet.Annotation_Type_Member_Detail");
- fieldDetailsLabel = getResource("doclet.Field_Detail");
- propertyDetailsLabel = getResource("doclet.Property_Detail");
- constructorDetailsLabel = getResource("doclet.Constructor_Detail");
- enumConstantsDetailsLabel = getResource("doclet.Enum_Constant_Detail");
- specifiedByLabel = getResource("doclet.Specified_By");
- overridesLabel = getResource("doclet.Overrides");
- descfrmClassLabel = getResource("doclet.Description_From_Class");
- descfrmInterfaceLabel = getResource("doclet.Description_From_Interface");
+ providesTableHeader.add(resources.getText("doclet.Type"));
+ providesTableHeader.add(resources.getText("doclet.Description"));
+ useTableSummary = resources.getText("doclet.Use_Table_Summary",
+ resources.getText("doclet.packages"));
+ modifierTypeHeader = resources.getText("doclet.0_and_1",
+ resources.getText("doclet.Modifier"),
+ resources.getText("doclet.Type"));
}
public void write(Content c) throws IOException {
- c.write(writer, true);
- }
-
- public void close() throws IOException {
- writer.close();
- }
-
- /**
- * Get the configuration string as a content.
- *
- * @param key the key to look for in the configuration file
- * @return a content tree for the text
- */
- public Content getResource(String key) {
- return configuration.getResource(key);
- }
-
- /**
- * Get the configuration string as a content, replacing spaces
- * with non-breaking spaces.
- *
- * @param key the key to look for in the configuration file
- * @return a content tree for the text
- */
- public Content getNonBreakResource(String key) {
- String text = configuration.getText(key);
- Content c = configuration.newContent();
- int start = 0;
- int p;
- while ((p = text.indexOf(" ", start)) != -1) {
- c.addContent(text.substring(start, p));
- c.addContent(RawHtml.nbsp);
- start = p + 1;
+ try (Writer writer = docFile.openWriter()) {
+ c.write(writer, true);
}
- c.addContent(text.substring(start));
- return c;
- }
-
- /**
- * Get the configuration string as a content.
- *
- * @param key the key to look for in the configuration file
- * @param o string or content argument added to configuration text
- * @return a content tree for the text
- */
- public Content getResource(String key, Object o) {
- return configuration.getResource(key, o);
- }
-
- /**
- * Get the configuration string as a content.
- *
- * @param key the key to look for in the configuration file
- * @param o1 string or content argument added to configuration text
- * @param o2 string or content argument added to configuration text
- * @return a content tree for the text
- */
- public Content getResource(String key, Object o0, Object o1) {
- return configuration.getResource(key, o0, o1);
}
/**
@@ -343,21 +159,21 @@ public class HtmlWriter {
* @return an HtmlTree for the SCRIPT tag
*/
protected HtmlTree getWinTitleScript(){
- HtmlTree script = HtmlTree.SCRIPT();
+ HtmlTree scriptTree = HtmlTree.SCRIPT();
if(winTitle != null && winTitle.length() > 0) {
- String scriptCode = "" + DocletConstants.NL;
- RawHtml scriptContent = new RawHtml(scriptCode);
- script.addContent(scriptContent);
+ String scriptCode = "\n";
+ RawHtml scriptContent = new RawHtml(scriptCode.replace("\n", DocletConstants.NL));
+ scriptTree.addContent(scriptContent);
}
- return script;
+ return scriptTree;
}
/**
@@ -413,61 +229,61 @@ public class HtmlWriter {
* @return a content for the SCRIPT tag
*/
protected Content getFramesJavaScript() {
- HtmlTree script = HtmlTree.SCRIPT();
- String scriptCode = DocletConstants.NL +
- " targetPage = \"\" + window.location.search;" + DocletConstants.NL +
- " if (targetPage != \"\" && targetPage != \"undefined\")" + DocletConstants.NL +
- " targetPage = targetPage.substring(1);" + DocletConstants.NL +
- " if (targetPage.indexOf(\":\") != -1 || (targetPage != \"\" && !validURL(targetPage)))" + DocletConstants.NL +
- " targetPage = \"undefined\";" + DocletConstants.NL +
- " function validURL(url) {" + DocletConstants.NL +
- " try {" + DocletConstants.NL +
- " url = decodeURIComponent(url);" + DocletConstants.NL +
- " }" + DocletConstants.NL +
- " catch (error) {" + DocletConstants.NL +
- " return false;" + DocletConstants.NL +
- " }" + DocletConstants.NL +
- " var pos = url.indexOf(\".html\");" + DocletConstants.NL +
- " if (pos == -1 || pos != url.length - 5)" + DocletConstants.NL +
- " return false;" + DocletConstants.NL +
- " var allowNumber = false;" + DocletConstants.NL +
- " var allowSep = false;" + DocletConstants.NL +
- " var seenDot = false;" + DocletConstants.NL +
- " for (var i = 0; i < url.length - 5; i++) {" + DocletConstants.NL +
- " var ch = url.charAt(i);" + DocletConstants.NL +
- " if ('a' <= ch && ch <= 'z' ||" + DocletConstants.NL +
- " 'A' <= ch && ch <= 'Z' ||" + DocletConstants.NL +
- " ch == '$' ||" + DocletConstants.NL +
- " ch == '_' ||" + DocletConstants.NL +
- " ch.charCodeAt(0) > 127) {" + DocletConstants.NL +
- " allowNumber = true;" + DocletConstants.NL +
- " allowSep = true;" + DocletConstants.NL +
- " } else if ('0' <= ch && ch <= '9'" + DocletConstants.NL +
- " || ch == '-') {" + DocletConstants.NL +
- " if (!allowNumber)" + DocletConstants.NL +
- " return false;" + DocletConstants.NL +
- " } else if (ch == '/' || ch == '.') {" + DocletConstants.NL +
- " if (!allowSep)" + DocletConstants.NL +
- " return false;" + DocletConstants.NL +
- " allowNumber = false;" + DocletConstants.NL +
- " allowSep = false;" + DocletConstants.NL +
- " if (ch == '.')" + DocletConstants.NL +
- " seenDot = true;" + DocletConstants.NL +
- " if (ch == '/' && seenDot)" + DocletConstants.NL +
- " return false;" + DocletConstants.NL +
- " } else {" + DocletConstants.NL +
- " return false;"+ DocletConstants.NL +
- " }" + DocletConstants.NL +
- " }" + DocletConstants.NL +
- " return true;" + DocletConstants.NL +
- " }" + DocletConstants.NL +
- " function loadFrames() {" + DocletConstants.NL +
- " if (targetPage != \"\" && targetPage != \"undefined\")" + DocletConstants.NL +
- " top.classFrame.location = top.targetPage;" + DocletConstants.NL +
- " }" + DocletConstants.NL;
- RawHtml scriptContent = new RawHtml(scriptCode);
- script.addContent(scriptContent);
- return script;
+ HtmlTree scriptTree = HtmlTree.SCRIPT();
+ String scriptCode = "\n" +
+ " targetPage = \"\" + window.location.search;\n" +
+ " if (targetPage != \"\" && targetPage != \"undefined\")\n" +
+ " targetPage = targetPage.substring(1);\n" +
+ " if (targetPage.indexOf(\":\") != -1 || (targetPage != \"\" && !validURL(targetPage)))\n" +
+ " targetPage = \"undefined\";\n" +
+ " function validURL(url) {\n" +
+ " try {\n" +
+ " url = decodeURIComponent(url);\n" +
+ " }\n" +
+ " catch (error) {\n" +
+ " return false;\n" +
+ " }\n" +
+ " var pos = url.indexOf(\".html\");\n" +
+ " if (pos == -1 || pos != url.length - 5)\n" +
+ " return false;\n" +
+ " var allowNumber = false;\n" +
+ " var allowSep = false;\n" +
+ " var seenDot = false;\n" +
+ " for (var i = 0; i < url.length - 5; i++) {\n" +
+ " var ch = url.charAt(i);\n" +
+ " if ('a' <= ch && ch <= 'z' ||\n" +
+ " 'A' <= ch && ch <= 'Z' ||\n" +
+ " ch == '$' ||\n" +
+ " ch == '_' ||\n" +
+ " ch.charCodeAt(0) > 127) {\n" +
+ " allowNumber = true;\n" +
+ " allowSep = true;\n" +
+ " } else if ('0' <= ch && ch <= '9'\n" +
+ " || ch == '-') {\n" +
+ " if (!allowNumber)\n" +
+ " return false;\n" +
+ " } else if (ch == '/' || ch == '.') {\n" +
+ " if (!allowSep)\n" +
+ " return false;\n" +
+ " allowNumber = false;\n" +
+ " allowSep = false;\n" +
+ " if (ch == '.')\n" +
+ " seenDot = true;\n" +
+ " if (ch == '/' && seenDot)\n" +
+ " return false;\n" +
+ " } else {\n" +
+ " return false;\n" +
+ " }\n" +
+ " }\n" +
+ " return true;\n" +
+ " }\n" +
+ " function loadFrames() {\n" +
+ " if (targetPage != \"\" && targetPage != \"undefined\")\n" +
+ " top.classFrame.location = top.targetPage;\n" +
+ " }\n";
+ RawHtml scriptContent = new RawHtml(scriptCode.replace("\n", DocletConstants.NL));
+ scriptTree.addContent(scriptContent);
+ return scriptTree;
}
/**
@@ -487,7 +303,7 @@ public class HtmlWriter {
this.script = getWinTitleScript();
body.addContent(script);
Content noScript = HtmlTree.NOSCRIPT(
- HtmlTree.DIV(getResource("doclet.No_Script_Message")));
+ HtmlTree.DIV(configuration.getContent("doclet.No_Script_Message")));
body.addContent(noScript);
}
return body;
@@ -558,17 +374,6 @@ public class HtmlWriter {
return title;
}
- public String codeText(String text) {
- return "" + text + "";
- }
-
- /**
- * Return " ", non-breaking space.
- */
- public Content getSpace() {
- return RawHtml.nbsp;
- }
-
/*
* Returns a header for Modifier and Type column of a table.
*/
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/RawHtml.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/RawHtml.java
index ca621a4c75a..599e01dca92 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/RawHtml.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/RawHtml.java
@@ -44,7 +44,7 @@ import jdk.javadoc.internal.doclets.toolkit.util.DocletConstants;
*/
public class RawHtml extends Content {
- private String rawHtmlContent;
+ private final String rawHtmlContent;
public static final Content nbsp = new RawHtml(" ");
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/AbstractDoclet.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/AbstractDoclet.java
index 9dfc45d28c0..66ff424dbb2 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/AbstractDoclet.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/AbstractDoclet.java
@@ -58,7 +58,10 @@ public abstract class AbstractDoclet {
/**
* The global configuration information for this run.
*/
- public Configuration configuration;
+ private Configuration configuration;
+
+ protected Messages messages;
+
/*
* a handle to our utility methods
*/
@@ -76,7 +79,7 @@ public abstract class AbstractDoclet {
*/
private boolean isValidDoclet() {
if (!getClass().getName().equals(TOOLKIT_DOCLET_NAME)) {
- configuration.message.error("doclet.Toolkit_Usage_Violation",
+ messages.error("doclet.Toolkit_Usage_Violation",
TOOLKIT_DOCLET_NAME);
return false;
}
@@ -96,6 +99,8 @@ public abstract class AbstractDoclet {
configuration.utils = new Utils(configuration);
utils = configuration.utils;
configuration.workArounds = new WorkArounds(configuration);
+ messages = configuration.getMessages();
+
if (!isValidDoclet()) {
return false;
}
@@ -116,6 +121,7 @@ public abstract class AbstractDoclet {
}
return false;
} catch (Exception exc) {
+ exc.printStackTrace(System.err);
return false;
}
return true;
@@ -146,14 +152,13 @@ public abstract class AbstractDoclet {
*/
private void startGeneration(DocletEnvironment root) throws Configuration.Fault, Exception {
if (root.getIncludedClasses().isEmpty()) {
- configuration.message.
- error("doclet.No_Public_Classes_To_Document");
+ messages.error("doclet.No_Public_Classes_To_Document");
return;
}
if (!configuration.setOptions()) {
return;
}
- configuration.getDocletSpecificMsg().notice("doclet.build_version",
+ messages.notice("doclet.build_version",
configuration.getDocletSpecificBuildDate());
ClassTree classtree = new ClassTree(configuration, configuration.nodeprecated);
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/AnnotationTypeFieldWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/AnnotationTypeFieldWriter.java
index 8fd75dfcec2..e4299695399 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/AnnotationTypeFieldWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/AnnotationTypeFieldWriter.java
@@ -124,9 +124,4 @@ public interface AnnotationTypeFieldWriter {
* @param annotationDocTree the content tree to which the tags will be added
*/
public void addTags(Element member, Content annotationDocTree);
-
- /**
- * Close the writer.
- */
- public void close() throws IOException;
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/AnnotationTypeRequiredMemberWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/AnnotationTypeRequiredMemberWriter.java
index 0dae3f11917..e6b3c6a09be 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/AnnotationTypeRequiredMemberWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/AnnotationTypeRequiredMemberWriter.java
@@ -125,9 +125,4 @@ public interface AnnotationTypeRequiredMemberWriter {
* @param annotationDocTree the content tree to which the tags will be added
*/
public void addTags(Element member, Content annotationDocTree);
-
- /**
- * Close the writer.
- */
- public void close() throws IOException;
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/AnnotationTypeWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/AnnotationTypeWriter.java
index 388b938478b..7b23954346d 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/AnnotationTypeWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/AnnotationTypeWriter.java
@@ -155,11 +155,6 @@ public interface AnnotationTypeWriter {
*/
public void printDocument(Content contentTree) throws IOException;
- /**
- * Close the writer.
- */
- public void close() throws IOException;
-
/**
* Return the {@link TypeElement} being documented.
*
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/ClassWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/ClassWriter.java
index d8bb3eae131..33169d216fa 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/ClassWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/ClassWriter.java
@@ -196,11 +196,6 @@ public interface ClassWriter {
*/
public void printDocument(Content contentTree) throws IOException;
- /**
- * Close the writer.
- */
- public void close() throws IOException;
-
/**
* Return the TypeElement being documented.
*
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Configuration.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Configuration.java
index 61fc2867771..3dbd69bd77a 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Configuration.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Configuration.java
@@ -27,8 +27,6 @@ package jdk.javadoc.internal.doclets.toolkit;
import java.io.*;
import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
import javax.lang.model.element.Element;
import javax.lang.model.element.ModuleElement;
@@ -50,7 +48,6 @@ import jdk.javadoc.internal.doclets.toolkit.util.DocletAbortException;
import jdk.javadoc.internal.doclets.toolkit.util.DocletConstants;
import jdk.javadoc.internal.doclets.toolkit.util.Extern;
import jdk.javadoc.internal.doclets.toolkit.util.Group;
-import jdk.javadoc.internal.doclets.toolkit.util.MessageRetriever;
import jdk.javadoc.internal.doclets.toolkit.util.MetaKeywords;
import jdk.javadoc.internal.doclets.toolkit.util.TypeElementCatalog;
import jdk.javadoc.internal.doclets.toolkit.util.Utils;
@@ -265,15 +262,6 @@ public abstract class Configuration {
*/
public TypeElementCatalog typeElementCatalog;
- /**
- * Message Retriever for the doclet, to retrieve message from the resource
- * file for this Configuration, which is common for 1.1 and standard
- * doclets.
- *
- * TODO: Make this private!!!
- */
- public MessageRetriever message = null;
-
/**
* True if user wants to suppress time stamp in output.
* Default is false.
@@ -309,6 +297,9 @@ public abstract class Configuration {
private List groups;
+ public abstract Messages getMessages();
+ public abstract Resources getResources();
+
/**
* Return the build date for the doclet.
*/
@@ -322,12 +313,6 @@ public abstract class Configuration {
public abstract boolean finishOptionSettings();
- /**
- * Return the doclet specific {@link MessageRetriever}
- * @return the doclet specific MessageRetriever.
- */
- public abstract MessageRetriever getDocletSpecificMsg();
-
public CommentUtils cmtUtils;
public SortedSet modules;
@@ -354,11 +339,12 @@ public abstract class Configuration {
*/
public Map> modulePackages;
+ protected static final String sharedResourceBundleName =
+ "jdk.javadoc.internal.doclets.toolkit.resources.doclets";
/**
* Constructor. Constructs the message retriever with resource file.
*/
public Configuration() {
- message = new MessageRetriever(this, "jdk.javadoc.internal.doclets.toolkit.resources.doclets");
excludedDocFileDirs = new HashSet<>();
excludedQualifiers = new HashSet<>();
setTabWidth(DocletConstants.DEFAULT_TAB_STOP_LENGTH);
@@ -578,7 +564,7 @@ public abstract class Configuration {
sourcetab = -1;
}
if (sourcetab <= 0) {
- message.warning("doclet.sourcetab_warning");
+ getMessages().warning("doclet.sourcetab_warning");
setTabWidth(DocletConstants.DEFAULT_TAB_STOP_LENGTH);
}
return true;
@@ -696,7 +682,7 @@ public abstract class Configuration {
*/
private void initTagletManager(Set> customTagStrs) {
tagletManager = tagletManager == null ?
- new TagletManager(nosince, showversion, showauthor, javafx, message) :
+ new TagletManager(nosince, showversion, showauthor, javafx, this) :
tagletManager;
for (List args : customTagStrs) {
if (args.get(0).equals("-taglet")) {
@@ -721,7 +707,8 @@ public abstract class Configuration {
} else if (tokens.size() >= 3) {
tagletManager.addNewSimpleCustomTag(tokens.get(0), tokens.get(2), tokens.get(1));
} else {
- message.error("doclet.Error_invalid_custom_tag_argument", args.get(1));
+ Messages messages = getMessages();
+ messages.error("doclet.Error_invalid_custom_tag_argument", args.get(1));
}
}
}
@@ -893,123 +880,69 @@ public abstract class Configuration {
: utils.getFullyQualifiedName(te);
}
- public String getText(String key) {
- // Check the doclet specific properties file.
- MessageRetriever docletMessage = getDocletSpecificMsg();
- if (docletMessage.containsKey(key)) {
- return docletMessage.getText(key);
- }
- // Check the shared properties file.
- return message.getText(key);
- }
-
- public String getText(String key, String a1) {
- // Check the doclet specific properties file.
- MessageRetriever docletMessage = getDocletSpecificMsg();
- if (docletMessage.containsKey(key)) {
- return docletMessage.getText(key, a1);
- }
- // Check the shared properties file.
- return message.getText(key, a1);
- }
-
- public String getText(String key, String a1, String a2) {
- // Check the doclet specific properties file.
- MessageRetriever docletMessage = getDocletSpecificMsg();
- if (docletMessage.containsKey(key)) {
- return docletMessage.getText(key, a1, a2);
- }
- // Check the shared properties file.
- return message.getText(key, a1, a2);
- }
-
- public String getText(String key, String a1, String a2, String a3) {
- // Check the doclet specific properties file.
- MessageRetriever docletMessage = getDocletSpecificMsg();
- if (docletMessage.containsKey(key)) {
- return docletMessage.getText(key, a1, a2, a3);
- }
- // Check the shared properties file.
- return message.getText(key, a1, a2, a3);
- }
-
- public abstract Content newContent();
+ /**
+ * Convenience method to obtain a resource from the doclet's
+ * {@link Resources resources}.
+ * Equivalent to getResources.getText(key);.
+ * @param key the key for the desired string
+ * @return the string for the given key
+ * @throws MissingResourceException if the key is not found in either
+ * bundle.
+ */
+ public abstract String getText(String key);
/**
- * Get the configuration string as a content.
+ * Convenience method to obtain a resource from the doclet's
+ * {@link Resources resources}.
+ * Equivalent to getResources.getText(key, args);.
+ * @param key the key for the desired string
+ * @param args values to be substituted into the resulting string
+ * @return the string for the given key
+ * @throws MissingResourceException if the key is not found in either
+ * bundle.
+ */
+ public abstract String getText(String key, String... args);
+
+ /**
+ * Convenience method to obtain a resource from the doclet's
+ * {@link Resources resources} as a {@code Content} object.
*
- * @param key the key to look for in the configuration file
+ * @param key the key for the desired string
* @return a content tree for the text
*/
- public Content getResource(String key) {
- Content c = newContent();
- c.addContent(getText(key));
- return c;
- }
+ public abstract Content getContent(String key);
/**
- * Get the configuration string as a content.
+ * Convenience method to obtain a resource from the doclet's
+ * {@link Resources resources} as a {@code Content} object.
*
- * @param key the key to look for in the configuration file
+ * @param key the key for the desired string
* @param o string or content argument added to configuration text
* @return a content tree for the text
*/
- public Content getResource(String key, Object o) {
- return getResource(key, o, null, null);
- }
+ public abstract Content getContent(String key, Object o);
/**
- * Get the configuration string as a content.
+ * Convenience method to obtain a resource from the doclet's
+ * {@link Resources resources} as a {@code Content} object.
*
- * @param key the key to look for in the configuration file
+ * @param key the key for the desired string
* @param o1 resource argument
* @param o2 resource argument
* @return a content tree for the text
*/
- public Content getResource(String key, Object o1, Object o2) {
- return getResource(key, o1, o2, null);
- }
+ public abstract Content getContent(String key, Object o1, Object o2);
/**
* Get the configuration string as a content.
*
- * @param key the key to look for in the configuration file
+ * @param key the key for the desired string
* @param o0 string or content argument added to configuration text
* @param o1 string or content argument added to configuration text
* @param o2 string or content argument added to configuration text
* @return a content tree for the text
*/
- public Content getResource(String key, Object o0, Object o1, Object o2) {
- Content c = newContent();
- Pattern p = Pattern.compile("\\{([012])\\}");
- String text = getText(key);
- Matcher m = p.matcher(text);
- int start = 0;
- while (m.find(start)) {
- c.addContent(text.substring(start, m.start()));
-
- Object o = null;
- switch (m.group(1).charAt(0)) {
- case '0': o = o0; break;
- case '1': o = o1; break;
- case '2': o = o2; break;
- }
-
- if (o == null) {
- c.addContent("{" + m.group(1) + "}");
- } else if (o instanceof String) {
- c.addContent((String) o);
- } else if (o instanceof Content) {
- c.addContent((Content) o);
- }
-
- start = m.end();
- }
-
- c.addContent(text.substring(start));
- return c;
- }
-
+ public abstract Content getContent(String key, Object o0, Object o1, Object o2);
/**
* Return true if the TypeElement element is getting documented, depending upon
@@ -1110,7 +1043,7 @@ public abstract class Configuration {
private String getOptionsMessage(String key) {
try {
- return c.getDocletSpecificMsg().getText(key, (Object[]) null);
+ return c.getResources().getText(key);
} catch (MissingResourceException ignore) {
return "";
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/ConstantsSummaryWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/ConstantsSummaryWriter.java
index c7493c604d2..536b9791e12 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/ConstantsSummaryWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/ConstantsSummaryWriter.java
@@ -46,11 +46,6 @@ import javax.lang.model.element.VariableElement;
public interface ConstantsSummaryWriter {
- /**
- * Close the writer.
- */
- public abstract void close() throws IOException;
-
/**
* Get the header for the constant summary documentation.
*
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/ConstructorWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/ConstructorWriter.java
index 02d0f2725b1..2f306666f95 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/ConstructorWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/ConstructorWriter.java
@@ -119,9 +119,4 @@ public interface ConstructorWriter {
* @param foundNonPubConstructor true if we found a non public constructor.
*/
public void setFoundNonPubConstructor(boolean foundNonPubConstructor);
-
- /**
- * Close the writer.
- */
- public void close() throws IOException;
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/EnumConstantWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/EnumConstantWriter.java
index 2ed845c882a..1e6b35f3cdf 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/EnumConstantWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/EnumConstantWriter.java
@@ -112,9 +112,4 @@ public interface EnumConstantWriter {
* @return content tree for the enum constants documentation
*/
public Content getEnumConstants(Content enumConstantsTree, boolean isLastContent);
-
- /**
- * Close the writer.
- */
- public void close() throws IOException;
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/FieldWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/FieldWriter.java
index 30323614ef5..e5b141a01b3 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/FieldWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/FieldWriter.java
@@ -113,9 +113,4 @@ public interface FieldWriter {
* @return content tree for the field documentation
*/
public Content getFieldDoc(Content fieldDocTree, boolean isLastContent);
-
- /**
- * Close the writer.
- */
- public void close() throws IOException;
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/MemberSummaryWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/MemberSummaryWriter.java
index f50bc02163f..415de482e73 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/MemberSummaryWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/MemberSummaryWriter.java
@@ -122,9 +122,4 @@ public interface MemberSummaryWriter {
* @return a content tree for the member
*/
public Content getMemberTree(Content memberTree);
-
- /**
- * Close the writer.
- */
- public void close() throws IOException;
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Messages.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Messages.java
new file mode 100644
index 00000000000..689a45c9a34
--- /dev/null
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Messages.java
@@ -0,0 +1,164 @@
+/*
+ * Copyright (c) 2016, 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;
+
+import javax.lang.model.element.Element;
+import javax.tools.Diagnostic;
+
+import com.sun.source.util.DocTreePath;
+import jdk.javadoc.doclet.Reporter;
+
+import static javax.tools.Diagnostic.Kind.*;
+
+/**
+ * Provides standardized access to the diagnostic reporting facilities
+ * for a doclet.
+ *
+ * Messages are specified by resource keys to be found in the doclet's
+ * {@link Resources resources}. Values can be substituted into the
+ * strings obtained from the resource files.
+ *
+ * Messages are reported to the doclet's {@link Reporter reporter}.
+ */
+public class Messages {
+ private final Configuration configuration;
+ private final Resources resources;
+ private Reporter reporter;
+
+ /**
+ * Creates a {@code Messages} object to provide standardized access to
+ * the doclet's diagnostic reporting mechanisms.
+ *
+ * @param configuration the doclet's configuration, used to access
+ * the doclet's resources, reporter, and additional methods and state
+ * used to filter out messages, if any, which should be suppressed.
+ */
+ public Messages(Configuration configuration) {
+ this.configuration = configuration;
+ resources = configuration.getResources();
+ }
+
+ // ***** Errors *****
+
+ /**
+ * Reports an error message to the doclet's reporter.
+ *
+ * @param key the name of a resource containing the message to be printed
+ * @param args optional arguments to be replaced in the message.
+ */
+ public void error(String key, Object... args) {
+ report(ERROR, resources.getText(key, args));
+ }
+
+ /**
+ * Reports an error message to the doclet's reporter.
+ *
+ * @param path a path identifying the position to be included with
+ * the message
+ * @param key the name of a resource containing the message to be printed
+ * @param args optional arguments to be replaced in the message.
+ */
+ public void error(DocTreePath path, String key, Object... args) {
+ report(ERROR, path, resources.getText(key, args));
+ }
+
+ // ***** Warnings *****
+
+ /**
+ * Reports a warning message to the doclet's reporter.
+ *
+ * @param key the name of a resource containing the message to be printed
+ * @param args optional arguments to be replaced in the message.
+ */
+ public void warning(String key, Object... args) {
+ report(WARNING, resources.getText(key, args));
+ }
+
+ /**
+ * Reports a warning message to the doclet's reporter.
+ *
+ * @param path a path identifying the position to be included with
+ * the message
+ * @param key the name of a resource containing the message to be printed
+ * @param args optional arguments to be replaced in the message.
+ */
+ public void warning(DocTreePath path, String key, Object... args) {
+ if (configuration.showMessage(path, key))
+ report(WARNING, path, resources.getText(key, args));
+ }
+
+ /**
+ * Reports a warning message to the doclet's reporter.
+ *
+ * @param e an element identifying the declaration whose position should
+ * to be included with the message
+ * @param key the name of a resource containing the message to be printed
+ * @param args optional arguments to be replaced in the message.
+ */
+ public void warning(Element e, String key, Object... args) {
+ if (configuration.showMessage(e, key)) {
+ report(WARNING, e, resources.getText(key, args));
+ }
+ }
+
+ // ***** Notices *****
+
+ /**
+ * Reports an informational notice to the doclet's reporter.
+ *
+ * @param key the name of a resource containing the message to be printed
+ * @param args optional arguments to be replaced in the message.
+ */
+ public void notice(String key, Object... args) {
+ if (!configuration.quiet) {
+ report(NOTE, resources.getText(key, args));
+ }
+ }
+
+ // ***** Internal support *****
+
+ private void report(Diagnostic.Kind k, String msg) {
+ initReporter();
+ reporter.print(k, msg);
+ }
+
+ private void report(Diagnostic.Kind k, DocTreePath p, String msg) {
+ initReporter();
+ reporter.print(k, p, msg);
+ }
+
+ private void report(Diagnostic.Kind k, Element e, String msg) {
+ initReporter();
+ reporter.print(k, e, msg);
+ }
+
+ // Lazy init the reporter for now, until we can fix/improve
+ // the init of ConfigurationImpl in HtmlDoclet (and similar.)
+ private void initReporter() {
+ if (reporter == null) {
+ reporter = configuration.reporter;
+ }
+ }
+}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/MethodWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/MethodWriter.java
index 7629c49ee80..08d91045cdc 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/MethodWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/MethodWriter.java
@@ -114,9 +114,4 @@ public interface MethodWriter {
* @return content tree for the method documentation
*/
public Content getMethodDoc(Content methodDocTree, boolean isLastContent);
-
- /**
- * Close the writer.
- */
- public void close() throws IOException;
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/ModuleSummaryWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/ModuleSummaryWriter.java
index 27906a50daa..a49bf26d0b2 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/ModuleSummaryWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/ModuleSummaryWriter.java
@@ -132,10 +132,4 @@ public interface ModuleSummaryWriter {
* @param contentTree the content tree that will be printed
*/
public abstract void printDocument(Content contentTree) throws IOException;
-
- /**
- * Close the writer.
- */
- public abstract void close() throws IOException;
-
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/NestedClassWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/NestedClassWriter.java
index 3c075bb3771..a3fdb9e39a9 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/NestedClassWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/NestedClassWriter.java
@@ -40,9 +40,4 @@ import java.io.*;
*/
public interface NestedClassWriter {
-
- /**
- * Close the writer.
- */
- public void close() throws IOException;
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/PackageSummaryWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/PackageSummaryWriter.java
index c6f52860dcc..8e24984486b 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/PackageSummaryWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/PackageSummaryWriter.java
@@ -121,9 +121,4 @@ public interface PackageSummaryWriter {
*/
public abstract void printDocument(Content contentTree) throws IOException;
- /**
- * Close the writer.
- */
- public abstract void close() throws IOException;
-
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/PropertyWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/PropertyWriter.java
index 0ce595ccae3..e005546eda7 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/PropertyWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/PropertyWriter.java
@@ -112,9 +112,4 @@ public interface PropertyWriter {
* @return content tree for the property documentation
*/
public Content getPropertyDoc(Content propertyDocTree, boolean isLastContent);
-
- /**
- * Close the writer.
- */
- public void close() throws IOException;
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Resources.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Resources.java
new file mode 100644
index 00000000000..7c1a1683bcf
--- /dev/null
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Resources.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2016, 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;
+
+import java.text.MessageFormat;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * Access to the localizable resources used by a doclet.
+ * The resources are split across two resource bundles:
+ * one that contains format-neutral strings common to
+ * all supported formats, and one that contains strings
+ * specific to the selected doclet, such as the standard
+ * HTML doclet.
+ */
+public class Resources {
+ private final Configuration configuration;
+ private final String commonBundleName;
+ private final String docletBundleName;
+
+ protected ResourceBundle commonBundle;
+ protected ResourceBundle docletBundle;
+
+ /**
+ * Creates a {@code Resources} to provide access the resource
+ * bundles used by a doclet.
+ *
+ * @param configuration the configuration for the doclet,
+ * to provide access the locale to be used when accessing the
+ * names resource bundles.
+ * @param commonBundleName the name of the bundle containing the strings
+ * common to all output formats
+ * @param docletBundleName the name of the bundle containing the strings
+ * specific to a particular format
+ */
+ public Resources(Configuration configuration, String commonBundleName, String docletBundleName) {
+ this.configuration = configuration;
+ this.commonBundleName = commonBundleName;
+ this.docletBundleName = docletBundleName;
+ }
+
+ /**
+ * Gets the string for the given key from one of the doclet's
+ * resource bundles.
+ *
+ * The more specific bundle is checked first;
+ * if it is not there, the common bundle is then checked.
+ *
+ * @param key the key for the desired string
+ * @return the string for the given key
+ * @throws MissingResourceException if the key is not found in either
+ * bundle.
+ */
+ public String getText(String key) throws MissingResourceException {
+ initBundles();
+
+ if (docletBundle.containsKey(key))
+ return docletBundle.getString(key);
+
+ return commonBundle.getString(key);
+ }
+ /**
+ * Gets the string for the given key from one of the doclet's
+ * resource bundles, substituting additional arguments into
+ * into the resulting string with {@link MessageFormat#format}.
+ *
+ * The more specific bundle is checked first;
+ * if it is not there, the common bundle is then checked.
+ *
+ * @param key the key for the desired string
+ * @param args values to be substituted into the resulting string
+ * @return the string for the given key
+ * @throws MissingResourceException if the key is not found in either
+ * bundle.
+ */
+ public String getText(String key, Object... args) throws MissingResourceException {
+ return MessageFormat.format(getText(key), args);
+ }
+
+ /**
+ * Lazily initializes the bundles. This is (currently) necessary because
+ * this object may be created before the locale to be used is known.
+ */
+ protected void initBundles() {
+ if (commonBundle == null) {
+ Locale locale = configuration.getLocale();
+ this.commonBundle = ResourceBundle.getBundle(commonBundleName, locale);
+ this.docletBundle = ResourceBundle.getBundle(docletBundleName, locale);
+ }
+ }
+}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/SerializedFormWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/SerializedFormWriter.java
index 30215db10f0..a72c51c76e0 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/SerializedFormWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/SerializedFormWriter.java
@@ -137,11 +137,6 @@ public interface SerializedFormWriter {
*/
public SerialMethodWriter getSerialMethodWriter(TypeElement typeElement);
- /**
- * Close the writer.
- */
- public abstract void close() throws IOException;
-
/**
* Get the serialized content.
*
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/AbstractBuilder.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/AbstractBuilder.java
index 468e759ee4c..777d1d25ef6 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/AbstractBuilder.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/AbstractBuilder.java
@@ -33,6 +33,7 @@ import javax.lang.model.element.PackageElement;
import jdk.javadoc.internal.doclets.toolkit.Configuration;
import jdk.javadoc.internal.doclets.toolkit.Content;
+import jdk.javadoc.internal.doclets.toolkit.Messages;
import jdk.javadoc.internal.doclets.toolkit.util.DocletAbortException;
import jdk.javadoc.internal.doclets.toolkit.util.Utils;
@@ -89,6 +90,7 @@ public abstract class AbstractBuilder {
*/
protected final Configuration configuration;
+ protected final Messages messages;
protected final Utils utils;
/**
@@ -112,6 +114,7 @@ public abstract class AbstractBuilder {
*/
public AbstractBuilder(Context c) {
this.configuration = c.configuration;
+ this.messages = configuration.getMessages();
this.utils = configuration.utils;
this.containingPackagesSeen = c.containingPackagesSeen;
this.layoutParser = c.layoutParser;
@@ -144,13 +147,18 @@ public abstract class AbstractBuilder {
new Class>[]{XMLNode.class, Content.class},
new Object[]{node, contentTree});
} catch (NoSuchMethodException e) {
- e.printStackTrace();
+ e.printStackTrace(System.err);
configuration.reporter.print(ERROR, "Unknown element: " + component);
throw new DocletAbortException(e);
} catch (InvocationTargetException e) {
- throw new DocletAbortException(e.getCause());
+ Throwable cause = e.getCause();
+ if (cause instanceof DocletAbortException) {
+ throw (DocletAbortException) cause;
+ } else {
+ throw new DocletAbortException(e.getCause());
+ }
} catch (Exception e) {
- e.printStackTrace();
+ e.printStackTrace(System.err);
configuration.reporter.print(ERROR, "Exception " +
e.getClass().getName() +
" thrown while processing element: " + component);
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/AnnotationTypeBuilder.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/AnnotationTypeBuilder.java
index d83947c48f5..bec5010b927 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/AnnotationTypeBuilder.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/AnnotationTypeBuilder.java
@@ -124,7 +124,6 @@ public class AnnotationTypeBuilder extends AbstractBuilder {
writer.addAnnotationContentTree(contentTree, annotationContentTree);
writer.addFooter(contentTree);
writer.printDocument(contentTree);
- writer.close();
copyDocFiles();
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/ClassBuilder.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/ClassBuilder.java
index 60e61eace26..5ad0b019848 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/ClassBuilder.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/ClassBuilder.java
@@ -152,7 +152,6 @@ public class ClassBuilder extends AbstractBuilder {
writer.addClassContentTree(contentTree, classContentTree);
writer.addFooter(contentTree);
writer.printDocument(contentTree);
- writer.close();
copyDocFiles();
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/ConstantsSummaryBuilder.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/ConstantsSummaryBuilder.java
index d0a36f78377..704cb55efe8 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/ConstantsSummaryBuilder.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/ConstantsSummaryBuilder.java
@@ -153,7 +153,6 @@ public class ConstantsSummaryBuilder extends AbstractBuilder {
buildChildren(node, contentTree);
writer.addFooter(contentTree);
writer.printDocument(contentTree);
- writer.close();
}
/**
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/ModuleSummaryBuilder.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/ModuleSummaryBuilder.java
index 7bfb05b51b3..0b6d48c1ca8 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/ModuleSummaryBuilder.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/ModuleSummaryBuilder.java
@@ -132,7 +132,6 @@ public class ModuleSummaryBuilder extends AbstractBuilder {
buildChildren(node, contentTree);
moduleWriter.addModuleFooter(contentTree);
moduleWriter.printDocument(contentTree);
- moduleWriter.close();
// TEMPORARY:
// The use of SOURCE_PATH on the next line is temporary. As we transition into the
// modules world, this should migrate into using a location for the appropriate module
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/PackageSummaryBuilder.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/PackageSummaryBuilder.java
index 4d98abb328a..8cfef1350d0 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/PackageSummaryBuilder.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/PackageSummaryBuilder.java
@@ -131,7 +131,6 @@ public class PackageSummaryBuilder extends AbstractBuilder {
buildChildren(node, contentTree);
packageWriter.addPackageFooter(contentTree);
packageWriter.printDocument(contentTree);
- packageWriter.close();
utils.copyDocFiles(packageElement);
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/SerializedFormBuilder.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/SerializedFormBuilder.java
index 4c2c43ce99e..077c7d40f0b 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/SerializedFormBuilder.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/SerializedFormBuilder.java
@@ -140,7 +140,6 @@ public class SerializedFormBuilder extends AbstractBuilder {
throw new DocletAbortException(e);
}
build(layoutParser.parseXML(NAME), contentTree);
- writer.close();
}
/**
@@ -162,7 +161,6 @@ public class SerializedFormBuilder extends AbstractBuilder {
buildChildren(node, serializedTree);
writer.addFooter(serializedTree);
writer.printDocument(serializedTree);
- writer.close();
}
/**
@@ -362,7 +360,7 @@ public class SerializedFormBuilder extends AbstractBuilder {
&& utils.getSerialDataTrees(method).isEmpty()) {
if (configuration.serialwarn) {
TypeElement encl = (TypeElement) method.getEnclosingElement();
- configuration.getDocletSpecificMsg().warning(currentMember,
+ messages.warning(currentMember,
"doclet.MissingSerialDataTag", encl.getQualifiedName().toString(),
method.getSimpleName().toString());
}
@@ -526,7 +524,7 @@ public class SerializedFormBuilder extends AbstractBuilder {
// Process default Serializable field.
if ((utils.getSerialTrees(field).isEmpty()) /*&& ! field.isSynthetic()*/
&& configuration.serialwarn) {
- configuration.message.warning(field,
+ messages.warning(field,
"doclet.MissingSerialTag", utils.getFullyQualifiedName(te),
utils.getSimpleName(field));
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/InheritDocTaglet.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/InheritDocTaglet.java
index 59b11f5d677..7b02fb0fb82 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/InheritDocTaglet.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/InheritDocTaglet.java
@@ -31,6 +31,7 @@ import javax.lang.model.element.ExecutableElement;
import com.sun.source.doctree.DocTree;
import jdk.javadoc.internal.doclets.toolkit.Configuration;
import jdk.javadoc.internal.doclets.toolkit.Content;
+import jdk.javadoc.internal.doclets.toolkit.Messages;
import jdk.javadoc.internal.doclets.toolkit.util.CommentHelper;
import jdk.javadoc.internal.doclets.toolkit.util.DocFinder;
import jdk.javadoc.internal.doclets.toolkit.util.DocFinder.Input;
@@ -135,6 +136,7 @@ public class InheritDocTaglet extends BaseInlineTaglet {
Element e, DocTree holderTag, boolean isFirstSentence) {
Content replacement = writer.getOutputInstance();
Configuration configuration = writer.configuration();
+ Messages messages = configuration.getMessages();
Utils utils = configuration.utils;
CommentHelper ch = utils.getCommentHelper(e);
Taglet inheritableTaglet = holderTag == null
@@ -147,7 +149,7 @@ public class InheritDocTaglet extends BaseInlineTaglet {
? utils.flatSignature((ExecutableElement)e)
: "");
//This tag does not support inheritence.
- configuration.message.warning(e, "doclet.noInheritedDoc", message);
+ messages.warning(e, "doclet.noInheritedDoc", message);
}
Input input = new DocFinder.Input(utils, e,
(InheritableTaglet) inheritableTaglet, new DocFinder.DocTreeInfo(holderTag, e),
@@ -165,7 +167,7 @@ public class InheritDocTaglet extends BaseInlineTaglet {
((utils.isExecutableElement(e))
? utils.flatSignature((ExecutableElement)e)
: "");
- configuration.message.warning(e, "doclet.noInheritedDoc", message);
+ messages.warning(e, "doclet.noInheritedDoc", message);
}
return replacement;
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/ParamTaglet.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/ParamTaglet.java
index ef1e6565269..8b0de21ce37 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/ParamTaglet.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/ParamTaglet.java
@@ -34,6 +34,7 @@ import javax.lang.model.element.TypeElement;
import com.sun.source.doctree.DocTree;
import com.sun.source.doctree.ParamTree;
import jdk.javadoc.internal.doclets.toolkit.Content;
+import jdk.javadoc.internal.doclets.toolkit.Messages;
import jdk.javadoc.internal.doclets.toolkit.util.CommentHelper;
import jdk.javadoc.internal.doclets.toolkit.util.DocFinder;
import jdk.javadoc.internal.doclets.toolkit.util.DocFinder.Input;
@@ -288,6 +289,7 @@ public class ParamTaglet extends BaseTaglet implements InheritableTaglet {
private Content processParamTags(Element e, boolean isParams,
List extends DocTree> paramTags, Map rankMap, TagletWriter writer,
Set alreadyDocumented) {
+ Messages messages = writer.configuration().getMessages();
Content result = writer.getOutputInstance();
if (!paramTags.isEmpty()) {
CommentHelper ch = writer.configuration().utils.getCommentHelper(e);
@@ -296,22 +298,22 @@ public class ParamTaglet extends BaseTaglet implements InheritableTaglet {
? ch.getParameterName(dt)
: "<" + ch.getParameterName(dt) + ">";
if (!rankMap.containsKey(ch.getParameterName(dt))) {
- writer.getMsgRetriever().warning(ch.getDocTreePath(dt),
- isParams ?
- "doclet.Parameters_warn" :
- "doclet.Type_Parameters_warn",
- paramName);
+ messages.warning(ch.getDocTreePath(dt),
+ isParams
+ ? "doclet.Parameters_warn"
+ : "doclet.Type_Parameters_warn",
+ paramName);
}
String rank = rankMap.get(ch.getParameterName(dt));
if (rank != null && alreadyDocumented.contains(rank)) {
- writer.getMsgRetriever().warning(ch.getDocTreePath(dt),
- isParams ?
- "doclet.Parameters_dup_warn" :
- "doclet.Type_Parameters_dup_warn",
- paramName);
+ messages.warning(ch.getDocTreePath(dt),
+ isParams
+ ? "doclet.Parameters_dup_warn"
+ : "doclet.Type_Parameters_dup_warn",
+ paramName);
}
result.addContent(processParamTag(e, isParams, writer, dt,
- ch.getParameterName(dt), alreadyDocumented.isEmpty()));
+ ch.getParameterName(dt), alreadyDocumented.isEmpty()));
alreadyDocumented.add(rank);
}
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/ReturnTaglet.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/ReturnTaglet.java
index ef67a446ca6..53912b990eb 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/ReturnTaglet.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/ReturnTaglet.java
@@ -34,6 +34,7 @@ import javax.lang.model.type.TypeMirror;
import com.sun.source.doctree.DocTree;
import jdk.javadoc.internal.doclets.toolkit.Content;
+import jdk.javadoc.internal.doclets.toolkit.Messages;
import jdk.javadoc.internal.doclets.toolkit.util.CommentHelper;
import jdk.javadoc.internal.doclets.toolkit.util.DocFinder;
import jdk.javadoc.internal.doclets.toolkit.util.DocFinder.Input;
@@ -87,6 +88,7 @@ public class ReturnTaglet extends BaseExecutableMemberTaglet implements Inherita
* {@inheritDoc}
*/
public Content getTagletOutput(Element holder, TagletWriter writer) {
+ Messages messages = writer.configuration().getMessages();
Utils utils = writer.configuration().utils;
TypeMirror returnType = utils.getReturnType((ExecutableElement)holder);
List extends DocTree> tags = utils.getBlockTags(holder, name);
@@ -94,7 +96,7 @@ public class ReturnTaglet extends BaseExecutableMemberTaglet implements Inherita
//Make sure we are not using @return tag on method with void return type.
if (returnType != null && utils.isVoid(returnType)) {
if (!tags.isEmpty()) {
- writer.getMsgRetriever().warning(holder, "doclet.Return_tag_on_void_method");
+ messages.warning(holder, "doclet.Return_tag_on_void_method");
}
return null;
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/TagletManager.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/TagletManager.java
index 16edc599587..24f2a53e4bc 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/TagletManager.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/TagletManager.java
@@ -26,7 +26,6 @@
package jdk.javadoc.internal.doclets.toolkit.taglets;
import java.io.*;
-import java.lang.reflect.Method;
import java.util.*;
import javax.lang.model.element.Element;
@@ -42,9 +41,11 @@ import javax.tools.StandardJavaFileManager;
import com.sun.source.doctree.DocTree;
import com.sun.tools.javac.util.DefinedBy;
import com.sun.tools.javac.util.DefinedBy.Api;
+import jdk.javadoc.internal.doclets.toolkit.Configuration;
+import jdk.javadoc.internal.doclets.toolkit.Messages;
+import jdk.javadoc.internal.doclets.toolkit.Resources;
import jdk.javadoc.internal.doclets.toolkit.util.CommentHelper;
-import jdk.javadoc.internal.doclets.toolkit.util.MessageRetriever;
import jdk.javadoc.internal.doclets.toolkit.util.Utils;
import static javax.tools.DocumentationTool.Location.*;
@@ -126,10 +127,8 @@ public class TagletManager {
*/
private List serializedFormTags;
- /**
- * The message retriever that will be used to print error messages.
- */
- private final MessageRetriever message;
+ private final Messages messages;
+ private final Resources resources;
/**
* Keep track of standard tags.
@@ -191,7 +190,7 @@ public class TagletManager {
*/
public TagletManager(boolean nosince, boolean showversion,
boolean showauthor, boolean javafx,
- MessageRetriever message) {
+ Configuration configuration) {
overridenStandardTags = new HashSet<>();
potentiallyConflictingTags = new HashSet<>();
standardTags = new HashSet<>();
@@ -202,7 +201,8 @@ public class TagletManager {
this.showversion = showversion;
this.showauthor = showauthor;
this.javafx = javafx;
- this.message = message;
+ this.messages = configuration.getMessages();
+ this.resources = configuration.getResources();
initStandardTaglets();
initStandardTagsLowercase();
}
@@ -260,9 +260,9 @@ public class TagletManager {
customTags.remove(tname);
}
customTags.put(tname, newLegacy);
- message.notice("doclet.Notice_taglet_registered", classname);
+ messages.notice("doclet.Notice_taglet_registered", classname);
} catch (Exception exc) {
- message.error("doclet.Error_taglet_not_registered", exc.getClass().getName(), classname);
+ messages.error("doclet.Error_taglet_not_registered", exc.getClass().getName(), classname);
}
}
@@ -359,10 +359,10 @@ public class TagletManager {
}
if (! (standardTags.contains(name) || customTags.containsKey(name))) {
if (standardTagsLowercase.contains(Utils.toLowerCase(name))) {
- message.warning(ch.getDocTreePath(tag), "doclet.UnknownTagLowercase", ch.getTagName(tag));
+ messages.warning(ch.getDocTreePath(tag), "doclet.UnknownTagLowercase", ch.getTagName(tag));
continue;
} else {
- message.warning(ch.getDocTreePath(tag), "doclet.UnknownTag", ch.getTagName(tag));
+ messages.warning(ch.getDocTreePath(tag), "doclet.UnknownTag", ch.getTagName(tag));
continue;
}
}
@@ -481,7 +481,7 @@ public class TagletManager {
}
combined_locations.append(locations[i]);
}
- message.warning(ch.getDocTreePath(tag), "doclet.tag_misuse",
+ messages.warning(ch.getDocTreePath(tag), "doclet.tag_misuse",
"@" + taglet.getName(), holderType, combined_locations.toString());
}
@@ -698,17 +698,17 @@ public class TagletManager {
addStandardTaglet(new ThrowsTaglet());
addStandardTaglet(new SimpleTaglet(EXCEPTION.tagName, null,
SimpleTaglet.METHOD + SimpleTaglet.CONSTRUCTOR));
- addStandardTaglet(!nosince, new SimpleTaglet(SINCE.tagName, message.getText("doclet.Since"),
+ addStandardTaglet(!nosince, new SimpleTaglet(SINCE.tagName, resources.getText("doclet.Since"),
SimpleTaglet.ALL));
- addStandardTaglet(showversion, new SimpleTaglet(VERSION.tagName, message.getText("doclet.Version"),
+ addStandardTaglet(showversion, new SimpleTaglet(VERSION.tagName, resources.getText("doclet.Version"),
SimpleTaglet.MODULE + SimpleTaglet.PACKAGE + SimpleTaglet.TYPE + SimpleTaglet.OVERVIEW));
- addStandardTaglet(showauthor, new SimpleTaglet(AUTHOR.tagName, message.getText("doclet.Author"),
+ addStandardTaglet(showauthor, new SimpleTaglet(AUTHOR.tagName, resources.getText("doclet.Author"),
SimpleTaglet.MODULE + SimpleTaglet.PACKAGE + SimpleTaglet.TYPE + SimpleTaglet.OVERVIEW));
- addStandardTaglet(new SimpleTaglet(SERIAL_DATA.tagName, message.getText("doclet.SerialData"),
+ addStandardTaglet(new SimpleTaglet(SERIAL_DATA.tagName, resources.getText("doclet.SerialData"),
SimpleTaglet.EXCLUDED));
- addStandardTaglet(new SimpleTaglet(HIDDEN.tagName, message.getText("doclet.Hidden"),
+ addStandardTaglet(new SimpleTaglet(HIDDEN.tagName, resources.getText("doclet.Hidden"),
SimpleTaglet.FIELD + SimpleTaglet.METHOD + SimpleTaglet.TYPE));
- customTags.put((temp = new SimpleTaglet("factory", message.getText("doclet.Factory"),
+ customTags.put((temp = new SimpleTaglet("factory", resources.getText("doclet.Factory"),
SimpleTaglet.METHOD)).getName(), temp);
addStandardTaglet(new SeeTaglet());
//Standard inline tags
@@ -735,9 +735,9 @@ public class TagletManager {
addStandardTaglet(new PropertyGetterTaglet());
addStandardTaglet(new PropertySetterTaglet());
addStandardTaglet(new SimpleTaglet("propertyDescription",
- message.getText("doclet.PropertyDescription"),
+ resources.getText("doclet.PropertyDescription"),
SimpleTaglet.FIELD + SimpleTaglet.METHOD));
- addStandardTaglet(new SimpleTaglet("defaultValue", message.getText("doclet.DefaultValue"),
+ addStandardTaglet(new SimpleTaglet("defaultValue", resources.getText("doclet.DefaultValue"),
SimpleTaglet.FIELD + SimpleTaglet.METHOD));
addStandardTaglet(new SimpleTaglet("treatAsPrivate", null,
SimpleTaglet.FIELD + SimpleTaglet.METHOD + SimpleTaglet.TYPE));
@@ -790,7 +790,7 @@ public class TagletManager {
result += ", ";
}
}
- message.notice(noticeKey, result);
+ messages.notice(noticeKey, result);
}
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/TagletWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/TagletWriter.java
index 8d2df8207e2..652ea7e98c6 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/TagletWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/TagletWriter.java
@@ -36,7 +36,6 @@ import jdk.javadoc.internal.doclets.toolkit.Configuration;
import jdk.javadoc.internal.doclets.toolkit.Content;
import jdk.javadoc.internal.doclets.toolkit.taglets.Taglet.UnsupportedTagletOperationException;
import jdk.javadoc.internal.doclets.toolkit.util.CommentHelper;
-import jdk.javadoc.internal.doclets.toolkit.util.MessageRetriever;
import jdk.javadoc.internal.doclets.toolkit.util.Utils;
/**
@@ -106,13 +105,6 @@ public abstract class TagletWriter {
*/
protected abstract Content literalTagOutput(Element element, DocTree tag);
- /**
- * Returns {@link MessageRetriever} for output purposes.
- *
- * @return {@link MessageRetriever} for output purposes.
- */
- protected abstract MessageRetriever getMsgRetriever();
-
/**
* Return the header for the param tags.
*
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/ValueTaglet.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/ValueTaglet.java
index ac6f6e2ffb6..1fab013781f 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/ValueTaglet.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/ValueTaglet.java
@@ -34,6 +34,7 @@ import javax.lang.model.util.Elements;
import com.sun.source.doctree.DocTree;
import jdk.javadoc.internal.doclets.toolkit.Configuration;
import jdk.javadoc.internal.doclets.toolkit.Content;
+import jdk.javadoc.internal.doclets.toolkit.Messages;
import jdk.javadoc.internal.doclets.toolkit.util.CommentHelper;
import jdk.javadoc.internal.doclets.toolkit.util.Utils;
@@ -181,15 +182,16 @@ public class ValueTaglet extends BaseInlineTaglet {
*/
public Content getTagletOutput(Element holder, DocTree tag, TagletWriter writer) {
Utils utils = writer.configuration().utils;
+ Messages messages = writer.configuration().getMessages();
VariableElement field = getVariableElement(holder, writer.configuration(), tag);
if (field == null) {
if (tag.toString().isEmpty()) {
//Invalid use of @value
- writer.getMsgRetriever().warning(holder,
+ messages.warning(holder,
"doclet.value_tag_invalid_use");
} else {
//Reference is unknown.
- writer.getMsgRetriever().warning(holder,
+ messages.warning(holder,
"doclet.value_tag_invalid_reference", tag.toString());
}
} else if (field.getConstantValue() != null) {
@@ -202,7 +204,7 @@ public class ValueTaglet extends BaseInlineTaglet {
);
} else {
//Referenced field is not a constant.
- writer.getMsgRetriever().warning(holder,
+ messages.warning(holder,
"doclet.value_tag_invalid_constant", utils.getSimpleName(field));
}
return writer.getOutputInstance();
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/ClassTree.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/ClassTree.java
index b6eb1207962..38b3bd204c2 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/ClassTree.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/ClassTree.java
@@ -44,6 +44,7 @@ import javax.lang.model.type.TypeMirror;
import jdk.javadoc.doclet.DocletEnvironment;
import jdk.javadoc.internal.doclets.toolkit.Configuration;
+import jdk.javadoc.internal.doclets.toolkit.Messages;
/**
* Build Class Hierarchy for all the Classes. This class builds the Class
@@ -105,9 +106,12 @@ public class ClassTree {
* true.
*/
public ClassTree(Configuration configuration, boolean noDeprecated) {
- configuration.message.notice("doclet.Building_Tree");
this.configuration = configuration;
this.utils = configuration.utils;
+
+ Messages messages = configuration.getMessages();
+ messages.notice("doclet.Building_Tree");
+
comparator = utils.makeClassUseComparator();
baseAnnotationTypes = new TreeSet<>(comparator);
baseEnums = new TreeSet<>(comparator);
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Group.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Group.java
index 03c734d9914..28d216bc1f7 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Group.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Group.java
@@ -31,6 +31,7 @@ import javax.lang.model.element.Element;
import javax.lang.model.element.PackageElement;
import jdk.javadoc.internal.doclets.toolkit.Configuration;
+import jdk.javadoc.internal.doclets.toolkit.Messages;
/**
@@ -87,6 +88,7 @@ public class Group {
* The global configuration information for this run.
*/
private final Configuration configuration;
+ private Messages messages;
/**
* Since we need to sort the keys in the reverse order(longest key first),
@@ -101,6 +103,7 @@ public class Group {
public Group(Configuration configuration) {
this.configuration = configuration;
+ messages = configuration.getMessages();
}
/**
@@ -120,14 +123,16 @@ public class Group {
public boolean checkPackageGroups(String groupname, String pkgNameFormList) {
StringTokenizer strtok = new StringTokenizer(pkgNameFormList, ":");
if (groupList.contains(groupname)) {
- configuration.message.warning("doclet.Groupname_already_used", groupname);
+ initMessages();
+ messages.warning("doclet.Groupname_already_used", groupname);
return false;
}
groupList.add(groupname);
while (strtok.hasMoreTokens()) {
String id = strtok.nextToken();
if (id.length() == 0) {
- configuration.message.warning("doclet.Error_in_packagelist", groupname, pkgNameFormList);
+ initMessages();
+ messages.warning("doclet.Error_in_packagelist", groupname, pkgNameFormList);
return false;
}
if (id.endsWith("*")) {
@@ -148,6 +153,14 @@ public class Group {
return true;
}
+ // Lazy init of the messages for now, because Group is created
+ // in Configuration before configuration is fully initialized.
+ private void initMessages() {
+ if (messages == null) {
+ messages = configuration.getMessages();
+ }
+ }
+
/**
* Search if the given map has given the package format.
*
@@ -158,7 +171,8 @@ public class Group {
*/
boolean foundGroupFormat(Map map, String pkgFormat) {
if (map.containsKey(pkgFormat)) {
- configuration.message.error("doclet.Same_package_name_used", pkgFormat);
+ initMessages();
+ messages.error("doclet.Same_package_name_used", pkgFormat);
return true;
}
return false;
@@ -181,8 +195,8 @@ public class Group {
Map> groupPackageMap = new HashMap<>();
String defaultGroupName =
(pkgNameGroupMap.isEmpty() && regExpGroupMap.isEmpty())?
- configuration.message.getText("doclet.Packages") :
- configuration.message.getText("doclet.Other_Packages");
+ configuration.getResources().getText("doclet.Packages") :
+ configuration.getResources().getText("doclet.Other_Packages");
// if the user has not used the default group name, add it
if (!groupList.contains(defaultGroupName)) {
groupList.add(defaultGroupName);
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/IndexBuilder.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/IndexBuilder.java
index 1cd161bf83a..bc52fd4ab08 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/IndexBuilder.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/IndexBuilder.java
@@ -33,6 +33,7 @@ import javax.lang.model.element.TypeElement;
import jdk.javadoc.doclet.DocletEnvironment;
import jdk.javadoc.internal.doclets.toolkit.Configuration;
+import jdk.javadoc.internal.doclets.toolkit.Messages;
/**
* Build the mapping of each Unicode character with it's member lists
@@ -98,11 +99,14 @@ public class IndexBuilder {
boolean classesOnly) {
this.configuration = configuration;
this.utils = configuration.utils;
+
+ Messages messages = configuration.getMessages();
if (classesOnly) {
- configuration.message.notice("doclet.Building_Index_For_All_Classes");
+ messages.notice("doclet.Building_Index_For_All_Classes");
} else {
- configuration.message.notice("doclet.Building_Index");
+ messages.notice("doclet.Building_Index");
}
+
this.noDeprecated = noDeprecated;
this.classesOnly = classesOnly;
this.javafx = configuration.javafx;
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/MessageRetriever.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/MessageRetriever.java
deleted file mode 100644
index 63f2ce78cdb..00000000000
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/MessageRetriever.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * Copyright (c) 1998, 2016, 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.text.MessageFormat;
-import java.util.*;
-
-import javax.lang.model.element.Element;
-
-import com.sun.source.util.DocTreePath;
-import jdk.javadoc.internal.doclets.toolkit.Configuration;
-
-import static javax.tools.Diagnostic.Kind.*;
-
-
-/**
- * Retrieve and format messages stored in a resource.
- *
- * 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.
- *
- * @author Atul M Dambalkar
- * @author Robert Field
- */
-public class MessageRetriever {
- /**
- * The global configuration information for this run.
- */
- private final Configuration configuration;
-
- /**
- * The location from which to lazily fetch the resource..
- */
- private final String resourcelocation;
-
- /**
- * The lazily fetched resource..
- */
- private ResourceBundle messageRB;
-
- /**
- * Initialize the ResourceBundle with the given resource.
- *
- * @param rb the resource bundle to read.
- */
- public MessageRetriever(ResourceBundle rb) {
- this.configuration = null;
- this.messageRB = rb;
- this.resourcelocation = null;
- }
-
- /**
- * Initialize the ResourceBundle with the given resource.
- *
- * @param configuration the configuration
- * @param resourcelocation Resource.
- */
- public MessageRetriever(Configuration configuration,
- String resourcelocation) {
- this.configuration = configuration;
- this.resourcelocation = resourcelocation;
- }
-
- private ResourceBundle initRB() {
- ResourceBundle bundle = messageRB;
- if (bundle == null) {
- try {
- messageRB = bundle =
- ResourceBundle.getBundle(resourcelocation, configuration.getLocale());
- } catch (MissingResourceException e) {
- throw new Error("Fatal: Resource (" + resourcelocation
- + ") for javadoc doclets is missing.");
- }
- }
- return bundle;
- }
-
- /**
- * Determines whether the given key can be retrieved
- * from this MessageRetriever
- *
- * @param key
- * the resource key
- * @return true if the given key is
- * contained in the underlying ResourceBundle.
- */
- public boolean containsKey(String key) {
- ResourceBundle bundle = initRB();
- return bundle.containsKey(key);
- }
-
- /**
- * Get and format message string from resource
- *
- * @param key selects message from resource
- * @param args arguments to be replaced in the message.
- * @return the composed text
- * @throws MissingResourceException when the key does not
- * exist in the properties file.
- */
- public String getText(String key, Object... args) throws MissingResourceException {
- ResourceBundle bundle = initRB();
- String message = bundle.getString(key);
- return MessageFormat.format(message, args);
- }
-
- /**
- * Print error message, increment error count.
- *
- * @param pos the position of the source
- * @param msg message to print
- */
- private void printError(DocTreePath path, String msg) {
- configuration.reporter.print(ERROR, path, msg);
- }
-
- /**
- * Print error message, increment error count.
- *
- * @param msg message to print
- */
- private void printError(String msg) {
- configuration.reporter.print(ERROR, msg);
- }
-
- /**
- * Print warning message, increment warning count.
- *
- * @param pos the position of the source
- * @param msg message to print
- */
- private void printWarning(DocTreePath path, String msg) {
- configuration.reporter.print(WARNING, path, msg);
- }
-
- private void printWarning(Element e, String msg) {
- configuration.reporter.print(WARNING, e, msg);
- }
-
- /**
- * Print warning message, increment warning count.
- *
- * @param msg message to print
- */
- private void printWarning(String msg) {
- configuration.reporter.print(WARNING, msg);
- }
-
-// Note: the following do not appear to be needed any more, delete me.
-// /**
-// * Print a message.
-// *
-// * @param pos the position of the source
-// * @param msg message to print
-// */
-// private void printNotice(DocTreePath path, String msg) {
-// DocEnv env = ((RootDocImpl)configuration.root).env;
-// if (env.isQuiet() || env.isSilent()) {
-// return;
-// }
-// configuration.reporter.print(NOTE, path, msg);
-// }
-
-// Note: does not appear to be needed any more.
-// /**
-// * Print a message.
-// *
-// * @param pos the position of the source
-// * @param key selects message from resource
-// * @param args arguments to be replaced in the message.
-// */
-// public void notice(DocTreePath path, String key, Object... args) {
-// printNotice(path, getText(key, args));
-// }
-
- // ERRORS
- /**
- * Print error message, increment error count.
- *
- * @param path the path to the source
- * @param key selects message from resource
- * @param args arguments to be replaced in the message.
- */
- public void error(DocTreePath path, String key, Object... args) {
- printError(path, getText(key, args));
- }
-
- /**
- * Print error message, increment error count.
- *
- * @param key selects message from resource
- * @param args arguments to be replaced in the message.
- */
- public void error(String key, Object... args) {
- printError(getText(key, args));
- }
-
- // WARNINGS
- /**
- * Print warning message, increment warning count.
-
- * @param path the path to the source
- * @param key selects message from resource
- * @param args arguments to be replaced in the message.
- */
- public void warning(DocTreePath path, String key, Object... args) {
- if (configuration.showMessage(path, key))
- printWarning(path, getText(key, args));
- }
-
- /**
- * Print warning message, increment warning count.
- *
- * @param e element target of the message
- * @param key selects message from resource
- * @param args arguments to be replaced in the message.
- */
- public void warning(Element e, String key, Object... args) {
- if (configuration.showMessage(e, key))
- printWarning(e, getText(key, args));
- }
-
- /**
- * Print warning message, increment warning count.
- *
- * @param key selects message from resource
- * @param args arguments to be replaced in the message.
- */
- public void warning(String key, Object... args) {
- printWarning(getText(key, args));
- }
-
- // NOTICES
- /**
- * Print a message.
- *
- * @param msg message to print
- */
- private void printNotice(String msg) {
- if (configuration.quiet) {
- return;
- }
- configuration.reporter.print(NOTE, msg);
- }
-
- /**
- * Print a message.
- *
- * @param key selects message from resource
- * @param args arguments to be replaced in the message.
- */
- public void notice(String key, Object... args) {
- printNotice(getText(key, args));
- }
-}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/PackageListWriter.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/PackageListWriter.java
index 8d6721a151f..efad119e445 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/PackageListWriter.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/PackageListWriter.java
@@ -32,6 +32,7 @@ import javax.lang.model.element.PackageElement;
import jdk.javadoc.doclet.DocletEnvironment;
import jdk.javadoc.internal.doclets.toolkit.Configuration;
+import jdk.javadoc.internal.doclets.toolkit.Messages;
/**
@@ -73,7 +74,8 @@ public class PackageListWriter extends PrintWriter {
packgen.generatePackageListFile(configuration.docEnv);
packgen.close();
} catch (IOException exc) {
- configuration.message.error("doclet.exception_encountered",
+ Messages messages = configuration.getMessages();
+ messages.error("doclet.exception_encountered",
exc.toString(), DocPaths.PACKAGE_LIST);
throw new DocletAbortException(exc);
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Utils.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Utils.java
index abc5b31d94e..48b1710bb93 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Utils.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Utils.java
@@ -85,7 +85,10 @@ import static javax.lang.model.element.Modifier.*;
import static javax.lang.model.type.TypeKind.*;
import static com.sun.source.doctree.DocTree.Kind.*;
+
import com.sun.source.util.SimpleDocTreeVisitor;
+import jdk.javadoc.internal.doclets.toolkit.Messages;
+
import static jdk.javadoc.internal.doclets.toolkit.builders.ConstantsSummaryBuilder.MAX_CONSTANT_VALUE_INDEX_LENGTH;
@@ -102,12 +105,14 @@ import static jdk.javadoc.internal.doclets.toolkit.builders.ConstantsSummaryBuil
*/
public class Utils {
public final Configuration configuration;
+ public final Messages messages;
public final DocTrees docTrees;
public final Elements elementUtils;
public final Types typeUtils;
public Utils(Configuration c) {
configuration = c;
+ messages = configuration.getMessages();
elementUtils = c.docEnv.getElementUtils();
typeUtils = c.docEnv.getTypeUtils();
docTrees = c.docEnv.getDocTrees();
@@ -293,11 +298,10 @@ public class Utils {
DocFile destfile = destdir.resolve(srcfile.getName());
if (srcfile.isFile()) {
if (destfile.exists() && !first) {
- configuration.message.warning("doclet.Copy_Overwrite_warning",
+ messages.warning("doclet.Copy_Overwrite_warning",
srcfile.getPath(), destdir.getPath());
} else {
- configuration.message.notice(
- "doclet.Copying_File_0_To_Dir_1",
+ messages.notice("doclet.Copying_File_0_To_Dir_1",
srcfile.getPath(), destdir.getPath());
destfile.copyFile(srcfile);
}
@@ -1577,11 +1581,10 @@ public class Utils {
DocFile destfile = destdir.resolve(srcfile.getName());
if (srcfile.isFile()) {
if (destfile.exists() && !first) {
- configuration.message.warning("doclet.Copy_Overwrite_warning",
+ messages.warning("doclet.Copy_Overwrite_warning",
srcfile.getPath(), destdir.getPath());
} else {
- configuration.message.notice(
- "doclet.Copying_File_0_To_Dir_1",
+ messages.notice("doclet.Copying_File_0_To_Dir_1",
srcfile.getPath(), destdir.getPath());
destfile.copyFile(srcfile);
}
diff --git a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/VisibleMemberMap.java b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/VisibleMemberMap.java
index 723c1db73f9..6fbae159bf1 100644
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/VisibleMemberMap.java
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/VisibleMemberMap.java
@@ -39,6 +39,7 @@ import com.sun.source.doctree.DocCommentTree;
import com.sun.source.doctree.DocTree;
import jdk.javadoc.internal.doclets.toolkit.Configuration;
+import jdk.javadoc.internal.doclets.toolkit.Messages;
/**
* A data structure that encapsulates the visible members of a particular
@@ -126,6 +127,7 @@ public class VisibleMemberMap {
* The configuration this VisibleMemberMap was created with.
*/
private final Configuration configuration;
+ private final Messages messages;
private final Utils utils;
private final Comparator comparator;
@@ -149,6 +151,7 @@ public class VisibleMemberMap {
this.typeElement = typeElement;
this.kind = kind;
this.configuration = configuration;
+ this.messages = configuration.getMessages();
this.utils = configuration.utils;
propertiesCache = configuration.propertiesCache;
classPropertiesMap = configuration.classPropertiesMap;
@@ -697,7 +700,7 @@ public class VisibleMemberMap {
|| tagName.equals("@propertyGetter")
|| tagName.equals("@propertyDescription")) {
if (!isPropertyGetterOrSetter(members, ee)) {
- configuration.message.warning(ch.getDocTreePath(tree),
+ messages.warning(ch.getDocTreePath(tree),
"doclet.javafx_tag_misuse");
}
break;
From 81c36d2f40ddf7b83f4a5703b02afeae5bf9a3a9 Mon Sep 17 00:00:00 2001
From: Robert Field
Date: Tue, 9 Aug 2016 23:00:49 -0700
Subject: [PATCH 05/58] 8143964: JShell API: convert query responses to Stream
instead of List
Reviewed-by: psandoz, shinyafox
---
.../jdk/internal/jshell/tool/JShellTool.java | 95 ++++++-------
.../share/classes/jdk/jshell/JShell.java | 43 +++---
.../share/classes/jdk/jshell/Unit.java | 34 +++--
langtools/test/jdk/jshell/ClassesTest.java | 5 +-
.../test/jdk/jshell/JShellQueryTest.java | 131 ++++++++++++++++++
langtools/test/jdk/jshell/KullaTesting.java | 82 +++++------
.../test/jdk/jshell/RejectedFailedTest.java | 5 +-
langtools/test/jdk/jshell/ReplaceTest.java | 34 ++---
langtools/test/jdk/jshell/VariablesTest.java | 3 +-
9 files changed, 283 insertions(+), 149 deletions(-)
create mode 100644 langtools/test/jdk/jshell/JShellQueryTest.java
diff --git a/langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java b/langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java
index 5e7a9371f1b..1367f15af67 100644
--- a/langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java
+++ b/langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java
@@ -973,10 +973,10 @@ public class JShellTool implements MessageHandler {
p.getFileName().toString().endsWith(".jar"));
}
- private CompletionProvider snippetCompletion(Supplier> snippetsSupplier) {
+ private CompletionProvider snippetCompletion(Supplier> snippetsSupplier) {
return (prefix, cursor, anchor) -> {
anchor[0] = 0;
- return snippetsSupplier.get() .stream()
+ return snippetsSupplier.get()
.flatMap(k -> (k instanceof DeclarationSnippet)
? Stream.of(String.valueOf(k.id()), ((DeclarationSnippet) k).name())
: Stream.of(String.valueOf(k.id())))
@@ -986,7 +986,7 @@ public class JShellTool implements MessageHandler {
};
}
- private CompletionProvider snippetKeywordCompletion(Supplier> snippetsSupplier) {
+ private CompletionProvider snippetKeywordCompletion(Supplier> snippetsSupplier) {
return (code, cursor, anchor) -> {
List result = new ArrayList<>();
result.addAll(KEYWORD_COMPLETION_PROVIDER.completionSuggestions(code, cursor, anchor));
@@ -1020,36 +1020,32 @@ public class JShellTool implements MessageHandler {
// Snippet lists
- List allSnippets() {
+ Stream allSnippets() {
return state.snippets();
}
- List dropableSnippets() {
- return state.snippets().stream()
+ Stream dropableSnippets() {
+ return state.snippets()
.filter(sn -> state.status(sn).isActive() && sn instanceof PersistentSnippet)
- .map(sn -> (PersistentSnippet) sn)
- .collect(toList());
+ .map(sn -> (PersistentSnippet) sn);
}
- List allVarSnippets() {
- return state.snippets().stream()
+ Stream allVarSnippets() {
+ return state.snippets()
.filter(sn -> sn.kind() == Snippet.Kind.VAR)
- .map(sn -> (VarSnippet) sn)
- .collect(toList());
+ .map(sn -> (VarSnippet) sn);
}
- List allMethodSnippets() {
- return state.snippets().stream()
+ Stream allMethodSnippets() {
+ return state.snippets()
.filter(sn -> sn.kind() == Snippet.Kind.METHOD)
- .map(sn -> (MethodSnippet) sn)
- .collect(toList());
+ .map(sn -> (MethodSnippet) sn);
}
- List allTypeSnippets() {
- return state.snippets().stream()
+ Stream allTypeSnippets() {
+ return state.snippets()
.filter(sn -> sn.kind() == Snippet.Kind.TYPE_DECL)
- .map(sn -> (TypeDeclSnippet) sn)
- .collect(toList());
+ .map(sn -> (TypeDeclSnippet) sn);
}
// Table of commands -- with command forms, argument kinds, helpKey message, implementation, ...
@@ -1549,7 +1545,7 @@ public class JShellTool implements MessageHandler {
* string
* @return a Stream of referenced snippets or null if no matches are found
*/
- private Stream argsOptionsToSnippets(List snippets,
+ private Stream argsOptionsToSnippets(Supplier> snippetSupplier,
Predicate defFilter, String rawargs, String cmd) {
ArgTokenizer at = new ArgTokenizer(cmd, rawargs.trim());
at.allowedOptions("-all", "-start");
@@ -1571,38 +1567,38 @@ public class JShellTool implements MessageHandler {
}
if (at.hasOption("-all")) {
// all snippets including start-up, failed, and overwritten
- return snippets.stream();
+ return snippetSupplier.get();
}
if (at.hasOption("-start")) {
// start-up snippets
- return snippets.stream()
+ return snippetSupplier.get()
.filter(this::inStartUp);
}
if (args.isEmpty()) {
// Default is all active user snippets
- return snippets.stream()
+ return snippetSupplier.get()
.filter(defFilter);
}
- return argsToSnippets(snippets, args);
+ return argsToSnippets(snippetSupplier, args);
}
/**
* Convert user arguments to a Stream of snippets referenced by those
* arguments.
*
- * @param snippets the base list of possible snippets
+ * @param snippetSupplier the base list of possible snippets
* @param args the user's argument to the command, maybe be the empty list
* @return a Stream of referenced snippets or null if no matches to specific
* arg
*/
- private Stream argsToSnippets(List snippets,
+ private Stream argsToSnippets(Supplier> snippetSupplier,
List args) {
Stream result = null;
for (String arg : args) {
// Find the best match
- Stream st = layeredSnippetSearch(snippets, arg);
+ Stream st = layeredSnippetSearch(snippetSupplier, arg);
if (st == null) {
- Stream est = layeredSnippetSearch(state.snippets(), arg);
+ Stream est = layeredSnippetSearch(state::snippets, arg);
if (est == null) {
errormsg("jshell.err.no.such.snippets", arg);
} else {
@@ -1620,10 +1616,10 @@ public class JShellTool implements MessageHandler {
return result;
}
- private Stream layeredSnippetSearch(List snippets, String arg) {
+ private Stream layeredSnippetSearch(Supplier> snippetSupplier, String arg) {
return nonEmptyStream(
// the stream supplier
- () -> snippets.stream(),
+ snippetSupplier,
// look for active user declarations matching the name
sn -> isActive(sn) && matchingDeclaration(sn, arg),
// else, look for any declarations matching the name
@@ -1648,7 +1644,7 @@ public class JShellTool implements MessageHandler {
errormsg("jshell.err.drop.arg");
return false;
}
- Stream stream = argsToSnippets(dropableSnippets(), args);
+ Stream stream = argsToSnippets(this::dropableSnippets, args);
if (stream == null) {
// Snippet not found. Error already printed
fluffmsg("jshell.msg.see.classes.etc");
@@ -1670,7 +1666,7 @@ public class JShellTool implements MessageHandler {
}
private boolean cmdEdit(String arg) {
- Stream stream = argsOptionsToSnippets(state.snippets(),
+ Stream stream = argsOptionsToSnippets(state::snippets,
this::mainActive, arg, "/edit");
if (stream == null) {
return false;
@@ -1775,7 +1771,7 @@ public class JShellTool implements MessageHandler {
if (arg.length() >= 2 && "-history".startsWith(arg)) {
return cmdHistory();
}
- Stream stream = argsOptionsToSnippets(state.snippets(),
+ Stream stream = argsOptionsToSnippets(state::snippets,
this::mainActive, arg, "/list");
if (stream == null) {
return false;
@@ -1896,13 +1892,12 @@ public class JShellTool implements MessageHandler {
} else if (at.hasOption("-start")) {
writer.append(startup);
} else {
- List sns = at.hasOption("-all")
+ String sources = (at.hasOption("-all")
? state.snippets()
- : state.snippets().stream().filter(this::mainActive).collect(toList());
- for (Snippet sn : sns) {
- writer.write(sn.source());
- writer.write("\n");
- }
+ : state.snippets().filter(this::mainActive))
+ .map(Snippet::source)
+ .collect(Collectors.joining("\n"));
+ writer.write(sources);
}
} catch (FileNotFoundException e) {
errormsg("jshell.err.file.not.found", "/save", filename, e.getMessage());
@@ -1915,7 +1910,7 @@ public class JShellTool implements MessageHandler {
}
private boolean cmdVars(String arg) {
- Stream stream = argsOptionsToSnippets(allVarSnippets(),
+ Stream stream = argsOptionsToSnippets(this::allVarSnippets,
this::isActive, arg, "/vars");
if (stream == null) {
return false;
@@ -1931,7 +1926,7 @@ public class JShellTool implements MessageHandler {
}
private boolean cmdMethods(String arg) {
- Stream stream = argsOptionsToSnippets(allMethodSnippets(),
+ Stream stream = argsOptionsToSnippets(this::allMethodSnippets,
this::isActive, arg, "/methods");
if (stream == null) {
return false;
@@ -1943,7 +1938,7 @@ public class JShellTool implements MessageHandler {
}
private boolean cmdTypes(String arg) {
- Stream stream = argsOptionsToSnippets(allTypeSnippets(),
+ Stream stream = argsOptionsToSnippets(this::allTypeSnippets,
this::isActive, arg, "/types");
if (stream == null) {
return false;
@@ -1982,7 +1977,7 @@ public class JShellTool implements MessageHandler {
}
private boolean cmdUseHistoryEntry(int index) {
- List keys = state.snippets();
+ List keys = state.snippets().collect(toList());
if (index < 0)
index += keys.size();
else
@@ -2012,7 +2007,7 @@ public class JShellTool implements MessageHandler {
}
private boolean rerunHistoryEntryById(String id) {
- Optional snippet = state.snippets().stream()
+ Optional snippet = state.snippets()
.filter(s -> s.id().equals(id))
.findFirst();
return snippet.map(s -> {
@@ -2135,7 +2130,7 @@ public class JShellTool implements MessageHandler {
debug("Event with null key: %s", ste);
return false;
}
- List diagnostics = state.diagnostics(sn);
+ List diagnostics = state.diagnostics(sn).collect(toList());
String source = sn.source();
if (ste.causeSnippet() == null) {
// main event
@@ -2212,7 +2207,7 @@ public class JShellTool implements MessageHandler {
//where
void printUnresolvedException(UnresolvedReferenceException ex) {
DeclarationSnippet corralled = ex.getSnippet();
- List otherErrors = errorsOnly(state.diagnostics(corralled));
+ List otherErrors = errorsOnly(state.diagnostics(corralled).collect(toList()));
new DisplayEvent(corralled, state.status(corralled), FormatAction.USED, true, null, otherErrors)
.displayDeclarationAndValue();
}
@@ -2280,13 +2275,13 @@ public class JShellTool implements MessageHandler {
for (Diag d : errors) {
displayDiagnostics(sn.source(), d, errorLines);
}
- int unresolvedCount;
+ long unresolvedCount;
if (sn instanceof DeclarationSnippet && (status == Status.RECOVERABLE_DEFINED || status == Status.RECOVERABLE_NOT_DEFINED)) {
resolution = (status == Status.RECOVERABLE_NOT_DEFINED)
? FormatResolve.NOTDEFINED
: FormatResolve.DEFINED;
unresolved = unresolved((DeclarationSnippet) sn);
- unresolvedCount = state.unresolvedDependencies((DeclarationSnippet) sn).size();
+ unresolvedCount = state.unresolvedDependencies((DeclarationSnippet) sn).count();
} else {
resolution = FormatResolve.OK;
unresolved = "";
@@ -2305,7 +2300,7 @@ public class JShellTool implements MessageHandler {
}
private String unresolved(DeclarationSnippet key) {
- List unr = state.unresolvedDependencies(key);
+ List unr = state.unresolvedDependencies(key).collect(toList());
StringBuilder sb = new StringBuilder();
int fromLast = unr.size();
if (fromLast > 0) {
diff --git a/langtools/src/jdk.jshell/share/classes/jdk/jshell/JShell.java b/langtools/src/jdk.jshell/share/classes/jdk/jshell/JShell.java
index 8e2517cf0b5..6cdadabd4b3 100644
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/JShell.java
+++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/JShell.java
@@ -43,6 +43,7 @@ import java.util.function.BiFunction;
import java.util.function.Consumer;
import java.util.function.Supplier;
+import java.util.stream.Stream;
import jdk.internal.jshell.debug.InternalDebugControl;
import jdk.jshell.Snippet.Status;
import jdk.jshell.execution.JDIDefaultExecutionControl;
@@ -504,9 +505,9 @@ public class JShell implements AutoCloseable {
* @return the snippets for all current snippets in id order.
* @throws IllegalStateException if this JShell instance is closed.
*/
- public List snippets() throws IllegalStateException {
+ public Stream snippets() throws IllegalStateException {
checkIfAlive();
- return Collections.unmodifiableList(maps.snippetList());
+ return maps.snippetList().stream();
}
/**
@@ -518,11 +519,10 @@ public class JShell implements AutoCloseable {
* @return the active declared variables.
* @throws IllegalStateException if this JShell instance is closed.
*/
- public List variables() throws IllegalStateException {
- return snippets().stream()
+ public Stream variables() throws IllegalStateException {
+ return snippets()
.filter(sn -> status(sn).isActive() && sn.kind() == Snippet.Kind.VAR)
- .map(sn -> (VarSnippet) sn)
- .collect(collectingAndThen(toList(), Collections::unmodifiableList));
+ .map(sn -> (VarSnippet) sn);
}
/**
@@ -534,11 +534,10 @@ public class JShell implements AutoCloseable {
* @return the active declared methods.
* @throws IllegalStateException if this JShell instance is closed.
*/
- public List methods() throws IllegalStateException {
- return snippets().stream()
+ public Stream methods() throws IllegalStateException {
+ return snippets()
.filter(sn -> status(sn).isActive() && sn.kind() == Snippet.Kind.METHOD)
- .map(sn -> (MethodSnippet)sn)
- .collect(collectingAndThen(toList(), Collections::unmodifiableList));
+ .map(sn -> (MethodSnippet)sn);
}
/**
@@ -550,11 +549,10 @@ public class JShell implements AutoCloseable {
* @return the active declared type declarations.
* @throws IllegalStateException if this JShell instance is closed.
*/
- public List types() throws IllegalStateException {
- return snippets().stream()
+ public Stream types() throws IllegalStateException {
+ return snippets()
.filter(sn -> status(sn).isActive() && sn.kind() == Snippet.Kind.TYPE_DECL)
- .map(sn -> (TypeDeclSnippet) sn)
- .collect(collectingAndThen(toList(), Collections::unmodifiableList));
+ .map(sn -> (TypeDeclSnippet) sn);
}
/**
@@ -566,11 +564,10 @@ public class JShell implements AutoCloseable {
* @return the active declared import declarations.
* @throws IllegalStateException if this JShell instance is closed.
*/
- public List imports() throws IllegalStateException {
- return snippets().stream()
+ public Stream imports() throws IllegalStateException {
+ return snippets()
.filter(sn -> status(sn).isActive() && sn.kind() == Snippet.Kind.IMPORT)
- .map(sn -> (ImportSnippet) sn)
- .collect(collectingAndThen(toList(), Collections::unmodifiableList));
+ .map(sn -> (ImportSnippet) sn);
}
/**
@@ -598,8 +595,8 @@ public class JShell implements AutoCloseable {
* @throws IllegalArgumentException if the snippet is not associated with
* this {@code JShell} instance.
*/
- public List diagnostics(Snippet snippet) {
- return Collections.unmodifiableList(checkValidSnippet(snippet).diagnostics());
+ public Stream diagnostics(Snippet snippet) {
+ return checkValidSnippet(snippet).diagnostics().stream();
}
/**
@@ -611,13 +608,13 @@ public class JShell implements AutoCloseable {
* {@code eval()} or {@code drop()} of another snippet causes
* an update of a dependency.
* @param snippet the declaration {@code Snippet} to look up
- * @return the list of symbol names that are currently unresolvedDependencies.
+ * @return a stream of symbol names that are currently unresolvedDependencies.
* @throws IllegalStateException if this {@code JShell} instance is closed.
* @throws IllegalArgumentException if the snippet is not associated with
* this {@code JShell} instance.
*/
- public List unresolvedDependencies(DeclarationSnippet snippet) {
- return Collections.unmodifiableList(checkValidSnippet(snippet).unresolved());
+ public Stream unresolvedDependencies(DeclarationSnippet snippet) {
+ return checkValidSnippet(snippet).unresolved().stream();
}
/**
diff --git a/langtools/src/jdk.jshell/share/classes/jdk/jshell/Unit.java b/langtools/src/jdk.jshell/share/classes/jdk/jshell/Unit.java
index e83b0b848b7..c890c61c83d 100644
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/Unit.java
+++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/Unit.java
@@ -414,25 +414,29 @@ final class Unit {
// types are the same. if so, consider it an overwrite replacement.
private Status overwriteMatchingMethod(MethodSnippet msi) {
String qpt = msi.qualifiedParameterTypes();
+ List matching = state.methods()
+ .filter(sn ->
+ sn != null
+ && sn != msi
+ && sn.status().isActive()
+ && sn.name().equals(msi.name())
+ && qpt.equals(sn.qualifiedParameterTypes()))
+ .collect(toList());
// Look through all methods for a method of the same name, with the
// same computed qualified parameter types
Status overwrittenStatus = null;
- for (MethodSnippet sn : state.methods()) {
- if (sn != null && sn != msi && sn.status().isActive() && sn.name().equals(msi.name())) {
- if (qpt.equals(sn.qualifiedParameterTypes())) {
- overwrittenStatus = sn.status();
- SnippetEvent se = new SnippetEvent(
- sn, overwrittenStatus, OVERWRITTEN,
- false, msi, null, null);
- sn.setOverwritten();
- secondaryEvents.add(se);
- state.debug(DBG_EVNT,
- "Overwrite event #%d -- key: %s before: %s status: %s sig: %b cause: %s\n",
- secondaryEvents.size(), se.snippet(), se.previousStatus(),
- se.status(), se.isSignatureChange(), se.causeSnippet());
- }
- }
+ for (MethodSnippet sn : matching) {
+ overwrittenStatus = sn.status();
+ SnippetEvent se = new SnippetEvent(
+ sn, overwrittenStatus, OVERWRITTEN,
+ false, msi, null, null);
+ sn.setOverwritten();
+ secondaryEvents.add(se);
+ state.debug(DBG_EVNT,
+ "Overwrite event #%d -- key: %s before: %s status: %s sig: %b cause: %s\n",
+ secondaryEvents.size(), se.snippet(), se.previousStatus(),
+ se.status(), se.isSignatureChange(), se.causeSnippet());
}
return overwrittenStatus;
}
diff --git a/langtools/test/jdk/jshell/ClassesTest.java b/langtools/test/jdk/jshell/ClassesTest.java
index a0848f12f1c..fd629480aac 100644
--- a/langtools/test/jdk/jshell/ClassesTest.java
+++ b/langtools/test/jdk/jshell/ClassesTest.java
@@ -41,6 +41,7 @@ import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import jdk.jshell.Diag;
+import static java.util.stream.Collectors.toList;
import static jdk.jshell.Snippet.Status.VALID;
import static jdk.jshell.Snippet.Status.RECOVERABLE_NOT_DEFINED;
import static jdk.jshell.Snippet.Status.RECOVERABLE_DEFINED;
@@ -210,8 +211,8 @@ public class ClassesTest extends KullaTesting {
ste(b, RECOVERABLE_NOT_DEFINED, RECOVERABLE_NOT_DEFINED, false, MAIN_SNIPPET));
***/
// It is random which one it shows up in, but cyclic error should be there
- List diagsA = getState().diagnostics(a);
- List diagsB = getState().diagnostics(b);
+ List diagsA = getState().diagnostics(a).collect(toList());
+ List diagsB = getState().diagnostics(b).collect(toList());
List diags;
if (diagsA.isEmpty()) {
diags = diagsB;
diff --git a/langtools/test/jdk/jshell/JShellQueryTest.java b/langtools/test/jdk/jshell/JShellQueryTest.java
new file mode 100644
index 00000000000..0bdb5db1c59
--- /dev/null
+++ b/langtools/test/jdk/jshell/JShellQueryTest.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2016, 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.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 8143964
+ * @summary test queries to the JShell that return Streams
+ * @build KullaTesting
+ * @run testng JShellQueryTest
+ */
+import java.util.Set;
+import java.util.stream.Stream;
+import jdk.jshell.Snippet;
+import org.testng.annotations.Test;
+
+import jdk.jshell.ImportSnippet;
+import jdk.jshell.MethodSnippet;
+import jdk.jshell.TypeDeclSnippet;
+import jdk.jshell.VarSnippet;
+import static java.util.stream.Collectors.joining;
+import static java.util.stream.Collectors.toSet;
+import static org.testng.Assert.assertEquals;
+
+@Test
+public class JShellQueryTest extends KullaTesting {
+
+ private void checkStreamMatch(Stream result, T... expected) {
+ Set sns = result.collect(toSet());
+ Set exp = Stream.of(expected).collect(toSet());
+ assertEquals(sns, exp);
+ }
+
+ public void testSnippets() {
+ checkStreamMatch(getState().snippets());
+ VarSnippet sx = varKey(assertEval("int x = 5;"));
+ VarSnippet sfoo = varKey(assertEval("String foo;"));
+ MethodSnippet smm = methodKey(assertEval("int mm() { return 6; }"));
+ MethodSnippet svv = methodKey(assertEval("void vv() { }"));
+ checkStreamMatch(getState().snippets(), sx, sfoo, smm, svv);
+ TypeDeclSnippet sc = classKey(assertEval("class C { }"));
+ TypeDeclSnippet si = classKey(assertEval("interface I { }"));
+ ImportSnippet simp = importKey(assertEval("import java.lang.reflect.*;"));
+ checkStreamMatch(getState().snippets(), sx, sfoo, smm, svv, sc, si, simp);
+ }
+
+ public void testVars() {
+ checkStreamMatch(getState().variables());
+ VarSnippet sx = varKey(assertEval("int x = 5;"));
+ VarSnippet sfoo = varKey(assertEval("String foo;"));
+ MethodSnippet smm = methodKey(assertEval("int mm() { return 6; }"));
+ MethodSnippet svv = methodKey(assertEval("void vv() { }"));
+ checkStreamMatch(getState().variables(), sx, sfoo);
+ TypeDeclSnippet sc = classKey(assertEval("class C { }"));
+ TypeDeclSnippet si = classKey(assertEval("interface I { }"));
+ ImportSnippet simp = importKey(assertEval("import java.lang.reflect.*;"));
+ checkStreamMatch(getState().variables(), sx, sfoo);
+ }
+
+ public void testMethods() {
+ checkStreamMatch(getState().methods());
+ VarSnippet sx = varKey(assertEval("int x = 5;"));
+ VarSnippet sfoo = varKey(assertEval("String foo;"));
+ MethodSnippet smm = methodKey(assertEval("int mm() { return 6; }"));
+ MethodSnippet svv = methodKey(assertEval("void vv() { }"));
+ TypeDeclSnippet sc = classKey(assertEval("class C { }"));
+ TypeDeclSnippet si = classKey(assertEval("interface I { }"));
+ ImportSnippet simp = importKey(assertEval("import java.lang.reflect.*;"));
+ checkStreamMatch(getState().methods(), smm, svv);
+ }
+
+ public void testTypes() {
+ checkStreamMatch(getState().types());
+ VarSnippet sx = varKey(assertEval("int x = 5;"));
+ VarSnippet sfoo = varKey(assertEval("String foo;"));
+ MethodSnippet smm = methodKey(assertEval("int mm() { return 6; }"));
+ MethodSnippet svv = methodKey(assertEval("void vv() { }"));
+ TypeDeclSnippet sc = classKey(assertEval("class C { }"));
+ TypeDeclSnippet si = classKey(assertEval("interface I { }"));
+ ImportSnippet simp = importKey(assertEval("import java.lang.reflect.*;"));
+ checkStreamMatch(getState().types(), sc, si);
+ }
+
+ public void testImports() {
+ checkStreamMatch(getState().imports());
+ VarSnippet sx = varKey(assertEval("int x = 5;"));
+ VarSnippet sfoo = varKey(assertEval("String foo;"));
+ MethodSnippet smm = methodKey(assertEval("int mm() { return 6; }"));
+ MethodSnippet svv = methodKey(assertEval("void vv() { }"));
+ TypeDeclSnippet sc = classKey(assertEval("class C { }"));
+ TypeDeclSnippet si = classKey(assertEval("interface I { }"));
+ ImportSnippet simp = importKey(assertEval("import java.lang.reflect.*;"));
+ checkStreamMatch(getState().imports(), simp);
+ }
+
+ public void testDiagnostics() {
+ Snippet sx = varKey(assertEval("int x = 5;"));
+ checkStreamMatch(getState().diagnostics(sx));
+ Snippet broken = methodKey(assertEvalFail("int m() { blah(); return \"hello\"; }"));
+ String res = getState().diagnostics(broken)
+ .map(d -> d.getCode())
+ .collect(joining("+"));
+ assertEquals(res, "compiler.err.cant.resolve.location.args+compiler.err.prob.found.req");
+ }
+
+ public void testUnresolvedDependencies() {
+ VarSnippet sx = varKey(assertEval("int x = 5;"));
+ checkStreamMatch(getState().unresolvedDependencies(sx));
+ MethodSnippet unr = methodKey(getState().eval("void uu() { baz(); zips(); }"));
+ checkStreamMatch(getState().unresolvedDependencies(unr), "method zips()", "method baz()");
+ }
+}
diff --git a/langtools/test/jdk/jshell/KullaTesting.java b/langtools/test/jdk/jshell/KullaTesting.java
index f36adba2401..ae09ed59390 100644
--- a/langtools/test/jdk/jshell/KullaTesting.java
+++ b/langtools/test/jdk/jshell/KullaTesting.java
@@ -70,6 +70,7 @@ import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import jdk.jshell.Diag;
+import static java.util.stream.Collectors.toList;
import static jdk.jshell.Snippet.Status.*;
import static org.testng.Assert.*;
import static jdk.jshell.Snippet.SubKind.METHOD_SUBKIND;
@@ -183,7 +184,7 @@ public class KullaTesting {
}
public List assertUnresolvedDependencies(DeclarationSnippet key, int unresolvedSize) {
- List unresolved = getState().unresolvedDependencies(key);
+ List unresolved = getState().unresolvedDependencies(key).collect(toList());
assertEquals(unresolved.size(), unresolvedSize, "Input: " + key.source() + ", checking unresolved: ");
return unresolved;
}
@@ -202,8 +203,8 @@ public class KullaTesting {
SnippetEvent ste = events.get(0);
DeclarationSnippet sn = ((UnresolvedReferenceException) ste.exception()).getSnippet();
assertEquals(sn.name(), name, "Given input: " + input + ", checking name");
- assertEquals(getState().unresolvedDependencies(sn).size(), unresolvedSize, "Given input: " + input + ", checking unresolved");
- assertEquals(getState().diagnostics(sn).size(), diagnosticsSize, "Given input: " + input + ", checking diagnostics");
+ assertEquals(getState().unresolvedDependencies(sn).count(), unresolvedSize, "Given input: " + input + ", checking unresolved");
+ assertEquals(getState().diagnostics(sn).count(), (long) diagnosticsSize, "Given input: " + input + ", checking diagnostics");
return sn;
}
@@ -546,7 +547,7 @@ public class KullaTesting {
" got: " + main.exception().toString());
}
}
- List diagnostics = getState().diagnostics(mainKey);
+ List diagnostics = getState().diagnostics(mainKey).collect(toList());
switch (diagMain) {
case DIAG_OK:
assertEquals(diagnostics.size(), 0, "Expected no diagnostics, got: " + diagnosticsToString(diagnostics));
@@ -560,7 +561,7 @@ public class KullaTesting {
}
if (eventChain.mainInfo != null) {
for (STEInfo ste : eventChain.updates) {
- diagnostics = getState().diagnostics(ste.snippet());
+ diagnostics = getState().diagnostics(ste.snippet()).collect(toList());
switch (diagUpdates) {
case DIAG_OK:
assertEquals(diagnostics.size(), 0, "Expected no diagnostics, got: " + diagnosticsToString(diagnostics));
@@ -637,7 +638,7 @@ public class KullaTesting {
SnippetEvent e = events.get(0);
Snippet key = e.snippet();
assertEquals(getState().status(key), REJECTED);
- List diagnostics = getState().diagnostics(e.snippet());
+ List diagnostics = getState().diagnostics(e.snippet()).collect(toList());
assertTrue(diagnostics.size() > 0, "Expected diagnostics, got none");
assertDiagnostic(input, diagnostics.get(0), expectedDiagnostic);
assertTrue(key != null, "key must never be null, but it was for: " + input);
@@ -656,7 +657,7 @@ public class KullaTesting {
List events = assertEval(input, IGNORE_VALUE, null,
DiagCheck.DIAG_WARNING, DiagCheck.DIAG_IGNORE, mainInfo, updates);
SnippetEvent e = events.get(0);
- List diagnostics = getState().diagnostics(e.snippet());
+ List diagnostics = getState().diagnostics(e.snippet()).collect(toList());
if (expectedDiagnostic != null) assertDiagnostic(input, diagnostics.get(0), expectedDiagnostic);
return e.snippet();
}
@@ -704,12 +705,12 @@ public class KullaTesting {
String source = declarationKey.source();
assertEquals(declarationKey.name(), expectedName,
"Expected " + source + " to have the name: " + expectedName + ", got: " + declarationKey.name());
- List unresolved = getState().unresolvedDependencies(declarationKey);
- assertEquals(unresolved.size(), unressz, "Expected " + source + " to have " + unressz
- + " unresolved symbols, got: " + unresolved.size());
- List otherCorralledErrors = getState().diagnostics(declarationKey);
- assertEquals(otherCorralledErrors.size(), othersz, "Expected " + source + " to have " + othersz
- + " other errors, got: " + otherCorralledErrors.size());
+ long unresolved = getState().unresolvedDependencies(declarationKey).count();
+ assertEquals(unresolved, unressz, "Expected " + source + " to have " + unressz
+ + " unresolved symbols, got: " + unresolved);
+ long otherCorralledErrorsCount = getState().diagnostics(declarationKey).count();
+ assertEquals(otherCorralledErrorsCount, othersz, "Expected " + source + " to have " + othersz
+ + " other errors, got: " + otherCorralledErrorsCount);
}
public void assertKey(Snippet key, Status expectedStatus, SubKind expectedSubKind) {
@@ -757,31 +758,20 @@ public class KullaTesting {
}
public void assertNumberOfActiveVariables(int cnt) {
- Collection variables = getState().variables();
- assertEquals(variables.size(), cnt, "Variables : " + variables);
+ assertEquals(getState().variables().count(), cnt, "Variables : " + getState().variables().collect(toList()));
}
public void assertNumberOfActiveMethods(int cnt) {
- Collection methods = getState().methods();
- assertEquals(methods.size(), cnt, "Methods : " + methods);
+ assertEquals(getState().methods().count(), cnt, "Methods : " + getState().methods().collect(toList()));
}
public void assertNumberOfActiveClasses(int cnt) {
- Collection classes = getState().types();
- assertEquals(classes.size(), cnt, "Classes : " + classes);
- }
-
- public void assertMembers(Collection extends Snippet> members, Set expected) {
- assertEquals(members.size(), expected.size(), "Expected : " + expected + ", actual : " + members);
- assertEquals(members.stream()
- .map(this::getMemberInfo)
- .collect(Collectors.toSet()),
- expected);
+ assertEquals(getState().types().count(), cnt, "Types : " + getState().types().collect(toList()));
}
public void assertKeys(MemberInfo... expected) {
int index = 0;
- List snippets = getState().snippets();
+ List snippets = getState().snippets().collect(toList());
assertEquals(allSnippets.size(), snippets.size());
for (Snippet sn : snippets) {
if (sn.kind().isPersistent() && getState().status(sn).isActive()) {
@@ -801,7 +791,7 @@ public class KullaTesting {
public void assertActiveKeys(Snippet... expected) {
int index = 0;
- for (Snippet key : getState().snippets()) {
+ for (Snippet key : getState().snippets().collect(toList())) {
if (state.status(key).isActive()) {
assertEquals(expected[index], key, String.format("Difference in #%d. Expected: %s, actual: %s", index, key, expected[index]));
++index;
@@ -809,31 +799,43 @@ public class KullaTesting {
}
}
- private List filterDeclaredKeys(Predicate p) {
- return getActiveKeys().stream()
+ private void assertActiveSnippets(Stream extends Snippet> snippets, Predicate p, String label) {
+ Set active = getActiveKeys().stream()
.filter(p)
- .collect(Collectors.toList());
+ .collect(Collectors.toSet());
+ Set got = snippets
+ .collect(Collectors.toSet());
+ assertEquals(active, got, label);
}
public void assertVariables() {
- assertEquals(getState().variables(), filterDeclaredKeys((key) -> key instanceof VarSnippet), "Variables");
+ assertActiveSnippets(getState().variables(), (key) -> key instanceof VarSnippet, "Variables");
}
public void assertMethods() {
- assertEquals(getState().methods(), filterDeclaredKeys((key) -> key instanceof MethodSnippet), "Methods");
+ assertActiveSnippets(getState().methods(), (key) -> key instanceof MethodSnippet, "Methods");
}
public void assertClasses() {
- assertEquals(getState().types(), filterDeclaredKeys((key) -> key instanceof TypeDeclSnippet), "Classes");
+ assertActiveSnippets(getState().types(), (key) -> key instanceof TypeDeclSnippet, "Classes");
+ }
+
+ public void assertMembers(Stream extends Snippet> members, MemberInfo...expectedInfos) {
+ Set expected = Stream.of(expectedInfos).collect(Collectors.toSet());
+ Set got = members
+ .map(this::getMemberInfo)
+ .collect(Collectors.toSet());
+ assertEquals(got.size(), expected.size(), "Expected : " + expected + ", actual : " + members);
+ assertEquals(got, expected);
}
public void assertVariables(MemberInfo...expected) {
- assertMembers(getState().variables(), Stream.of(expected).collect(Collectors.toSet()));
+ assertMembers(getState().variables(), expected);
}
public void assertMethods(MemberInfo...expected) {
- assertMembers(getState().methods(), Stream.of(expected).collect(Collectors.toSet()));
- for (MethodSnippet methodKey : getState().methods()) {
+ assertMembers(getState().methods(), expected);
+ getState().methods().forEach(methodKey -> {
MemberInfo expectedInfo = null;
for (MemberInfo info : expected) {
if (info.name.equals(methodKey.name()) && info.type.equals(methodKey.signature())) {
@@ -843,11 +845,11 @@ public class KullaTesting {
assertNotNull(expectedInfo, "Not found method: " + methodKey.name());
int lastIndexOf = expectedInfo.type.lastIndexOf(')');
assertEquals(methodKey.parameterTypes(), expectedInfo.type.substring(1, lastIndexOf), "Parameter types");
- }
+ });
}
public void assertClasses(MemberInfo...expected) {
- assertMembers(getState().types(), Stream.of(expected).collect(Collectors.toSet()));
+ assertMembers(getState().types(), expected);
}
public void assertCompletion(String code, String... expected) {
diff --git a/langtools/test/jdk/jshell/RejectedFailedTest.java b/langtools/test/jdk/jshell/RejectedFailedTest.java
index d66c3890424..b9d8bece7cb 100644
--- a/langtools/test/jdk/jshell/RejectedFailedTest.java
+++ b/langtools/test/jdk/jshell/RejectedFailedTest.java
@@ -39,6 +39,7 @@ import jdk.jshell.Snippet.Kind;
import jdk.jshell.Snippet.Status;
import jdk.jshell.SnippetEvent;
+import static java.util.stream.Collectors.toList;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
@@ -49,7 +50,7 @@ public class RejectedFailedTest extends KullaTesting {
List events = assertEvalFail(input);
assertEquals(events.size(), 1, "Expected one event, got: " + events.size());
SnippetEvent e = events.get(0);
- List diagnostics = getState().diagnostics(e.snippet());
+ List diagnostics = getState().diagnostics(e.snippet()).collect(toList());
assertTrue(diagnostics.size() > 0, "Expected diagnostics, got none");
assertEquals(e.exception(), null, "Expected exception to be null.");
assertEquals(e.value(), null, "Expected value to be null.");
@@ -60,7 +61,7 @@ public class RejectedFailedTest extends KullaTesting {
SubKind expectedSubKind = kind == Kind.ERRONEOUS ? SubKind.UNKNOWN_SUBKIND : SubKind.METHOD_SUBKIND;
assertEquals(key.subKind(), expectedSubKind, "SubKind: ");
assertTrue(key.id().compareTo(prevId) > 0, "Current id: " + key.id() + ", previous: " + prevId);
- assertEquals(getState().diagnostics(key), diagnostics, "Expected retrieved diagnostics to match, but didn't.");
+ assertEquals(getState().diagnostics(key).collect(toList()), diagnostics, "Expected retrieved diagnostics to match, but didn't.");
assertEquals(key.source(), input, "Expected retrieved source: " +
key.source() + " to match input: " + input);
assertEquals(getState().status(key), Status.REJECTED, "Expected status of REJECTED, got: " + getState().status(key));
diff --git a/langtools/test/jdk/jshell/ReplaceTest.java b/langtools/test/jdk/jshell/ReplaceTest.java
index b631c4958c9..ca049581d65 100644
--- a/langtools/test/jdk/jshell/ReplaceTest.java
+++ b/langtools/test/jdk/jshell/ReplaceTest.java
@@ -28,9 +28,9 @@
* @run testng ReplaceTest
*/
-import java.util.Collection;
-
+import java.util.Iterator;
import java.util.List;
+import java.util.stream.Stream;
import jdk.jshell.Snippet;
import jdk.jshell.MethodSnippet;
import jdk.jshell.PersistentSnippet;
@@ -42,6 +42,7 @@ import org.testng.annotations.Test;
import jdk.jshell.SnippetEvent;
import jdk.jshell.UnresolvedReferenceException;
import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
import static jdk.jshell.Snippet.Status.*;
import static jdk.jshell.Snippet.SubKind.*;
import static org.testng.Assert.assertTrue;
@@ -90,17 +91,22 @@ public class ReplaceTest extends KullaTesting {
assertActiveKeys();
}
+ private void identityMatch(Stream got, T expected) {
+ Iterator it = got.iterator();
+ assertTrue(it.hasNext(), "expected exactly one");
+ assertTrue(expected == it.next(), "Identity must not change");
+ assertFalse(it.hasNext(), "expected exactly one");
+ }
+
public void testReplaceVarToMethod() {
Snippet x = varKey(assertEval("int x;"));
- Snippet musn = methodKey(assertEval("double mu() { return x * 4; }"));
+ MethodSnippet musn = methodKey(assertEval("double mu() { return x * 4; }"));
assertEval("x == 0;", "true");
assertEval("mu() == 0.0;", "true");
assertEval("double x = 2.5;",
ste(MAIN_SNIPPET, VALID, VALID, true, null),
ste(x, VALID, OVERWRITTEN, false, MAIN_SNIPPET));
- Collection meths = getState().methods();
- assertEquals(meths.size(), 1);
- assertTrue(musn == meths.iterator().next(), "Identity must not change");
+ identityMatch(getState().methods(), musn);
assertEval("x == 2.5;", "true");
assertEval("mu() == 10.0;", "true"); // Auto redefine
assertActiveKeys();
@@ -132,15 +138,13 @@ public class ReplaceTest extends KullaTesting {
public void testReplaceVarToClass() {
Snippet x = varKey(assertEval("int x;"));
- Snippet c = classKey(assertEval("class A { double a = 4 * x; }"));
+ TypeDeclSnippet c = classKey(assertEval("class A { double a = 4 * x; }"));
assertEval("x == 0;", "true");
assertEval("new A().a == 0.0;", "true");
assertEval("double x = 2.5;",
ste(MAIN_SNIPPET, VALID, VALID, true, null),
ste(x, VALID, OVERWRITTEN, false, MAIN_SNIPPET));
- Collection classes = getState().types();
- assertEquals(classes.size(), 1);
- assertTrue(c == classes.iterator().next(), "Identity must not change");
+ identityMatch(getState().types(), c);
assertEval("x == 2.5;", "true");
assertEval("new A().a == 10.0;", "true");
assertActiveKeys();
@@ -148,16 +152,14 @@ public class ReplaceTest extends KullaTesting {
public void testReplaceMethodToClass() {
Snippet x = methodKey(assertEval("int x() { return 0; }"));
- Snippet c = classKey(assertEval("class A { double a = 4 * x(); }"));
+ TypeDeclSnippet c = classKey(assertEval("class A { double a = 4 * x(); }"));
assertEval("x() == 0;", "true");
assertEval("new A().a == 0.0;", "true");
assertEval("double x() { return 2.5; }",
ste(MAIN_SNIPPET, VALID, VALID, true, null),
ste(x, VALID, OVERWRITTEN, false, MAIN_SNIPPET));
assertEval("x();", "2.5");
- Collection classes = getState().types();
- assertEquals(classes.size(), 1);
- assertTrue(c == classes.iterator().next(), "Identity must not change");
+ identityMatch(getState().types(), c);
assertEval("x() == 2.5;", "true");
assertEval("new A().a == 10.0;", "true");
assertActiveKeys();
@@ -313,8 +315,8 @@ public class ReplaceTest extends KullaTesting {
Snippet assn = ste.snippet();
DeclarationSnippet unsn = ((UnresolvedReferenceException) ste.exception()).getSnippet();
assertEquals(unsn.name(), "A", "Wrong with unresolved");
- assertEquals(getState().unresolvedDependencies(unsn).size(), 1, "Wrong size unresolved");
- assertEquals(getState().diagnostics(unsn).size(), 0, "Expected no diagnostics");
+ assertEquals(getState().unresolvedDependencies(unsn).count(), 1, "Wrong size unresolved");
+ assertEquals(getState().diagnostics(unsn).count(), 0L, "Expected no diagnostics");
Snippet g = varKey(assertEval("int g = 10;", "10",
added(VALID),
diff --git a/langtools/test/jdk/jshell/VariablesTest.java b/langtools/test/jdk/jshell/VariablesTest.java
index 35eda77cdcc..94b26a7b8ba 100644
--- a/langtools/test/jdk/jshell/VariablesTest.java
+++ b/langtools/test/jdk/jshell/VariablesTest.java
@@ -39,6 +39,7 @@ import jdk.jshell.Snippet.SubKind;
import jdk.jshell.SnippetEvent;
import org.testng.annotations.Test;
+import static java.util.stream.Collectors.toList;
import static jdk.jshell.Snippet.Status.*;
import static jdk.jshell.Snippet.SubKind.VAR_DECLARATION_SUBKIND;
import static org.testng.Assert.assertEquals;
@@ -331,7 +332,7 @@ public class VariablesTest extends KullaTesting {
//assertEquals(getState().source(snippet), src);
//assertEquals(snippet, undefKey);
assertEquals(getState().status(undefKey), RECOVERABLE_NOT_DEFINED);
- List unr = getState().unresolvedDependencies((VarSnippet) undefKey);
+ List unr = getState().unresolvedDependencies((VarSnippet) undefKey).collect(toList());;
assertEquals(unr.size(), 1);
assertEquals(unr.get(0), "class undefined");
assertVariables(variable("undefined", "d"));
From 54130ef8d323b2495b50a412cadce2891aaa97af Mon Sep 17 00:00:00 2001
From: Srinivas Dama
Date: Wed, 10 Aug 2016 09:21:58 -0700
Subject: [PATCH 06/58] 8134304: NPE in initialization of
OptimisticTypesPersistence
Reviewed-by: hannesw, jlaskey, mhaupt
---
.../internal/codegen/OptimisticTypesPersistence.java | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/OptimisticTypesPersistence.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/OptimisticTypesPersistence.java
index 0301f46dfe6..b793a68d6f9 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/OptimisticTypesPersistence.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/OptimisticTypesPersistence.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2016, 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
@@ -324,6 +324,8 @@ public final class OptimisticTypesPersistence {
}
versionDir.mkdirs();
if (versionDir.isDirectory()) {
+ //FIXME:Logger is disabled as Context.getContext() always returns null here because global scope object will not be created
+ //by the time this method gets invoked
getLogger().info("Optimistic type persistence directory is " + versionDir);
return versionDir;
}
@@ -450,10 +452,12 @@ public final class OptimisticTypesPersistence {
private static DebugLogger getLogger() {
try {
return Context.getContext().getLogger(RecompilableScriptFunctionData.class);
+ } catch (final NullPointerException e) {
+ //Don't print stacktrace until we revisit this, NPE is a known issue here
} catch (final Exception e) {
e.printStackTrace();
- return DebugLogger.DISABLED_LOGGER;
}
+ return DebugLogger.DISABLED_LOGGER;
}
private static void scheduleCleanup() {
From a2f7c1568c6cbd4291c7c76253ed5bc22437afda Mon Sep 17 00:00:00 2001
From: Robert Field
Date: Wed, 10 Aug 2016 10:47:43 -0700
Subject: [PATCH 07/58] 8163500: JShell: ProblemList.txt update: 8139872 and
8080843 fixed
Reviewed-by: jlahoda
---
langtools/test/ProblemList.txt | 2 --
1 file changed, 2 deletions(-)
diff --git a/langtools/test/ProblemList.txt b/langtools/test/ProblemList.txt
index f54ea86a7f1..e2f9fcfe039 100644
--- a/langtools/test/ProblemList.txt
+++ b/langtools/test/ProblemList.txt
@@ -54,8 +54,6 @@ jdk/javadoc/tool/varArgs/Main.java
#
# jshell
-jdk/jshell/EditorPadTest.java 8139872 generic-all test requires a non-headless environment
-jdk/jshell/ExternalEditorTest.java 8080843 generic-all invalid key error occurs when external editor is used.
jdk/jshell/ToolBasicTest.java 8139873 generic-all JShell tests failing
###########################################################################
From 3b8055916291b1f470139faa9038b74cafed6945 Mon Sep 17 00:00:00 2001
From: Vicente Romero
Date: Wed, 10 Aug 2016 13:52:02 -0700
Subject: [PATCH 08/58] 8160156: javac is generating let expressions
unnecessarily
Co-authored-by: Maurizio Cimadamore
Reviewed-by: mcimadamore
---
.../com/sun/tools/javac/comp/Lower.java | 41 +++++++-
...ressionsAreUnnecessarilyGeneratedTest.java | 98 +++++++++++++++++++
2 files changed, 137 insertions(+), 2 deletions(-)
create mode 100644 langtools/test/tools/javac/T8160156/LetExpressionsAreUnnecessarilyGeneratedTest.java
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java
index f06a238b2b9..0333f735416 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java
@@ -3184,11 +3184,13 @@ public class Lower extends TreeTranslator {
}
public void visitAssignop(final JCAssignOp tree) {
- JCTree lhsAccess = access(TreeInfo.skipParens(tree.lhs));
final boolean boxingReq = !tree.lhs.type.isPrimitive() &&
tree.operator.type.getReturnType().isPrimitive();
- if (boxingReq || lhsAccess.hasTag(APPLY)) {
+ AssignopDependencyScanner depScanner = new AssignopDependencyScanner(tree);
+ depScanner.scan(tree.rhs);
+
+ if (boxingReq || depScanner.dependencyFound) {
// boxing required; need to rewrite as x = (unbox typeof x)(x op y);
// or if x == (typeof x)z then z = (unbox typeof x)((typeof x)z op y)
// (but without recomputing x)
@@ -3238,6 +3240,41 @@ public class Lower extends TreeTranslator {
}
}
+ class AssignopDependencyScanner extends TreeScanner {
+
+ Symbol sym;
+ boolean dependencyFound = false;
+
+ AssignopDependencyScanner(JCAssignOp tree) {
+ this.sym = TreeInfo.symbol(tree.lhs);
+ }
+
+ @Override
+ public void scan(JCTree tree) {
+ if (tree != null && sym != null) {
+ tree.accept(this);
+ }
+ }
+
+ @Override
+ public void visitAssignop(JCAssignOp tree) {
+ if (TreeInfo.symbol(tree.lhs) == sym) {
+ dependencyFound = true;
+ return;
+ }
+ super.visitAssignop(tree);
+ }
+
+ @Override
+ public void visitUnary(JCUnary tree) {
+ if (TreeInfo.symbol(tree.arg) == sym) {
+ dependencyFound = true;
+ return;
+ }
+ super.visitUnary(tree);
+ }
+ }
+
/** Lower a tree of the form e++ or e-- where e is an object type */
JCExpression lowerBoxedPostop(final JCUnary tree) {
// translate to tmp1=lval(e); tmp2=tmp1; tmp1 OP 1; tmp2
diff --git a/langtools/test/tools/javac/T8160156/LetExpressionsAreUnnecessarilyGeneratedTest.java b/langtools/test/tools/javac/T8160156/LetExpressionsAreUnnecessarilyGeneratedTest.java
new file mode 100644
index 00000000000..1b31c0e40b1
--- /dev/null
+++ b/langtools/test/tools/javac/T8160156/LetExpressionsAreUnnecessarilyGeneratedTest.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2016, 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.
+ *
+ * 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.
+ */
+
+/**
+ * @test 8160156
+ * @summary javac is generating let expressions unnecessarily
+ * @library /tools/lib
+ * @modules
+ * jdk.compiler/com.sun.tools.javac.api
+ * jdk.compiler/com.sun.tools.javac.main
+ * @build toolbox.ToolBox toolbox.JavacTask
+ * @run main LetExpressionsAreUnnecessarilyGeneratedTest
+ */
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import toolbox.JavacTask;
+import toolbox.Task;
+import toolbox.TestRunner;
+import toolbox.ToolBox;
+
+public class LetExpressionsAreUnnecessarilyGeneratedTest extends TestRunner {
+ ToolBox tb;
+
+ public static void main(String... args) throws Exception {
+ new LetExpressionsAreUnnecessarilyGeneratedTest().runTests();
+ }
+
+ public LetExpressionsAreUnnecessarilyGeneratedTest() {
+ super(System.err);
+ tb = new ToolBox();
+ }
+
+ protected void runTests() throws Exception {
+ runTests(m -> new Object[] { Paths.get(m.getName()) });
+ }
+
+ @Test
+ public void testDontGenerateLetExpr(Path testBase) throws Exception {
+ Path src = testBase.resolve("src");
+ tb.writeJavaFiles(src,
+ "package base;\n" +
+ "public abstract class Base {\n" +
+ " protected int i = 1;\n" +
+ "}",
+
+ "package sub;\n" +
+ "import base.Base;\n" +
+ "public class Sub extends Base {\n" +
+ " private int i = 4;\n" +
+ " void m() {\n" +
+ " new Runnable() {\n" +
+ " public void run() {\n" +
+ " Sub.super.i += 10;\n" +
+ " }\n" +
+ " };\n" +
+ " }\n" +
+ "}");
+
+ Path out = testBase.resolve("out");
+ Files.createDirectories(out);
+ Path base = src.resolve("base");
+ Path sub = src.resolve("sub");
+
+ new JavacTask(tb)
+ .outdir(out)
+ .files(tb.findJavaFiles(base))
+ .run(Task.Expect.SUCCESS);
+
+ new JavacTask(tb)
+ .classpath(out)
+ .outdir(out)
+ .files(tb.findJavaFiles(sub))
+ .run(Task.Expect.SUCCESS);
+ }
+}
From 978417c4c771927b0a04267cf7fea3699a87eb9f Mon Sep 17 00:00:00 2001
From: Jonathan Gibbons
Date: Wed, 10 Aug 2016 15:47:46 -0700
Subject: [PATCH 09/58] 8136930: Simplify use of module-system options by
custom launchers 8160489: Multiple -Xpatch lines ignored by javac 8156998:
javac should support new option -XinheritRuntimeEnvironment
Reviewed-by: jlahoda, ksrini
---
.../tools/crules/MutableFieldsAnalyzer.java | 2 +
.../com/sun/tools/javac/api/JavacTool.java | 7 +-
.../com/sun/tools/javac/code/ClassFinder.java | 9 +-
.../com/sun/tools/javac/comp/Modules.java | 8 +-
.../sun/tools/javac/file/BaseFileManager.java | 33 +-
.../com/sun/tools/javac/file/Locations.java | 78 ++-
.../com/sun/tools/javac/jvm/ClassReader.java | 5 +-
.../com/sun/tools/javac/main/Arguments.java | 119 ++--
.../sun/tools/javac/main/JavaCompiler.java | 8 +-
.../com/sun/tools/javac/main/Main.java | 9 +-
.../com/sun/tools/javac/main/Option.java | 592 +++++++++++++-----
.../sun/tools/javac/main/OptionHelper.java | 9 +
.../JavacProcessingEnvironment.java | 18 +-
.../tools/javac/resources/compiler.properties | 2 +-
.../tools/javac/resources/javac.properties | 67 +-
.../sun/tools/javac/util/JDK9Wrappers.java | 36 ++
.../classes/com/sun/tools/javac/util/Log.java | 8 +
.../com/sun/tools/javac/util/Options.java | 14 +-
.../com/sun/tools/javah/JavahTask.java | 12 +-
.../classes/com/sun/tools/javah/Util.java | 15 +-
.../sun/tools/javah/resources/l10n.properties | 79 +--
.../com/sun/tools/sjavac/options/Option.java | 32 +-
.../com/sun/tools/sjavac/options/Options.java | 6 +-
.../com/sun/tools/javadoc/main/Start.java | 25 +-
.../sun/tools/javadoc/main/ToolOption.java | 139 +++-
.../javadoc/resources/javadoc.properties | 43 +-
.../jdk/javadoc/internal/tool/Start.java | 8 +-
.../jdk/javadoc/internal/tool/ToolOption.java | 119 +++-
.../tool/resources/javadoc.properties | 38 +-
.../com/sun/tools/javap/JavapTask.java | 33 +-
.../tools/javap/resources/javap.properties | 62 +-
.../sun/tools/jdeps/JdepsConfiguration.java | 2 +-
.../com/sun/tools/jdeps/JdepsTask.java | 30 +-
.../com/sun/tools/jdeps/ModuleAnalyzer.java | 2 +-
.../tools/jdeps/resources/jdeps.properties | 39 +-
langtools/test/ProblemList.txt | 5 +
langtools/test/TEST.ROOT | 8 +-
.../doclet/testModules/TestModules.java | 20 +-
.../javadoc/tool/6964914/TestStdDoclet.java | 7 -
.../javadoc/tool/6964914/TestUserDoclet.java | 5 -
.../jdk/javadoc/tool/CheckResourceKeys.java | 2 +-
.../test/jdk/javadoc/tool/ReleaseOption.java | 7 +-
langtools/test/tools/all/RunCodingRules.java | 12 +-
.../test/tools/javac/6410653/T6410653.java | 7 +-
langtools/test/tools/javac/T6358024.java | 6 +-
langtools/test/tools/javac/T6358166.java | 8 +-
langtools/test/tools/javac/T6403466.java | 8 +-
langtools/test/tools/javac/T6406771.java | 4 +-
.../T8003967/DetectMutableStaticFields.java | 2 +
...rNamesAreNotCopiedToAnonymousInitTest.java | 10 +-
langtools/test/tools/javac/api/T6358786.java | 4 +-
langtools/test/tools/javac/api/T6412669.java | 4 +-
.../javac/api/TestClientCodeWrapper.java | 4 +-
.../tools/javac/api/TestJavacTaskScanner.java | 8 +-
langtools/test/tools/javac/api/TestTrees.java | 6 +-
.../attributes/Module/ModuleTestBase.java | 4 +-
langtools/test/tools/javac/diags/Example.java | 4 +-
.../tools/javac/diags/examples.not-yet.txt | 1 +
.../module-info.java | 2 +-
.../CantFindModule/CantFindModule.java | 2 +-
.../IllegalArgumentForOption.java | 2 +-
.../InvalidArgForXpatch.java | 27 -
.../InvalidDefaultInterface.java | 2 +-
.../InvalidStaticInterface.java | 2 +-
.../examples/XaddexportsMalformedEntry.java | 2 +-
.../diags/examples/XaddexportsTooMany.java | 2 +-
.../examples/XaddreadsMalformedEntry.java | 2 +-
.../diags/examples/XaddreadsTooMany.java | 2 +-
.../javac/fatalErrors/NoJavaLangTest.java | 2 +-
langtools/test/tools/javac/file/T7018098.java | 12 +-
.../tools/javac/modules/AddLimitMods.java | 96 +--
.../tools/javac/modules/AddReadsTest.java | 38 +-
.../javac/modules/AnnotationProcessing.java | 4 +-
.../AnnotationProcessorsInModulesTest.java | 16 +-
.../tools/javac/modules/AutomaticModules.java | 18 +-
.../javac/modules/DoclintOtherModules.java | 2 +-
.../javac/modules/DuplicateClassTest.java | 2 +-
.../test/tools/javac/modules/EdgeCases.java | 18 +-
.../test/tools/javac/modules/EnvVarTest.java | 6 +-
.../test/tools/javac/modules/GraphsTest.java | 8 +-
.../tools/javac/modules/HelloWorldTest.java | 4 +-
.../InheritRuntimeEnvironmentTest.java | 421 +++++++++++++
.../test/tools/javac/modules/MOptionTest.java | 14 +-
.../modules/MissingJarInModulePathTest.java | 2 +-
.../tools/javac/modules/ModuleFinderTest.java | 2 +-
.../tools/javac/modules/ModuleInfoTest.java | 12 +-
.../tools/javac/modules/ModulePathTest.java | 40 +-
.../javac/modules/ModuleSourcePathTest.java | 44 +-
.../tools/javac/modules/ModuleTestBase.java | 18 -
.../modules/ModulesAndClassPathTest.java | 17 +-
.../javac/modules/MultiModuleModeTest.java | 14 +-
.../tools/javac/modules/NPEEmptyFileTest.java | 2 +-
.../tools/javac/modules/OutputDirTest.java | 10 +-
.../javac/modules/PackageConflictTest.java | 16 +-
.../javac/modules/PackageMultipleModules.java | 3 +-
.../tools/javac/modules/PatchModulesTest.java | 127 ++++
.../javac/modules/PluginsInModulesTest.java | 4 +-
.../tools/javac/modules/ProvidesTest.java | 4 +-
.../tools/javac/modules/QueryBeforeEnter.java | 24 +-
.../javac/modules/RequiresPublicTest.java | 6 +-
.../test/tools/javac/modules/ResolveTest.java | 12 +-
...rviceProvidedButNotExportedOrUsedTest.java | 2 +-
.../javac/modules/SingleModuleModeTest.java | 4 +-
.../tools/javac/modules/SubpackageTest.java | 2 +-
.../javac/modules/UpgradeModulePathTest.java | 42 +-
.../test/tools/javac/modules/UsesTest.java | 10 +-
.../test/tools/javac/modules/XModuleTest.java | 14 +-
.../javac/platform/PlatformProviderTest.java | 14 +-
.../test/tools/javac/processing/T8142931.java | 12 +-
.../loader/testClose/TestClose.java | 4 +-
.../loader/testClose/TestClose2.java | 6 +-
.../model/testgetallmembers/Main.java | 2 +-
langtools/test/tools/javac/util/T6597678.java | 4 +-
.../tools/javadoc/6964914/TestStdDoclet.java | 7 -
.../tools/javadoc/6964914/TestUserDoclet.java | 5 -
.../test/tools/javadoc/CheckResourceKeys.java | 4 +-
.../test/tools/javadoc/ReleaseOption.java | 12 +-
langtools/test/tools/javap/T7004698.java | 2 +-
langtools/test/tools/jdeps/APIDeps.java | 4 +-
.../jdeps/jdkinternals/ShowReplacement.java | 2 +-
langtools/test/tools/jdeps/lib/JdepsUtil.java | 2 +-
.../tools/jdeps/modules/CheckModuleTest.java | 4 +-
.../tools/jdeps/modules/GenModuleInfo.java | 12 +-
.../test/tools/jdeps/modules/InverseDeps.java | 10 +-
.../test/tools/jdeps/modules/ModuleTest.java | 14 +-
.../tools/jdeps/modules/SplitPackage.java | 4 +-
.../tools/jdeps/modules/TransitiveDeps.java | 4 +-
.../jdeps/modules/src/m3/module-info.java | 2 +-
.../jdeps/modules/src/m5/module-info.java | 2 +-
langtools/test/tools/lib/toolbox/Assert.java | 162 +++++
.../test/tools/lib/toolbox/JavaTask.java | 20 +
.../test/tools/lib/toolbox/JavacTask.java | 10 +
.../test/tools/lib/toolbox/TestRunner.java | 2 +-
.../test/tools/sjavac/ApiExtraction.java | 10 +-
.../tools/sjavac/ClasspathDependencies.java | 7 +-
.../tools/sjavac/CompileCircularSources.java | 1 -
.../sjavac/CompileExcludingDependency.java | 2 -
.../test/tools/sjavac/CompileWithAtFile.java | 1 -
.../sjavac/CompileWithInvisibleSources.java | 2 -
.../sjavac/CompileWithOverrideSources.java | 2 -
langtools/test/tools/sjavac/HiddenFiles.java | 15 +-
langtools/test/tools/sjavac/IdleShutdown.java | 4 +-
.../test/tools/sjavac/IgnoreSymbolFile.java | 3 +-
.../test/tools/sjavac/IncCompInheritance.java | 2 +-
.../tools/sjavac/IncCompileChangeNative.java | 2 -
.../tools/sjavac/IncCompileDropClasses.java | 2 -
.../sjavac/IncCompileFullyQualifiedRef.java | 1 -
.../tools/sjavac/IncCompileNoChanges.java | 1 -
.../tools/sjavac/IncCompileUpdateNative.java | 2 -
.../tools/sjavac/IncCompileWithChanges.java | 2 -
.../tools/sjavac/IncludeExcludePatterns.java | 15 +-
langtools/test/tools/sjavac/NoState.java | 7 +-
.../test/tools/sjavac/OptionDecoding.java | 9 +-
.../test/tools/sjavac/OverlappingSrcDst.java | 3 +-
.../tools/sjavac/PackagePathMismatch.java | 2 +-
.../tools/sjavac/ParallelCompilations.java | 3 -
.../test/tools/sjavac/PermittedArtifact.java | 2 -
.../test/tools/sjavac/PooledExecution.java | 4 +-
langtools/test/tools/sjavac/SjavacBase.java | 5 +-
langtools/test/tools/sjavac/StateDir.java | 2 -
langtools/test/tools/sjavac/Wrapper.java | 43 +-
161 files changed, 2421 insertions(+), 1050 deletions(-)
delete mode 100644 langtools/test/tools/javac/diags/examples/InvalidArgForXPatch/InvalidArgForXpatch.java
create mode 100644 langtools/test/tools/javac/modules/InheritRuntimeEnvironmentTest.java
create mode 100644 langtools/test/tools/javac/modules/PatchModulesTest.java
create mode 100644 langtools/test/tools/lib/toolbox/Assert.java
diff --git a/langtools/make/tools/crules/MutableFieldsAnalyzer.java b/langtools/make/tools/crules/MutableFieldsAnalyzer.java
index 5609556be5c..538f7827dfa 100644
--- a/langtools/make/tools/crules/MutableFieldsAnalyzer.java
+++ b/langtools/make/tools/crules/MutableFieldsAnalyzer.java
@@ -107,6 +107,8 @@ public class MutableFieldsAnalyzer extends AbstractCodingRulesAnalyzer {
"layerClass", "bootMethod", "defineModulesWithOneLoaderMethod", "configurationMethod");
ignoreFields("com.sun.tools.javac.util.JDK9Wrappers$ServiceLoaderHelper",
"loadMethod");
+ ignoreFields("com.sun.tools.javac.util.JDK9Wrappers$VMHelper",
+ "vmClass", "getRuntimeArgumentsMethod");
ignoreFields("com.sun.tools.javac.util.ModuleHelper",
"addExportsMethod", "getUnnamedModuleMethod", "getModuleMethod");
}
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTool.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTool.java
index fba01f1be5a..69615ce6af5 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTool.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTool.java
@@ -179,10 +179,10 @@ public final class JavacTool implements JavaCompiler {
args.init("javac", options, classes, compilationUnits);
// init multi-release jar handling
- if (fileManager.isSupportedOption(Option.MULTIRELEASE.text) == 1) {
+ if (fileManager.isSupportedOption(Option.MULTIRELEASE.primaryName) == 1) {
Target target = Target.instance(context);
List list = List.of(target.multiReleaseValue());
- fileManager.handleOption(Option.MULTIRELEASE.text, list.iterator());
+ fileManager.handleOption(Option.MULTIRELEASE.primaryName, list.iterator());
}
return new JavacTaskImpl(context);
@@ -212,8 +212,9 @@ public final class JavacTool implements JavaCompiler {
public int isSupportedOption(String option) {
Set