diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/Contents.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/Contents.java index d4df1bff662..a453ff78b5a 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/Contents.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/Contents.java @@ -156,6 +156,7 @@ public class Contents { public final Content propertyDetailsLabel; public final Content propertySummaryLabel; public final Content record; + public final Content referencedIn; public final Content seeLabel; public final Content serializedForm; public final Content servicesLabel; @@ -163,6 +164,8 @@ public class Contents { public final Content subclassesLabel; public final Content subinterfacesLabel; public final Content summaryLabel; + public final Content systemPropertiesLabel; + public final Content systemPropertiesSummaryLabel; public final Content treeLabel; public final Content typeLabel; public final Content useLabel; @@ -284,6 +287,7 @@ public class Contents { propertyDetailsLabel = getContent("doclet.Property_Detail"); propertySummaryLabel = getContent("doclet.Property_Summary"); record = getContent("doclet.Record"); + referencedIn = getContent("doclet.ReferencedIn"); seeLabel = getContent("doclet.See"); serializedForm = getContent("doclet.Serialized_Form"); servicesLabel = getContent("doclet.Services"); @@ -291,6 +295,8 @@ public class Contents { subclassesLabel = getContent("doclet.Subclasses"); subinterfacesLabel = getContent("doclet.Subinterfaces"); summaryLabel = getContent("doclet.Summary"); + systemPropertiesLabel = getContent("doclet.systemProperties"); + systemPropertiesSummaryLabel = getContent("doclet.systemPropertiesSummary"); treeLabel = getContent("doclet.Tree"); typeLabel = getContent("doclet.Type"); useLabel = getContent("doclet.navClassUse"); diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDoclet.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDoclet.java index 7445651d09c..3a3f1ccf6f7 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDoclet.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDoclet.java @@ -159,6 +159,7 @@ public class HtmlDoclet extends AbstractDoclet { if (!configuration.packages.isEmpty()) { AllPackagesIndexWriter.generate(configuration); } + SystemPropertiesWriter.generate(configuration); } if (configuration.createoverview) { diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java index 8eb38633462..0ab62b75f67 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java @@ -75,6 +75,7 @@ import com.sun.source.doctree.TextTree; import com.sun.source.util.SimpleDocTreeVisitor; import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder; import jdk.javadoc.internal.doclets.formats.html.markup.Entity; +import jdk.javadoc.internal.doclets.formats.html.markup.FixedStringContent; import jdk.javadoc.internal.doclets.formats.html.markup.Head; import jdk.javadoc.internal.doclets.formats.html.markup.HtmlAttr; import jdk.javadoc.internal.doclets.formats.html.markup.HtmlDocument; @@ -2185,4 +2186,7 @@ public class HtmlDocletWriter { return localStylesheets; } + Content getVerticalSeparator() { + return HtmlTree.SPAN(HtmlStyle.verticalSeparator, new FixedStringContent("|")); + } } diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SearchIndexItem.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SearchIndexItem.java index c7440677dc6..ef38979f208 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SearchIndexItem.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SearchIndexItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2019, 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 @@ -51,6 +51,7 @@ public class SearchIndexItem { private String containingClass = ""; private String holder = ""; private String description = ""; + private boolean systemProperty; public void setLabel(String l) { label = l; @@ -100,6 +101,14 @@ public class SearchIndexItem { return description; } + public void setSystemProperty(boolean value) { + systemProperty = value; + } + + public boolean isSystemProperty() { + return systemProperty; + } + public String toString() { StringBuilder item = new StringBuilder(""); switch (category) { diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SingleIndexWriter.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SingleIndexWriter.java index afd2f9475b1..f120518b924 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SingleIndexWriter.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SingleIndexWriter.java @@ -148,9 +148,13 @@ public class SingleIndexWriter extends AbstractIndexWriter { contentTree.add(links.createLink(DocPaths.ALLCLASSES_INDEX, contents.allClassesLabel)); if (!configuration.packages.isEmpty()) { - contentTree.add(Entity.NO_BREAK_SPACE); + contentTree.add(getVerticalSeparator()); contentTree.add(links.createLink(DocPaths.ALLPACKAGES_INDEX, contents.allPackagesLabel)); + } + if (!configuration.tagSearchIndex.isEmpty()) { + contentTree.add(getVerticalSeparator()); + contentTree.add(links.createLink(DocPaths.SYSTEM_PROPERTIES, contents.systemPropertiesLabel)); + } } } -} diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SplitIndexWriter.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SplitIndexWriter.java index f4c2e04b69a..9b7b20f6e5d 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SplitIndexWriter.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SplitIndexWriter.java @@ -172,9 +172,14 @@ public class SplitIndexWriter extends AbstractIndexWriter { contentTree.add(links.createLink(pathToRoot.resolve(DocPaths.ALLCLASSES_INDEX), contents.allClassesLabel)); if (!configuration.packages.isEmpty()) { - contentTree.add(Entity.NO_BREAK_SPACE); + contentTree.add(getVerticalSeparator()); contentTree.add(links.createLink(pathToRoot.resolve(DocPaths.ALLPACKAGES_INDEX), contents.allPackagesLabel)); + } + if (!configuration.tagSearchIndex.isEmpty()) { + contentTree.add(getVerticalSeparator()); + contentTree.add(links.createLink(pathToRoot.resolve(DocPaths.SYSTEM_PROPERTIES), + contents.systemPropertiesLabel)); + } } } -} diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SystemPropertiesWriter.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SystemPropertiesWriter.java new file mode 100644 index 00000000000..5d03521c9dc --- /dev/null +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SystemPropertiesWriter.java @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2019, 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; + +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.Navigation; +import jdk.javadoc.internal.doclets.formats.html.markup.Navigation.PageMode; +import jdk.javadoc.internal.doclets.formats.html.markup.StringContent; +import jdk.javadoc.internal.doclets.formats.html.markup.Table; +import jdk.javadoc.internal.doclets.formats.html.markup.TableHeader; +import jdk.javadoc.internal.doclets.toolkit.Content; +import jdk.javadoc.internal.doclets.toolkit.util.DocFileIOException; +import jdk.javadoc.internal.doclets.toolkit.util.DocPath; +import jdk.javadoc.internal.doclets.toolkit.util.DocPaths; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.TreeMap; + +/** + * Generates the file with the summary of all the system properties. + * + *
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 SystemPropertiesWriter extends HtmlDocletWriter {
+
+ /**
+ * The HTML tree for main tag.
+ */
+ private final HtmlTree mainTree = HtmlTree.MAIN();
+
+ private final Navigation navBar;
+
+ /**
+ * Constructs SystemPropertiesWriter object.
+ *
+ * @param configuration The current configuration
+ * @param filename Path to the file which is getting generated.
+ */
+ public SystemPropertiesWriter(HtmlConfiguration configuration, DocPath filename) {
+ super(configuration, filename);
+ this.navBar = new Navigation(null, configuration, PageMode.SYSTEMPROPERTIES, path);
+ }
+
+ /**
+ * Creates SystemPropertiesWriter object.
+ *
+ * @param configuration The current configuration
+ * @throws DocFileIOException
+ */
+ public static void generate(HtmlConfiguration configuration) throws DocFileIOException {
+ generate(configuration, DocPaths.SYSTEM_PROPERTIES);
+ }
+
+ private static void generate(HtmlConfiguration configuration, DocPath fileName) throws DocFileIOException {
+ SystemPropertiesWriter systemPropertiesGen = new SystemPropertiesWriter(configuration, fileName);
+ systemPropertiesGen.buildSystemPropertiesPage();
+ }
+
+ /**
+ * Prints all the system properties to the file.
+ */
+ protected void buildSystemPropertiesPage() throws DocFileIOException {
+ String label = resources.getText("doclet.systemProperties");
+ HtmlTree bodyTree = getBody(getWindowTitle(label));
+ HtmlTree header = HtmlTree.HEADER();
+ addTop(header);
+ navBar.setUserHeader(getUserHeaderFooter(true));
+ header.add(navBar.getContent(true));
+ bodyTree.add(header);
+ HtmlTree div = new HtmlTree(HtmlTag.DIV);
+ div.setStyle(HtmlStyle.systemPropertiesContainer);
+ addSystemProperties(div);
+ Content titleContent = new StringContent(resources.getText("doclet.systemProperties"));
+ Content pHeading = HtmlTree.HEADING(Headings.PAGE_TITLE_HEADING, true,
+ HtmlStyle.title, titleContent);
+ Content headerDiv = HtmlTree.DIV(HtmlStyle.header, pHeading);
+ mainTree.add(headerDiv);
+ mainTree.add(div);
+ bodyTree.add(mainTree);
+ Content footer = HtmlTree.FOOTER();
+ navBar.setUserFooter(getUserHeaderFooter(false));
+ footer.add(navBar.getContent(false));
+ addBottom(footer);
+ bodyTree.add(footer);
+ printHtmlDocument(null, "system properties", bodyTree);
+ }
+
+ /**
+ * Add all the system properties to the content tree.
+ *
+ * @param content HtmlTree content to which the links will be added
+ */
+ protected void addSystemProperties(Content content) {
+ Map
All Classes "
+ "
All Classes"
+ + "|"
+ "All Packages");
-}
+ }
}
diff --git a/test/langtools/jdk/javadoc/doclet/testPackagePage/TestPackagePage.java b/test/langtools/jdk/javadoc/doclet/testPackagePage/TestPackagePage.java
index be15c2049ed..1a00f382235 100644
--- a/test/langtools/jdk/javadoc/doclet/testPackagePage/TestPackagePage.java
+++ b/test/langtools/jdk/javadoc/doclet/testPackagePage/TestPackagePage.java
@@ -106,7 +106,8 @@ public class TestPackagePage extends JavadocTester {
checkOutput("package-search-index.js", true,
"{\"l\":\"All Packages\",\"url\":\"allpackages-index.html\"}");
checkOutput("index-all.html", true,
- "
All Classes "
+ "
All Classes"
+ + "|"
+ "All Packages");
}
}
diff --git a/test/langtools/jdk/javadoc/doclet/testSearch/TestSearch.java b/test/langtools/jdk/javadoc/doclet/testSearch/TestSearch.java
index e43c8ea5865..a96b3a90377 100644
--- a/test/langtools/jdk/javadoc/doclet/testSearch/TestSearch.java
+++ b/test/langtools/jdk/javadoc/doclet/testSearch/TestSearch.java
@@ -460,7 +460,8 @@ public class TestSearch extends JavadocTester {
+ "SearchTagDeprecatedMethod - Search tag in pkg2.TestError.TestError()",
"
All Classes "
+ "
All Classes"
+ + "|"
+ "All Packages");
checkOutput("index-files/index-10.html", true,
"
All Classes "
- + "All Packages");
-}
+ "
All Classes"
+ + "|"
+ + "All Packages");
+ }
}
diff --git a/test/langtools/jdk/javadoc/doclet/testStylesheet/TestStylesheet.java b/test/langtools/jdk/javadoc/doclet/testStylesheet/TestStylesheet.java
index e322893802a..0e97c5925c2 100644
--- a/test/langtools/jdk/javadoc/doclet/testStylesheet/TestStylesheet.java
+++ b/test/langtools/jdk/javadoc/doclet/testStylesheet/TestStylesheet.java
@@ -77,7 +77,8 @@ public class TestStylesheet extends JavadocTester {
+ "}",
".overviewSummary caption, .memberSummary caption, .typeSummary caption,\n"
+ ".useSummary caption, .constantsSummary caption, .deprecatedSummary caption,\n"
- + ".requiresSummary caption, .packagesSummary caption, .providesSummary caption, .usesSummary caption {\n"
+ + ".requiresSummary caption, .packagesSummary caption, .providesSummary caption,\n"
+ + ".usesSummary caption, .systemPropertiesSummary caption {\n"
+ " position:relative;\n"
+ " text-align:left;\n"
+ " background-repeat:no-repeat;\n"
@@ -94,7 +95,7 @@ public class TestStylesheet extends JavadocTester {
".overviewSummary caption span, .memberSummary caption span, .typeSummary caption span,\n"
+ ".useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span,\n"
+ ".requiresSummary caption span, .packagesSummary caption span, .providesSummary caption span,\n"
- + ".usesSummary caption span {\n"
+ + ".usesSummary caption span, .systemPropertiesSummary caption span {\n"
+ " white-space:nowrap;\n"
+ " padding-top:5px;\n"
+ " padding-left:12px;\n"
@@ -137,7 +138,8 @@ public class TestStylesheet extends JavadocTester {
+ "}",
".overviewSummary td, .memberSummary td, .typeSummary td,\n"
+ ".useSummary td, .constantsSummary td, .deprecatedSummary td,\n"
- + ".requiresSummary td, .packagesSummary td, .providesSummary td, .usesSummary td {\n"
+ + ".requiresSummary td, .packagesSummary td, .providesSummary td,\n"
+ + ".usesSummary td, .systemPropertiesSummary td {\n"
+ " text-align:left;\n"
+ " padding:0px 0px 12px 10px;\n"
+ "}",
diff --git a/test/langtools/jdk/javadoc/doclet/testSystemPropertyPage/TestSystemPropertyPage.java b/test/langtools/jdk/javadoc/doclet/testSystemPropertyPage/TestSystemPropertyPage.java
new file mode 100644
index 00000000000..5f32f2c53a5
--- /dev/null
+++ b/test/langtools/jdk/javadoc/doclet/testSystemPropertyPage/TestSystemPropertyPage.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2019, 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 8215038
+ * @summary Add a page that lists all system properties
+ * @library /tools/lib ../../lib
+ * @modules jdk.javadoc/jdk.javadoc.internal.tool
+ * @build javadoc.tester.* toolbox.ToolBox builder.ClassBuilder
+ * @run main TestSystemPropertyPage
+ */
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import builder.ClassBuilder;
+import javadoc.tester.JavadocTester;
+import toolbox.ToolBox;
+
+public class TestSystemPropertyPage extends JavadocTester {
+
+ final ToolBox tb;
+
+ public static void main(String... args) throws Exception {
+ TestSystemPropertyPage tester = new TestSystemPropertyPage();
+ tester.runTests(m -> new Object[]{Paths.get(m.getName())});
+ }
+
+ TestSystemPropertyPage() {
+ tb = new ToolBox();
+ }
+
+ @Test
+ public void test(Path base) throws Exception {
+ Path srcDir = base.resolve("src");
+ Path outDir = base.resolve("out");
+
+ new ClassBuilder(tb, "pkg1.A")
+ .setComments("test with {@systemProperty user.name}")
+ .setModifiers("public", "class")
+ .write(srcDir);
+
+ new ClassBuilder(tb, "pkg2.B")
+ .setComments("test with {@systemProperty user.address}, {@index user.home System Property}")
+ .setModifiers("public", "class")
+ .write(srcDir);
+
+ javadoc("-d", outDir.toString(),
+ "-sourcepath", srcDir.toString(),
+ "pkg1","pkg2");
+
+ checkExit(Exit.OK);
+
+ checkOutput("index-all.html", true,
+ "System Properties");
+
+ checkOutput("system-properties.html", true,
+ "\n" +
+ "
");
+ }
+}
diff --git a/test/langtools/jdk/javadoc/doclet/testUnnamedPackage/TestUnnamedPackage.java b/test/langtools/jdk/javadoc/doclet/testUnnamedPackage/TestUnnamedPackage.java
index f80b3e35da8..999901e96b5 100644
--- a/test/langtools/jdk/javadoc/doclet/testUnnamedPackage/TestUnnamedPackage.java
+++ b/test/langtools/jdk/javadoc/doclet/testUnnamedPackage/TestUnnamedPackage.java
@@ -110,7 +110,8 @@ public class TestUnnamedPackage extends JavadocTester {
"{\"l\":\"All Packages\",\"url\":\"allpackages-index.html\"}");
checkOutput("index-all.html", true,
- "\n" +
+ " \n" +
+ "\n" +
+ "\n" +
+ "Property \n" +
+ "Referenced In \n" +
+ "\n" +
+ " \n" +
+ "user.address \n" +
+ "class pkg2.B \n" +
+ "\n" +
+ " \n" +
+ "\n" +
+ "user.name \n" +
+ "class pkg1.A \n" +
+ "
All Classes "
+ "
All Classes"
+ + "|"
+ "All Packages");
checkOutput(Output.OUT, false,
diff --git a/test/langtools/jdk/javadoc/tool/api/basic/APITest.java b/test/langtools/jdk/javadoc/tool/api/basic/APITest.java
index 72a99d81f0e..02922b5810a 100644
--- a/test/langtools/jdk/javadoc/tool/api/basic/APITest.java
+++ b/test/langtools/jdk/javadoc/tool/api/basic/APITest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, 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
@@ -236,6 +236,7 @@ class APITest {
"script.js",
"search.js",
"stylesheet.css",
+ "system-properties.html",
"type-search-index.js",
"type-search-index.zip"
));
@@ -243,7 +244,8 @@ class APITest {
protected static Set