ensure that main method has proper signature IDEA-333318

GitOrigin-RevId: f324e646e922af24a2382073770ca195af52dc70
This commit is contained in:
Roman Ivanov
2023-09-26 16:02:14 +02:00
committed by intellij-monorepo-bot
parent 7770d195fc
commit f7563d24a1
4 changed files with 13 additions and 4 deletions

View File

@@ -7,23 +7,24 @@ import com.intellij.codeInsight.daemon.impl.HighlightInfoType;
import com.intellij.codeInsight.intention.QuickFixFactory;
import com.intellij.psi.*;
import com.intellij.psi.util.JavaUnnamedClassUtil;
import com.intellij.psi.util.PsiMethodUtil;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* Checks and reports errors for unnamed classes {@link com.intellij.psi.PsiUnnamedClass}.
* Checks and reports errors for unnamed classes {@link PsiUnnamedClass}.
*/
public final class HighlightUnnamedClassUtil {
static HighlightInfo.@Nullable Builder checkUnnamedClssHasMainMethod(@NotNull PsiJavaFile file) {
static HighlightInfo.@Nullable Builder checkUnnamedClassHasMainMethod(@NotNull PsiJavaFile file) {
if (!HighlightingFeature.UNNAMED_CLASSES.isAvailable(file)) return null;
PsiClass[] classes = file.getClasses();
if (classes.length != 1) return null;
PsiClass aClass = classes[0];
if (aClass instanceof PsiUnnamedClass unnamedClass) {
PsiMethod[] methods = unnamedClass.getMethods();
boolean hasMainMethod = ContainerUtil.exists(methods, method -> "main".equals(method.getName()));
boolean hasMainMethod = ContainerUtil.exists(methods, method -> "main".equals(method.getName()) && PsiMethodUtil.isMainMethod(method));
if (!hasMainMethod) {
return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR)
.range(file)

View File

@@ -373,7 +373,7 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh
@Override
public void visitJavaFile(@NotNull PsiJavaFile file) {
super.visitJavaFile(file);
if (!hasErrorResults()) add(HighlightUnnamedClassUtil.checkUnnamedClssHasMainMethod(file));
if (!hasErrorResults()) add(HighlightUnnamedClassUtil.checkUnnamedClassHasMainMethod(file));
}
@Override

View File

@@ -0,0 +1,4 @@
<error descr="Unnamed class contains no 'main' method">public static Integer main() {
System.out.println("Hello world!");
return 2;
};</error>

View File

@@ -28,6 +28,10 @@ class UnnamedClassHighlightingTest : LightJavaCodeInsightFixtureTestCase() {
doTest()
}
fun testMainWithNonStandardSignature() {
doTest()
}
private fun doTest() {
myFixture.configureByFile(getTestName(false) + ".java")
myFixture.checkHighlighting()