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
This commit is contained in:
Svyatoslav Scherbina
2023-07-14 12:37:12 +02:00
committed by Space Team
parent cba955cb3e
commit ef6dcd9779
@@ -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))
}