mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
switch expression: correct enhanced old-style result expression calculus
IDEA-CR-40239
This commit is contained in:
@@ -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());
|
||||
}
|
||||
|
||||
+8
@@ -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>;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user