mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[Kotlin] K2 Don't call analysis in a PSI-only inspection
Allow passing mod command quick fix in AbstractApplicabilityBasedInspection. Use it in the inspection that removes an interpolation prefix as it doesn't require analysis via Analysis API. KTIJ-33578 GitOrigin-RevId: 0968876cde5c7fdc50a3556da13425a4dba07329
This commit is contained in:
committed by
intellij-monorepo-bot
parent
de7d4de1c0
commit
fa7c005ad9
+5
-1
@@ -52,7 +52,7 @@ abstract class AbstractApplicabilityBasedInspection<TElement : KtElement>(
|
||||
isOnTheFly,
|
||||
inspectionHighlightType(element),
|
||||
range,
|
||||
LocalFix(this, fixText(element))
|
||||
createQuickFix(element),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -74,6 +74,10 @@ 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
|
||||
|
||||
+16
-15
@@ -3,16 +3,15 @@
|
||||
package org.jetbrains.kotlin.idea.k2.codeinsight.inspections
|
||||
|
||||
import com.intellij.codeInspection.ProblemsHolder
|
||||
import com.intellij.codeInspection.util.InspectionMessage
|
||||
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.analysis.api.KaSession
|
||||
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.KotlinApplicableInspectionBase
|
||||
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.codeinsights.impl.base.convertToStringWithoutPrefix
|
||||
import org.jetbrains.kotlin.idea.codeinsights.impl.base.simplifyDollarEntries
|
||||
import org.jetbrains.kotlin.psi.KtStringTemplateExpression
|
||||
@@ -24,24 +23,28 @@ import org.jetbrains.kotlin.psi.KtVisitorVoid
|
||||
*
|
||||
* Removes the interpolation prefix from string literals and updates their content to preserve the meaning.
|
||||
*/
|
||||
internal class ConvertFromMultiDollarToRegularStringInspection : KotlinApplicableInspectionBase.Simple<KtStringTemplateExpression, Unit>() {
|
||||
override fun getProblemDescription(
|
||||
element: KtStringTemplateExpression, context: Unit
|
||||
): @InspectionMessage String =
|
||||
internal class ConvertFromMultiDollarToRegularStringInspection :
|
||||
AbstractApplicabilityBasedInspection<KtStringTemplateExpression>(KtStringTemplateExpression::class.java) {
|
||||
|
||||
override fun inspectionText(element: KtStringTemplateExpression): String =
|
||||
KotlinBundle.message("inspection.remove.interpolation.prefix.problem.description")
|
||||
|
||||
override fun isApplicableByPsi(element: KtStringTemplateExpression): Boolean {
|
||||
override val defaultFixText: String
|
||||
get() = KotlinBundle.message("inspection.remove.interpolation.prefix.quick.fix.text")
|
||||
|
||||
override fun isApplicable(element: KtStringTemplateExpression): Boolean {
|
||||
if (!element.languageVersionSettings.supportsFeature(LanguageFeature.MultiDollarInterpolation)) return false
|
||||
if (element.interpolationPrefix == null) return false
|
||||
return true
|
||||
}
|
||||
|
||||
override fun createQuickFix(
|
||||
element: KtStringTemplateExpression, context: Unit
|
||||
): KotlinModCommandQuickFix<KtStringTemplateExpression> {
|
||||
override fun applyTo(element: KtStringTemplateExpression, project: Project, editor: Editor?) {
|
||||
// createQuickFix is overridden
|
||||
}
|
||||
|
||||
override fun createQuickFix(element: KtStringTemplateExpression): KotlinModCommandQuickFix<KtStringTemplateExpression> {
|
||||
return object : KotlinModCommandQuickFix<KtStringTemplateExpression>() {
|
||||
override fun getFamilyName(): @IntentionFamilyName String =
|
||||
KotlinBundle.message("inspection.remove.interpolation.prefix.quick.fix.text")
|
||||
override fun getFamilyName(): @IntentionFamilyName String = defaultFixText
|
||||
|
||||
override fun applyFix(
|
||||
project: Project,
|
||||
@@ -62,6 +65,4 @@ internal class ConvertFromMultiDollarToRegularStringInspection : KotlinApplicabl
|
||||
visitTargetElement(expression, holder, isOnTheFly)
|
||||
}
|
||||
}
|
||||
|
||||
override fun KaSession.prepareContext(element: KtStringTemplateExpression): Unit? = Unit
|
||||
}
|
||||
Reference in New Issue
Block a user