[kotlin] Port AddInlineToFunctionFix to K2

^KTIJ-29430

GitOrigin-RevId: f0875322c96650624164a21e86a4580a09d613c7
This commit is contained in:
Andrey Cherkasov
2024-04-12 11:49:12 +00:00
committed by intellij-monorepo-bot
parent a8894c9742
commit 8eed07db2d
6 changed files with 69 additions and 3 deletions
@@ -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<KtFunction>(true) ?: return@ModCommandBased emptyList()
if (function.isLocal) {
return@ModCommandBased emptyList()
}
listOf(AddInlineToFunctionFix(function))
}
private class AddInlineToFunctionFix(
element: KtFunction,
) : KotlinPsiUpdateModCommandAction.ElementBased<KtFunction, Unit>(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")
}
}
@@ -110,6 +110,7 @@ class KotlinK2QuickFixRegistrar : KotlinQuickFixRegistrar() {
registerFactory(AddInlineModifierFixFactories.nonLocalReturnNotAllowed)
registerFactory(AddInlineModifierFixFactories.inlineSuspendFunctionTypeUnsupported)
registerFactory(MakeTypeParameterReifiedAndFunctionInlineFixFactory.cannotCheckForErasedFactory)
registerFactory(AddInlineToFunctionFixFactories.illegalInlineParameterModifierFactory)
}
private val propertyInitialization = KtQuickFixesListBuilder.registerPsiQuickFix {
@@ -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");
}
}
@@ -4,4 +4,5 @@ fun foo(<caret>crossinline body: () -> Unit) {
}
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddInlineToFunctionFix
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddInlineToFunctionFix
// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.k2.codeinsight.fixes.AddInlineToFunctionFixFactories$AddInlineToFunctionFix
@@ -4,4 +4,5 @@ inline fun foo(<caret>crossinline body: () -> Unit) {
}
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddInlineToFunctionFix
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddInlineToFunctionFix
// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.k2.codeinsight.fixes.AddInlineToFunctionFixFactories$AddInlineToFunctionFix
@@ -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)