mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java] highlighting for incorrect first statement in switch (IDEA-148514)
This commit is contained in:
+9
-7
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
+25
-25
@@ -1,35 +1,35 @@
|
||||
// switch statement
|
||||
|
||||
class a {
|
||||
void m() {
|
||||
{
|
||||
<error descr="Case statement outside switch">case 0:</error>
|
||||
}
|
||||
{
|
||||
<error descr="Case statement outside switch">default:</error>
|
||||
<error descr="Case statement outside switch">case 0:</error>
|
||||
}
|
||||
|
||||
{
|
||||
switch (0) {
|
||||
case 0<error descr="':' expected">;</error>
|
||||
}
|
||||
|
||||
switch (0) {
|
||||
default<error descr="':' expected">;</error>
|
||||
}
|
||||
|
||||
switch (0) {
|
||||
////////////////
|
||||
/**
|
||||
*/
|
||||
<error descr="Statement must be prepended with case label">System.out.println();</error>
|
||||
|
||||
|
||||
default<error descr="':' expected">;</error>
|
||||
}
|
||||
|
||||
switch (0) {
|
||||
<error descr="Statement must be prepended with case label">break;</error>
|
||||
}
|
||||
<error descr="Case statement outside switch">default:</error>
|
||||
}
|
||||
|
||||
switch (0) {
|
||||
case 0<error descr="':' expected">;</error>
|
||||
}
|
||||
|
||||
switch (0) {
|
||||
default<error descr="':' expected">;</error>
|
||||
}
|
||||
|
||||
switch (0) {
|
||||
////////////////
|
||||
/** */
|
||||
<error descr="Statement must be prepended with case label">System.out.println();</error>
|
||||
}
|
||||
|
||||
switch (0) {
|
||||
<error descr="Statement must be prepended with case label">break;</error>
|
||||
}
|
||||
|
||||
switch (0) {
|
||||
<error descr="Statement must be prepended with case label">return;</error>
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user