From 3cd2baac999cc1443f499cdb621d23fcc5a37182 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Tue, 4 Dec 2018 10:42:54 +0100 Subject: [PATCH] switch expression: correct enhanced old-style result expression calculus IDEA-CR-40239 --- .../src/com/intellij/psi/util/PsiUtil.java | 14 +++++--------- .../advHighlighting12/SimpleInferenceCases.java | 8 ++++++++ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java b/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java index 9a1368a32512..ff7721d440df 100644 --- a/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java @@ -360,14 +360,11 @@ public final class PsiUtil extends PsiUtilCore { result.add(((PsiExpressionStatement)ruleBody).getExpression()); } else if (ruleBody instanceof PsiBlockStatement) { - collectSwitchResultExpressions(result, (PsiBlockStatement)ruleBody); + collectSwitchResultExpressions(result, ruleBody); } } - else if (statement instanceof PsiBlockStatement) { - collectSwitchResultExpressions(result, (PsiBlockStatement)statement); - } - else if (statement instanceof PsiBreakStatement) { - ContainerUtil.addIfNotNull(result, ((PsiBreakStatement)statement).getExpression()); + else { + collectSwitchResultExpressions(result, statement); } } return result; @@ -375,10 +372,9 @@ public final class PsiUtil extends PsiUtilCore { return Collections.emptyList(); } - private static void collectSwitchResultExpressions(List result, PsiBlockStatement ruleBody) { - PsiCodeBlock codeBlock = ruleBody.getCodeBlock(); + private static void collectSwitchResultExpressions(List result, PsiElement container) { ArrayList breaks = new ArrayList<>(); - addStatements(breaks, codeBlock, PsiBreakStatement.class, element -> element instanceof PsiSwitchBlock); + addStatements(breaks, container, PsiBreakStatement.class, element -> element instanceof PsiSwitchBlock); for (PsiBreakStatement aBreak : breaks) { ContainerUtil.addIfNotNull(result, aBreak.getExpression()); } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting12/SimpleInferenceCases.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting12/SimpleInferenceCases.java index 599359a39f9a..7f2aa1c36773 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting12/SimpleInferenceCases.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting12/SimpleInferenceCases.java @@ -90,6 +90,14 @@ no instance(s) of type variable(s) exist so that Integer conforms to String">() break 1; }; } + case 1: + if (i > 3) break 3; + case 0: + try { + break 42; + } finally { + //do nothing + } default: break 1; };