mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-20 13:31:28 +07:00
[java] [switch expressions] avoid dbl work when checking types of switch return expressions
IJ-CR-14340 GitOrigin-RevId: 40e79767d794f7b7fcc9bc4d3930051a1698ea86
This commit is contained in:
committed by
intellij-monorepo-bot
parent
3434af89eb
commit
49edf8a29d
@@ -74,7 +74,6 @@ import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.intellij.util.ObjectUtils.tryCast;
|
||||
|
||||
@@ -876,8 +875,7 @@ public final class HighlightUtil {
|
||||
return null;
|
||||
}
|
||||
|
||||
static HighlightInfo checkYieldExpressionType(@NotNull PsiYieldStatement statement) {
|
||||
PsiExpression expression = statement.getExpression();
|
||||
static HighlightInfo checkYieldExpressionType(PsiExpression expression) {
|
||||
if (expression != null && PsiType.VOID.equals(expression.getType())) {
|
||||
String message = JavaErrorBundle.message("yield.void");
|
||||
return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(expression).descriptionAndTooltip(message).create();
|
||||
@@ -1580,14 +1578,7 @@ public final class HighlightUtil {
|
||||
@NotNull
|
||||
static Collection<HighlightInfo> checkSwitchExpressionReturnTypeCompatible(@NotNull PsiSwitchExpression switchExpression) {
|
||||
if (!PsiPolyExpressionUtil.isPolyExpression(switchExpression)) {
|
||||
return PsiUtil.getSwitchResultExpressions(switchExpression).stream().map(expression -> {
|
||||
if (PsiType.VOID.equals(expression.getType())) {
|
||||
return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR)
|
||||
.range(expression)
|
||||
.descriptionAndTooltip(JavaErrorBundle.message("yield.void")).create();
|
||||
}
|
||||
return null;
|
||||
}).filter(Objects::nonNull).collect(Collectors.toList());
|
||||
return Collections.emptyList();
|
||||
}
|
||||
List<HighlightInfo> infos = new ArrayList<>();
|
||||
PsiType switchExpressionType = switchExpression.getType();
|
||||
|
||||
@@ -470,7 +470,19 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh
|
||||
public void visitYieldStatement(PsiYieldStatement statement) {
|
||||
super.visitYieldStatement(statement);
|
||||
if (!myHolder.hasErrorResults()) myHolder.add(HighlightUtil.checkYieldOutsideSwitchExpression(statement));
|
||||
if (!myHolder.hasErrorResults()) myHolder.add(HighlightUtil.checkYieldExpressionType(statement));
|
||||
if (!myHolder.hasErrorResults()) myHolder.add(HighlightUtil.checkYieldExpressionType(statement.getExpression()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitExpressionStatement(PsiExpressionStatement statement) {
|
||||
super.visitExpressionStatement(statement);
|
||||
PsiElement parent = statement.getParent();
|
||||
if (parent instanceof PsiSwitchLabeledRuleStatement) {
|
||||
PsiSwitchBlock switchBlock = ((PsiSwitchLabeledRuleStatement)parent).getEnclosingSwitchBlock();
|
||||
if (switchBlock instanceof PsiSwitchExpression && !PsiPolyExpressionUtil.isPolyExpression((PsiExpression)switchBlock)) {
|
||||
myHolder.add(HighlightUtil.checkYieldExpressionType(statement.getExpression()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -110,6 +110,10 @@ class MyTest {
|
||||
case 0 -> 42;
|
||||
default -> <error descr="Expression type should not be 'void'">System.out.println(42)</error>;
|
||||
};
|
||||
|
||||
<error descr="Cannot infer type: variable initializer is 'null'">var</error> rv1 = switch (0) {
|
||||
default -> null;
|
||||
};
|
||||
}
|
||||
|
||||
static void test(boolean b, int i) {
|
||||
|
||||
Reference in New Issue
Block a user