From 5b987df757ff2bc1b4c2d55ef6444bd4be327ccd Mon Sep 17 00:00:00 2001 From: Andrey Cherkasov Date: Sat, 27 Jul 2024 20:35:16 +0400 Subject: [PATCH] [kotlin] Port InlineClassDeprecatedFix to K2 This quick fix is for the INLINE_CLASS_DEPRECATED compiler warning. ^KTIJ-29500 GitOrigin-RevId: 025715bb1dcd3b68d11f0d62390b8a6c315b3aa1 --- .../fixes/InlineClassDeprecatedFixFactory.kt | 18 +++++++++++ .../fixes/KotlinK2QuickFixRegistrar.kt | 1 + .../fixes/HighLevelQuickFixTestGenerated.java | 32 +++++++++++++++++++ .../idea/quickfix/InlineClassDeprecatedFix.kt | 2 +- .../inlineToValue/JS/js/icjs.kt | 1 - .../inlineToValue/JS/js/icjs.kt.after | 1 - .../inlineToValue/JVM/jvm/ic.kt | 1 - .../inlineToValue/JVM/jvm/ic.kt.after | 1 - .../inlineToValue/commonWithJvm/common/ic.kt | 1 - .../commonWithJvm/common/ic.kt.after | 1 - .../inlineToValue/genericParameter/jvm/ic.kt | 1 - .../genericParameter/jvm/ic.kt.after | 1 - .../inlineClass/inlineClassDeprecated.kt | 3 +- .../inlineClassDeprecated.kt.after | 3 +- .../inlineClass/inlineClassDeprecated_js.kt | 3 +- .../inlineClassDeprecated_js.kt.after | 3 +- .../inlineClass/inlineClassWithGeneric.kt | 3 +- .../inlineClassWithGeneric.kt.after | 3 +- .../quickfix/inlineClass/publicInlineClass.kt | 3 +- .../inlineClass/publicInlineClass.kt.after | 3 +- .../codeinsight/GenerateK2QuickFixTests.kt | 2 +- 21 files changed, 69 insertions(+), 18 deletions(-) create mode 100644 plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/InlineClassDeprecatedFixFactory.kt diff --git a/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/InlineClassDeprecatedFixFactory.kt b/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/InlineClassDeprecatedFixFactory.kt new file mode 100644 index 000000000000..9bb54998f5bd --- /dev/null +++ b/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/InlineClassDeprecatedFixFactory.kt @@ -0,0 +1,18 @@ +// 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 org.jetbrains.kotlin.analysis.api.fir.diagnostics.KaFirDiagnostic +import org.jetbrains.kotlin.idea.codeinsight.api.applicators.fixes.KotlinQuickFixFactory +import org.jetbrains.kotlin.idea.quickfix.InlineClassDeprecatedFix +import org.jetbrains.kotlin.psi.KtModifierListOwner + +internal object InlineClassDeprecatedFixFactory { + + val replaceWithValue = KotlinQuickFixFactory.ModCommandBased { diagnostic: KaFirDiagnostic.InlineClassDeprecated -> + val modifierListOwner = diagnostic.psi as? KtModifierListOwner ?: return@ModCommandBased emptyList() + + listOf( + InlineClassDeprecatedFix(modifierListOwner) + ) + } +} 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 6240e9e6c3f9..b4946469395e 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 @@ -134,6 +134,7 @@ class KotlinK2QuickFixRegistrar : KotlinQuickFixRegistrar() { registerFactory(IllegalEscapeFixFactory.convertToUnicodeEscape) registerFactory(IsEnumEntryFixFactory.factory) registerFactory(NoReturnInFunctionWithBlockBodyFixFactory.addReturnToLastExpression) + registerFactory(InlineClassDeprecatedFixFactory.replaceWithValue) } private val addAbstract = 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 e754001c5dbf..6ef0d0773478 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 @@ -9004,7 +9004,39 @@ public abstract class HighLevelQuickFixTestGenerated extends AbstractHighLevelQu + @RunWith(JUnit3RunnerWithInners.class) + @TestMetadata("../../../idea/tests/testData/quickfix/inlineClass") + public static class InlineClass 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("inlineClassDeprecated.kt") + public void testInlineClassDeprecated() throws Exception { + runTest("../../../idea/tests/testData/quickfix/inlineClass/inlineClassDeprecated.kt"); + } + + @TestMetadata("inlineClassDeprecated_js.kt") + public void testInlineClassDeprecated_js() throws Exception { + runTest("../../../idea/tests/testData/quickfix/inlineClass/inlineClassDeprecated_js.kt"); + } + + @TestMetadata("inlineClassWithGeneric.kt") + public void testInlineClassWithGeneric() throws Exception { + runTest("../../../idea/tests/testData/quickfix/inlineClass/inlineClassWithGeneric.kt"); + } + + @TestMetadata("publicInlineClass.kt") + public void testPublicInlineClass() throws Exception { + runTest("../../../idea/tests/testData/quickfix/inlineClass/publicInlineClass.kt"); + } + } diff --git a/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/InlineClassDeprecatedFix.kt b/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/InlineClassDeprecatedFix.kt index 00773f64ba73..30010e75ad41 100644 --- a/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/InlineClassDeprecatedFix.kt +++ b/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/InlineClassDeprecatedFix.kt @@ -17,7 +17,7 @@ import org.jetbrains.kotlin.platform.jvm.JvmPlatform import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtModifierListOwner -class InlineClassDeprecatedFix( +open class InlineClassDeprecatedFix( element: KtModifierListOwner, ) : KotlinPsiUpdateModCommandAction.ElementBased(element, Unit) { diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/JS/js/icjs.kt b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/JS/js/icjs.kt index 3ff5ccf2b336..494ba810c2a6 100644 --- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/JS/js/icjs.kt +++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/JS/js/icjs.kt @@ -1,4 +1,3 @@ // "Replace with 'value'" "true" -// IGNORE_K2 inline class IC1(val i: Int) \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/JS/js/icjs.kt.after b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/JS/js/icjs.kt.after index 4b545541c804..29dfb01570c8 100644 --- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/JS/js/icjs.kt.after +++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/JS/js/icjs.kt.after @@ -1,4 +1,3 @@ // "Replace with 'value'" "true" -// IGNORE_K2 value class IC1(val i: Int) \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/JVM/jvm/ic.kt b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/JVM/jvm/ic.kt index a115cbcf0055..5215298a5ed2 100644 --- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/JVM/jvm/ic.kt +++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/JVM/jvm/ic.kt @@ -1,5 +1,4 @@ // "Replace with '@JvmInline value'" "true" // DISABLE-ERRORS -// IGNORE_K2 inline class IC(val i: Int) \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/JVM/jvm/ic.kt.after b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/JVM/jvm/ic.kt.after index 3348e9e65d7d..b17032f9b8ca 100644 --- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/JVM/jvm/ic.kt.after +++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/JVM/jvm/ic.kt.after @@ -1,6 +1,5 @@ // "Replace with '@JvmInline value'" "true" // DISABLE-ERRORS -// IGNORE_K2 @kotlin.jvm.JvmInline value class IC(val i: Int) \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/commonWithJvm/common/ic.kt b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/commonWithJvm/common/ic.kt index a115cbcf0055..5215298a5ed2 100644 --- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/commonWithJvm/common/ic.kt +++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/commonWithJvm/common/ic.kt @@ -1,5 +1,4 @@ // "Replace with '@JvmInline value'" "true" // DISABLE-ERRORS -// IGNORE_K2 inline class IC(val i: Int) \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/commonWithJvm/common/ic.kt.after b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/commonWithJvm/common/ic.kt.after index 3348e9e65d7d..b17032f9b8ca 100644 --- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/commonWithJvm/common/ic.kt.after +++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/commonWithJvm/common/ic.kt.after @@ -1,6 +1,5 @@ // "Replace with '@JvmInline value'" "true" // DISABLE-ERRORS -// IGNORE_K2 @kotlin.jvm.JvmInline value class IC(val i: Int) \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/genericParameter/jvm/ic.kt b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/genericParameter/jvm/ic.kt index 608b03294e21..26a034c4268e 100644 --- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/genericParameter/jvm/ic.kt +++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/genericParameter/jvm/ic.kt @@ -1,5 +1,4 @@ // "Replace with '@JvmInline value'" "true" // DISABLE-ERRORS -// IGNORE_K2 inline class IC(val i: T) diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/genericParameter/jvm/ic.kt.after b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/genericParameter/jvm/ic.kt.after index 5e097451a663..f320aa3125df 100644 --- a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/genericParameter/jvm/ic.kt.after +++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/inlineToValue/genericParameter/jvm/ic.kt.after @@ -1,6 +1,5 @@ // "Replace with '@JvmInline value'" "true" // DISABLE-ERRORS -// IGNORE_K2 @kotlin.jvm.JvmInline value class IC(val i: T) diff --git a/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/inlineClassDeprecated.kt b/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/inlineClassDeprecated.kt index 05ed1c9a98ed..aac7dd92063a 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/inlineClassDeprecated.kt +++ b/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/inlineClassDeprecated.kt @@ -2,4 +2,5 @@ // WITH_STDLIB inline class IC(val i: Int) -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.InlineClassDeprecatedFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.InlineClassDeprecatedFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.InlineClassDeprecatedFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/inlineClassDeprecated.kt.after b/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/inlineClassDeprecated.kt.after index 725a5ca5c69e..838f9dd1f792 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/inlineClassDeprecated.kt.after +++ b/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/inlineClassDeprecated.kt.after @@ -3,4 +3,5 @@ @JvmInline value class IC(val i: Int) -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.InlineClassDeprecatedFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.InlineClassDeprecatedFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.InlineClassDeprecatedFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/inlineClassDeprecated_js.kt b/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/inlineClassDeprecated_js.kt index 942d7bcd10d4..9112a3551a72 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/inlineClassDeprecated_js.kt +++ b/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/inlineClassDeprecated_js.kt @@ -2,4 +2,5 @@ // JS inline class IC(val i: Int) -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.InlineClassDeprecatedFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.InlineClassDeprecatedFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.InlineClassDeprecatedFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/inlineClassDeprecated_js.kt.after b/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/inlineClassDeprecated_js.kt.after index d95bc8d98ce1..dbbd680e86e6 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/inlineClassDeprecated_js.kt.after +++ b/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/inlineClassDeprecated_js.kt.after @@ -2,4 +2,5 @@ // JS value class IC(val i: Int) -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.InlineClassDeprecatedFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.InlineClassDeprecatedFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.InlineClassDeprecatedFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/inlineClassWithGeneric.kt b/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/inlineClassWithGeneric.kt index 10dc7596bd5f..b8c8fa5abe10 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/inlineClassWithGeneric.kt +++ b/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/inlineClassWithGeneric.kt @@ -4,4 +4,5 @@ inline class IC(val i: T) -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.InlineClassDeprecatedFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.InlineClassDeprecatedFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.InlineClassDeprecatedFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/inlineClassWithGeneric.kt.after b/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/inlineClassWithGeneric.kt.after index e1bdc7b52da1..a179a8fc3271 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/inlineClassWithGeneric.kt.after +++ b/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/inlineClassWithGeneric.kt.after @@ -5,4 +5,5 @@ @JvmInline value class IC(val i: T) -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.InlineClassDeprecatedFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.InlineClassDeprecatedFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.InlineClassDeprecatedFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/publicInlineClass.kt b/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/publicInlineClass.kt index cbde83ef0397..ddca6b317662 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/publicInlineClass.kt +++ b/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/publicInlineClass.kt @@ -2,4 +2,5 @@ // WITH_STDLIB public inline class IC(val i: Int) -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.InlineClassDeprecatedFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.InlineClassDeprecatedFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.InlineClassDeprecatedFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/publicInlineClass.kt.after b/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/publicInlineClass.kt.after index d592003057dc..1ae78a3d2508 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/publicInlineClass.kt.after +++ b/plugins/kotlin/idea/tests/testData/quickfix/inlineClass/publicInlineClass.kt.after @@ -3,4 +3,5 @@ @JvmInline public value class IC(val i: Int) -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.InlineClassDeprecatedFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.InlineClassDeprecatedFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.InlineClassDeprecatedFix \ 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 dcdc359c3f9f..5e90e57828bd 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 @@ -124,7 +124,7 @@ internal fun MutableTWorkspace.generateK2FixTests() { model("$idea/quickfix/importAlias", pattern = pattern, isIgnored = true) model("$idea/quickfix/increaseVisibility", pattern = pattern) model("$idea/quickfix/initializeWithConstructorParameter", pattern = pattern, isIgnored = true) - model("$idea/quickfix/inlineClass", pattern = pattern, isIgnored = true) + model("$idea/quickfix/inlineClass", pattern = pattern) model("$idea/quickfix/inlineTypeParameterFix", pattern = pattern, isIgnored = true) model("$idea/quickfix/insertDelegationCall", pattern = pattern) model("$idea/quickfix/isEnumEntry", pattern = pattern)