<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">​</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>