[java-highlighting] Report only semicolons between import statements

IJ-CR-110702

GitOrigin-RevId: d30e7021a979e4fc1b0ad5ce5078c5a8d805858a
This commit is contained in:
Louis Vignier
2023-08-09 13:30:08 +02:00
committed by intellij-monorepo-bot
parent fef81252d6
commit 89cfc1c9fc
4 changed files with 15 additions and 5 deletions

View File

@@ -632,7 +632,8 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh
if (!myHolder.hasErrorResults() &&
myLanguageLevel.isAtLeast(LanguageLevel.JDK_21) &&
type == JavaTokenType.SEMICOLON &&
token.getParent() instanceof PsiImportList) {
token.getParent() instanceof PsiImportList &&
PsiUtil.isFollowedByImport(token)) {
add(HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR)
.range(token.getTextRange())
.descriptionAndTooltip(JavaErrorBundle.message("error.extra.semicolons.between.import.statements.not.allowed")));

View File

@@ -6,9 +6,9 @@ import com.intellij.codeInsight.intention.QuickFixFactory;
import com.intellij.codeInspection.AbstractBaseJavaLocalInspectionTool;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.codeInspection.util.InspectionMessage;
import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.openapi.project.Project;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
@@ -111,8 +111,8 @@ public class ForwardCompatibilityInspection extends AbstractBaseJavaLocalInspect
@Override
public void visitJavaToken(@NotNull PsiJavaToken token) {
super.visitJavaToken(token);
if (languageLevel.isLessThan(LanguageLevel.JDK_21) && token.getParent() instanceof PsiImportList && token.getTokenType() == JavaTokenType.SEMICOLON) {
String message = JavaErrorBundle.message("lone.semicolon.warn");
if (languageLevel.isLessThan(LanguageLevel.JDK_21) && token.getParent() instanceof PsiImportList
&& token.getTokenType() == JavaTokenType.SEMICOLON && PsiUtil.isFollowedByImport(token)) {
String message = JavaErrorBundle.message("redundant.semicolon.warn");
holder.registerProblem(token, message, new UnnecessarySemicolonInspection.UnnecessarySemicolonFix());
}

View File

@@ -1446,4 +1446,13 @@ public final class PsiUtil extends PsiUtilCore {
public static boolean isJvmLocalVariable(PsiElement variable) {
return variable instanceof PsiLocalVariable || variable instanceof PsiParameter;
}
public static boolean isFollowedByImport(PsiElement element) {
PsiElement currentElement = element.getNextSibling();
while (!(currentElement instanceof PsiImportStatement)) {
if (currentElement == null) return false;
currentElement = currentElement.getNextSibling();
}
return true;
}
}

View File

@@ -43,7 +43,7 @@ public class ForwardCompatibilityInspectionTest extends LightJavaInspectionTestC
public void testRestrictedKeywordWarning() { doTest(); }
public void testLoneSemicolon() { doTest(); }
public void testLoneSemicolon() { withLevel(LanguageLevel.JDK_20, this::doTest); }
public void testModuleInfoWarning() {
withLevel(LanguageLevel.JDK_1_9, () -> {