-
-
Notifications
You must be signed in to change notification settings - Fork 376
Open
Labels
Description
Describe the bug
In the below code, in the last System.out.println(i); in the main, the variable reference i is resolved as a reference to the first if (o instanceof String i) {.
This is wrong, because String i is only valid inside the if block, and not outside of it.
The code worked on version 11.2.2-beta-10, and started failing with 11.2.2-beta-11.
I think the cause for this issue is a change introduced by #6444
Source code you are trying to analyze/transform
public class Main {
public static void main(String[] args) {
Object o = "Hello";
if (o instanceof String i) {
System.out.println(i);
}
// negated if
if (!(o instanceof String i)) {
} else {
System.out.println(i);
}
// then branch cannot complete
if (!(o instanceof String i)) {
throw new IllegalArgumentException();
}
System.out.println(i);
}
}Source code for your Spoon processing
Actual output
Expected output
Spoon Version
11.3.1-beta-8
JVM Version
openjdk version "21.0.2" 2024-01-16 LTS OpenJDK Runtime Environment Zulu21.32+17-CA (build 21.0.2+13-LTS) OpenJDK 64-Bit Server VM Zulu21.32+17-CA (build 21.0.2+13-LTS, mixed mode, sharing)
What operating system are you using?
Windows 11
Reactions are currently unavailable