diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/PsiClassImplUtil.java b/java/java-psi-impl/src/com/intellij/psi/impl/PsiClassImplUtil.java index ae799077347c..d39f98a0f87a 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/PsiClassImplUtil.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/PsiClassImplUtil.java @@ -313,15 +313,16 @@ public final class PsiClassImplUtil { } public static boolean isMainOrPremainMethod(@NotNull PsiMethod method) { + if (PsiMethodUtil.isMainMethod(method)) { + return true; + } String name = method.getName(); - if (!("main".equals(name) || "premain".equals(name) || "agentmain".equals(name))) return false; + if ("premain".equals(name) || "agentmain".equals(name)) return false; if (!PsiTypes.voidType().equals(method.getReturnType())) return false; PsiElementFactory factory = JavaPsiFacade.getElementFactory(method.getProject()); MethodSignature signature = method.getSignature(PsiSubstitutor.EMPTY); try { - MethodSignature main = createSignatureFromText(factory, "void main(String[] args);"); - if (MethodSignatureUtil.areSignaturesEqual(signature, main)) return true; MethodSignature premain = createSignatureFromText(factory, "void premain(String args, java.lang.instrument.Instrumentation i);"); if (MethodSignatureUtil.areSignaturesEqual(signature, premain)) return true; MethodSignature agentmain = createSignatureFromText(factory, "void agentmain(String args, java.lang.instrument.Instrumentation i);"); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedDecls/UnnamedClassInstanceMainWithoutParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedDecls/UnnamedClassInstanceMainWithoutParams.java new file mode 100644 index 000000000000..05a37e98348a --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedDecls/UnnamedClassInstanceMainWithoutParams.java @@ -0,0 +1 @@ +void main() {} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/UnusedSymbolLocalTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/UnusedSymbolLocalTest.java index b51d802a2c38..b1bf5dbf6a94 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/UnusedSymbolLocalTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/UnusedSymbolLocalTest.java @@ -21,7 +21,9 @@ import com.intellij.codeInspection.deadCode.UnusedDeclarationInspection; import com.intellij.lang.annotation.HighlightSeverity; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.editor.Document; +import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.PsiDocumentManager; +import com.intellij.testFramework.IdeaTestUtil; import java.util.Collection; @@ -39,6 +41,16 @@ public class UnusedSymbolLocalTest extends DaemonAnalyzerTestCase { public void testInnerUsesSelf() throws Exception { doTest(); } public void testLocalClass() throws Exception { doTest(); } public void testPrivateConstructor() throws Exception { doTest(); } + public void testUnnamedClassInstanceMainWithoutParams() { + IdeaTestUtil.withLevel(myModule, LanguageLevel.JDK_21_PREVIEW, () -> { + try { + doTest(); + } + catch (Exception e) { + throw new RuntimeException(e); + } + }); + } //@Bombed(day = 5, month = Calendar.SEPTEMBER, user = "anet") //public void testInjectedAnno() throws Exception { doTest(); }