From ef6dcd97796a6971ec30b3806bf7e25462ca2e97 Mon Sep 17 00:00:00 2001 From: Svyatoslav Scherbina Date: Fri, 14 Jul 2023 12:37:12 +0200 Subject: [PATCH] Native, K2: add ExperimentalForeignApi to generated forward declarations cinterop tool should add ExperimentalForeignApi to all generated declarations, to indicate their experimental status and discourage using them in public Kotlin API. But the same considerations are applicable to forward declarations (cnames.*, objcnames.*), which are generated not by cinterop tool, but directly by the compiler. This commit adds ExperimentalForeignApi to those compiler-generated classes. ^KT-58362 --- .../NativeForwardDeclarationsSymbolProvider.kt | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/NativeForwardDeclarationsSymbolProvider.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/NativeForwardDeclarationsSymbolProvider.kt index 28d1f2f04ac..cf39365f52e 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/NativeForwardDeclarationsSymbolProvider.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/NativeForwardDeclarationsSymbolProvider.kt @@ -18,6 +18,8 @@ import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.builder.buildRegularClass import org.jetbrains.kotlin.fir.declarations.getDeprecationsProvider import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl +import org.jetbrains.kotlin.fir.expressions.builder.buildAnnotation +import org.jetbrains.kotlin.fir.expressions.impl.FirEmptyAnnotationArgumentMapping import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolNamesProvider import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolNamesProviderWithoutCallables import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider @@ -26,13 +28,15 @@ import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.constructClassType +import org.jetbrains.kotlin.fir.types.toLookupTag import org.jetbrains.kotlin.library.KotlinLibrary import org.jetbrains.kotlin.library.includedForwardDeclarations import org.jetbrains.kotlin.library.isInterop -import org.jetbrains.kotlin.name.NativeForwardDeclarationKind import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.name.NativeForwardDeclarationKind +import org.jetbrains.kotlin.name.NativeStandardInteropNames class NativeForwardDeclarationsSymbolProvider( session: FirSession, @@ -113,6 +117,18 @@ class NativeForwardDeclarationsSymbolProvider( type = ConeClassLikeLookupTagImpl(forwardDeclarationKind.superClassId) .constructClassType(emptyArray(), isNullable = false) } + + annotations += buildAnnotation { + annotationTypeRef = buildResolvedTypeRef { + val annotationClassId = ClassId( + NativeStandardInteropNames.cInteropPackage, + NativeStandardInteropNames.ExperimentalForeignApi + ) + type = annotationClassId.toLookupTag() + .constructClassType(typeArguments = emptyArray(), isNullable = false) + } + argumentMapping = FirEmptyAnnotationArgumentMapping + } }.apply { replaceDeprecationsProvider(getDeprecationsProvider(session)) }