diff --git a/plugins/kotlin/code-insight/api/src/org/jetbrains/kotlin/idea/codeinsight/api/classic/inspections/AbstractApplicabilityBasedInspection.kt b/plugins/kotlin/code-insight/api/src/org/jetbrains/kotlin/idea/codeinsight/api/classic/inspections/AbstractApplicabilityBasedInspection.kt index b1a96f305058..37205a308dc1 100644 --- a/plugins/kotlin/code-insight/api/src/org/jetbrains/kotlin/idea/codeinsight/api/classic/inspections/AbstractApplicabilityBasedInspection.kt +++ b/plugins/kotlin/code-insight/api/src/org/jetbrains/kotlin/idea/codeinsight/api/classic/inspections/AbstractApplicabilityBasedInspection.kt @@ -64,7 +64,7 @@ abstract class AbstractApplicabilityBasedInspection( isOnTheFly, inspectionHighlightType(element), range, - createQuickFix(element), + LocalFix(this, fixText(element)), ) } @@ -86,10 +86,6 @@ abstract class AbstractApplicabilityBasedInspection( open val startFixInWriteAction: Boolean = true - open fun createQuickFix(element: TElement): LocalQuickFix { - return LocalFix(this, fixText(element)) - } - private class LocalFix( @FileModifier.SafeFieldForPreview val inspection: AbstractApplicabilityBasedInspection, @IntentionName val text: String diff --git a/plugins/kotlin/code-insight/inspections-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/ConvertFromMultiDollarToRegularStringInspection.kt b/plugins/kotlin/code-insight/inspections-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/ConvertFromMultiDollarToRegularStringInspection.kt index 4dac5c0ab6a6..d7509f65fd47 100644 --- a/plugins/kotlin/code-insight/inspections-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/ConvertFromMultiDollarToRegularStringInspection.kt +++ b/plugins/kotlin/code-insight/inspections-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/ConvertFromMultiDollarToRegularStringInspection.kt @@ -2,46 +2,51 @@ package org.jetbrains.kotlin.idea.k2.codeinsight.inspections +import com.intellij.codeInspection.ProblemsHolder import com.intellij.codeInspection.util.IntentionFamilyName import com.intellij.modcommand.ModPsiUpdater -import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.idea.base.projectStructure.languageVersionSettings import org.jetbrains.kotlin.idea.base.resources.KotlinBundle import org.jetbrains.kotlin.idea.codeinsight.api.applicable.inspections.KotlinModCommandQuickFix -import org.jetbrains.kotlin.idea.codeinsight.api.classic.inspections.AbstractApplicabilityBasedInspection +import org.jetbrains.kotlin.idea.codeinsight.api.classic.inspections.AbstractKotlinInspection import org.jetbrains.kotlin.idea.codeinsights.impl.base.convertToStringWithoutPrefix import org.jetbrains.kotlin.idea.codeinsights.impl.base.simplifyDollarEntries import org.jetbrains.kotlin.psi.KtStringTemplateExpression +import org.jetbrains.kotlin.psi.KtVisitorVoid /** * Intention-like inspection with [com.intellij.codeInspection.ProblemHighlightType.INFORMATION] level to allow applying the conversion for the whole project. * * Removes the interpolation prefix from string literals and updates their content to preserve the meaning. */ -internal class ConvertFromMultiDollarToRegularStringInspection : - AbstractApplicabilityBasedInspection(KtStringTemplateExpression::class.java) { +internal class ConvertFromMultiDollarToRegularStringInspection : AbstractKotlinInspection() { + override fun buildVisitor( + holder: ProblemsHolder, + isOnTheFly: Boolean + ): KtVisitorVoid = object : KtVisitorVoid() { + override fun visitStringTemplateExpression(expression: KtStringTemplateExpression) { + if (!isApplicable(expression)) return - override fun inspectionText(element: KtStringTemplateExpression): String = - KotlinBundle.message("inspection.remove.interpolation.prefix.problem.description") + holder.registerProblem( + expression, + KotlinBundle.message("inspection.remove.interpolation.prefix.problem.description"), + createQuickFix(), + ) + } + } - override val defaultFixText: String - get() = KotlinBundle.message("inspection.remove.interpolation.prefix.quick.fix.text") - - override fun isApplicable(element: KtStringTemplateExpression): Boolean { + private fun isApplicable(element: KtStringTemplateExpression): Boolean { if (!element.languageVersionSettings.supportsFeature(LanguageFeature.MultiDollarInterpolation)) return false if (element.interpolationPrefix == null) return false return true } - override fun applyTo(element: KtStringTemplateExpression, project: Project, editor: Editor?) { - // createQuickFix is overridden - } - - override fun createQuickFix(element: KtStringTemplateExpression): KotlinModCommandQuickFix { + private fun createQuickFix(): KotlinModCommandQuickFix { return object : KotlinModCommandQuickFix() { - override fun getFamilyName(): @IntentionFamilyName String = defaultFixText + override fun getFamilyName(): @IntentionFamilyName String = + KotlinBundle.message("inspection.remove.interpolation.prefix.quick.fix.text") override fun applyFix( project: Project,