From a3eced1e77d6e8c8af1cff4bd3d0524a13ef4d53 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Mon, 25 Apr 2022 17:20:10 +0200 Subject: [PATCH] [java-dfa] Fix imbalanced stack on incomplete guarded pattern Fixes EA-447737 - ESE: Stack.pop (at least some cases linked to this exception) GitOrigin-RevId: 5709b7fc22e9495e07f20f899cb66274b0443fc0 --- .../codeInspection/dataFlow/java/ControlFlowAnalyzer.java | 2 ++ .../testData/inspection/dataFlow/fixture/Patterns.java | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/java/ControlFlowAnalyzer.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/java/ControlFlowAnalyzer.java index b1c7d8de4e20..6e84b43e32d4 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/java/ControlFlowAnalyzer.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/java/ControlFlowAnalyzer.java @@ -1085,6 +1085,8 @@ public class ControlFlowAnalyzer extends JavaElementVisitor { PsiExpression expression = ((PsiGuardedPattern)innerPattern).getGuardingExpression(); if (expression != null) { expression.accept(this); + } else { + addInstruction(new PushValueInstruction(DfTypes.BOOLEAN)); } DeferredOffset condGotoOffset = new DeferredOffset(); addInstruction(new ConditionalGotoInstruction(condGotoOffset, DfTypes.TRUE)); diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/Patterns.java b/java/java-tests/testData/inspection/dataFlow/fixture/Patterns.java index 1d62bb1b7b4d..11c636fe4f59 100644 --- a/java/java-tests/testData/inspection/dataFlow/fixture/Patterns.java +++ b/java/java-tests/testData/inspection/dataFlow/fixture/Patterns.java @@ -1,4 +1,10 @@ class Test { + int testIncomplete(Object obj) { + return switch(obj) { + case String s && + }; + } + void test1(Object o) { int a; switch (o) {