From ce8c5cda4a2fbcf4e96f180842e4cd2e4e5173ed Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Wed, 29 Jun 2022 11:44:16 +0200 Subject: [PATCH] unused declaration: report Kotlin unused main function parameters GitOrigin-RevId: 0c40f76d3db6539c2217e1aa7967f0e90689f083 --- .../deadCode/UnusedParametersInspection.java | 12 ++++++++---- .../jvm/deadCode/mainParameter/expected.xml | 9 +++++++++ .../jvm/deadCode/mainParameter/src/Main.kt | 3 +++ .../tests/kotlin/UnusedDeclarationKtTest20.java | 6 ++++++ 4 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 java/java-tests/testData/inspection/jvm/deadCode/mainParameter/expected.xml create mode 100644 java/java-tests/testData/inspection/jvm/deadCode/mainParameter/src/Main.kt diff --git a/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedParametersInspection.java b/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedParametersInspection.java index def102ca12dc..2c7d990f6d41 100644 --- a/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedParametersInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedParametersInspection.java @@ -25,6 +25,7 @@ import org.jetbrains.uast.UParameter; import javax.swing.*; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.stream.Stream; @@ -45,13 +46,15 @@ class UnusedParametersInspection extends GlobalJavaBatchInspectionTool { if (aClass != null && ((refMethod.isAbstract() || aClass.isInterface()) && refMethod.getDerivedReferences().isEmpty())) { return null; } - if (refMethod.isAppMain()) return null; List unusedParameters = getUnusedParameters(refMethod); if (unusedParameters.isEmpty()) return null; - if (refMethod.isEntry()) return null; UDeclaration uMethod = refMethod.getUastElement(); if (uMethod == null) return null; PsiElement element = uMethod.getJavaPsi(); + if (refMethod.isAppMain()) { + if (element == null || !element.getLanguage().isKindOf("kotlin")) return null; + } + else if (refMethod.isEntry()) return null; if (element != null && EntryPointsManager.getInstance(manager.getProject()).isEntryPoint(element)) return null; List result = new ArrayList<>(); @@ -151,10 +154,11 @@ class UnusedParametersInspection extends GlobalJavaBatchInspectionTool { } @NotNull - private static ArrayList getUnusedParameters(@NotNull RefMethod refMethod) { + private static List getUnusedParameters(@NotNull RefMethod refMethod) { + RefParameter[] methodParameters = refMethod.getParameters(); + if (methodParameters.length == 0) return Collections.emptyList(); boolean checkDeep = !refMethod.isStatic() && !refMethod.isConstructor(); ArrayList res = new ArrayList<>(); - RefParameter[] methodParameters = refMethod.getParameters(); RefParameter[] result = methodParameters.clone(); clearUsedParameters(refMethod, result, checkDeep); diff --git a/java/java-tests/testData/inspection/jvm/deadCode/mainParameter/expected.xml b/java/java-tests/testData/inspection/jvm/deadCode/mainParameter/expected.xml new file mode 100644 index 000000000000..a3955cce2c1b --- /dev/null +++ b/java/java-tests/testData/inspection/jvm/deadCode/mainParameter/expected.xml @@ -0,0 +1,9 @@ + + + + Main.kt + 1 + Unused declaration + Parameter <code>args</code> is not used + + \ No newline at end of file diff --git a/java/java-tests/testData/inspection/jvm/deadCode/mainParameter/src/Main.kt b/java/java-tests/testData/inspection/jvm/deadCode/mainParameter/src/Main.kt new file mode 100644 index 000000000000..6380b1ee5f19 --- /dev/null +++ b/java/java-tests/testData/inspection/jvm/deadCode/mainParameter/src/Main.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + println("Hello world!") +} \ No newline at end of file diff --git a/jvm/jvm-analysis-kotlin-tests/testSrc/com/intellij/codeInspection/tests/kotlin/UnusedDeclarationKtTest20.java b/jvm/jvm-analysis-kotlin-tests/testSrc/com/intellij/codeInspection/tests/kotlin/UnusedDeclarationKtTest20.java index 2959569b0122..ab4a4068d85a 100644 --- a/jvm/jvm-analysis-kotlin-tests/testSrc/com/intellij/codeInspection/tests/kotlin/UnusedDeclarationKtTest20.java +++ b/jvm/jvm-analysis-kotlin-tests/testSrc/com/intellij/codeInspection/tests/kotlin/UnusedDeclarationKtTest20.java @@ -69,6 +69,12 @@ public class UnusedDeclarationKtTest20 extends AbstractUnusedDeclarationTest { doTest("deadCode/" + getTestName(true), myToolWrapper); } + public void testMainParameter() { + myTool.getSharedLocalInspectionTool().PARAMETER = true; + myTool.getSharedLocalInspectionTool().LOCAL_VARIABLE = false; + doTest("deadCode/" + getTestName(true), myToolWrapper); + } + public void testStaticMethods() { doTest(); }