mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Migrate ReplaceToStringWithStringTemplateInspection.kt to ModCommand
GitOrigin-RevId: bfbbe3bd86f3a9d83f76a475543ed66df401464a
This commit is contained in:
committed by
intellij-monorepo-bot
parent
aedae7f405
commit
565bfab822
+44
-18
@@ -1,36 +1,62 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.jetbrains.kotlin.idea.codeInsight.inspections.shared
|
||||
|
||||
import com.intellij.openapi.editor.Editor
|
||||
import com.intellij.codeInspection.ProblemsHolder
|
||||
import com.intellij.codeInspection.util.IntentionFamilyName
|
||||
import com.intellij.modcommand.ModPsiUpdater
|
||||
import com.intellij.openapi.project.Project
|
||||
import org.jetbrains.kotlin.analysis.api.KaSession
|
||||
import org.jetbrains.kotlin.idea.base.psi.dropCurlyBracketsIfPossible
|
||||
import org.jetbrains.kotlin.idea.base.resources.KotlinBundle
|
||||
import org.jetbrains.kotlin.idea.codeinsight.api.classic.inspections.AbstractApplicabilityBasedInspection
|
||||
import org.jetbrains.kotlin.idea.codeinsight.api.applicable.asUnit
|
||||
import org.jetbrains.kotlin.idea.codeinsight.api.applicable.inspections.KotlinApplicableInspectionBase
|
||||
import org.jetbrains.kotlin.idea.codeinsight.api.applicable.inspections.KotlinModCommandQuickFix
|
||||
import org.jetbrains.kotlin.idea.codeinsight.utils.isToString
|
||||
import org.jetbrains.kotlin.psi.KtBlockStringTemplateEntry
|
||||
import org.jetbrains.kotlin.psi.KtDotQualifiedExpression
|
||||
import org.jetbrains.kotlin.psi.KtPsiFactory
|
||||
import org.jetbrains.kotlin.psi.KtReferenceExpression
|
||||
import org.jetbrains.kotlin.psi.KtStringTemplateExpression
|
||||
import org.jetbrains.kotlin.psi.KtVisitorVoid
|
||||
import org.jetbrains.kotlin.psi.KtVisitor
|
||||
|
||||
class ReplaceToStringWithStringTemplateInspection : AbstractApplicabilityBasedInspection<KtDotQualifiedExpression>(
|
||||
KtDotQualifiedExpression::class.java
|
||||
) {
|
||||
override fun isApplicable(element: KtDotQualifiedExpression): Boolean {
|
||||
if (element.receiverExpression !is KtReferenceExpression) return false
|
||||
if (element.parent is KtBlockStringTemplateEntry) return false
|
||||
return element.isToString()
|
||||
|
||||
class ReplaceToStringWithStringTemplateInspection : KotlinApplicableInspectionBase.Simple<KtDotQualifiedExpression, Unit>() {
|
||||
|
||||
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): KtVisitor<*, *> =
|
||||
object : KtVisitorVoid() {
|
||||
override fun visitDotQualifiedExpression(expression: KtDotQualifiedExpression) {
|
||||
visitTargetElement(expression, holder, isOnTheFly)
|
||||
}
|
||||
}
|
||||
|
||||
override fun KaSession.prepareContext(element: KtDotQualifiedExpression): Unit? {
|
||||
if (element.receiverExpression !is KtReferenceExpression) return null
|
||||
if (element.parent is KtBlockStringTemplateEntry) return null
|
||||
return element.isToString().asUnit
|
||||
}
|
||||
|
||||
override fun applyTo(element: KtDotQualifiedExpression, project: Project, editor: Editor?) {
|
||||
val variable = element.receiverExpression.text
|
||||
val replaced = element.replace(KtPsiFactory(project).createExpression($$"\"${$$variable}\""))
|
||||
val blockStringTemplateEntry = (replaced as? KtStringTemplateExpression)?.entries?.firstOrNull() as? KtBlockStringTemplateEntry
|
||||
blockStringTemplateEntry?.dropCurlyBracketsIfPossible()
|
||||
}
|
||||
|
||||
override fun inspectionText(element: KtDotQualifiedExpression): String =
|
||||
override fun getProblemDescription(element: KtDotQualifiedExpression, context: Unit): String =
|
||||
KotlinBundle.message("inspection.replace.to.string.with.string.template.display.name")
|
||||
|
||||
override val defaultFixText: String get() = KotlinBundle.message("replace.tostring.with.string.template")
|
||||
override fun createQuickFix(
|
||||
element: KtDotQualifiedExpression,
|
||||
context: Unit
|
||||
): KotlinModCommandQuickFix<KtDotQualifiedExpression> = ReplaceToStringWithStringTemplateQuickFix()
|
||||
|
||||
private class ReplaceToStringWithStringTemplateQuickFix : KotlinModCommandQuickFix<KtDotQualifiedExpression>() {
|
||||
override fun getFamilyName(): @IntentionFamilyName String =
|
||||
KotlinBundle.message("replace.tostring.with.string.template")
|
||||
|
||||
override fun applyFix(
|
||||
project: Project,
|
||||
element: KtDotQualifiedExpression,
|
||||
updater: ModPsiUpdater
|
||||
) {
|
||||
val variable = element.receiverExpression.text
|
||||
val replaced = element.replace(KtPsiFactory(project).createExpression($$"\"${$$variable}\""))
|
||||
val blockStringTemplateEntry = (replaced as? KtStringTemplateExpression)?.entries?.firstOrNull() as? KtBlockStringTemplateEntry
|
||||
blockStringTemplateEntry?.dropCurlyBracketsIfPossible()
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user