diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java index 589e91ba9f90..fb3b83379666 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java @@ -2438,14 +2438,16 @@ public class HighlightUtil extends HighlightUtilBase { @Nullable - static HighlightInfo checkStatementPrependedWithCaseInsideSwitch(@NotNull PsiStatement statement) { - if (!(statement instanceof PsiSwitchLabelStatement) && statement.getParent() instanceof PsiCodeBlock && - statement.getParent().getParent() instanceof PsiSwitchStatement && - ((PsiCodeBlock)statement.getParent()).getStatements().length != 0 && - statement == ((PsiCodeBlock)statement.getParent()).getStatements()[0]) { - String description = JavaErrorMessages.message("statement.must.be.prepended.with.case.label"); - return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(statement).descriptionAndTooltip(description).create(); + static HighlightInfo checkStatementPrependedWithCaseInsideSwitch(@NotNull PsiSwitchStatement statement) { + PsiCodeBlock body = statement.getBody(); + if (body != null) { + PsiElement first = PsiTreeUtil.skipSiblingsForward(body.getLBrace(), PsiWhiteSpace.class, PsiComment.class); + if (first != null && !(first instanceof PsiSwitchLabelStatement) && !PsiUtil.isJavaToken(first, JavaTokenType.RBRACE)) { + String description = JavaErrorMessages.message("statement.must.be.prepended.with.case.label"); + return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(first).descriptionAndTooltip(description).create(); + } } + return null; } diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java index 842e27051a01..7a70551d6321 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java @@ -1437,7 +1437,6 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh public void visitStatement(PsiStatement statement) { super.visitStatement(statement); if (!myHolder.hasErrorResults()) myHolder.add(HighlightUtil.checkNotAStatement(statement)); - if (!myHolder.hasErrorResults()) myHolder.add(HighlightUtil.checkStatementPrependedWithCaseInsideSwitch(statement)); } @Override @@ -1455,6 +1454,7 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh @Override public void visitSwitchStatement(PsiSwitchStatement statement) { super.visitSwitchStatement(statement); + myHolder.add(HighlightUtil.checkStatementPrependedWithCaseInsideSwitch(statement)); if (!myHolder.hasErrorResults()) myHolder.add(HighlightUtil.checkSwitchSelectorType(statement, myLanguageLevel)); } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/SwitchStatement.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/SwitchStatement.java index a768aacd9f37..444a3793b381 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/SwitchStatement.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/SwitchStatement.java @@ -1,35 +1,35 @@ // switch statement class a { + void m() { { - case 0: - } - { - default: + case 0: } { - switch (0) { - case 0; - } - - switch (0) { - default; - } - - switch (0) { - //////////////// - /** - */ - System.out.println(); - - - default; - } - - switch (0) { - break; - } + default: } + switch (0) { + case 0; + } + + switch (0) { + default; + } + + switch (0) { + //////////////// + /** */ + System.out.println(); + } + + switch (0) { + break; + } + + switch (0) { + return; + } + } } \ No newline at end of file