switch expression: correct enhanced old-style result expression calculus

IDEA-CR-40239
This commit is contained in:
Anna.Kozlova
2018-12-04 10:44:23 +01:00
parent 858f903cc5
commit 3cd2baac99
2 changed files with 13 additions and 9 deletions
@@ -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<PsiExpression> result, PsiBlockStatement ruleBody) {
PsiCodeBlock codeBlock = ruleBody.getCodeBlock();
private static void collectSwitchResultExpressions(List<PsiExpression> result, PsiElement container) {
ArrayList<PsiBreakStatement> 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());
}
@@ -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 <error descr="Bad type in switch expression: int cannot be converted to java.lang.String">3</error>;
case 0:
try {
break <error descr="Bad type in switch expression: int cannot be converted to java.lang.String">42</error>;
} finally {
//do nothing
}
default:
break <error descr="Bad type in switch expression: int cannot be converted to java.lang.String">1</error>;
};