From 712d2bdec0f75264157a865bab5c10b911cec8bb Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Fri, 11 Dec 2015 19:57:33 +0300 Subject: [PATCH] Enable suppression actions for Kotlin inspections --- .../KotlinSuppressableWarningProblemGroup.kt | 13 ++++++++----- .../inspections/AbstractKotlinInspection.kt | 6 ++++-- .../quickfix/KotlinSuppressIntentionAction.kt | 17 ++++++++--------- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinSuppressableWarningProblemGroup.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinSuppressableWarningProblemGroup.kt index 705b25218ab..26f090834cc 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinSuppressableWarningProblemGroup.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinSuppressableWarningProblemGroup.kt @@ -46,9 +46,12 @@ class KotlinSuppressableWarningProblemGroup( } -fun createSuppressWarningActions(element: PsiElement, diagnosticFactory: DiagnosticFactory<*>): List { - if (diagnosticFactory.getSeverity() != Severity.WARNING) - return Collections.emptyList() +fun createSuppressWarningActions(element: PsiElement, diagnosticFactory: DiagnosticFactory<*>): List = + createSuppressWarningActions(element, diagnosticFactory.severity, diagnosticFactory.name) + + +fun createSuppressWarningActions(element: PsiElement, severity: Severity, suppressionKey: String): List { + if (severity != Severity.WARNING) return Collections.emptyList() val actions = arrayListOf() var current: PsiElement? = element @@ -58,7 +61,7 @@ fun createSuppressWarningActions(element: PsiElement, diagnosticFactory: Diagnos val declaration = current val kind = DeclarationKindDetector.detect(declaration) if (kind != null) { - actions.add(KotlinSuppressIntentionAction(declaration, diagnosticFactory, kind)) + actions.add(KotlinSuppressIntentionAction(declaration, suppressionKey, kind)) } suppressAtStatementAllowed = false } @@ -66,7 +69,7 @@ fun createSuppressWarningActions(element: PsiElement, diagnosticFactory: Diagnos // Add suppress action at first statement if (current.parent is KtBlockExpression || current.parent is KtDestructuringDeclaration) { val kind = if (current.parent is KtBlockExpression) "statement" else "initializer" - actions.add(KotlinSuppressIntentionAction(current, diagnosticFactory, + actions.add(KotlinSuppressIntentionAction(current, suppressionKey, AnnotationHostKind(kind, "", true))) suppressAtStatementAllowed = false } 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 9427ebf61e0..260c06c49bb 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 @@ -17,18 +17,20 @@ package org.jetbrains.kotlin.idea.inspections import com.intellij.codeHighlighting.HighlightDisplayLevel -import com.intellij.codeInsight.daemon.HighlightDisplayKey import com.intellij.codeInspection.CustomSuppressableInspectionTool import com.intellij.codeInspection.LocalInspectionTool import com.intellij.codeInspection.SuppressIntentionAction import com.intellij.codeInspection.SuppressManager import com.intellij.psi.PsiElement import org.jetbrains.kotlin.diagnostics.Severity +import org.jetbrains.kotlin.idea.highlighter.createSuppressWarningActions import org.jetbrains.kotlin.idea.caches.resolve.KotlinCacheService public abstract class AbstractKotlinInspection: LocalInspectionTool(), CustomSuppressableInspectionTool { public override fun getSuppressActions(element: PsiElement?): Array? { - return SuppressManager.getInstance()!!.createSuppressActions(HighlightDisplayKey.find(getShortName())!!) + if (element == null) return emptyArray() + + return createSuppressWarningActions(element, toSeverity(defaultLevel), this.shortName).toTypedArray() } public override fun isSuppressedFor(element: PsiElement): Boolean { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/quickfix/KotlinSuppressIntentionAction.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/quickfix/KotlinSuppressIntentionAction.kt index f8f6e4da60f..467a69b2257 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/quickfix/KotlinSuppressIntentionAction.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/quickfix/KotlinSuppressIntentionAction.kt @@ -16,31 +16,30 @@ package org.jetbrains.kotlin.idea.quickfix +import com.intellij.codeInspection.SuppressIntentionAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.diagnostics.DiagnosticFactory -import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.idea.KotlinBundle -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import com.intellij.codeInspection.SuppressIntentionAction -import org.jetbrains.kotlin.idea.util.PsiPrecedences +import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.util.PsiPrecedences +import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.resolve.BindingContext public class KotlinSuppressIntentionAction( private val suppressAt: KtExpression, - private val diagnosticFactory: DiagnosticFactory<*>, + private val suppressKey: String, private val kind: AnnotationHostKind ) : SuppressIntentionAction() { override fun getFamilyName() = KotlinBundle.message("suppress.warnings.family") - override fun getText() = KotlinBundle.message("suppress.warning.for", diagnosticFactory.getName(), kind.kind, kind.name) + override fun getText() = KotlinBundle.message("suppress.warning.for", suppressKey, kind.kind, kind.name) override fun isAvailable(project: Project, editor: Editor?, element: PsiElement) = element.isValid() override fun invoke(project: Project, editor: Editor?, element: PsiElement) { - val id = "\"${diagnosticFactory.getName()}\"" + val id = "\"$suppressKey\"" if (suppressAt is KtModifierListOwner) { suppressAtModifierListOwner(suppressAt, id) }