[ https://issues.apache.org/jira/browse/GROOVY-11698?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Georgii Ustinov updated GROOVY-11698: ------------------------------------- Description: Hi, I am main supporter of Groovy plugin inside IntelliJ IDEA IDE and currently processing [instanceof variable support.|https://youtrack.jetbrains.com/issue/IDEA-371239/Groovy-Support-instanceof-variable] I have identified several cases in which pattern matching inside instanceof doesn't respect the scope and behaviour differs from Java. See the examples: 1. Instanceof in else branch Java: {code:java} package org.java; public class MainJava { static class A {} static class B extends A{} public static void main(String[] args) { A a = new B(); if (!(a instanceof B b)) { } else { System.out.println(b); } } } {code} Groovy (doesn't compile): {code:java} package org.groovy class Main { static class A {} static class B extends A {} static void main(String[] args) { A a = new B(); if (!(a instanceof B b)) { } else { System.out.println(b) } } } {code} 2. Instanceof in return statements: Java {code:java} package org.java; public class MainJava { static class A {} static class B extends A{} public static void main(String[] args) { A a = new B(); if (!(a instanceof B b)) { return; } System.out.println(b); } }{code} Groovy (doesn't compile) {code:java} package org.groovy class Main { static class A {} static class B extends A {} static void main(String[] args) { A a = new B(); if (!(a instanceof B b)) { return } println b } } {code} 3. Negations after loop Java {code:java} package org.java; public class MainJava { static class A {} static class B extends A{} public static void main(String[] args) { A a = new B(); while (!(a instanceof B b)) { return; } System.out.println(b); } } {code} Groovy (doesn't compile) {code:java} package org.groovy import org.java.MainJava class Main { static class A {} static class B extends MainJava.A{} static void main(String[] args) { A a = new B() while (!(a instanceof B b)) { } println b } } {code} Could you, please, fix these issues? was: Hi, I am main supporter of Groovy plugin inside IntelliJ IDEA IDE and currently processing [instanceof variable support.|https://youtrack.jetbrains.com/issue/IDEA-371239/Groovy-Support-instanceof-variable] I have identified several cases in which pattern matching inside instanceof doesn't respect the scope and behaviour differs from Java. See the examples: 1. Instanceof in else branch Java: {code:java} package org.java; public class MainJava { static class A {} static class B extends A{} public static void main(String[] args) { A a = new B(); if (!(a instanceof B b)) { } else { System.out.println(b); } } } {code} Groovy (doesn't compile): {code:java} package org.groovy class Main { static class A {} static class B extends A {} static void main(String[] args) { A a = new B(); if (!(a instanceof B b)) { } else { System.out.println(b) } } } {code} 2. Instanceof in return statements: Java {code:java} package org.java; public class MainJava { static class A {} static class B extends A{} public static void main(String[] args) { A a = new B(); if (!(a instanceof B b)) { return; } System.out.println(b); } }{code} Groovy (doesn't compile) {code:java} package org.groovy class Main { static class A {} static class B extends A {} static void main(String[] args) { A a = new B(); if (!(a instanceof B b)) { return } println b } } {code} Could you, please, fix these issues? > Instanceof pattern variable doesn't respect scope > ------------------------------------------------- > > Key: GROOVY-11698 > URL: https://issues.apache.org/jira/browse/GROOVY-11698 > Project: Groovy > Issue Type: Bug > Components: class generator > Reporter: Georgii Ustinov > Priority: Minor > > Hi, I am main supporter of Groovy plugin inside IntelliJ IDEA IDE and > currently processing > [instanceof variable > support.|https://youtrack.jetbrains.com/issue/IDEA-371239/Groovy-Support-instanceof-variable] > I have identified several cases in which pattern matching inside instanceof > doesn't respect the scope and behaviour differs from Java. > See the examples: > 1. Instanceof in else branch > Java: > {code:java} > package org.java; > public class MainJava { > static class A {} > static class B extends A{} > public static void main(String[] args) { > A a = new B(); > if (!(a instanceof B b)) { > } else { > System.out.println(b); > } > } > } > {code} > Groovy (doesn't compile): > {code:java} > package org.groovy > class Main { > static class A {} > static class B extends A {} > static void main(String[] args) { > A a = new B(); > if (!(a instanceof B b)) { > } else { > System.out.println(b) > } > } > } > {code} > 2. Instanceof in return statements: > Java > {code:java} > package org.java; > public class MainJava { > static class A {} > static class B extends A{} > public static void main(String[] args) { > A a = new B(); > if (!(a instanceof B b)) { > return; > } > System.out.println(b); > } > }{code} > Groovy (doesn't compile) > {code:java} > package org.groovy > class Main { > static class A {} > static class B extends A {} > static void main(String[] args) { > A a = new B(); > if (!(a instanceof B b)) { > return > } > println b > } > } > {code} > 3. Negations after loop > Java > {code:java} > package org.java; > public class MainJava { > static class A {} > static class B extends A{} > public static void main(String[] args) { > A a = new B(); > while (!(a instanceof B b)) { > return; > } > System.out.println(b); > } > } > {code} > Groovy (doesn't compile) > {code:java} > package org.groovy > import org.java.MainJava > class Main { > static class A {} > static class B extends MainJava.A{} > static void main(String[] args) { > A a = new B() > while (!(a instanceof B b)) { > } > println b > } > } {code} > Could you, please, fix these issues? > > -- This message was sent by Atlassian Jira (v8.20.10#820010)