From 697132561fc621b0cedd3e909bafbbe215376f5b Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Fri, 11 Dec 2015 21:24:20 +0300 Subject: [PATCH] Allow to override suppression key for inspections --- .../inspections/AbstractKotlinInspection.kt | 27 ++++++++++--------- .../UnusedReceiverParameterInspection.kt | 2 ++ .../inspections/UnusedSymbolInspection.kt | 2 ++ .../inspections/unusedImport/suppression.kt | 3 +++ .../unusedReceiverParameter/suppression.kt | 7 +++++ .../function/classMemberUnused.kt | 4 +-- .../unusedSymbol/function/local.kt | 4 +-- .../function/membersOfAnonymousInClass.kt | 8 +++--- .../function/membersOfAnonymousInFunction.kt | 4 +-- .../function/membersOfLocalClass.kt | 6 ++--- .../function/topLevelOnlyInImport.kt | 2 +- .../unusedSymbol/function/topLevelUnused.kt | 2 +- .../function/usedOnlyRecursively.kt | 2 +- .../before/suppressed.kt | 7 +++++ .../suppress/inspections/unusedImports.kt | 2 +- .../inspections/unusedImports.kt.after | 4 +-- 16 files changed, 55 insertions(+), 31 deletions(-) create mode 100644 idea/testData/inspections/unusedImport/suppression.kt create mode 100644 idea/testData/inspections/unusedReceiverParameter/suppression.kt create mode 100644 idea/testData/multiFileInspections/invalidBundleOrProperty/before/suppressed.kt diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/AbstractKotlinInspection.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/AbstractKotlinInspection.kt index 260c06c49bb..7e6135c1fce 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/AbstractKotlinInspection.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/AbstractKotlinInspection.kt @@ -30,7 +30,7 @@ public abstract class AbstractKotlinInspection: LocalInspectionTool(), CustomSup public override fun getSuppressActions(element: PsiElement?): Array? { if (element == null) return emptyArray() - return createSuppressWarningActions(element, toSeverity(defaultLevel), this.shortName).toTypedArray() + return createSuppressWarningActions(element, toSeverity(defaultLevel), suppressionKey).toTypedArray() } public override fun isSuppressedFor(element: PsiElement): Boolean { @@ -39,25 +39,28 @@ public abstract class AbstractKotlinInspection: LocalInspectionTool(), CustomSup } val project = element.project - if (KotlinCacheService.getInstance(project).getSuppressionCache().isSuppressed(element, this.shortName, toSeverity(defaultLevel))) { + if (KotlinCacheService.getInstance(project).getSuppressionCache().isSuppressed(element, suppressionKey, toSeverity(defaultLevel))) { return true } return false } - public fun toSeverity(highlightDisplayLevel: HighlightDisplayLevel): Severity { - return when (highlightDisplayLevel) { - HighlightDisplayLevel.DO_NOT_SHOW -> Severity.INFO + protected open val suppressionKey: String get() = this.shortName.removePrefix("Kotlin") +} - HighlightDisplayLevel.WARNING, - HighlightDisplayLevel.WEAK_WARNING -> Severity.WARNING +private fun toSeverity(highlightDisplayLevel: HighlightDisplayLevel): Severity { + return when (highlightDisplayLevel) { + HighlightDisplayLevel.DO_NOT_SHOW -> Severity.INFO - HighlightDisplayLevel.ERROR, - HighlightDisplayLevel.GENERIC_SERVER_ERROR_OR_WARNING, - HighlightDisplayLevel.NON_SWITCHABLE_ERROR -> Severity.ERROR + HighlightDisplayLevel.WARNING, + HighlightDisplayLevel.WEAK_WARNING -> Severity.WARNING - else -> Severity.ERROR - } + HighlightDisplayLevel.ERROR, + HighlightDisplayLevel.GENERIC_SERVER_ERROR_OR_WARNING, + HighlightDisplayLevel.NON_SWITCHABLE_ERROR -> Severity.ERROR + + else -> Severity.ERROR } } + diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedReceiverParameterInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedReceiverParameterInspection.kt index 4bc6f40fad3..530fe20c4db 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedReceiverParameterInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedReceiverParameterInspection.kt @@ -35,6 +35,8 @@ import org.jetbrains.kotlin.resolve.calls.model.VariableAsFunctionResolvedCall import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue public class UnusedReceiverParameterInspection : AbstractKotlinInspection() { + override val suppressionKey: String get() = "unused" + override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean, session: LocalInspectionToolSession): PsiElementVisitor { return object : KtVisitorVoid() { private fun check(callableDeclaration: KtCallableDeclaration) { diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt index dbd78e7b1ac..2c6ef13d9f6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt @@ -189,6 +189,8 @@ public class UnusedSymbolInspection : AbstractKotlinInspection() { } } + override val suppressionKey: String get() = "unused" + private fun classOrObjectHasTextUsages(classOrObject: KtClassOrObject): Boolean { var hasTextUsages = false diff --git a/idea/testData/inspections/unusedImport/suppression.kt b/idea/testData/inspections/unusedImport/suppression.kt new file mode 100644 index 00000000000..cd6684b02b0 --- /dev/null +++ b/idea/testData/inspections/unusedImport/suppression.kt @@ -0,0 +1,3 @@ +@file:Suppress("UnusedImport") + +import java.io.* // unused \ No newline at end of file diff --git a/idea/testData/inspections/unusedReceiverParameter/suppression.kt b/idea/testData/inspections/unusedReceiverParameter/suppression.kt new file mode 100644 index 00000000000..edd8e8a5331 --- /dev/null +++ b/idea/testData/inspections/unusedReceiverParameter/suppression.kt @@ -0,0 +1,7 @@ +@Suppress("warnings") +val Any.v: Int + get() = 123 + +@Suppress("unused") +val Any.v1: Int + get() = 123 \ No newline at end of file diff --git a/idea/testData/inspections/unusedSymbol/function/classMemberUnused.kt b/idea/testData/inspections/unusedSymbol/function/classMemberUnused.kt index a3066368820..09f86fda5a7 100644 --- a/idea/testData/inspections/unusedSymbol/function/classMemberUnused.kt +++ b/idea/testData/inspections/unusedSymbol/function/classMemberUnused.kt @@ -2,13 +2,13 @@ class Klass { fun unusedFun() { } - @Suppress("UnusedSymbol") + @Suppress("unused") fun unusedNoWarn() { } } -@Suppress("UnusedSymbol") +@Suppress("unused") class OtherKlass { fun unusedNoWarn() { diff --git a/idea/testData/inspections/unusedSymbol/function/local.kt b/idea/testData/inspections/unusedSymbol/function/local.kt index 45b7ac4b41b..62242e777f6 100644 --- a/idea/testData/inspections/unusedSymbol/function/local.kt +++ b/idea/testData/inspections/unusedSymbol/function/local.kt @@ -3,13 +3,13 @@ fun outer() { } - @Suppress("UnusedSymbol") + @Suppress("unused") fun localNoWarn() { } } -@Suppress("UnusedSymbol") +@Suppress("unused") fun otherFun() { fun localNoWarn() { diff --git a/idea/testData/inspections/unusedSymbol/function/membersOfAnonymousInClass.kt b/idea/testData/inspections/unusedSymbol/function/membersOfAnonymousInClass.kt index ceadfc3832b..ec3f5e780e2 100644 --- a/idea/testData/inspections/unusedSymbol/function/membersOfAnonymousInClass.kt +++ b/idea/testData/inspections/unusedSymbol/function/membersOfAnonymousInClass.kt @@ -3,7 +3,7 @@ class Klass { fun f() { } - @Suppress("UnusedSymbol") + @Suppress("unused") fun fNoWarn() {} val p = 5 @@ -19,17 +19,17 @@ class Klass { fun f() { } - @Suppress("UnusedSymbol") + @Suppress("unused") fun fNoWarn() {} val p = 5 } - fun localObject3() = @Suppress("UnusedSymbol") object { + fun localObject3() = @Suppress("unused") object { fun fNoWarn() {} } - @Suppress("UnusedSymbol") + @Suppress("unused") private val localObject4 = object { fun fNoWarn() {} } diff --git a/idea/testData/inspections/unusedSymbol/function/membersOfAnonymousInFunction.kt b/idea/testData/inspections/unusedSymbol/function/membersOfAnonymousInFunction.kt index 77836b735bc..370e82bedeb 100644 --- a/idea/testData/inspections/unusedSymbol/function/membersOfAnonymousInFunction.kt +++ b/idea/testData/inspections/unusedSymbol/function/membersOfAnonymousInFunction.kt @@ -14,13 +14,13 @@ fun main(args: Array) { fun f() { } - @Suppress("UnusedSymbol") + @Suppress("unused") fun fNoWarn() {} val p = 5 } - @Suppress("UnusedSymbol") + @Suppress("unused") fun localObject3() = object { fun fNoWarn() {} } diff --git a/idea/testData/inspections/unusedSymbol/function/membersOfLocalClass.kt b/idea/testData/inspections/unusedSymbol/function/membersOfLocalClass.kt index 3920917319c..1bd17e05a76 100644 --- a/idea/testData/inspections/unusedSymbol/function/membersOfLocalClass.kt +++ b/idea/testData/inspections/unusedSymbol/function/membersOfLocalClass.kt @@ -3,13 +3,13 @@ fun main(args: Array) { fun f() { } - @Suppress("UnusedSymbol") + @Suppress("unused") fun fNoWarn() {} val p = 5 } - @Suppress("UnusedSymbol") + @Suppress("unused") class OtherClass { fun fNoWarn() {} } @@ -19,7 +19,7 @@ fun main(args: Array) { LocalClass().p } -@Suppress("UnusedSymbol") +@Suppress("unused") fun other() { class OtherClass { fun fNoWarn() {} diff --git a/idea/testData/inspections/unusedSymbol/function/topLevelOnlyInImport.kt b/idea/testData/inspections/unusedSymbol/function/topLevelOnlyInImport.kt index 471dfab3c44..85e12905c46 100644 --- a/idea/testData/inspections/unusedSymbol/function/topLevelOnlyInImport.kt +++ b/idea/testData/inspections/unusedSymbol/function/topLevelOnlyInImport.kt @@ -7,5 +7,5 @@ fun onlyInImport() { } -@Suppress("UnusedSymbol") +@Suppress("unused") fun onlyInImportNoWarn() {} diff --git a/idea/testData/inspections/unusedSymbol/function/topLevelUnused.kt b/idea/testData/inspections/unusedSymbol/function/topLevelUnused.kt index 5b27441dd41..345e56e7afc 100644 --- a/idea/testData/inspections/unusedSymbol/function/topLevelUnused.kt +++ b/idea/testData/inspections/unusedSymbol/function/topLevelUnused.kt @@ -2,5 +2,5 @@ fun unusedFun() { } -@Suppress("UnusedSymbol") +@Suppress("unused") fun unusedNoWarn() {} diff --git a/idea/testData/inspections/unusedSymbol/function/usedOnlyRecursively.kt b/idea/testData/inspections/unusedSymbol/function/usedOnlyRecursively.kt index e0f2565edd1..83e5f0b6374 100644 --- a/idea/testData/inspections/unusedSymbol/function/usedOnlyRecursively.kt +++ b/idea/testData/inspections/unusedSymbol/function/usedOnlyRecursively.kt @@ -2,7 +2,7 @@ fun usedOnlyRecursively() { usedOnlyRecursively() } -@Suppress("UnusedSymbol") +@Suppress("unused") fun usedOnlyRecursivelyNoWarn() { usedOnlyRecursivelyNoWarn() } \ No newline at end of file diff --git a/idea/testData/multiFileInspections/invalidBundleOrProperty/before/suppressed.kt b/idea/testData/multiFileInspections/invalidBundleOrProperty/before/suppressed.kt new file mode 100644 index 00000000000..9f378de98d8 --- /dev/null +++ b/idea/testData/multiFileInspections/invalidBundleOrProperty/before/suppressed.kt @@ -0,0 +1,7 @@ +package suppressed + +@Suppress("InvalidBundleOrProperty") +fun testSuppressedOnFun() { + K.message("foo.bar") + J.message("foo.bar") +} \ No newline at end of file diff --git a/idea/testData/quickfix/suppress/inspections/unusedImports.kt b/idea/testData/quickfix/suppress/inspections/unusedImports.kt index da63f8bc0af..593bd136dec 100644 --- a/idea/testData/quickfix/suppress/inspections/unusedImports.kt +++ b/idea/testData/quickfix/suppress/inspections/unusedImports.kt @@ -1,4 +1,4 @@ -// "Suppress 'KotlinUnusedImport' for file ${file}" "true" +// "Suppress 'UnusedImport' for file ${file}" "true" import java.io.* diff --git a/idea/testData/quickfix/suppress/inspections/unusedImports.kt.after b/idea/testData/quickfix/suppress/inspections/unusedImports.kt.after index 4186178450d..44736809463 100644 --- a/idea/testData/quickfix/suppress/inspections/unusedImports.kt.after +++ b/idea/testData/quickfix/suppress/inspections/unusedImports.kt.after @@ -1,6 +1,6 @@ -// "Suppress 'KotlinUnusedImport' for file ${file}" "true" +// "Suppress 'UnusedImport' for file ${file}" "true" -@file:Suppress("KotlinUnusedImport") +@file:Suppress("UnusedImport") import java.io.*