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