mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 11:50:54 +07:00
ensure that main method has proper signature IDEA-333318
GitOrigin-RevId: f324e646e922af24a2382073770ca195af52dc70
This commit is contained in:
committed by
intellij-monorepo-bot
parent
7770d195fc
commit
f7563d24a1
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
<error descr="Unnamed class contains no 'main' method">public static Integer main() {
|
||||
System.out.println("Hello world!");
|
||||
return 2;
|
||||
};</error>
|
||||
@@ -28,6 +28,10 @@ class UnnamedClassHighlightingTest : LightJavaCodeInsightFixtureTestCase() {
|
||||
doTest()
|
||||
}
|
||||
|
||||
fun testMainWithNonStandardSignature() {
|
||||
doTest()
|
||||
}
|
||||
|
||||
private fun doTest() {
|
||||
myFixture.configureByFile(getTestName(false) + ".java")
|
||||
myFixture.checkHighlighting()
|
||||
|
||||
Reference in New Issue
Block a user