diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/InlineClassDeprecatedFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/InlineClassDeprecatedFix.kt index 29edb44b685..6010754a230 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/InlineClassDeprecatedFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/InlineClassDeprecatedFix.kt @@ -14,7 +14,8 @@ import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.project.TargetPlatformDetector import org.jetbrains.kotlin.idea.util.addAnnotation import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.platform.jvm.isJvm +import org.jetbrains.kotlin.platform.has +import org.jetbrains.kotlin.platform.jvm.JvmPlatform import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtModifierListOwner import org.jetbrains.kotlin.psi.psiUtil.getParentOfType @@ -26,7 +27,7 @@ class InlineClassDeprecatedFix( private val text = KotlinBundle.message( "replace.with.0", - (if (TargetPlatformDetector.getPlatform(element.containingKtFile).isJvm()) "@JvmInline " else "") + "value" + (if (element.containingKtFile.hasJvmTarget()) "@JvmInline " else "") + "value" ) override fun getText() = text @@ -36,7 +37,7 @@ class InlineClassDeprecatedFix( override fun invoke(project: Project, editor: Editor?, file: KtFile) { element?.removeModifier(KtTokens.INLINE_KEYWORD) element?.addModifier(KtTokens.VALUE_KEYWORD) - if (TargetPlatformDetector.getPlatform(file).isJvm()) { + if (file.hasJvmTarget()) { element?.addAnnotation(JVM_INLINE_ANNOTATION_FQ_NAME) } } @@ -48,4 +49,7 @@ class InlineClassDeprecatedFix( return if (deprecatedModifier != null) InlineClassDeprecatedFix(modifierListOwner) else null } } + + private fun KtFile.hasJvmTarget(): Boolean = + TargetPlatformDetector.getPlatform(this).has() } \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/inlineToValue/JS/js/icjs.kt b/idea/testData/multiModuleQuickFix/inlineToValue/JS/js/icjs.kt new file mode 100644 index 00000000000..494ba810c2a --- /dev/null +++ b/idea/testData/multiModuleQuickFix/inlineToValue/JS/js/icjs.kt @@ -0,0 +1,3 @@ +// "Replace with 'value'" "true" + +inline class IC1(val i: Int) \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/inlineToValue/JS/js/icjs.kt.after b/idea/testData/multiModuleQuickFix/inlineToValue/JS/js/icjs.kt.after new file mode 100644 index 00000000000..29dfb01570c --- /dev/null +++ b/idea/testData/multiModuleQuickFix/inlineToValue/JS/js/icjs.kt.after @@ -0,0 +1,3 @@ +// "Replace with 'value'" "true" + +value class IC1(val i: Int) \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/inlineToValue/JVM/jvm/ic.kt b/idea/testData/multiModuleQuickFix/inlineToValue/JVM/jvm/ic.kt new file mode 100644 index 00000000000..5215298a5ed --- /dev/null +++ b/idea/testData/multiModuleQuickFix/inlineToValue/JVM/jvm/ic.kt @@ -0,0 +1,4 @@ +// "Replace with '@JvmInline value'" "true" +// DISABLE-ERRORS + +inline class IC(val i: Int) \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/inlineToValue/JVM/jvm/ic.kt.after b/idea/testData/multiModuleQuickFix/inlineToValue/JVM/jvm/ic.kt.after new file mode 100644 index 00000000000..b17032f9b8c --- /dev/null +++ b/idea/testData/multiModuleQuickFix/inlineToValue/JVM/jvm/ic.kt.after @@ -0,0 +1,5 @@ +// "Replace with '@JvmInline value'" "true" +// DISABLE-ERRORS + +@kotlin.jvm.JvmInline +value class IC(val i: Int) \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/inlineToValue/commonWithJvm/common/ic.kt b/idea/testData/multiModuleQuickFix/inlineToValue/commonWithJvm/common/ic.kt new file mode 100644 index 00000000000..5215298a5ed --- /dev/null +++ b/idea/testData/multiModuleQuickFix/inlineToValue/commonWithJvm/common/ic.kt @@ -0,0 +1,4 @@ +// "Replace with '@JvmInline value'" "true" +// DISABLE-ERRORS + +inline class IC(val i: Int) \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/inlineToValue/commonWithJvm/common/ic.kt.after b/idea/testData/multiModuleQuickFix/inlineToValue/commonWithJvm/common/ic.kt.after new file mode 100644 index 00000000000..b17032f9b8c --- /dev/null +++ b/idea/testData/multiModuleQuickFix/inlineToValue/commonWithJvm/common/ic.kt.after @@ -0,0 +1,5 @@ +// "Replace with '@JvmInline value'" "true" +// DISABLE-ERRORS + +@kotlin.jvm.JvmInline +value class IC(val i: Int) \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java index edf10cb8bbf..582e3c5e9a4 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java @@ -853,6 +853,34 @@ public class QuickFixMultiModuleTestGenerated extends AbstractQuickFixMultiModul } } + @TestMetadata("idea/testData/multiModuleQuickFix/inlineToValue") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class InlineToValue extends AbstractQuickFixMultiModuleTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); + } + + public void testAllFilesPresentInInlineToValue() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/testData/multiModuleQuickFix/inlineToValue"), Pattern.compile("^([^\\.]+)$"), null, true); + } + + @TestMetadata("commonWithJvm") + public void testCommonWithJvm() throws Exception { + runTest("idea/testData/multiModuleQuickFix/inlineToValue/commonWithJvm/"); + } + + @TestMetadata("JS") + public void testJS() throws Exception { + runTest("idea/testData/multiModuleQuickFix/inlineToValue/JS/"); + } + + @TestMetadata("JVM") + public void testJVM() throws Exception { + runTest("idea/testData/multiModuleQuickFix/inlineToValue/JVM/"); + } + } + @TestMetadata("idea/testData/multiModuleQuickFix/makeOverridenMemberOpen") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)