[FE, IR] Allow @ImplicitlyActualizedByJvmDeclaration to be set only on expect

@ImplicitlyActualizedByJvmDeclaration is the only one
OptionalExpectation annotation which works correctly when set only on
`expect`. All other (like @JvmName, @JsName) - not, so warning for them
must be reported.

^KT-61725 Fixed
This commit is contained in:
Roman Efremov
2023-09-06 12:30:06 +02:00
committed by Space Team
parent efad248d7d
commit 5e49b472f8
5 changed files with 18 additions and 4 deletions
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
import org.jetbrains.kotlin.diagnostics.Errors
import org.jetbrains.kotlin.incremental.components.ExpectActualTracker
import org.jetbrains.kotlin.mpp.MppJavaImplicitActualizatorMarker
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.hasActualModifier
import org.jetbrains.kotlin.resolve.*
@@ -42,7 +42,7 @@ import org.jetbrains.kotlin.resolve.source.PsiSourceFile
import org.jetbrains.kotlin.types.KotlinType
import java.io.File
private val implicitlyActualizedAnnotationFqn = FqName("kotlin.jvm.ImplicitlyActualizedByJvmDeclaration")
private val implicitlyActualizedAnnotationFqn = StandardClassIds.Annotations.ImplicitlyActualizedByJvmDeclaration.asSingleFqName()
class ExpectedActualDeclarationChecker(
val moduleStructureOracle: ModuleStructureOracle,
@@ -18,6 +18,7 @@ object AbstractExpectActualAnnotationMatchChecker {
private val SKIPPED_CLASS_IDS = setOf(
StandardClassIds.Annotations.Deprecated,
StandardClassIds.Annotations.DeprecatedSinceKotlin,
StandardClassIds.Annotations.ImplicitlyActualizedByJvmDeclaration,
StandardClassIds.Annotations.OptionalExpectation,
StandardClassIds.Annotations.RequireKotlin,
StandardClassIds.Annotations.SinceKotlin,
@@ -20,6 +20,10 @@ annotation class MyOptIn
@OptIn(MyOptIn::class)
expect fun skippedAnnotationsOnExpectOnly()
@OptIn(ExperimentalMultiplatform::class)
@kotlin.jvm.ImplicitlyActualizedByJvmDeclaration
expect class ImplicitlyActualizedByJvmDeclarationOnExpectOnly
// MODULE: m1-jvm()()(m1-common)
// FILE: jvm.kt
package kotlin
@@ -27,4 +31,6 @@ package kotlin
@OptIn(ExperimentalMultiplatform::class)
actual annotation class OptionalExpectationOnExpectOnly
actual fun skippedAnnotationsOnExpectOnly() {}
actual fun skippedAnnotationsOnExpectOnly() {}
actual class ImplicitlyActualizedByJvmDeclarationOnExpectOnly
@@ -20,6 +20,10 @@ annotation class MyOptIn
@OptIn(MyOptIn::class)
expect fun skippedAnnotationsOnExpectOnly()
@OptIn(ExperimentalMultiplatform::class)
@kotlin.jvm.ImplicitlyActualizedByJvmDeclaration
expect class ImplicitlyActualizedByJvmDeclarationOnExpectOnly
// MODULE: m1-jvm()()(m1-common)
// FILE: jvm.kt
package kotlin
@@ -27,4 +31,6 @@ package kotlin
@OptIn(ExperimentalMultiplatform::class)
actual annotation class OptionalExpectationOnExpectOnly
actual fun skippedAnnotationsOnExpectOnly() {}
actual fun skippedAnnotationsOnExpectOnly() {}
actual class ImplicitlyActualizedByJvmDeclarationOnExpectOnly
@@ -197,6 +197,7 @@ object StandardClassIds {
val AccessibleLateinitPropertyLiteral = "AccessibleLateinitPropertyLiteral".internalId()
val OptionalExpectation = "OptionalExpectation".baseId()
val ImplicitlyActualizedByJvmDeclaration = "ImplicitlyActualizedByJvmDeclaration".jvmId()
object Java {
val Deprecated = "Deprecated".javaLangId()