mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[kotlin] Extend AbstractKotlinInspection instead of AbstractApplicabilityBasedInspection
This allows providing a quick fix that uses the ModCommand API without introducing additional methods, such as `createQuickFix`, which was previously introduced. IJ-CR-158410 #KTIJ-33578 GitOrigin-RevId: 23ab404e18e2ace5470248aa73db2691226abba1
This commit is contained in:
committed by
intellij-monorepo-bot
parent
670c9b1cd8
commit
e32e8e6fd3
+1
-5
@@ -64,7 +64,7 @@ abstract class AbstractApplicabilityBasedInspection<TElement : KtElement>(
|
||||
isOnTheFly,
|
||||
inspectionHighlightType(element),
|
||||
range,
|
||||
createQuickFix(element),
|
||||
LocalFix(this, fixText(element)),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -86,10 +86,6 @@ abstract class AbstractApplicabilityBasedInspection<TElement : KtElement>(
|
||||
|
||||
open val startFixInWriteAction: Boolean = true
|
||||
|
||||
open fun createQuickFix(element: TElement): LocalQuickFix {
|
||||
return LocalFix(this, fixText(element))
|
||||
}
|
||||
|
||||
private class LocalFix<TElement : KtElement>(
|
||||
@FileModifier.SafeFieldForPreview val inspection: AbstractApplicabilityBasedInspection<TElement>,
|
||||
@IntentionName val text: String
|
||||
|
||||
+21
-16
@@ -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>(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<KtStringTemplateExpression> {
|
||||
private fun createQuickFix(): KotlinModCommandQuickFix<KtStringTemplateExpression> {
|
||||
return object : KotlinModCommandQuickFix<KtStringTemplateExpression>() {
|
||||
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,
|
||||
|
||||
Reference in New Issue
Block a user