From 8eed07db2de2bd9776e6494dc5944bdeec72663e Mon Sep 17 00:00:00 2001 From: Andrey Cherkasov Date: Fri, 12 Apr 2024 13:24:33 +0400 Subject: [PATCH] [kotlin] Port AddInlineToFunctionFix to K2 ^KTIJ-29430 GitOrigin-RevId: f0875322c96650624164a21e86a4580a09d613c7 --- .../fixes/AddInlineToFunctionFixFactories.kt | 47 +++++++++++++++++++ .../fixes/KotlinK2QuickFixRegistrar.kt | 1 + .../fixes/HighLevelQuickFixTestGenerated.java | 16 +++++++ .../testData/quickfix/addInline/basic.kt | 3 +- .../quickfix/addInline/basic.kt.after | 3 +- .../codeinsight/GenerateK2QuickFixTests.kt | 2 +- 6 files changed, 69 insertions(+), 3 deletions(-) create mode 100644 plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/AddInlineToFunctionFixFactories.kt diff --git a/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/AddInlineToFunctionFixFactories.kt b/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/AddInlineToFunctionFixFactories.kt new file mode 100644 index 000000000000..e78b2f1b0e41 --- /dev/null +++ b/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/AddInlineToFunctionFixFactories.kt @@ -0,0 +1,47 @@ +// 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 org.jetbrains.kotlin.analysis.api.fir.diagnostics.KtFirDiagnostic +import org.jetbrains.kotlin.idea.base.resources.KotlinBundle +import org.jetbrains.kotlin.idea.codeinsight.api.applicable.intentions.KotlinPsiUpdateModCommandAction +import org.jetbrains.kotlin.idea.codeinsight.api.applicators.fixes.KotlinQuickFixFactory +import org.jetbrains.kotlin.lexer.KtTokens +import org.jetbrains.kotlin.psi.KtFunction +import org.jetbrains.kotlin.psi.psiUtil.getParentOfType + +internal object AddInlineToFunctionFixFactories { + + val illegalInlineParameterModifierFactory = KotlinQuickFixFactory.ModCommandBased { diagnostic: KtFirDiagnostic.IllegalInlineParameterModifier -> + val function = diagnostic.psi.getParentOfType(true) ?: return@ModCommandBased emptyList() + if (function.isLocal) { + return@ModCommandBased emptyList() + } + listOf(AddInlineToFunctionFix(function)) + } + + private class AddInlineToFunctionFix( + element: KtFunction, + ) : KotlinPsiUpdateModCommandAction.ElementBased(element, Unit) { + + override fun invoke( + actionContext: ActionContext, + element: KtFunction, + elementContext: Unit, + updater: ModPsiUpdater, + ) { + element.addModifier(KtTokens.INLINE_KEYWORD) + } + + override fun getActionName( + actionContext: ActionContext, + element: KtFunction, + elementContext: Unit + ): String { + return KotlinBundle.message("fix.add.modifier.inline.function.text", element.name.toString()) + } + + override fun getFamilyName(): String = KotlinBundle.message("fix.add.modifier.inline.function.family") + } +} diff --git a/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/KotlinK2QuickFixRegistrar.kt b/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/KotlinK2QuickFixRegistrar.kt index a1f6ee66ded1..e894b9fc477a 100644 --- a/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/KotlinK2QuickFixRegistrar.kt +++ b/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/KotlinK2QuickFixRegistrar.kt @@ -110,6 +110,7 @@ class KotlinK2QuickFixRegistrar : KotlinQuickFixRegistrar() { registerFactory(AddInlineModifierFixFactories.nonLocalReturnNotAllowed) registerFactory(AddInlineModifierFixFactories.inlineSuspendFunctionTypeUnsupported) registerFactory(MakeTypeParameterReifiedAndFunctionInlineFixFactory.cannotCheckForErasedFactory) + registerFactory(AddInlineToFunctionFixFactories.illegalInlineParameterModifierFactory) } private val propertyInitialization = KtQuickFixesListBuilder.registerPsiQuickFix { diff --git a/plugins/kotlin/code-insight/fixes-k2/tests/test/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/HighLevelQuickFixTestGenerated.java b/plugins/kotlin/code-insight/fixes-k2/tests/test/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/HighLevelQuickFixTestGenerated.java index d2ef73cb0520..58db5e887cb2 100644 --- a/plugins/kotlin/code-insight/fixes-k2/tests/test/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/HighLevelQuickFixTestGenerated.java +++ b/plugins/kotlin/code-insight/fixes-k2/tests/test/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/HighLevelQuickFixTestGenerated.java @@ -4851,7 +4851,23 @@ public abstract class HighLevelQuickFixTestGenerated extends AbstractHighLevelQu + @RunWith(JUnit3RunnerWithInners.class) + @TestMetadata("../../../idea/tests/testData/quickfix/addInline") + public static class AddInline extends AbstractHighLevelQuickFixTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); + } + @TestMetadata("basic.kt") + public void testBasic() throws Exception { + runTest("../../../idea/tests/testData/quickfix/addInline/basic.kt"); + } + + @TestMetadata("local.kt") + public void testLocal() throws Exception { + runTest("../../../idea/tests/testData/quickfix/addInline/local.kt"); + } + } diff --git a/plugins/kotlin/idea/tests/testData/quickfix/addInline/basic.kt b/plugins/kotlin/idea/tests/testData/quickfix/addInline/basic.kt index ecb7c4c3b032..5ccc39fe9806 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/addInline/basic.kt +++ b/plugins/kotlin/idea/tests/testData/quickfix/addInline/basic.kt @@ -4,4 +4,5 @@ fun foo(crossinline body: () -> Unit) { } -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddInlineToFunctionFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddInlineToFunctionFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.k2.codeinsight.fixes.AddInlineToFunctionFixFactories$AddInlineToFunctionFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/addInline/basic.kt.after b/plugins/kotlin/idea/tests/testData/quickfix/addInline/basic.kt.after index 4f4ffd9eeefd..c55ef6c4a83c 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/addInline/basic.kt.after +++ b/plugins/kotlin/idea/tests/testData/quickfix/addInline/basic.kt.after @@ -4,4 +4,5 @@ inline fun foo(crossinline body: () -> Unit) { } -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddInlineToFunctionFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddInlineToFunctionFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.k2.codeinsight.fixes.AddInlineToFunctionFixFactories$AddInlineToFunctionFix \ No newline at end of file diff --git a/plugins/kotlin/util/test-generator-fir/test/org/jetbrains/kotlin/fir/testGenerator/codeinsight/GenerateK2QuickFixTests.kt b/plugins/kotlin/util/test-generator-fir/test/org/jetbrains/kotlin/fir/testGenerator/codeinsight/GenerateK2QuickFixTests.kt index 797f44a26637..988b2639147a 100644 --- a/plugins/kotlin/util/test-generator-fir/test/org/jetbrains/kotlin/fir/testGenerator/codeinsight/GenerateK2QuickFixTests.kt +++ b/plugins/kotlin/util/test-generator-fir/test/org/jetbrains/kotlin/fir/testGenerator/codeinsight/GenerateK2QuickFixTests.kt @@ -68,7 +68,7 @@ internal fun MutableTWorkspace.generateK2FixTests() { model("$idea/quickfix/addEqEqTrue", pattern = pattern, isIgnored = true) model("$idea/quickfix/addFunModifier", pattern = pattern) model("$idea/quickfix/addGenericUpperBound", pattern = pattern, isIgnored = true) - model("$idea/quickfix/addInline", pattern = pattern, isIgnored = true) + model("$idea/quickfix/addInline", pattern = pattern) model("$idea/quickfix/addInlineToReifiedFunctionFix", pattern = pattern, isIgnored = true) model("$idea/quickfix/addIsToWhenCondition", pattern = pattern, isIgnored = true) model("$idea/quickfix/addJvmInline", pattern = pattern, isIgnored = true)