[java-analysis] JavaPsiPatternUtil.getExposedPatternVariables: support switch guard

Fixes IDEA-353697 Instanceof pattern as nullchecks are suggested for removal

GitOrigin-RevId: b187d2dcc71ecac7ad68c696d0583741791c47eb
This commit is contained in:
Tagir Valeev
2024-05-21 10:05:10 +02:00
committed by intellij-monorepo-bot
parent d69af56141
commit a60bd8c4eb
3 changed files with 15 additions and 1 deletions

View File

@@ -52,7 +52,8 @@ public final class JavaPsiPatternUtil {
parent instanceof PsiPrefixExpression && ((PsiPrefixExpression)parent).getOperationTokenType().equals(JavaTokenType.EXCL) ||
parent instanceof PsiPolyadicExpression && ((PsiPolyadicExpression)parent).getOperationTokenType().equals(JavaTokenType.ANDAND) ||
parent instanceof PsiPolyadicExpression && ((PsiPolyadicExpression)parent).getOperationTokenType().equals(JavaTokenType.OROR) ||
parent instanceof PsiConditionalExpression || parent instanceof PsiIfStatement || parent instanceof PsiConditionalLoopStatement;
parent instanceof PsiConditionalExpression || parent instanceof PsiIfStatement || parent instanceof PsiConditionalLoopStatement ||
parent instanceof PsiSwitchLabeledRuleStatement; // in guard
if (!parentMayAccept) {
return Collections.emptyList();
}

View File

@@ -0,0 +1,12 @@
class Test {
sealed interface I {}
record A(String a) implements I {}
public static void main(String[] args) {
I i = new A("1");
switch (i) {
case A(var a) when a instanceof String s -> System.out.println(s);
default -> System.out.println("default");
}
}
}

View File

@@ -117,6 +117,7 @@ public class DataFlowInspection21Test extends DataFlowInspectionTestCase {
public void testReadResolve2() { doTest(); }
public void testDifferentTypesButNullable() { doTest(); }
public void testInstanceOfWidening() { doTest(); }
public void testSwitchPatternInGuard() { doTest(); }
public void testForEachPattern() {
myFixture.addClass("""
package org.jetbrains.annotations;