From a722889681bf7d565666de00b6362b65c021a529 Mon Sep 17 00:00:00 2001 From: Priya Lakshmi Muthuswamy Date: Tue, 30 Apr 2019 11:58:30 +0530 Subject: [PATCH] 8221991: Improve the HTML for the inheritance tree for a type Reviewed-by: hannesw --- .../doclets/formats/html/ClassWriterImpl.java | 41 ++++++++----------- .../html/resources/standard.properties | 1 + .../doclets/toolkit/resources/stylesheet.css | 12 ++---- .../doclet/AccessAsciiArt/AccessAsciiArt.java | 6 +-- .../doclet/testInterface/TestInterface.java | 19 +++------ .../doclet/testOptions/TestOptions.java | 8 ++-- .../TestPrivateClasses.java | 11 ++--- .../TestSingletonLists.java | 15 ++----- 8 files changed, 39 insertions(+), 74 deletions(-) diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java index 3390a8b9270..840a3588b3c 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java @@ -40,7 +40,9 @@ import javax.lang.model.type.TypeMirror; import javax.lang.model.util.SimpleElementVisitor8; import com.sun.source.doctree.DocTree; +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.HtmlAttr; 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; @@ -295,26 +297,17 @@ public class ClassWriterImpl extends SubWriterHolderWriter implements ClassWrite */ private Content getClassInheritenceTree(TypeMirror type) { TypeMirror sup; - HtmlTree classTreeUl = new HtmlTree(HtmlTag.UL); - classTreeUl.setStyle(HtmlStyle.inheritance); - Content liTree = null; + HtmlTree classTree = null; do { sup = utils.getFirstVisibleSuperClass(type); - if (sup != null) { - HtmlTree ul = new HtmlTree(HtmlTag.UL); - ul.setStyle(HtmlStyle.inheritance); - ul.add(getTreeForClassHelper(type)); - if (liTree != null) - ul.add(liTree); - Content li = HtmlTree.LI(ul); - liTree = li; - type = sup; - } else - classTreeUl.add(getTreeForClassHelper(type)); + HtmlTree htmlElement = HtmlTree.DIV(HtmlStyle.inheritance, getTreeForClassHelper(type)); + if (classTree != null) + htmlElement.add(classTree); + classTree = htmlElement; + type = sup; } while (sup != null); - if (liTree != null) - classTreeUl.add(liTree); - return classTreeUl; + classTree.put(HtmlAttr.TITLE, contents.getContent("doclet.Inheritance_Tree").toString()); + return classTree; } /** @@ -324,25 +317,25 @@ public class ClassWriterImpl extends SubWriterHolderWriter implements ClassWrite * @return a content tree for class helper */ private Content getTreeForClassHelper(TypeMirror type) { - Content li = new HtmlTree(HtmlTag.LI); + Content content = new ContentBuilder(); if (type.equals(typeElement.asType())) { Content typeParameters = getTypeParameterLinks( new LinkInfoImpl(configuration, LinkInfoImpl.Kind.TREE, typeElement)); if (configuration.shouldExcludeQualifier(utils.containingPackage(typeElement).toString())) { - li.add(utils.asTypeElement(type).getSimpleName()); - li.add(typeParameters); + content.add(utils.asTypeElement(type).getSimpleName()); + content.add(typeParameters); } else { - li.add(utils.asTypeElement(type).getQualifiedName()); - li.add(typeParameters); + content.add(utils.asTypeElement(type).getQualifiedName()); + content.add(typeParameters); } } else { Content link = getLink(new LinkInfoImpl(configuration, LinkInfoImpl.Kind.CLASS_TREE_PARENT, type) .label(configuration.getClassName(utils.asTypeElement(type)))); - li.add(link); + content.add(link); } - return li; + return content; } /** diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/standard.properties b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/standard.properties index 7452dbedd6c..6718b7e3e24 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/standard.properties +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/standard.properties @@ -94,6 +94,7 @@ doclet.No_Non_Deprecated_Classes_To_Document=No non-deprecated classes found to doclet.Interfaces=Interfaces doclet.Enclosing_Class=Enclosing class: doclet.Enclosing_Interface=Enclosing interface: +doclet.Inheritance_Tree=Inheritance Tree doclet.System_Property=System Property doclet.Window_Source_title=Source code doclet.Window_Help_title=API Help diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/stylesheet.css b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/stylesheet.css index ffa2dbc5958..33505d0a409 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/stylesheet.css +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/stylesheet.css @@ -364,18 +364,12 @@ ul.horizontal li { display:inline; font-size:0.9em; } -ul.inheritance { +div.inheritance { margin:0; padding:0; } -ul.inheritance li { - display:inline; - list-style:none; -} -ul.inheritance li ul.inheritance { - margin-left:15px; - padding-left:15px; - padding-top:1px; +div.inheritance div.inheritance { + margin-left:2em; } ul.blockList, ul.blockListLast { margin:10px 0 10px 0; diff --git a/test/langtools/jdk/javadoc/doclet/AccessAsciiArt/AccessAsciiArt.java b/test/langtools/jdk/javadoc/doclet/AccessAsciiArt/AccessAsciiArt.java index 40907cc8bd8..03eb180703d 100644 --- a/test/langtools/jdk/javadoc/doclet/AccessAsciiArt/AccessAsciiArt.java +++ b/test/langtools/jdk/javadoc/doclet/AccessAsciiArt/AccessAsciiArt.java @@ -50,10 +50,10 @@ public class AccessAsciiArt extends JavadocTester { checkOutput("p1/subpkg/SSC.html", true, // Test the top line of the class tree - "
  • p1.C
  • ", + "
    p1.C", // Test the second line of the class tree - "
  • p1.SC
  • ", + "
    p1.SC", // Test the third line of the class tree - "
  • p1.subpkg.SSC
  • "); + "
    p1.subpkg.SSC
    \n
    \n
    "); } } diff --git a/test/langtools/jdk/javadoc/doclet/testInterface/TestInterface.java b/test/langtools/jdk/javadoc/doclet/testInterface/TestInterface.java index 6528301deb7..be5a4dce9bb 100644 --- a/test/langtools/jdk/javadoc/doclet/testInterface/TestInterface.java +++ b/test/langtools/jdk/javadoc/doclet/testInterface/TestInterface.java @@ -85,20 +85,11 @@ public class TestInterface extends JavadocTester { + "Interface<CE>\n" + "", //Make sure Class Tree has substituted type parameters. - "", + "
    java.lang.Object\n" + + "
    pkg.Parent<CE>\n" + + "
    pkg.Child<CE>
    \n" + + "
    \n
    ", //Make sure "Specified By" has substituted type parameters. "
    Specified by:
    \n" + "
    method" diff --git a/test/langtools/jdk/javadoc/doclet/testOptions/TestOptions.java b/test/langtools/jdk/javadoc/doclet/testOptions/TestOptions.java index 6315cacc0ad..fd832b62b57 100644 --- a/test/langtools/jdk/javadoc/doclet/testOptions/TestOptions.java +++ b/test/langtools/jdk/javadoc/doclet/testOptions/TestOptions.java @@ -268,9 +268,9 @@ public class TestOptions extends JavadocTester { checkExit(Exit.OK); checkOutput("pkg/Foo.html", true, - "
  • Foo
  • "); + "
    Foo
    "); checkOutput("deprecated/Foo.html", true, - "
  • deprecated.Foo
  • "); + "
    deprecated.Foo
    "); javadoc("-d", "out-10a", "-noqualifier", "all", @@ -279,8 +279,8 @@ public class TestOptions extends JavadocTester { checkExit(Exit.OK); checkOutput("pkg/Foo.html", true, - "
  • Foo
  • "); + "
    Foo
    "); checkOutput("deprecated/Foo.html", true, - "
  • Foo
  • "); + "
    Foo
    "); } } diff --git a/test/langtools/jdk/javadoc/doclet/testPrivateClasses/TestPrivateClasses.java b/test/langtools/jdk/javadoc/doclet/testPrivateClasses/TestPrivateClasses.java index 1e5e829d0b5..d969e087a8f 100644 --- a/test/langtools/jdk/javadoc/doclet/testPrivateClasses/TestPrivateClasses.java +++ b/test/langtools/jdk/javadoc/doclet/testPrivateClasses/TestPrivateClasses.java @@ -66,14 +66,9 @@ public class TestPrivateClasses extends JavadocTester { "" + "methodInheritedFromParent", // private class does not show up in tree - "
      \n" - + "
    • java.lang.Object
    • \n" - + "
    • \n" - + "
        \n" - + "
      • pkg.PublicChild
      • \n" - + "
      \n" - + "
    • \n" - + "
    ", + "
    java.lang.Object\n" + + "
    pkg.PublicChild
    \n" + + "
    ", // Method is documented as though it is declared in the inheriting method. "
    public void methodInheritedFromParent​(int p1)",
                     "
    \n" diff --git a/test/langtools/jdk/javadoc/doclet/testSingletonLists/TestSingletonLists.java b/test/langtools/jdk/javadoc/doclet/testSingletonLists/TestSingletonLists.java index b12fded8bdb..b06c61c3083 100644 --- a/test/langtools/jdk/javadoc/doclet/testSingletonLists/TestSingletonLists.java +++ b/test/langtools/jdk/javadoc/doclet/testSingletonLists/TestSingletonLists.java @@ -23,7 +23,7 @@ /* * @test - * @bug 8219998 + * @bug 8219998 8221991 * @summary Eliminate inherently singleton lists * @library /tools/lib ../../lib * @modules jdk.javadoc/jdk.javadoc.internal.tool @@ -275,10 +275,6 @@ public class TestSingletonLists extends JavadocTester { case "ul": case "ol": case "dl": counts.push(new TreeMap<>()); - if (!attrs.isEmpty() && attrs.containsKey("class") - && attrs.containsValue("inheritance")) { - inheritanceClass = true; - } break; case "li": case "dd": case "dt": { @@ -297,11 +293,7 @@ public class TestSingletonLists extends JavadocTester { if (c.get("li") == 0) { error(currFile, getLineNumber(), "empty list"); } else if (c.get("li") == 1 && fileName != null && !excludeFiles.contains(fileName)) { - if (!inheritanceClass) { - error(currFile, getLineNumber(), "singleton list"); - } else { - inheritanceClass = false; - } + error(currFile, getLineNumber(), "singleton list"); } break; } @@ -319,5 +311,4 @@ public class TestSingletonLists extends JavadocTester { } } } - -} \ No newline at end of file +}