From dbe0b4aa71267cdede16f382451f238a811e82d6 Mon Sep 17 00:00:00 2001 From: Dmitry Gridin Date: Tue, 26 Mar 2019 12:08:38 +0700 Subject: [PATCH] Unused symbol inspection should detect enum entry #KT-30612 Fixed --- .../inspections/UnusedSymbolInspection.kt | 2 -- .../unusedSymbol/unusedEnumEntry.kt | 12 ++++++++ .../removeUnused/simpleUnusedEnumEntry.kt | 9 ++++++ .../simpleUnusedEnumEntry.kt.after | 8 +++++ .../quickfix/removeUnused/unusedEnumEntry.kt | 13 ++++++++ .../removeUnused/unusedEnumEntry.kt.after | 12 ++++++++ .../quickfix/removeUnused/unusedEnumEntry2.kt | 12 ++++++++ .../removeUnused/unusedEnumEntry2.kt.after | 11 +++++++ .../quickfix/removeUnused/unusedEnumEntry3.kt | 4 +++ .../removeUnused/unusedEnumEntry3.kt.after | 3 ++ .../quickfix/removeUnused/unusedEnumEntry4.kt | 4 +++ .../removeUnused/unusedEnumEntry4.kt.after | 3 ++ .../quickfix/removeUnused/unusedEnumEntry5.kt | 6 ++++ .../removeUnused/unusedEnumEntry5.kt.after | 4 +++ .../LocalInspectionTestGenerated.java | 5 ++++ .../idea/quickfix/QuickFixTestGenerated.java | 30 +++++++++++++++++++ 16 files changed, 136 insertions(+), 2 deletions(-) create mode 100644 idea/testData/inspectionsLocal/unusedSymbol/unusedEnumEntry.kt create mode 100644 idea/testData/quickfix/removeUnused/simpleUnusedEnumEntry.kt create mode 100644 idea/testData/quickfix/removeUnused/simpleUnusedEnumEntry.kt.after create mode 100644 idea/testData/quickfix/removeUnused/unusedEnumEntry.kt create mode 100644 idea/testData/quickfix/removeUnused/unusedEnumEntry.kt.after create mode 100644 idea/testData/quickfix/removeUnused/unusedEnumEntry2.kt create mode 100644 idea/testData/quickfix/removeUnused/unusedEnumEntry2.kt.after create mode 100644 idea/testData/quickfix/removeUnused/unusedEnumEntry3.kt create mode 100644 idea/testData/quickfix/removeUnused/unusedEnumEntry3.kt.after create mode 100644 idea/testData/quickfix/removeUnused/unusedEnumEntry4.kt create mode 100644 idea/testData/quickfix/removeUnused/unusedEnumEntry4.kt.after create mode 100644 idea/testData/quickfix/removeUnused/unusedEnumEntry5.kt create mode 100644 idea/testData/quickfix/removeUnused/unusedEnumEntry5.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt index 82c708ebb54..d44a119e619 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt @@ -63,7 +63,6 @@ import org.jetbrains.kotlin.idea.search.usagesSearch.getAccessorNames import org.jetbrains.kotlin.idea.search.usagesSearch.getClassNameForCompanionObject import org.jetbrains.kotlin.idea.stubindex.KotlinSourceFilterScope import org.jetbrains.kotlin.idea.util.ProjectRootsUtil -import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.idea.util.compat.psiSearchHelperInstance import org.jetbrains.kotlin.idea.util.hasActualsFor import org.jetbrains.kotlin.js.resolve.diagnostics.findPsi @@ -199,7 +198,6 @@ class UnusedSymbolInspection : AbstractKotlinInspection() { // Simple PSI-based checks if (declaration is KtObjectDeclaration && declaration.isCompanion()) return // never mark companion object as unused (there are too many reasons it can be needed for) - if (declaration is KtEnumEntry) return if (declaration.hasModifier(KtTokens.OVERRIDE_KEYWORD)) return if (declaration is KtProperty && declaration.isLocal) return if (declaration is KtParameter && (declaration.getParent().parent !is KtPrimaryConstructor || !declaration.hasValOrVar())) return diff --git a/idea/testData/inspectionsLocal/unusedSymbol/unusedEnumEntry.kt b/idea/testData/inspectionsLocal/unusedSymbol/unusedEnumEntry.kt new file mode 100644 index 00000000000..e2568bea12f --- /dev/null +++ b/idea/testData/inspectionsLocal/unusedSymbol/unusedEnumEntry.kt @@ -0,0 +1,12 @@ +// PROBLEM: none +enum class MyEnum(val i: Int) { + HELLO(42), + WORLD("42") + ; + + constructor(s: String): this(42) +} + +fun test() { + MyEnum.HELLO +} \ No newline at end of file diff --git a/idea/testData/quickfix/removeUnused/simpleUnusedEnumEntry.kt b/idea/testData/quickfix/removeUnused/simpleUnusedEnumEntry.kt new file mode 100644 index 00000000000..3f50ceee536 --- /dev/null +++ b/idea/testData/quickfix/removeUnused/simpleUnusedEnumEntry.kt @@ -0,0 +1,9 @@ +// "Safe delete 'WORLD'" "true" +enum class MyEnum { + HELLO, + WORLD +} + +fun main() { + MyEnum.HELLO +} \ No newline at end of file diff --git a/idea/testData/quickfix/removeUnused/simpleUnusedEnumEntry.kt.after b/idea/testData/quickfix/removeUnused/simpleUnusedEnumEntry.kt.after new file mode 100644 index 00000000000..316e8fcb573 --- /dev/null +++ b/idea/testData/quickfix/removeUnused/simpleUnusedEnumEntry.kt.after @@ -0,0 +1,8 @@ +// "Safe delete 'WORLD'" "true" +enum class MyEnum { + HELLO, +} + +fun main() { + MyEnum.HELLO +} \ No newline at end of file diff --git a/idea/testData/quickfix/removeUnused/unusedEnumEntry.kt b/idea/testData/quickfix/removeUnused/unusedEnumEntry.kt new file mode 100644 index 00000000000..5c98aa82f58 --- /dev/null +++ b/idea/testData/quickfix/removeUnused/unusedEnumEntry.kt @@ -0,0 +1,13 @@ +// "Safe delete 'WORLD'" "true" +enum class MyEnum(val i: Int) { + HELLO(42), + WORLD("42"), + E(24) + ; + + constructor(s: String): this(42) +} + +fun test() { + MyEnum.HELLO +} \ No newline at end of file diff --git a/idea/testData/quickfix/removeUnused/unusedEnumEntry.kt.after b/idea/testData/quickfix/removeUnused/unusedEnumEntry.kt.after new file mode 100644 index 00000000000..1f5d143daaf --- /dev/null +++ b/idea/testData/quickfix/removeUnused/unusedEnumEntry.kt.after @@ -0,0 +1,12 @@ +// "Safe delete 'WORLD'" "true" +enum class MyEnum(val i: Int) { + HELLO(42), + E(24) + ; + + constructor(s: String): this(42) +} + +fun test() { + MyEnum.HELLO +} \ No newline at end of file diff --git a/idea/testData/quickfix/removeUnused/unusedEnumEntry2.kt b/idea/testData/quickfix/removeUnused/unusedEnumEntry2.kt new file mode 100644 index 00000000000..bcf3e5b2dd8 --- /dev/null +++ b/idea/testData/quickfix/removeUnused/unusedEnumEntry2.kt @@ -0,0 +1,12 @@ +// "Safe delete 'WORLD'" "true" +enum class MyEnum(val i: Int) { + WORLD("42"), + HELLO(42) + ; + + constructor(s: String): this(42) +} + +fun test() { + MyEnum.HELLO +} \ No newline at end of file diff --git a/idea/testData/quickfix/removeUnused/unusedEnumEntry2.kt.after b/idea/testData/quickfix/removeUnused/unusedEnumEntry2.kt.after new file mode 100644 index 00000000000..36788c15f5f --- /dev/null +++ b/idea/testData/quickfix/removeUnused/unusedEnumEntry2.kt.after @@ -0,0 +1,11 @@ +// "Safe delete 'WORLD'" "true" +enum class MyEnum(val i: Int) { + HELLO(42) + ; + + constructor(s: String): this(42) +} + +fun test() { + MyEnum.HELLO +} \ No newline at end of file diff --git a/idea/testData/quickfix/removeUnused/unusedEnumEntry3.kt b/idea/testData/quickfix/removeUnused/unusedEnumEntry3.kt new file mode 100644 index 00000000000..6ef5a3330e1 --- /dev/null +++ b/idea/testData/quickfix/removeUnused/unusedEnumEntry3.kt @@ -0,0 +1,4 @@ +// "Safe delete 'HELLO'" "true" +enum class MyEnum { + HELLO +} diff --git a/idea/testData/quickfix/removeUnused/unusedEnumEntry3.kt.after b/idea/testData/quickfix/removeUnused/unusedEnumEntry3.kt.after new file mode 100644 index 00000000000..f0fb8e5dd34 --- /dev/null +++ b/idea/testData/quickfix/removeUnused/unusedEnumEntry3.kt.after @@ -0,0 +1,3 @@ +// "Safe delete 'HELLO'" "true" +enum class MyEnum { +} diff --git a/idea/testData/quickfix/removeUnused/unusedEnumEntry4.kt b/idea/testData/quickfix/removeUnused/unusedEnumEntry4.kt new file mode 100644 index 00000000000..80862503d8a --- /dev/null +++ b/idea/testData/quickfix/removeUnused/unusedEnumEntry4.kt @@ -0,0 +1,4 @@ +// "Safe delete 'HELLO'" "true" +enum class MyEnum { + HELLO, +} diff --git a/idea/testData/quickfix/removeUnused/unusedEnumEntry4.kt.after b/idea/testData/quickfix/removeUnused/unusedEnumEntry4.kt.after new file mode 100644 index 00000000000..f0fb8e5dd34 --- /dev/null +++ b/idea/testData/quickfix/removeUnused/unusedEnumEntry4.kt.after @@ -0,0 +1,3 @@ +// "Safe delete 'HELLO'" "true" +enum class MyEnum { +} diff --git a/idea/testData/quickfix/removeUnused/unusedEnumEntry5.kt b/idea/testData/quickfix/removeUnused/unusedEnumEntry5.kt new file mode 100644 index 00000000000..9476d152ef4 --- /dev/null +++ b/idea/testData/quickfix/removeUnused/unusedEnumEntry5.kt @@ -0,0 +1,6 @@ +// "Safe delete 'HELLO'" "true" +import MyEnum.HELLO + +enum class MyEnum { + HELLO, +} diff --git a/idea/testData/quickfix/removeUnused/unusedEnumEntry5.kt.after b/idea/testData/quickfix/removeUnused/unusedEnumEntry5.kt.after new file mode 100644 index 00000000000..cfa237db0c8 --- /dev/null +++ b/idea/testData/quickfix/removeUnused/unusedEnumEntry5.kt.after @@ -0,0 +1,4 @@ +// "Safe delete 'HELLO'" "true" + +enum class MyEnum { +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java index 8e4b72e32a4..7689dc101da 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -8728,6 +8728,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { runTest("idea/testData/inspectionsLocal/unusedSymbol/typeAlias.kt"); } + @TestMetadata("unusedEnumEntry.kt") + public void testUnusedEnumEntry() throws Exception { + runTest("idea/testData/inspectionsLocal/unusedSymbol/unusedEnumEntry.kt"); + } + @TestMetadata("withJvmNameUsedFromKotlin.kt") public void testWithJvmNameUsedFromKotlin() throws Exception { runTest("idea/testData/inspectionsLocal/unusedSymbol/withJvmNameUsedFromKotlin.kt"); diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 1eeec852f4a..5eee92bfd9d 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -10121,6 +10121,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/removeUnused/notTriangle.kt"); } + @TestMetadata("simpleUnusedEnumEntry.kt") + public void testSimpleUnusedEnumEntry() throws Exception { + runTest("idea/testData/quickfix/removeUnused/simpleUnusedEnumEntry.kt"); + } + @TestMetadata("triangle.kt") public void testTriangle() throws Exception { runTest("idea/testData/quickfix/removeUnused/triangle.kt"); @@ -10156,6 +10161,31 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/removeUnused/unusedDelegatedConstructorSuper.kt"); } + @TestMetadata("unusedEnumEntry.kt") + public void testUnusedEnumEntry() throws Exception { + runTest("idea/testData/quickfix/removeUnused/unusedEnumEntry.kt"); + } + + @TestMetadata("unusedEnumEntry2.kt") + public void testUnusedEnumEntry2() throws Exception { + runTest("idea/testData/quickfix/removeUnused/unusedEnumEntry2.kt"); + } + + @TestMetadata("unusedEnumEntry3.kt") + public void testUnusedEnumEntry3() throws Exception { + runTest("idea/testData/quickfix/removeUnused/unusedEnumEntry3.kt"); + } + + @TestMetadata("unusedEnumEntry4.kt") + public void testUnusedEnumEntry4() throws Exception { + runTest("idea/testData/quickfix/removeUnused/unusedEnumEntry4.kt"); + } + + @TestMetadata("unusedEnumEntry5.kt") + public void testUnusedEnumEntry5() throws Exception { + runTest("idea/testData/quickfix/removeUnused/unusedEnumEntry5.kt"); + } + @TestMetadata("unusedFunction.kt") public void testUnusedFunction() throws Exception { runTest("idea/testData/quickfix/removeUnused/unusedFunction.kt");