<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>There's a possible minor typo: <br>
    </p>
    <pre style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;"><span class="changed" style="color: blue;">146             public static class StaticBaryNest {</span></pre>
    <div class="moz-cite-prefix">The extra "y" looks incorrect.</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">Otherwise OK,</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">-- Jon</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">On 8/25/20 4:31 PM, Joe Darcy wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:7be01f2b-1495-35e0-e125-224b0a1d5bac@oracle.com">Hello,
      <br>
      <br>
      As a follow-up to JDK-8071961: "Add javac lint warning when a
      default constructor is created," Phil observed that there are
      cases in the JDK where a *protected* class has a default
      constructor appearing in the JDK. Please review the changes and
      CSR to augment the warning to cover both public and protected
      classes. For nested classes, the enclosing types must be either
      public or protected all the way up for the warning to be issued.
      <br>
      <br>
          JDK-8251921: Expand default constructor warning to cover more
      cases
      <br>
          CSR: <a class="moz-txt-link-freetext" href="https://bugs.openjdk.java.net/browse/JDK-8252348">https://bugs.openjdk.java.net/browse/JDK-8252348</a>
      <br>
          webrev: <a class="moz-txt-link-freetext" href="http://cr.openjdk.java.net/~darcy/8251921.0/">http://cr.openjdk.java.net/~darcy/8251921.0/</a>
      <br>
      <br>
      Patch below. Clean langtools test run with this change.
      <br>
      <br>
      Thanks,
      <br>
      <br>
      -Joe
      <br>
      <br>
      ---
      old/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java
      2020-08-25 15:04:59.413000000 -0700
      <br>
      +++
      new/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java
      2020-08-25 15:04:58.685000000 -0700
      <br>
      @@ -3835,7 +3835,7 @@
      <br>
               if (lint.isEnabled(LintCategory.MISSING_EXPLICIT_CTOR)
      &&
      <br>
                   ((c.flags() & (ENUM | RECORD)) == 0) &&
      <br>
                   !c.isAnonymous() &&
      <br>
      -            ((c.flags() & PUBLIC) != 0) &&
      <br>
      +            ((c.flags() & (PUBLIC | PROTECTED)) != 0)
      &&
      <br>
                   Feature.MODULES.allowedInSource(source)) {
      <br>
                   NestingKind nestingKind = c.getNestingKind();
      <br>
                   switch (nestingKind) {
      <br>
      @@ -3844,10 +3844,10 @@
      <br>
                       case TOP_LEVEL -> {;} // No additional checks
      needed
      <br>
                       case MEMBER -> {
      <br>
                           // For nested member classes, all the
      enclosing
      <br>
      -                    // classes must be public.
      <br>
      +                    // classes must be public or protected.
      <br>
                           Symbol owner = c.owner;
      <br>
                           while (owner != null && owner.kind ==
      TYP) {
      <br>
      -                        if ((owner.flags() & PUBLIC) == 0)
      <br>
      +                        if ((owner.flags() & (PUBLIC |
      PROTECTED)) == 0)
      <br>
                                   return;
      <br>
                               owner = owner.owner;
      <br>
                           }
      <br>
      ---
old/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties
      2020-08-25 15:05:01.037000000 -0700
      <br>
      +++
new/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties
      2020-08-25 15:05:00.189000000 -0700
      <br>
      @@ -183,7 +183,7 @@
      <br>
           Warn about issues related to classfile contents.
      <br>
      <br>
       javac.opt.Xlint.desc.missing-explicit-ctor=\
      <br>
      -    Warn about missing explicit constructors in public classes in
      exported packages.
      <br>
      +    Warn about missing explicit constructors in public and
      protected classes in exported packages.
      <br>
      <br>
       javac.opt.Xlint.desc.deprecation=\
      <br>
           Warn about use of deprecated items.
      <br>
      ---
old/test/langtools/tools/javac/warnings/DefaultCtor/DefaultCtorWarningToolBox.java
      2020-08-25 15:05:02.313000000 -0700
      <br>
      +++
new/test/langtools/tools/javac/warnings/DefaultCtor/DefaultCtorWarningToolBox.java
      2020-08-25 15:05:01.597000000 -0700
      <br>
      @@ -97,7 +97,9 @@
      <br>
                   List.of("Foo.java:4:8:
      compiler.warn.missing-explicit-ctor: pkg1.Foo, pkg1, mod",
      <br>
                           "Foo.java:12:12:
      compiler.warn.missing-explicit-ctor: pkg1.Foo.FooNest, pkg1, mod",
      <br>
                           "Foo.java:16:19:
      compiler.warn.missing-explicit-ctor: pkg1.Foo.StaticFooNest, pkg1,
      mod",
      <br>
      -                    "3 warnings");
      <br>
      +            "Foo.java:25:15: compiler.warn.missing-explicit-ctor:
      pkg1.Foo.ProtectedFooNest, pkg1, mod",
      <br>
      +            "Foo.java:27:19: compiler.warn.missing-explicit-ctor:
      pkg1.Foo.ProtectedFooNest.ProtectedFooNestNest, pkg1, mod",
      <br>
      +                    "5 warnings");
      <br>
      <br>
               // Warning enable,
      <br>
               log = new JavacTask(tb)
      <br>
      @@ -137,30 +139,34 @@
      <br>
               class Bar {
      <br>
      <br>
                   // No explicit constructor; use a default.
      <br>
      -            public class FooNest {
      <br>
      +            public class BarNest {
      <br>
                   }
      <br>
      <br>
                   // No explicit constructor; use a default.
      <br>
      -            public static class StaticFooNest {
      <br>
      +            public static class StaticBaryNest {
      <br>
      +            }
      <br>
      +
      <br>
      +            // No explicit constructor; use a default.
      <br>
      +            protected class ProtectedBarNest {
      <br>
                   }
      <br>
      <br>
                   // Package-access classes
      <br>
      <br>
                   // No explicit constructor; use a default.
      <br>
      -            /*package*/ class PkgFooNest {
      <br>
      +            /*package*/ class PkgBarNest {
      <br>
                   }
      <br>
      <br>
                   // No explicit constructor; use a default.
      <br>
      -            /*package*/ static class PkgStaticFooNest {
      <br>
      +            /*package*/ static class PkgStaticBarNest {
      <br>
                   }
      <br>
                   // Private classes
      <br>
      <br>
                   // No explicit constructor; use a default.
      <br>
      -            private class PrvFooNest {
      <br>
      +            private class PrvBarNest {
      <br>
                   }
      <br>
      <br>
                   // No explicit constructor; use a default.
      <br>
      -            private static class PrvStaticFooNest {
      <br>
      +            private static class PrvStaticBarNest {
      <br>
                   }
      <br>
               }
      <br>
               """;
      <br>
      @@ -190,10 +196,18 @@
      <br>
                   public static class SuppressedStaticFooNest {
      <br>
                   }
      <br>
      <br>
      +            // No explicit constructor; use a default.
      <br>
      +            protected class ProtectedFooNest {
      <br>
      +                // No explicit constructor; use a default.
      <br>
      +                protected class ProtectedFooNestNest {}
      <br>
      +            }
      <br>
      +
      <br>
                   // Package-access classes
      <br>
      <br>
                   // No explicit constructor; use a default.
      <br>
                   /*package*/ class PkgFooNest {
      <br>
      +                // No explicit constructor; use a default.
      <br>
      +                protected class PkgFooNestNest {}
      <br>
                   }
      <br>
      <br>
                   // No explicit constructor; use a default.
      <br>
      @@ -203,6 +217,8 @@
      <br>
      <br>
                   // No explicit constructor; use a default.
      <br>
                   private class PrvFooNest {
      <br>
      +                // No explicit constructor; use a default.
      <br>
      +                protected class PrvFooNestNest {}
      <br>
                   }
      <br>
      <br>
                   // No explicit constructor; use a default.
      <br>
      <br>
    </blockquote>
  </body>
</html>