OpenJDK / amber / amber
changeset 56983:79c030f0364a records-and-sealed
update javadoc behavior for undocumented permitted subtypes
author | jjg |
---|---|
date | Fri, 09 Aug 2019 17:13:59 -0700 |
parents | c2650bf6e849 |
children | fa802f216fb2 36c88ca11314 |
files | src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java test/langtools/jdk/javadoc/doclet/testSealedTypes/TestSealedTypes.java |
diffstat | 2 files changed, 69 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java Fri Aug 09 16:26:46 2019 -0700 +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java Fri Aug 09 17:13:59 2019 -0700 @@ -269,9 +269,10 @@ boolean isFirst = true; for (TypeMirror type : permits) { TypeElement tDoc = utils.asTypeElement(type); - if (!(utils.isPublic(tDoc) || utils.isLinkable(tDoc))) { - continue; - } + // Document all permitted subtypes, not just public linkable types, + // because it may be of interest to the reader that not all of the + // subtypes may be accessible: for example, in a pattern statement + // switching on the type of an object. if (isFirst) { pre.add(DocletConstants.NL); pre.add("permits ");
--- a/test/langtools/jdk/javadoc/doclet/testSealedTypes/TestSealedTypes.java Fri Aug 09 16:26:46 2019 -0700 +++ b/test/langtools/jdk/javadoc/doclet/testSealedTypes/TestSealedTypes.java Fri Aug 09 17:13:59 2019 -0700 @@ -187,10 +187,10 @@ checkOutput("p/A.html", true, "<pre>public sealed class <span class=\"typeNameLabel\">A</span>\n" - + "extends java.lang.Object\n" - + "permits <a href=\"B.html\" title=\"class in p\">B</a>, " - + "<a href=\"C.html\" title=\"class in p\">C</a>, " - + "<a href=\"D.html\" title=\"class in p\">D</a></pre>"); + + "extends java.lang.Object\n" + + "permits <a href=\"B.html\" title=\"class in p\">B</a>, " + + "<a href=\"C.html\" title=\"class in p\">C</a>, " + + "<a href=\"D.html\" title=\"class in p\">D</a></pre>"); } @Test @@ -209,9 +209,55 @@ checkOutput("p/A.html", true, "<pre>public sealed class <span class=\"typeNameLabel\">A</span>\n" - + "extends java.lang.Object\n" - + "permits <a href=\"B.html\" title=\"class in p\">B</a>, " - + "<a href=\"C.html\" title=\"class in p\">C</a></pre>"); + + "extends java.lang.Object\n" + + "permits <a href=\"B.html\" title=\"class in p\">B</a>, " + + "<a href=\"C.html\" title=\"class in p\">C</a>, p.D</pre>"); + } + + @Test + public void testPartialMultiplePermitsWithSubtypes1(Path base) throws IOException { + Path src = base.resolve("src"); + tb.writeJavaFiles(src, + "package p; public sealed class A permits B,C,D { }", + "package p; public class B extends A { }", + "package p; public class C extends A { }", + "package p; sealed class D extends A permits D1, D2 { }", + "package p; public class D1 extends D { }", + "package p; public class D2 extends D { }"); + + javadoc("-d", base.resolve("out").toString(), + "--source-path", src.toString(), + "p"); + checkExit(Exit.OK); + + checkOutput("p/A.html", true, + "<pre>public sealed class <span class=\"typeNameLabel\">A</span>\n" + + "extends java.lang.Object\n" + + "permits <a href=\"B.html\" title=\"class in p\">B</a>, " + + "<a href=\"C.html\" title=\"class in p\">C</a>, p.D</pre>"); + } + + @Test + public void testPartialMultiplePermitsWithSubtypes2(Path base) throws IOException { + Path src = base.resolve("src"); + tb.writeJavaFiles(src, + "package p; public sealed class A permits B,C,D { }", + "package p; public class B extends A { }", + "package p; public class C extends A { }", + "package p; non-sealed class D extends A { }", + "package p; public class D1 extends D { }", + "package p; public class D2 extends D { }"); + + javadoc("-d", base.resolve("out").toString(), + "--source-path", src.toString(), + "p"); + checkExit(Exit.OK); + + checkOutput("p/A.html", true, + "<pre>public sealed class <span class=\"typeNameLabel\">A</span>\n" + + "extends java.lang.Object\n" + + "permits <a href=\"B.html\" title=\"class in p\">B</a>, " + + "<a href=\"C.html\" title=\"class in p\">C</a>, p.D</pre>"); } @Test @@ -231,10 +277,10 @@ checkOutput("p/A.html", true, "<pre>public sealed class <span class=\"typeNameLabel\">A</span>\n" - + "extends java.lang.Object\n" - + "permits <a href=\"B.html\" title=\"class in p\">B</a>, " - + "<a href=\"C.html\" title=\"class in p\">C</a>, " - + "<a href=\"D.html\" title=\"class in p\">D</a></pre>"); + + "extends java.lang.Object\n" + + "permits <a href=\"B.html\" title=\"class in p\">B</a>, " + + "<a href=\"C.html\" title=\"class in p\">C</a>, " + + "<a href=\"D.html\" title=\"class in p\">D</a></pre>"); } @Test @@ -242,10 +288,10 @@ Path src = base.resolve("src"); tb.writeJavaFiles(src, "package p; public sealed class A {\n" - + " public static class B extends A { }\n" - + " public static class C extends A { }\n" - + " public static class D extends A { }\n" - + "}"); + + " public static class B extends A { }\n" + + " public static class C extends A { }\n" + + " public static class D extends A { }\n" + + "}"); javadoc("-d", base.resolve("out").toString(), "--source-path", src.toString(), @@ -254,9 +300,9 @@ checkOutput("p/A.html", true, "<pre>public sealed class <span class=\"typeNameLabel\">A</span>\n" - + "extends java.lang.Object\n" - + "permits <a href=\"A.B.html\" title=\"class in p\">A.B</a>, " - + "<a href=\"A.C.html\" title=\"class in p\">A.C</a>, " - + "<a href=\"A.D.html\" title=\"class in p\">A.D</a></pre>"); + + "extends java.lang.Object\n" + + "permits <a href=\"A.B.html\" title=\"class in p\">A.B</a>, " + + "<a href=\"A.C.html\" title=\"class in p\">A.C</a>, " + + "<a href=\"A.D.html\" title=\"class in p\">A.D</a></pre>"); } }