"Cannot resolve symbol al" after `else if (! (l instanceof ArrayList al))`
Jan Lahoda
jan.lahoda at oracle.com
Mon Jun 9 06:12:26 UTC 2025
Hi,
I believe this is what is specified.
Considering:
if (e) S
else T
JLS 6.3.2.2, says that (in some cases), the binding variable from 'e'
can be introduced to the enclosing scope of the `if`. But I am not aware
about anything that would say a variable from `T` should be introduced
to the enclosing scope if the outer `if`.
In the example below, `if (l instanceof LinkedList)` does not introduce
any binding variables, and hence no binding variable is not introduced
to the enclosing scope of the `if`.
Please also see:
https://bugs.openjdk.org/browse/JDK-8335402
Jan
On 07. 06. 25 16:55, David Alayachew wrote:
>
> 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.
>
> @Angelos Bimpoudis <mailto:angelos.bimpoudis at oracle.com> poke poke poke
>
>
> On Sat, Jun 7, 2025, 3:14 AM Jean-Noël Rouvignac
> <jean-noel.rouvignac at pingidentity.com> wrote:
>
> Hello folks,
>
> JDK 25 rampdown phase 1 is now behind us, congrats and thanks for
> all the work done to get there!
>
> I am reviving this use case to see if anyone agrees that this may
> be a bug?
>
> Thank you,
> Jean-Noel
>
>
> On Wed, Apr 16, 2025 at 11:37 AM Jean-Noël Rouvignac
> <jean-noel.rouvignac at pingidentity.com> wrote:
>
> Hello amber-dev folks!
>
> While using pattern matching for instanceof I noticed a small
> incoherent oddity.
>
> Take this code:
> ```
> static void ensureCapacity(List l) {
> if (l instanceof LinkedList) {
> throw new IllegalArgumentException("Use an efficient list
> implementation");
> } else if (!(l instanceof ArrayList al)) {
> return;
> }
> al.ensureCapacity(10);
> System.out.println("done");
> }
>
> ensureCapacity(new ArrayList());
> ```
>
> The compiler rejects this code with: `Cannot resolve symbol 'al'`.
> (I have tested that code with JDK 24 in the playground
> (https://dev.java/playground) but also in my IDE with JDK 21)
>
> However #1, removing the `else` keyword makes the code
> successfully compile:
> ```
> }
> if (!(l instanceof ArrayList al)) {
> return;
> }
> ```
>
> However #2, adding an additional `else` keyword makes the code
> successfully compile:
> ```
> } else if (!(l instanceof ArrayList al)) {
> return;
> } else {
> al.ensureCapacity(10);
> System.out.println("done");
> }
> ```
>
> 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.
>
> I searched the JDK's bug tracker for this specific case, but
> could not find anything related.
>
> Thanks!
> Jean-Noël
>
>
>
> --
> Ping Identity <https://www.pingidentity.com/>
> Jean-Noel Rouvignac
> Senior Principal Software Engineer
> jean-noel.rouvignac at pingidentity.com
>
> <https://www.pingidentity.com/en/events/youniverse.html>
> Connect with us: Glassdoor logo
> <https://www.glassdoor.com/Overview/Working-at-Ping-Identity-EI_IE380907.11,24.htm>LinkedIn
> logo <https://www.linkedin.com/company/21870>Twitter logo
> <https://twitter.com/pingidentity>YouTube logo
> <https://www.youtube.com/user/PingIdentityTV>Blog logo
> <https://www.pingidentity.com/en/blog.html>
>
> To view our privacy policy, click here
> <https://www.pingidentity.com/en/legal/privacy.html>
> To stop receiving these emails, click here
> <https://4.pingidentity.com/PreferenceCenter.html>
>
>
> /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./
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/amber-dev/attachments/20250609/cd9a0a65/attachment-0001.htm>
More information about the amber-dev
mailing list