diff --git a/plugins/kotlin/fir/src/org/jetbrains/kotlin/idea/quickfix/fixes/ActualAnnotationsNotMatchExpectFixFactory.kt b/plugins/kotlin/fir/src/org/jetbrains/kotlin/idea/quickfix/fixes/ActualAnnotationsNotMatchExpectFixFactory.kt index 7f6aa5f22071..0ae2ee7ca1c6 100644 --- a/plugins/kotlin/fir/src/org/jetbrains/kotlin/idea/quickfix/fixes/ActualAnnotationsNotMatchExpectFixFactory.kt +++ b/plugins/kotlin/fir/src/org/jetbrains/kotlin/idea/quickfix/fixes/ActualAnnotationsNotMatchExpectFixFactory.kt @@ -41,6 +41,7 @@ internal object ActualAnnotationsNotMatchExpectFixFactory { expectDeclaration, actualDeclaration, expectAnnotationEntry, + diagnostic.actualAnnotationTargetSourceElement, mappedIncompatibilityType, annotationClassIdProvider = { expectAnnotationEntry.getAnnotationClassId() } ) diff --git a/plugins/kotlin/fir/test/org/jetbrains/kotlin/idea/fir/quickfix/HighLevelQuickFixMultiModuleTestGenerated.java b/plugins/kotlin/fir/test/org/jetbrains/kotlin/idea/fir/quickfix/HighLevelQuickFixMultiModuleTestGenerated.java index aa1198d64f01..50512ad8d144 100644 --- a/plugins/kotlin/fir/test/org/jetbrains/kotlin/idea/fir/quickfix/HighLevelQuickFixMultiModuleTestGenerated.java +++ b/plugins/kotlin/fir/test/org/jetbrains/kotlin/idea/fir/quickfix/HighLevelQuickFixMultiModuleTestGenerated.java @@ -139,6 +139,11 @@ public abstract class HighLevelQuickFixMultiModuleTestGenerated extends Abstract runTest("../idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualConstExpression/"); } + @TestMetadata("copyToActualGetter") + public void testCopyToActualGetter() throws Exception { + runTest("../idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualGetter/"); + } + @TestMetadata("copyToActualNoArg") public void testCopyToActualNoArg() throws Exception { runTest("../idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualNoArg/"); @@ -159,6 +164,16 @@ public abstract class HighLevelQuickFixMultiModuleTestGenerated extends Abstract runTest("../idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualSingleArg/"); } + @TestMetadata("copyToActualTypeParameter") + public void testCopyToActualTypeParameter() throws Exception { + runTest("../idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualTypeParameter/"); + } + + @TestMetadata("copyToActualValueParameter") + public void testCopyToActualValueParameter() throws Exception { + runTest("../idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualValueParameter/"); + } + @TestMetadata("copyToActualWithImport") public void testCopyToActualWithImport() throws Exception { runTest("../idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualWithImport/"); diff --git a/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/ActualAnnotationsNotMatchExpectFixFactoryCommon.kt b/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/ActualAnnotationsNotMatchExpectFixFactoryCommon.kt index b9c3a674a438..5982cd215251 100644 --- a/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/ActualAnnotationsNotMatchExpectFixFactoryCommon.kt +++ b/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/ActualAnnotationsNotMatchExpectFixFactoryCommon.kt @@ -1,6 +1,7 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.kotlin.idea.quickfix +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.idea.base.psi.callableIdIfNotLocal import org.jetbrains.kotlin.idea.base.psi.classIdIfNonLocal import org.jetbrains.kotlin.idea.base.resources.KotlinBundle @@ -8,10 +9,7 @@ import org.jetbrains.kotlin.idea.codeinsight.api.classic.quickfixes.KotlinQuickF import org.jetbrains.kotlin.idea.codeinsight.api.classic.quickfixes.QuickFixActionBase import org.jetbrains.kotlin.idea.inspections.RemoveAnnotationFix import org.jetbrains.kotlin.name.ClassId -import org.jetbrains.kotlin.psi.KtAnnotationEntry -import org.jetbrains.kotlin.psi.KtCallableDeclaration -import org.jetbrains.kotlin.psi.KtClassOrObject -import org.jetbrains.kotlin.psi.KtNamedDeclaration +import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualAnnotationsIncompatibilityType object ActualAnnotationsNotMatchExpectFixFactoryCommon { @@ -27,6 +25,7 @@ object ActualAnnotationsNotMatchExpectFixFactoryCommon { expectDeclaration: KtNamedDeclaration, actualDeclaration: KtNamedDeclaration, expectAnnotationEntry: KtAnnotationEntry, + actualAnnotationTargetElement: PsiElement?, incompatibilityType: ExpectActualAnnotationsIncompatibilityType, annotationClassIdProvider: () -> ClassId?, ): List> { @@ -40,7 +39,7 @@ object ActualAnnotationsNotMatchExpectFixFactoryCommon { } if (actualAnnotationEntry == null) { - val copyFromExpect = createCopyFromExpectToActualFix(expectAnnotationEntry, actualDeclaration, annotationClassIdProvider) + val copyFromExpect = createCopyFromExpectToActualFix(expectAnnotationEntry, actualAnnotationTargetElement, annotationClassIdProvider) return listOfNotNull(copyFromExpect) } @@ -59,12 +58,15 @@ object ActualAnnotationsNotMatchExpectFixFactoryCommon { } private fun createCopyFromExpectToActualFix( - expectAnnotationEntry: KtAnnotationEntry, actualDeclaration: KtNamedDeclaration, annotationClassIdProvider: () -> ClassId? + expectAnnotationEntry: KtAnnotationEntry, actualAnnotationTargetElement: PsiElement?, annotationClassIdProvider: () -> ClassId? ): KotlinQuickFixAction<*>? { + if (actualAnnotationTargetElement !is KtModifierListOwner) { + return null + } val annotationClassId = annotationClassIdProvider.invoke() ?: return null return CopyAnnotationFromExpectToActualFix( - actualDeclaration, + actualAnnotationTargetElement, expectAnnotationEntry, annotationClassId, ) diff --git a/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/CopyAnnotationFromExpectToActualFix.kt b/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/CopyAnnotationFromExpectToActualFix.kt index 9c040f838a42..c853cc995817 100644 --- a/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/CopyAnnotationFromExpectToActualFix.kt +++ b/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/CopyAnnotationFromExpectToActualFix.kt @@ -10,13 +10,13 @@ import org.jetbrains.kotlin.idea.util.addAnnotation import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.psi.KtAnnotationEntry import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.psi.KtNamedDeclaration +import org.jetbrains.kotlin.psi.KtModifierListOwner internal class CopyAnnotationFromExpectToActualFix( - actualDeclaration: KtNamedDeclaration, + actualElement: KtModifierListOwner, @SafeFieldForPreview private val expectAnnotationEntry: KtAnnotationEntry, @SafeFieldForPreview private val annotationClassId: ClassId, -) : KotlinQuickFixAction(actualDeclaration) { +) : KotlinQuickFixAction(actualElement) { private val expectAnnotationShortName: String = expectAnnotationEntry.shortName?.toString() ?: "" @@ -27,9 +27,9 @@ internal class CopyAnnotationFromExpectToActualFix( override fun getFamilyName(): String = text override fun invoke(project: Project, editor: Editor?, file: KtFile) { - val actualDeclaration = element ?: return + val actualElement = element ?: return val innerText = expectAnnotationEntry.valueArguments.joinToString { it.asElement().text } - actualDeclaration.addAnnotation(annotationClassId, innerText.takeIf { it.isNotEmpty() }, searchForExistingEntry = false) + actualElement.addAnnotation(annotationClassId, innerText.takeIf { it.isNotEmpty() }, searchForExistingEntry = false) } } diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/ActualAnnotationsNotMatchExpectFixFactory.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/ActualAnnotationsNotMatchExpectFixFactory.kt index 33f75710cbc3..cca245e27ac6 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/ActualAnnotationsNotMatchExpectFixFactory.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/ActualAnnotationsNotMatchExpectFixFactory.kt @@ -6,6 +6,7 @@ import org.jetbrains.kotlin.analysis.api.analyze import org.jetbrains.kotlin.analysis.api.calls.singleConstructorCallOrNull import org.jetbrains.kotlin.analysis.api.calls.symbol import org.jetbrains.kotlin.descriptors.DeclarationDescriptor +import org.jetbrains.kotlin.descriptors.SourceElement import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.DiagnosticFactory @@ -19,11 +20,12 @@ import org.jetbrains.kotlin.psi.KtAnnotationEntry import org.jetbrains.kotlin.psi.KtNamedDeclaration import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualAnnotationsIncompatibilityType import org.jetbrains.kotlin.resolve.source.getPsi +import java.util.* internal object ActualAnnotationsNotMatchExpectFixFactory : KotlinIntentionActionsFactory() { override fun doCreateActions(diagnostic: Diagnostic): List { val castedDiagnostic = DiagnosticFactory.cast(diagnostic, Errors.ACTUAL_ANNOTATIONS_NOT_MATCH_EXPECT) - val incompatibilityType = castedDiagnostic.c + val incompatibilityType = castedDiagnostic.d val expectAnnotationEntry = incompatibilityType.expectAnnotation.source.getPsi() as? KtAnnotationEntry ?: return emptyList() @@ -32,13 +34,15 @@ internal object ActualAnnotationsNotMatchExpectFixFactory : KotlinIntentionActio ActualAnnotationsNotMatchExpectFixFactoryCommon.createRemoveAnnotationFromExpectFix(expectAnnotationEntry) return listOfNotNull(removeAnnotationFix) + - createCopyAndReplaceAnnotationFixes(expectAnnotationEntry, castedDiagnostic.a, castedDiagnostic.b, incompatibilityType) + createCopyAndReplaceAnnotationFixes(expectAnnotationEntry, castedDiagnostic.a, castedDiagnostic.b, + castedDiagnostic.c, incompatibilityType) } private fun createCopyAndReplaceAnnotationFixes( expectAnnotationEntry: KtAnnotationEntry, expectDeclarationDescriptor: DeclarationDescriptor, actualDeclarationDescriptor: DeclarationDescriptor, + actualAnnotationTargetSourceElement: Optional, incompatibilityType: ExpectActualAnnotationsIncompatibilityType, ): List> { val expectDeclaration = expectDeclarationDescriptor.toSourceElement.getPsi() as? KtNamedDeclaration ?: return emptyList() @@ -51,6 +55,7 @@ internal object ActualAnnotationsNotMatchExpectFixFactory : KotlinIntentionActio expectDeclaration, actualDeclaration, expectAnnotationEntry, + actualAnnotationTargetSourceElement.orElse(null)?.getPsi(), mappedIncompatibilityType, annotationClassIdProvider = { getAnnotationClassId(expectAnnotationEntry) } ) diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java index bfbeae764c44..1f266f51e9ca 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java @@ -139,6 +139,11 @@ public abstract class QuickFixMultiModuleTestGenerated extends AbstractQuickFixM runTest("testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualConstExpression/"); } + @TestMetadata("copyToActualGetter") + public void testCopyToActualGetter() throws Exception { + runTest("testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualGetter/"); + } + @TestMetadata("copyToActualNoArg") public void testCopyToActualNoArg() throws Exception { runTest("testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualNoArg/"); @@ -159,6 +164,16 @@ public abstract class QuickFixMultiModuleTestGenerated extends AbstractQuickFixM runTest("testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualSingleArg/"); } + @TestMetadata("copyToActualTypeParameter") + public void testCopyToActualTypeParameter() throws Exception { + runTest("testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualTypeParameter/"); + } + + @TestMetadata("copyToActualValueParameter") + public void testCopyToActualValueParameter() throws Exception { + runTest("testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualValueParameter/"); + } + @TestMetadata("copyToActualWithImport") public void testCopyToActualWithImport() throws Exception { runTest("testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualWithImport/"); diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualGetter/common/common.kt b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualGetter/common/common.kt new file mode 100644 index 000000000000..cb8dec6be70f --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualGetter/common/common.kt @@ -0,0 +1,6 @@ +// DISABLE-ERRORS +@Target(AnnotationTarget.PROPERTY_GETTER) +annotation class Ann + +expect val foo: Any? + @Ann get diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualGetter/dependencies.txt b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualGetter/dependencies.txt new file mode 100644 index 000000000000..2769ede81e95 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualGetter/dependencies.txt @@ -0,0 +1,6 @@ +MODULE common { platform=[JVM, JS, Native]; root=common } +MODULE jvm { platform=[JVM]; root=jvm } + +common -> STDLIB_COMMON { kind=DEPENDENCY } +jvm -> common { kind=DEPENDS_ON } +jvm -> STDLIB_JVM { kind=DEPENDENCY } diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualGetter/jvm/jvm.kt b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualGetter/jvm/jvm.kt new file mode 100644 index 000000000000..fc5c1e5567de --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualGetter/jvm/jvm.kt @@ -0,0 +1,6 @@ +// "Copy mismatched annotation 'Ann' from expect to actual declaration (may change semantics)" "true" +// DISABLE-ERRORS +// FIR_COMPARISON + +actual val foo: Any? + get() = null diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualGetter/jvm/jvm.kt.after b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualGetter/jvm/jvm.kt.after new file mode 100644 index 000000000000..54084e265368 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualGetter/jvm/jvm.kt.after @@ -0,0 +1,7 @@ +// "Copy mismatched annotation 'Ann' from expect to actual declaration (may change semantics)" "true" +// DISABLE-ERRORS +// FIR_COMPARISON + +actual val foo: Any? + @Ann + get() = null diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualTypeParameter/common/common.kt b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualTypeParameter/common/common.kt new file mode 100644 index 000000000000..cd8c29c73150 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualTypeParameter/common/common.kt @@ -0,0 +1,5 @@ +// DISABLE-ERRORS +@Target(AnnotationTarget.TYPE_PARAMETER) +annotation class Ann + +expect fun <@Ann T> foo() diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualTypeParameter/dependencies.txt b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualTypeParameter/dependencies.txt new file mode 100644 index 000000000000..2769ede81e95 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualTypeParameter/dependencies.txt @@ -0,0 +1,6 @@ +MODULE common { platform=[JVM, JS, Native]; root=common } +MODULE jvm { platform=[JVM]; root=jvm } + +common -> STDLIB_COMMON { kind=DEPENDENCY } +jvm -> common { kind=DEPENDS_ON } +jvm -> STDLIB_JVM { kind=DEPENDENCY } diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualTypeParameter/jvm/jvm.kt b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualTypeParameter/jvm/jvm.kt new file mode 100644 index 000000000000..551df9ea5514 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualTypeParameter/jvm/jvm.kt @@ -0,0 +1,5 @@ +// "Copy mismatched annotation 'Ann' from expect to actual declaration (may change semantics)" "true" +// DISABLE-ERRORS +// FIR_COMPARISON + +actual fun foo() {} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualTypeParameter/jvm/jvm.kt.after b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualTypeParameter/jvm/jvm.kt.after new file mode 100644 index 000000000000..fba7cefe8f17 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualTypeParameter/jvm/jvm.kt.after @@ -0,0 +1,5 @@ +// "Copy mismatched annotation 'Ann' from expect to actual declaration (may change semantics)" "true" +// DISABLE-ERRORS +// FIR_COMPARISON + +actual fun <@Ann T> foo() {} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualValueParameter/common/common.kt b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualValueParameter/common/common.kt new file mode 100644 index 000000000000..10d3213ec9f5 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualValueParameter/common/common.kt @@ -0,0 +1,5 @@ +// DISABLE-ERRORS +@Target(AnnotationTarget.VALUE_PARAMETER) +annotation class Ann + +expect fun foo(@Ann p: Any) diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualValueParameter/dependencies.txt b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualValueParameter/dependencies.txt new file mode 100644 index 000000000000..2769ede81e95 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualValueParameter/dependencies.txt @@ -0,0 +1,6 @@ +MODULE common { platform=[JVM, JS, Native]; root=common } +MODULE jvm { platform=[JVM]; root=jvm } + +common -> STDLIB_COMMON { kind=DEPENDENCY } +jvm -> common { kind=DEPENDS_ON } +jvm -> STDLIB_JVM { kind=DEPENDENCY } diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualValueParameter/jvm/jvm.kt b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualValueParameter/jvm/jvm.kt new file mode 100644 index 000000000000..37e729fd1451 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualValueParameter/jvm/jvm.kt @@ -0,0 +1,5 @@ +// "Copy mismatched annotation 'Ann' from expect to actual declaration (may change semantics)" "true" +// DISABLE-ERRORS +// FIR_COMPARISON + +actual fun foo(p: Any) {} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualValueParameter/jvm/jvm.kt.after b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualValueParameter/jvm/jvm.kt.after new file mode 100644 index 000000000000..349b391a6869 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/actualAnnotationsNotMatchExpect/copyToActualValueParameter/jvm/jvm.kt.after @@ -0,0 +1,5 @@ +// "Copy mismatched annotation 'Ann' from expect to actual declaration (may change semantics)" "true" +// DISABLE-ERRORS +// FIR_COMPARISON + +actual fun foo(@Ann p: Any) {}