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>");
     }
 }