[kotlin] Port AddAnnotationUseSiteTargetFix to K2

^KTIJ-29573

GitOrigin-RevId: 181131d6870b049ce4e693cd9e80370523f8ca35
This commit is contained in:
Andrey Cherkasov
2024-09-08 21:38:22 +00:00
committed by intellij-monorepo-bot
parent 1caa8c6de1
commit cc4c62230f
8 changed files with 78 additions and 5 deletions
@@ -173,6 +173,7 @@ class KotlinK2QuickFixRegistrar : KotlinQuickFixRegistrar() {
registerFactory(WrapWithParenthesesFixFactories.suspendFixFactory)
registerFactory(WrapWithParenthesesFixFactories.suspendFunErrorFixFactory)
registerFactory(DeclarationCantBeInlinedFixFactories.removeOpenModifierFixFactory)
registerFactory(WrongAnnotationTargetFixFactories.addAnnotationUseSiteTargetFixFactory)
}
private val addAbstract = KtQuickFixesListBuilder.registerPsiQuickFix {
@@ -0,0 +1,46 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.kotlin.idea.k2.codeinsight.fixes
import com.intellij.modcommand.ActionContext
import com.intellij.modcommand.ModPsiUpdater
import com.intellij.modcommand.PsiUpdateModCommandAction
import org.jetbrains.kotlin.analysis.api.fir.diagnostics.KaFirDiagnostic
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
import org.jetbrains.kotlin.idea.base.resources.KotlinBundle
import org.jetbrains.kotlin.idea.codeinsight.api.applicators.fixes.KotlinQuickFixFactory
import org.jetbrains.kotlin.idea.codeinsights.impl.base.intentions.AddAnnotationUseSiteTargetUtils.addUseSiteTarget
import org.jetbrains.kotlin.idea.codeinsights.impl.base.intentions.AddAnnotationUseSiteTargetUtils.getApplicableUseSiteTargets
import org.jetbrains.kotlin.psi.KtAnnotationEntry
internal object WrongAnnotationTargetFixFactories {
val addAnnotationUseSiteTargetFixFactory = KotlinQuickFixFactory.ModCommandBased { diagnostic: KaFirDiagnostic.WrongAnnotationTarget ->
val applicableUseSiteTargets = diagnostic.psi.getApplicableUseSiteTargets()
listOfNotNull(
AddAnnotationUseSiteTargetFix(diagnostic.psi, applicableUseSiteTargets)
)
}
private class AddAnnotationUseSiteTargetFix(
element: KtAnnotationEntry,
private val useSiteTargets: List<AnnotationUseSiteTarget>,
) : PsiUpdateModCommandAction<KtAnnotationEntry>(element) {
override fun getFamilyName(): String {
return if (useSiteTargets.size == 1) {
KotlinBundle.message("text.add.use.site.target.0", useSiteTargets.first().renderName)
} else {
KotlinBundle.message("add.use.site.target")
}
}
override fun invoke(
context: ActionContext,
element: KtAnnotationEntry,
updater: ModPsiUpdater,
) {
element.addUseSiteTarget(useSiteTargets, null)
}
}
}
@@ -5618,7 +5618,29 @@ public abstract class HighLevelQuickFixTestGenerated extends AbstractHighLevelQu
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("../../../idea/tests/testData/quickfix/addAnnotationUseSiteTarget")
public static class AddAnnotationUseSiteTarget extends AbstractHighLevelQuickFixTest {
@java.lang.Override
@org.jetbrains.annotations.NotNull
public final KotlinPluginMode getPluginMode() {
return KotlinPluginMode.K2;
}
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest(this::doTest, this, testDataFilePath);
}
@TestMetadata("delegate.kt")
public void testDelegate() throws Exception {
runTest("../../../idea/tests/testData/quickfix/addAnnotationUseSiteTarget/delegate.kt");
}
@TestMetadata("get.kt")
public void testGet() throws Exception {
runTest("../../../idea/tests/testData/quickfix/addAnnotationUseSiteTarget/get.kt");
}
}
@@ -12,4 +12,5 @@ class Abcd {
@<caret>Anno
var a by Abcd()
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddAnnotationUseSiteTargetFix
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddAnnotationUseSiteTargetFix
// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.k2.codeinsight.fixes.WrongAnnotationTargetFixFactories$AddAnnotationUseSiteTargetFix
@@ -12,4 +12,5 @@ class Abcd {
@delegate:Anno
var a by Abcd()
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddAnnotationUseSiteTargetFix
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddAnnotationUseSiteTargetFix
// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.k2.codeinsight.fixes.WrongAnnotationTargetFixFactories$AddAnnotationUseSiteTargetFix
@@ -5,4 +5,5 @@ annotation class Anno2
@<caret>Anno2
var b = 42
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddAnnotationUseSiteTargetFix
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddAnnotationUseSiteTargetFix
// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.k2.codeinsight.fixes.WrongAnnotationTargetFixFactories$AddAnnotationUseSiteTargetFix
@@ -5,4 +5,5 @@ annotation class Anno2
@get:Anno2
var b = 42
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddAnnotationUseSiteTargetFix
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddAnnotationUseSiteTargetFix
// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.k2.codeinsight.fixes.WrongAnnotationTargetFixFactories$AddAnnotationUseSiteTargetFix
@@ -61,7 +61,7 @@ internal fun MutableTWorkspace.generateK2FixTests() {
model("$idea/quickfix/supertypeInitialization", pattern = pattern)
model("$idea/quickfix/dataClassConstructorVsCopyVisibility", pattern = pattern)
model("$idea/quickfix/addAnnotationTarget", pattern = pattern, isIgnored = true)
model("$idea/quickfix/addAnnotationUseSiteTarget", pattern = pattern, isIgnored = true)
model("$idea/quickfix/addAnnotationUseSiteTarget", pattern = pattern)
model("$idea/quickfix/addConstructorParameter", pattern = pattern, isIgnored = true)
model("$idea/quickfix/addConstructorParameterFromSuperTypeCall", pattern = pattern)
model("$idea/quickfix/addConversionCall", pattern = pattern)