Do not add @JvmInline annotation on JS and Native

This commit is contained in:
Ilmir Usmanov
2021-02-24 17:58:27 +01:00
parent 2df049fc03
commit 2523ea1ef4
4 changed files with 22 additions and 2 deletions
@@ -11,8 +11,10 @@ import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.diagnostics.Errors
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.psi.KtFile
import org.jetbrains.kotlin.psi.KtModifierListOwner
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
@@ -22,7 +24,10 @@ class InlineClassDeprecatedFix(
element: KtModifierListOwner
) : KotlinQuickFixAction<KtModifierListOwner>(element), CleanupFix {
private val text = KotlinBundle.message("replace.with.0", "@JvmInline value")
private val text = KotlinBundle.message(
"replace.with.0",
(if (TargetPlatformDetector.getPlatform(element.containingKtFile).isJvm()) "@JvmInline " else "") + "value"
)
override fun getText() = text
@@ -31,7 +36,9 @@ class InlineClassDeprecatedFix(
override fun invoke(project: Project, editor: Editor?, file: KtFile) {
element?.removeModifier(KtTokens.INLINE_KEYWORD)
element?.addModifier(KtTokens.VALUE_KEYWORD)
element?.addAnnotation(JVM_INLINE_ANNOTATION_FQ_NAME)
if (TargetPlatformDetector.getPlatform(file).isJvm()) {
element?.addAnnotation(JVM_INLINE_ANNOTATION_FQ_NAME)
}
}
companion object : KotlinSingleIntentionActionFactory() {
@@ -0,0 +1,4 @@
// "Replace with 'value'" "true"
// JS
<caret>inline class IC(val i: Int)
@@ -0,0 +1,4 @@
// "Replace with 'value'" "true"
// JS
value class IC(val i: Int)
@@ -8517,6 +8517,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
public void testInlineClassDeprecated() throws Exception {
runTest("idea/testData/quickfix/inlineClass/inlineClassDeprecated.kt");
}
@TestMetadata("inlineClassDeprecated_js.kt")
public void testInlineClassDeprecated_js() throws Exception {
runTest("idea/testData/quickfix/inlineClass/inlineClassDeprecated_js.kt");
}
}
@TestMetadata("idea/testData/quickfix/inlineClassConstructorNotValParameter")