<div dir="ltr"><div>OK thanks to both of you for clarifying this. I agree it's good to keep the rule simple.</div><div><br></div><div>I realize now I was kind of thrown off by the lack of connection with flexible constructors and the fact that this compiles in (e.g.) JDK 17, but that was because I didn't read the little note carefully enough...</div><div><br></div><div style="margin-left:40px"><i>This missing condition is a bugfix for extensions introduced in JEP 395.</i></div><div><br></div><div>Thanks,</div><div>-Archie<br></div></div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Tue, Dec 10, 2024 at 7:21 PM Maurizio Cimadamore <<a href="mailto:maurizio.cimadamore@oracle.com">maurizio.cimadamore@oracle.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><u></u>

    
    
  
  <div>
    <div>
      <p style="margin-bottom:19.2px;margin-top:0px">What
        Chen said.</p>
      <p style="margin-bottom:19.2px;margin-top:0px">In
        principle, in this case, creation could be allowed because the
        local doesn’t capture. But when discussing the rules, we reached
        the conclusion that we didn’t want to specify what “capture”
        meant - or classify local classes in terms of what they happen
        to be capturing. So, if that is what you were asking, I’d say
        the behavior you are observing is deliberate.</p>
      <p style="margin-bottom:19.2px;margin-top:0px">Dan
        correctly pointed out, during an off-line discussion, that what
        it would be useful, in some cases, would be the ability to
        declare a local <em>static</em> class. In which case you are
        stating that capture of variables in the enclosing context by
        the class is just not a possibility. In that case, the rules can
        be relaxed, but on a much more principed basis.</p>
      <p style="margin-bottom:19.2px;margin-top:0px">Maurizio</p>
      <p style="margin-bottom:19.2px;margin-top:0px">On
        10/12/2024 22:47, Chen Liang wrote:</p>
      <blockquote type="cite" style="border-color:rgb(119,119,119) rgb(119,119,119) rgb(119,119,119) rgb(114,159,207);border-left:2px solid rgb(114,159,207);color:rgb(119,119,119);column-rule-color:rgb(119,119,119);margin:8px 0px;outline-color:rgb(119,119,119);padding:3.2px 8px;quotes:none;text-decoration-color:rgb(119,119,119);text-emphasis-color:rgb(119,119,119)">
        <div id="m_857008437947242593extcontent-0" style="border-color:rgb(119,119,119);color:rgb(119,119,119);column-rule-color:rgb(119,119,119);outline-color:rgb(119,119,119);quotes:none;text-decoration-color:rgb(119,119,119);text-emphasis-color:rgb(119,119,119)">
          <p dir="ltr">Hi Archie,<br>
            I think this rule makes sense - Local1 can capture local
            variables in the outer class initializer, in which case the
            error will be legitimate. The extra otherwise does not fix
            this issue. Adding a special case to allow no-capture local
            classes to be used in more nested static contexts seems
            overkill and error-prone.</p>
          <p dir="ltr">Chen</p>
          <br>
          <div class="gmail_quote">
            <div class="gmail_attr" dir="ltr">On Tue, Dec 10, 2024,
              3:57 PM Archie Cobbs <<a href="mailto:archie.cobbs@gmail.com" target="_blank">archie.cobbs@gmail.com</a>>
              wrote:<br>
            </div>
            <blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">
              <div dir="ltr">
                <div dir="ltr">
                  <div>
                    <div>The proposed JLS changes for JEP 492 are saying
                      that this example should no longer compile*:<br>
                    </div>
                  </div>
                  <div><br>
                  </div>
                  <div>    static {<br>
                            class Local1 {<br>
                                class Local2 {<br>
                                    public static void m() {<br>
                                        new Local1();  // error<br>
                                    }<br>
                                }<br>
                            }<br>
                        }</div>
                  <div><br>
                  </div>
                  <div>but that seems wrong - that exampple has been
                    allowed since JDK-8254321, and as it has nothing to
                    do with flexible constructors, it should continue to
                    be allowed.<br>
                  </div>
                </div>
                <div dir="ltr"><br>
                </div>
                <div>The JEP 492 spec says (new additions in bold):</div>
                <div>
                  <p>  If <em>C</em> is an inner local class, then:</p>
                  <ul>
                    <li>
                      <p>If <em>C</em> occurs in a static context, then
                        <em>i</em> has no
                        immediately enclosing instance. <strong>Let <em>S</em>
                          be the nearest
                          <code>static</code> method declaration, <code>static</code>
                          field
                          declaration, or static initializer that
                          encloses the declaration of
                          <em>C</em>. If the nearest <code>static</code>
                          method declaration,
                          <code>static</code> field declaration, or
                          static initializer that
                          encloses the class instance creation
                          expression is not <em>S</em>, then
                          a compile-time error occurs.</strong></p>
                    </li>
                  </ul>
                </div>
                <div>Should there be an <b>Otherwise</b> at the
                  beginning of the newly added sentence? (And same thing
                  in the previous paragraph regarding anonymous classes)<br>
                </div>
                <div><br>
                </div>
                <div>-Archie<br>
                </div>
                <div dir="ltr"><br>
                </div>
                <div dir="ltr">* See <a rel="noreferrer" href="https://bugs.openjdk.org/browse/JDK-8345953" target="_blank">JDK-8345953</a>
                  JEP 492: instantiating local classes in a different
                  static context should not be allowed</div>
                <div dir="ltr"><span class="gmail_signature_prefix"><br>
                  </span></div>
                <div dir="ltr"><span class="gmail_signature_prefix">-- </span><br>
                  <div class="gmail_signature" dir="ltr">Archie L. Cobbs<br>
                  </div>
                </div>
              </div>
            </blockquote>
          </div>
        </div>
      </blockquote>
      <div title="MDH:PHA+V2hhdCBDaGVuIHNhaWQuPC9wPjxwPkluIHByaW5jaXBsZSwgaW4gdGhpcyBjYXNlLCBjcmVhdGlvbiBjb3VsZCBiZSBhbGxvd2VkIGJlY2F1c2UgdGhlIGxvY2FsIGRvZXNuJ3QgY2FwdHVyZS4gQnV0IHdoZW4gZGlzY3Vzc2luZyB0aGUgcnVsZXMsIHdlIHJlYWNoZWQgdGhlIGNvbmNsdXNpb24gdGhhdCB3ZSBkaWRuJ3Qgd2FudCB0byBzcGVjaWZ5IHdoYXQgImNhcHR1cmUiIG1lYW50IC0gb3IgY2xhc3NpZnkgbG9jYWwgY2xhc3NlcyBpbiB0ZXJtcyBvZiB3aGF0IHRoZXkgaGFwcGVuIHRvIGJlIGNhcHR1cmluZy4gU28sIGlmIHRoYXQgaXMgd2hhdCB5b3Ugd2VyZSBhc2tpbmcsIEknZCBzYXkgdGhlIGJlaGF2aW9yIHlvdSBhcmUgb2JzZXJ2aW5nIGlzIGRlbGliZXJhdGUuPC9wPjxwPkRhbiBjb3JyZWN0bHkgcG9pbnRlZCBvdXQsIGR1cmluZyBhbiBvZmYtbGluZSBkaXNjdXNzaW9uLCB0aGF0IHdoYXQgaXQgd291bGQgYmUgdXNlZnVsLCBpbiBzb21lIGNhc2VzLCB3b3VsZCBiZSB0aGUgYWJpbGl0eSB0byBkZWNsYXJlIGEgbG9jYWwgX3N0YXRpY18gY2xhc3MuIEluIHdoaWNoIGNhc2UgeW91IGFyZSBzdGF0aW5nIHRoYXQgY2FwdHVyZSBvZiB2YXJpYWJsZXMgaW4gdGhlIGVuY2xvc2luZyBjb250ZXh0IGJ5IHRoZSBjbGFzcyBpcyBqdXN0IG5vdCBhIHBvc3NpYmlsaXR5LiBJbiB0aGF0IGNhc2UsIHRoZSBydWxlcyBjYW4gYmUgcmVsYXhlZCwgYnV0IG9uIGEgbXVjaCBtb3JlIHByaW5jaXBlZCBiYXNpcy48L3A+PHA+TWF1cml6aW88YnI+PC9wPjxkaXYgY2xhc3M9Im1vei1jaXRlLXByZWZpeCI+T24gMTAvMTIvMjAyNCAyMjo0NywgQ2hlbiBMaWFuZyB3cm90ZTo8YnI+PC9kaXY+PGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSIgY2l0ZT0ibWlkOkNBQmU4dUUwZzZ0TUNWWTI5M2hXc3lZYThmVmtaeEgtZnJZOSs1dHd1eENfY2pTeEZfQUBtYWlsLmdtYWlsLmNvbSI+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7ICI+PHAgZGlyPSJsdHIiPkhpIEFyY2hpZSw8YnI+CkkgdGhpbmsgdGhpcyBydWxlIG1ha2VzIHNlbnNlIC0gTG9jYWwxIGNhbiBjYXB0dXJlIGxvY2FsIHZhcmlhYmxlcyBpbiB0aGUgb3V0ZXIgY2xhc3MgaW5pdGlhbGl6ZXIsIGluIHdoaWNoIGNhc2UgdGhlIGVycm9yIHdpbGwgYmUgbGVnaXRpbWF0ZS4gVGhlIGV4dHJhIG90aGVyd2lzZSBkb2VzIG5vdCBmaXggdGhpcyBpc3N1ZS4gQWRkaW5nIGEgc3BlY2lhbCBjYXNlIHRvIGFsbG93IG5vLWNhcHR1cmUgbG9jYWwgY2xhc3NlcyB0byBiZSB1c2VkIGluIG1vcmUgbmVzdGVkIHN0YXRpYyBjb250ZXh0cyBzZWVtcyBvdmVya2lsbCBhbmQgZXJyb3ItcHJvbmUuPC9wPgo8cCBkaXI9Imx0ciI+Q2hlbjwvcD4KPGJyPjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj48ZGl2IGRpcj0ibHRyIiBjbGFzcz0iZ21haWxfYXR0ciI+T24gVHVlLCBEZWMgMTAsIDIwMjQsIDM6NTfigK9QTSBBcmNoaWUgQ29iYnMgJmx0OzxhIGhyZWY9Im1haWx0bzphcmNoaWUuY29iYnNAZ21haWwuY29tIiBtb3otZG8tbm90LXNlbmQ9InRydWUiPmFyY2hpZS5jb2Jic0BnbWFpbC5jb208L2E+Jmd0OyB3cm90ZTo8YnI+PC9kaXY+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAwIC44ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFleCI+PGRpdiBkaXI9Imx0ciI+PGRpdiBkaXI9Imx0ciI+PGRpdj48ZGl2PlRoZSBwcm9wb3NlZCBKTFMgY2hhbmdlcyBmb3IgSkVQIDQ5MiBhcmUgc2F5aW5nIHRoYXQgdGhpcyBleGFtcGxlIHNob3VsZCBubyBsb25nZXIgY29tcGlsZSo6PGJyPjwvZGl2PjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyBzdGF0aWMgezxicj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgY2xhc3MgTG9jYWwxIHs8YnI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgY2xhc3MgTG9jYWwyIHs8YnI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBwdWJsaWMgc3RhdGljIHZvaWQgbSgpIHs8YnI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IG5ldyBMb2NhbDEoKTsmbmJzcDsgLy8gZXJyb3I8YnI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB9PGJyPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IH08YnI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IH08YnI+Jm5ic3A7ICZuYnNwOyB9PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5idXQgdGhhdCBzZWVtcyB3cm9uZyAtIHRoYXQgZXhhbXBwbGUgaGFzIGJlZW4gYWxsb3dlZCBzaW5jZSBKREstODI1NDMyMSwgYW5kIGFzIGl0IGhhcyBub3RoaW5nIHRvIGRvIHdpdGggZmxleGlibGUgY29uc3RydWN0b3JzLCBpdCBzaG91bGQgY29udGludWUgdG8gYmUgYWxsb3dlZC48YnI+PC9kaXY+PC9kaXY+PGRpdiBkaXI9Imx0ciI+PGJyPjwvZGl2PjxkaXY+VGhlIEpFUCA0OTIgc3BlYyBzYXlzIChuZXcgYWRkaXRpb25zIGluIGJvbGQpOjwvZGl2PjxkaXY+PHA+Jm5ic3A7IElmIDxlbT5DPC9lbT4gaXMgYW4gaW5uZXIgbG9jYWwgY2xhc3MsIHRoZW46PC9wPgo8dWw+PGxpPjxwPklmIDxlbT5DPC9lbT4gb2NjdXJzIGluIGEgc3RhdGljIGNvbnRleHQsIHRoZW4gPGVtPmk8L2VtPiBoYXMgbm8KaW1tZWRpYXRlbHkgZW5jbG9zaW5nIGluc3RhbmNlLiA8c3Ryb25nPkxldCA8ZW0+UzwvZW0+IGJlIHRoZSBuZWFyZXN0Cjxjb2RlPnN0YXRpYzwvY29kZT4gbWV0aG9kIGRlY2xhcmF0aW9uLCA8Y29kZT5zdGF0aWM8L2NvZGU+IGZpZWxkCmRlY2xhcmF0aW9uLCBvciBzdGF0aWMgaW5pdGlhbGl6ZXIgdGhhdCBlbmNsb3NlcyB0aGUgZGVjbGFyYXRpb24gb2YKPGVtPkM8L2VtPi4gSWYgdGhlIG5lYXJlc3QgPGNvZGU+c3RhdGljPC9jb2RlPiBtZXRob2QgZGVjbGFyYXRpb24sCjxjb2RlPnN0YXRpYzwvY29kZT4gZmllbGQgZGVjbGFyYXRpb24sIG9yIHN0YXRpYyBpbml0aWFsaXplciB0aGF0CmVuY2xvc2VzIHRoZSBjbGFzcyBpbnN0YW5jZSBjcmVhdGlvbiBleHByZXNzaW9uIGlzIG5vdCA8ZW0+UzwvZW0+LCB0aGVuCmEgY29tcGlsZS10aW1lIGVycm9yIG9jY3Vycy48L3N0cm9uZz48L3A+CjwvbGk+PC91bD48L2Rpdj48ZGl2PlNob3VsZCB0aGVyZSBiZSBhbiA8Yj5PdGhlcndpc2U8L2I+IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5ld2x5IGFkZGVkIHNlbnRlbmNlPyAoQW5kIHNhbWUgdGhpbmcgaW4gdGhlIHByZXZpb3VzIHBhcmFncmFwaCByZWdhcmRpbmcgYW5vbnltb3VzIGNsYXNzZXMpPGJyPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+LUFyY2hpZTxicj48L2Rpdj48ZGl2IGRpcj0ibHRyIj48YnI+PC9kaXY+PGRpdiBkaXI9Imx0ciI+KiBTZWUgPGEgaHJlZj0iaHR0cHM6Ly9idWdzLm9wZW5qZGsub3JnL2Jyb3dzZS9KREstODM0NTk1MyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9yZWZlcnJlciIgbW96LWRvLW5vdC1zZW5kPSJ0cnVlIj5KREstODM0NTk1MzwvYT4gSkVQIDQ5MjogaW5zdGFudGlhdGluZyBsb2NhbCBjbGFzc2VzIGluIGEgZGlmZmVyZW50IHN0YXRpYyBjb250ZXh0IHNob3VsZCBub3QgYmUgYWxsb3dlZDwvZGl2PjxkaXYgZGlyPSJsdHIiPjxzcGFuIGNsYXNzPSJnbWFpbF9zaWduYXR1cmVfcHJlZml4Ij48YnI+PC9zcGFuPjwvZGl2PjxkaXYgZGlyPSJsdHIiPjxzcGFuIGNsYXNzPSJnbWFpbF9zaWduYXR1cmVfcHJlZml4Ij4tLSA8L3NwYW4+PGJyPjxkaXYgZGlyPSJsdHIiIGNsYXNzPSJnbWFpbF9zaWduYXR1cmUiIGRhdGEtc21hcnRtYWlsPSJnbWFpbF9zaWduYXR1cmUiPkFyY2hpZSBMLiBDb2Jiczxicj48L2Rpdj48L2Rpdj4KPC9kaXY+CjwvYmxvY2txdW90ZT48L2Rpdj4KCjwvYmxvY2txdW90ZT48dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUgdGV4dGNvbXBsZXRlLWRyb3Bkb3duIiBzdHlsZT0iZGlzcGxheTogbm9uZTsgcG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4OiAxMDAwOyIgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+PC91bD4=" aria-hidden="true" style="font-size:0px;padding:0px;margin:0px;height:0px;max-height:0px;max-width:0px;overflow:hidden;width:0px">&#8203;</div>
    </div>
  </div>

</blockquote></div><div><br clear="all"></div><br><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature">Archie L. Cobbs<br></div>