From 71bcce641020e371d1514287a0d9429747df1609 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Mon, 19 Jan 2015 23:37:45 +0300 Subject: [PATCH] Highlighting unused type parameter. --- .../kotlin/idea/JetBundle.properties | 1 + .../inspections/UnusedSymbolInspection.kt | 16 +++++++++++++++- .../typeParameter/inspectionData/expected.xml | 19 +++++++++++++++++++ .../inspectionData/inspections.test | 1 + .../typeParameter/unusedClassTypeParameter.kt | 9 +++++++++ .../unusedFunctionTypeParameter.kt | 6 ++++++ .../typeParameter/usedClassTypeParameter.kt | 9 +++++++++ .../usedFunctionTypeParameter.kt | 6 ++++++ .../JetInspectionTestGenerated.java | 6 ++++++ 9 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 idea/testData/inspections/unusedSymbol/typeParameter/inspectionData/expected.xml create mode 100644 idea/testData/inspections/unusedSymbol/typeParameter/inspectionData/inspections.test create mode 100644 idea/testData/inspections/unusedSymbol/typeParameter/unusedClassTypeParameter.kt create mode 100644 idea/testData/inspections/unusedSymbol/typeParameter/unusedFunctionTypeParameter.kt create mode 100644 idea/testData/inspections/unusedSymbol/typeParameter/usedClassTypeParameter.kt create mode 100644 idea/testData/inspections/unusedSymbol/typeParameter/usedFunctionTypeParameter.kt diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties index a648fa059b5..aeb07ab1125 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties @@ -120,6 +120,7 @@ goto.super.class.chooser.title=Choose super class or interface unused.class=Class ''{0}'' is never used unused.function=Function ''{0}'' is never used unused.property=Property ''{0}'' is never used +unused.type.parameter=Type parameter ''{0}'' is never used livetemplate.description.main=main() function livetemplate.description.soutp=Prints function parameter names and values to System.out diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt index fb8dece0143..db77f176608 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt @@ -49,6 +49,8 @@ import org.jetbrains.kotlin.idea.search.usagesSearch.PropertyUsagesSearchHelper import org.jetbrains.kotlin.idea.search.usagesSearch.getAccessorNames import org.jetbrains.kotlin.psi.JetParameter import org.jetbrains.kotlin.idea.search.usagesSearch.dataClassComponentFunctionName +import org.jetbrains.kotlin.psi.JetTypeParameter +import org.jetbrains.kotlin.idea.search.usagesSearch.DefaultSearchHelper public class UnusedSymbolInspection : AbstractKotlinInspection() { private val javaInspection = UnusedDeclarationInspection() @@ -120,6 +122,18 @@ public class UnusedSymbolInspection : AbstractKotlinInspection() { ProblemHighlightType.LIKE_UNUSED_SYMBOL ) // TODO add quick fix to delete it } + + override fun visitTypeParameter(parameter: JetTypeParameter) { + if (parameter.getName() == null) return + + if (hasNonTrivialUsages(parameter)) return + + holder.registerProblem( + parameter.getNameIdentifier(), + JetBundle.message("unused.type.parameter", parameter.getName()), + ProblemHighlightType.LIKE_UNUSED_SYMBOL + ) // TODO add quick fix to delete it + } } } @@ -177,7 +191,7 @@ public class UnusedSymbolInspection : AbstractKotlinInspection() { is JetClass -> ClassUsagesSearchHelper(constructorUsages = true, nonConstructorUsages = true, skipImports = true) is JetNamedFunction -> FunctionUsagesSearchHelper(skipImports = true) is JetProperty, is JetParameter -> PropertyUsagesSearchHelper(skipImports = true) - else -> return false + else -> DefaultSearchHelper() } val request = searchHelper.newRequest(UsagesSearchTarget(declaration, useScope)) diff --git a/idea/testData/inspections/unusedSymbol/typeParameter/inspectionData/expected.xml b/idea/testData/inspections/unusedSymbol/typeParameter/inspectionData/expected.xml new file mode 100644 index 00000000000..42512da212b --- /dev/null +++ b/idea/testData/inspections/unusedSymbol/typeParameter/inspectionData/expected.xml @@ -0,0 +1,19 @@ + + + unusedFunctionTypeParameter.kt + 1 + light_idea_test_case + + Unused Symbol + Type parameter 'T' is never used + + + + unusedClassTypeParameter.kt + 1 + light_idea_test_case + + Unused Symbol + Type parameter 'T' is never used + + diff --git a/idea/testData/inspections/unusedSymbol/typeParameter/inspectionData/inspections.test b/idea/testData/inspections/unusedSymbol/typeParameter/inspectionData/inspections.test new file mode 100644 index 00000000000..02aea1c357e --- /dev/null +++ b/idea/testData/inspections/unusedSymbol/typeParameter/inspectionData/inspections.test @@ -0,0 +1 @@ +// INSPECTION_CLASS: org.jetbrains.kotlin.idea.inspections.UnusedSymbolInspection diff --git a/idea/testData/inspections/unusedSymbol/typeParameter/unusedClassTypeParameter.kt b/idea/testData/inspections/unusedSymbol/typeParameter/unusedClassTypeParameter.kt new file mode 100644 index 00000000000..02752c84307 --- /dev/null +++ b/idea/testData/inspections/unusedSymbol/typeParameter/unusedClassTypeParameter.kt @@ -0,0 +1,9 @@ +class UnusedClassTypeParameter(p: String) { + { + println(p) + } +} + +fun main(args: Array) { + UnusedClassTypeParameter("") +} \ No newline at end of file diff --git a/idea/testData/inspections/unusedSymbol/typeParameter/unusedFunctionTypeParameter.kt b/idea/testData/inspections/unusedSymbol/typeParameter/unusedFunctionTypeParameter.kt new file mode 100644 index 00000000000..687fb96649f --- /dev/null +++ b/idea/testData/inspections/unusedSymbol/typeParameter/unusedFunctionTypeParameter.kt @@ -0,0 +1,6 @@ +fun unusedFunctionTypeParameter(p: String) { +} + +fun main(args: Array) { + unusedFunctionTypeParameter("") +} \ No newline at end of file diff --git a/idea/testData/inspections/unusedSymbol/typeParameter/usedClassTypeParameter.kt b/idea/testData/inspections/unusedSymbol/typeParameter/usedClassTypeParameter.kt new file mode 100644 index 00000000000..8def3e6f377 --- /dev/null +++ b/idea/testData/inspections/unusedSymbol/typeParameter/usedClassTypeParameter.kt @@ -0,0 +1,9 @@ +class UsedClassTypeParameter(t: T) { + { + println(t) + } +} + +fun main(args: Array) { + UsedClassTypeParameter("") +} \ No newline at end of file diff --git a/idea/testData/inspections/unusedSymbol/typeParameter/usedFunctionTypeParameter.kt b/idea/testData/inspections/unusedSymbol/typeParameter/usedFunctionTypeParameter.kt new file mode 100644 index 00000000000..62d8a1cfc11 --- /dev/null +++ b/idea/testData/inspections/unusedSymbol/typeParameter/usedFunctionTypeParameter.kt @@ -0,0 +1,6 @@ +fun usedFunctionTypeParameter(t: T) { +} + +fun main(args: Array) { + usedFunctionTypeParameter("") +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/JetInspectionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/JetInspectionTestGenerated.java index dc4e6f4454b..e55bf071ee2 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/JetInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/JetInspectionTestGenerated.java @@ -101,5 +101,11 @@ public class JetInspectionTestGenerated extends AbstractJetInspectionTest { String fileName = JetTestUtils.navigationMetadata("idea/testData/inspections/unusedSymbol/property/inspectionData/inspections.test"); doTest(fileName); } + + @TestMetadata("unusedSymbol/typeParameter/inspectionData/inspections.test") + public void testUnusedSymbol_typeParameter_inspectionData_Inspections_test() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/inspections/unusedSymbol/typeParameter/inspectionData/inspections.test"); + doTest(fileName); + } } }