<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div class="elementToProof" style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Hi all,</div>
<div class="elementToProof" style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
First, note the original example is equivalent to below:</div>
<div class="elementToProof" style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
if (l instanceof LinkedList) {</div>
<div class="elementToProof" style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
throw new IllegalArgumentException("Use an efficient list implementation");</div>
<div class="elementToProof" style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
} else {</div>
<div class="elementToProof" style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
if (!(l instanceof ArrayList al)) {</div>
<div class="elementToProof" style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
return;</div>
<div class="elementToProof" style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
}</div>
<div class="elementToProof" style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
}</div>
<div class="elementToProof" style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Which should be more clarifying about why the language has this behavior. Variables defined in a block is not available outside of that block.</div>
<div class="elementToProof" style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
From the specification perspective, currently, JLS 6.3.2.2 "if Statements" says:</div>
<div class="elementToProof" style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
A pattern variable is introduced by if (e) S else T iff either: ... It is introduced by e when false, and S cannot complete normally, and T can complete normally.</div>
<div class="elementToProof" style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
This means that a pattern variable introduced by statement T (here the nested if statement after else) is not introduced by the (main) if statement, and this is working as intended per JLS.</div>
<div class="elementToProof" style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I personally think the status quo is fine - allowing variables to leak beyond blocks is risky and may introduce source incompatibility; even if we commit to such a change, we have too many statements to update (for, if, do, while, etc...) and is also error-prone.</div>
<div class="elementToProof" style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Regards,</div>
<div class="elementToProof" style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Chen Liang</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> amber-dev <amber-dev-retn@openjdk.org> on behalf of David Alayachew <davidalayachew@gmail.com><br>
<b>Sent:</b> Saturday, June 7, 2025 9:55 AM<br>
<b>To:</b> Jean-Noël Rouvignac <jean-noel.rouvignac@pingidentity.com>; Angelos Bimpoudis <angelos.bimpoudis@oracle.com><br>
<b>Cc:</b> amber-dev <amber-dev@openjdk.org><br>
<b>Subject:</b> Re: "Cannot resolve symbol al" after `else if (! (l instanceof ArrayList al))`</font>
<div> </div>
</div>
<div>
<div dir="auto">
<p dir="ltr">This definitely looks like a bug. Maybe some of the amber folks are busy with Valhalla or something, but I can't see this NOT being a bug.</p>
<p dir="ltr"><span class="x_gmail_chip x_gmail_plusreply" dir="auto"><a href="mailto:angelos.bimpoudis@oracle.com" target="_blank" rel="noreferrer" style="color:#15c; text-decoration:underline">@Angelos Bimpoudis</a></span><span> poke poke poke</span></p>
</div>
<br>
<div class="x_gmail_quote">
<div dir="ltr" class="x_gmail_attr">On Sat, Jun 7, 2025, 3:14 AM Jean-Noël Rouvignac <<a href="mailto:jean-noel.rouvignac@pingidentity.com" rel="noreferrer noreferrer" target="_blank">jean-noel.rouvignac@pingidentity.com</a>> wrote:<br>
</div>
<blockquote class="x_gmail_quote" style="margin:0 0 0 .8ex; border-left:1px #ccc solid; padding-left:1ex">
<div dir="ltr">
<div>Hello folks,</div>
<div><br>
</div>
<div>JDK 25 rampdown phase 1 is now behind us, congrats and thanks for all the work done to get there!
<div><br>
</div>
I am reviving this use case to see if anyone agrees that this may be a bug?<br>
<br>
</div>
<div>Thank you,</div>
<div>Jean-Noel</div>
<div><br>
</div>
</div>
<br>
<div class="x_gmail_quote">
<div dir="ltr" class="x_gmail_attr">On Wed, Apr 16, 2025 at 11:37 AM Jean-Noël Rouvignac <<a href="mailto:jean-noel.rouvignac@pingidentity.com" rel="noreferrer noreferrer noreferrer" target="_blank">jean-noel.rouvignac@pingidentity.com</a>> wrote:<br>
</div>
<blockquote class="x_gmail_quote" style="margin:0px 0px 0px 0.8ex; border-left:1px solid rgb(204,204,204); padding-left:1ex">
<div dir="ltr">
<div>
<div>
<div>
<div>Hello amber-dev folks!<br>
<br>
</div>
<div>While using pattern matching for instanceof I noticed a small incoherent oddity.<br>
</div>
<div><br>
</div>
<div>Take this code:</div>
<div>```<br>
static void ensureCapacity(List l) {<br>
if (l instanceof LinkedList) {<br>
throw new IllegalArgumentException("Use an efficient list implementation");<br>
} else if (!(l instanceof ArrayList al)) {<br>
return;<br>
}<br>
al.ensureCapacity(10);<br>
System.out.println("done");<br>
}<br>
<br>
ensureCapacity(new ArrayList());</div>
```<br>
<br>
The compiler rejects this code with: `Cannot resolve symbol 'al'`.<br>
(I have tested that code with JDK 24 in the playground (<a href="https://dev.java/playground" rel="noreferrer noreferrer noreferrer" target="_blank">https://dev.java/playground</a>) but also in my IDE with JDK 21)<br>
<br>
</div>
However #1, removing the `else` keyword makes the code successfully compile:<br>
```<br>
}</div>
<div> if (!(l instanceof ArrayList al)) {<br>
return;<br>
}</div>
<div>```<br>
<br>
However #2, adding an additional `else` keyword makes the code successfully compile:<br>
```<br>
} else if (!(l instanceof ArrayList al)) {<br>
return;<br>
} else {<br>
al.ensureCapacity(10);<br>
System.out.println("done");<br>
}</div>
<div>```<br>
</div>
<div><br>
</div>
<div>While option #1 and #2 are acceptable workarounds, it looks to me like there could be a bug in javac? Therefore I am bringing this to your attention so you can decide if it is a bug or not.</div>
<div><br>
</div>
I searched the JDK's bug tracker for this specific case, but could not find anything related.<br>
<br>
</div>
<div>Thanks!</div>
<div>Jean-Noël</div>
</div>
</blockquote>
</div>
<div><br clear="all">
</div>
<br>
<span class="x_gmail_signature_prefix">-- </span><br>
<div dir="ltr" class="x_gmail_signature">
<table style="border-collapse:collapse; padding:0px; margin:0px">
<tbody>
<tr>
<td style="width:113px"><a href="https://www.pingidentity.com/" rel="noreferrer noreferrer noreferrer" target="_blank"></a><a href="https://www.pingidentity.com/" rel="noreferrer noreferrer noreferrer" target="_blank"></a><a href="https://www.pingidentity.com/" rel="noreferrer noreferrer noreferrer" target="_blank"><img alt="Ping Identity" src="https://www.pingidentity.com//content/dam/picr/img/em/ping-logo.png"></a></td>
<td>
<table>
<tbody>
<tr>
<td style="vertical-align:top"><span style="color:rgb(230,29,60); display:inline-block; margin-bottom:3px; font-family:arial,helvetica,sans-serif; font-weight:bold; font-size:14px">Jean-Noel Rouvignac</span><br>
<span style="display:inline-block; margin-bottom:2px; font-family:arial,helvetica,sans-serif; font-size:14px">Senior Principal Software Engineer</span><br>
<span style="font-family:arial,helvetica,sans-serif; font-size:14px; display:inline-block; margin-bottom:3px"><font color="#1530f9"><a href="mailto:jean-noel.rouvignac@pingidentity.com" rel="noreferrer noreferrer noreferrer" target="_blank">jean-noel.rouvignac@pingidentity.com</a></font><br>
<span style="display:inline-block; margin-bottom:2px"></span><br style="font-family:Times; font-size:medium">
<span style="display:inline-block; margin-bottom:2px"></span></span></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td colspan="2">
<table style="border-collapse:collapse; border:medium; margin:8px 0px 0px; width:408.938px">
<tbody>
<tr style="height:40px; border-top:1px solid rgb(211,211,211); border-bottom:1px solid rgb(211,211,211)">
<td style="font-family:arial,helvetica,sans-serif; font-size:14px; font-weight:bold; color:rgb(64,71,75)">
<a href="https://www.pingidentity.com/en/events/youniverse.html" rel="noreferrer noreferrer noreferrer" target="_blank"></a><a href="https://www.pingidentity.com/en/events/youniverse.html" rel="noreferrer noreferrer noreferrer" target="_blank"></a><a href="https://www.pingidentity.com/en/events/youniverse.html" rel="noreferrer noreferrer noreferrer" target="_blank"></a><a href="https://www.pingidentity.com/en/gartner-magic-quadrant-access-management.html?utm_medium=email" rel="noreferrer noreferrer noreferrer" target="_blank"></a><a href="https://www.pingidentity.com/en/events/virtualsummit.html?utm_source=sales&utm_medium=email&utm_campaign=VFE-GLOBAL-2025.03.18-19-PingVirtualEvent" rel="noreferrer noreferrer noreferrer" target="_blank"></a><a href="https://www.pingidentity.com/en/events/virtualsummit.html?utm_source=sales&utm_medium=email&utm_campaign=VFE-GLOBAL-2025.03.18-19-PingVirtualEvent" rel="noreferrer noreferrer noreferrer" target="_blank"></a><a href="https://www.pingidentity.com/en/events/virtualsummit.html?utm_source=sales&utm_medium=email&utm_campaign=VFE-GLOBAL-2025.03.18-19-PingVirtualEvent" rel="noreferrer noreferrer noreferrer" target="_blank"></a><a href="https://www.pingidentity.com/en/events/virtualsummit.html?utm_source=sales&utm_medium=email&utm_campaign=VFE-GLOBAL-2025.03.18-19-PingVirtualEvent" rel="noreferrer noreferrer noreferrer" target="_blank"></a><a href="https://www.pingidentity.com/en/events/virtualsummit.html?utm_source=sales&utm_medium=email&utm_campaign=VFE-GLOBAL-2025.03.18-19-PingVirtualEvent" rel="noreferrer noreferrer noreferrer" target="_blank"></a><a href="https://www.pingidentity.com/en/events/virtualsummit.html?utm_source=sales&utm_medium=email&utm_campaign=VFE-GLOBAL-2025.03.18-19-PingVirtualEvent" rel="noreferrer noreferrer noreferrer" target="_blank"></a><a href="https://www.pingidentity.com/en/events/virtualsummit.html?utm_source=sales&utm_medium=email&utm_campaign=VFE-GLOBAL-2025.03.18-19-PingVirtualEvent" rel="noreferrer noreferrer noreferrer" target="_blank"></a><a href="https://www.pingidentity.com/en/events/virtualsummit.html?utm_source=sales&utm_medium=email&utm_campaign=VFE-GLOBAL-2025.03.18-19-PingVirtualEvent" rel="noreferrer noreferrer noreferrer" target="_blank"></a><a href="https://www.pingidentity.com/en/events/virtualsummit.html?utm_source=sales&utm_medium=email&utm_campaign=VFE-GLOBAL-2025.03.18-19-PingVirtualEvent" rel="noreferrer noreferrer noreferrer" target="_blank"></a><a href="https://www.pingidentity.com/en/events/virtualsummit.html?utm_source=sales&utm_medium=email&utm_campaign=VFE-GLOBAL-2025.03.18-19-PingVirtualEvent" rel="noreferrer noreferrer noreferrer" target="_blank"></a><a href="https://www.pingidentity.com/en/events/virtualsummit.html?utm_source=sales&utm_medium=email&utm_campaign=VFE-GLOBAL-2025.03.18-19-PingVirtualEvent" rel="noreferrer noreferrer noreferrer" target="_blank"></a><a href="https://www.pingidentity.com/en/events/youniverse.html" rel="noreferrer noreferrer noreferrer" target="_blank"><img style="height:106px; width:410px" src="https://www.pingidentity.com/content/dam/picr/img/em/2025-YOUniverse-EmailSig.jpg"></a><br>
<div style="padding:0px; margin:0px">
<table style="border-collapse:collapse; padding:0px; margin:0px">
<tbody>
<tr>
<td colspan="2">
<table style="border-collapse:collapse; border:medium; margin:8px 0px 0px; width:408.938px">
<tbody>
<tr style="height:40px; border-top:1px solid rgb(211,211,211); border-bottom:1px solid rgb(211,211,211)">
<td style="font-size:14px; font-weight:bold; color:rgb(64,71,75)">Connect with us:</td>
<td style="padding:4px 0px 0px 20px"><a href="https://www.glassdoor.com/Overview/Working-at-Ping-Identity-EI_IE380907.11,24.htm" title="Ping on Glassdoor" rel="noreferrer noreferrer noreferrer" target="_blank" style="margin-right:16px; display:inline-block"><img alt="Glassdoor logo" style="border:medium; margin:0px; display:inline-block" src="https://www.pingidentity.com/content/dam/picr/img/em/social-glassdoor.png"></a><a href="https://www.linkedin.com/company/21870" title="Ping on LinkedIn" rel="noreferrer noreferrer noreferrer" target="_blank" style="margin-right:16px; display:inline-block"><img alt="LinkedIn logo" style="border:medium; margin:0px; display:inline-block" src="https://www.pingidentity.com//content/dam/picr/img/em/social-linkedin.png"></a><a href="https://twitter.com/pingidentity" title="Ping on Twitter" rel="noreferrer noreferrer noreferrer" target="_blank" style="margin-right:16px; display:inline-block"><img alt="Twitter logo" style="border:medium; margin:0px; display:inline-block" src="https://www.pingidentity.com//content/dam/picr/img/em/social-twitter.png"></a><a href="https://www.youtube.com/user/PingIdentityTV" title="Ping on YouTube" rel="noreferrer noreferrer noreferrer" target="_blank" style="margin-right:16px; display:inline-block"><img alt="YouTube logo" style="border:medium; margin:0px; display:inline-block" src="https://www.pingidentity.com//content/dam/picr/img/em/social-youtube.png"></a><a href="https://www.pingidentity.com/en/blog.html" title="Ping Blog" rel="noreferrer noreferrer noreferrer" target="_blank" style="margin-right:16px; display:inline-block"><img alt="Blog logo" style="border:medium; margin:0px; display:inline-block" src="https://www.pingidentity.com//content/dam/picr/img/em/social-blog.png"></a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<div style="padding:0px; margin:0px"><span style="font-family:Arial,sans-serif; font-size:12px"><font color="#787878">To view our privacy policy, click </font><a href="https://www.pingidentity.com/en/legal/privacy.html" rel="noreferrer noreferrer noreferrer" target="_blank" style="text-decoration:underline"><font color="#1255cd">here</font></a><br>
</span></div>
<div style="padding:0px; margin:0px"><span style="font-family:Arial,sans-serif; font-size:12px"><font color="#787878">To stop receiving these emails, click </font><a href="https://4.pingidentity.com/PreferenceCenter.html" rel="noreferrer noreferrer noreferrer" target="_blank" style="text-decoration:underline"><font color="#1255cd">here</font></a></span></div>
</div>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
<br>
<i style="margin:0px; padding:0px; border:0px; outline:0px; vertical-align:baseline; background:rgb(255,255,255); font-family:proxima-nova-zendesk,system-ui,-apple-system,system-ui,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",Arial,sans-serif; color:rgb(85,85,85)"><span style="margin:0px; padding:0px; border:0px; outline:0px; vertical-align:baseline; background:transparent; font-family:proxima-nova-zendesk,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",Arial,sans-serif; font-weight:600"><font size="2">CONFIDENTIALITY
NOTICE: This email may contain confidential and privileged material for the sole use of the intended recipient(s). Any review, use, distribution or disclosure by others is strictly prohibited. If you have received this communication in error, please notify
the sender immediately by e-mail and delete the message and any file attachments from your computer. Thank you.</font></span></i></blockquote>
</div>
</div>
</body>
</html>