[FIR2IR] Explicitly opt-in to IrSymbolInternals at call-sites

^KT-60924
This commit is contained in:
Dmitriy Novozhilov
2023-08-16 17:14:41 +03:00
committed by Space Team
parent deb13257c2
commit f95ed2b588
22 changed files with 90 additions and 6 deletions
-1
View File
@@ -48,7 +48,6 @@ dependencies {
testRuntimeOnly(jpsModelImpl()) testRuntimeOnly(jpsModelImpl())
} }
optInToIrSymbolInternals()
optInToObsoleteDescriptorBasedAPI() optInToObsoleteDescriptorBasedAPI()
val generationRoot = projectDir.resolve("tests-gen") val generationRoot = projectDir.resolve("tests-gen")
@@ -180,6 +180,7 @@ private fun FirBasedSymbol<*>.toSymbolForCall(
} }
context(Fir2IrComponents) context(Fir2IrComponents)
@OptIn(IrSymbolInternals::class)
fun FirReference.toSymbolForCall( fun FirReference.toSymbolForCall(
dispatchReceiver: FirExpression, dispatchReceiver: FirExpression,
conversionScope: Fir2IrConversionScope, conversionScope: Fir2IrConversionScope,
@@ -464,6 +465,7 @@ fun FirTypeScope.processOverriddenPropertiesFromSuperClasses(
} }
context(Fir2IrComponents) context(Fir2IrComponents)
@OptIn(IrSymbolInternals::class)
private fun FirClass.getSuperTypesAsIrClasses(): Set<IrClass>? { private fun FirClass.getSuperTypesAsIrClasses(): Set<IrClass>? {
val irClass = val irClass =
declarationStorage.classifierStorage.getIrClassSymbol(symbol).owner as? IrClass ?: return null declarationStorage.classifierStorage.getIrClassSymbol(symbol).owner as? IrClass ?: return null
@@ -510,6 +512,7 @@ internal fun FirProperty.generateOverriddenPropertySymbols(containingClass: FirC
} }
context(Fir2IrComponents) context(Fir2IrComponents)
@OptIn(IrSymbolInternals::class)
internal fun FirProperty.generateOverriddenAccessorSymbols(containingClass: FirClass, isGetter: Boolean): List<IrSimpleFunctionSymbol> { internal fun FirProperty.generateOverriddenAccessorSymbols(containingClass: FirClass, isGetter: Boolean): List<IrSimpleFunctionSymbol> {
val scope = containingClass.unsubstitutedScope(session, scopeSession, withForcedTypeCalculator = true, memberRequiredPhase = null) val scope = containingClass.unsubstitutedScope(session, scopeSession, withForcedTypeCalculator = true, memberRequiredPhase = null)
scope.processPropertiesByName(name) {} scope.processPropertiesByName(name) {}
@@ -620,6 +623,7 @@ fun FirClass.irOrigin(firProvider: FirProvider): IrDeclarationOrigin = when {
} }
} }
@OptIn(IrSymbolInternals::class)
val IrType.isSamType: Boolean val IrType.isSamType: Boolean
get() { get() {
val irClass = classOrNull ?: return false val irClass = classOrNull ?: return false
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.builder.buildAnnotation import org.jetbrains.kotlin.fir.expressions.builder.buildAnnotation
import org.jetbrains.kotlin.fir.expressions.builder.buildAnnotationArgumentMapping import org.jetbrains.kotlin.fir.expressions.builder.buildAnnotationArgumentMapping
import org.jetbrains.kotlin.fir.expressions.builder.buildConstExpression import org.jetbrains.kotlin.fir.expressions.builder.buildConstExpression
import org.jetbrains.kotlin.fir.expressions.impl.FirEmptyAnnotationArgumentMapping
import org.jetbrains.kotlin.fir.packageFqName import org.jetbrains.kotlin.fir.packageFqName
import org.jetbrains.kotlin.fir.resolve.providers.firProvider import org.jetbrains.kotlin.fir.resolve.providers.firProvider
import org.jetbrains.kotlin.fir.resolve.providers.getContainingFile import org.jetbrains.kotlin.fir.resolve.providers.getContainingFile
@@ -26,6 +25,7 @@ import org.jetbrains.kotlin.ir.declarations.nameWithPackage
import org.jetbrains.kotlin.ir.expressions.IrConst import org.jetbrains.kotlin.ir.expressions.IrConst
import org.jetbrains.kotlin.ir.expressions.IrConstKind import org.jetbrains.kotlin.ir.expressions.IrConstKind
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.symbols.IrSymbolInternals
import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -44,6 +44,7 @@ class Fir2IrAnnotationsFromPluginRegistrar(private val components: Fir2IrCompone
return true return true
} }
@OptIn(IrSymbolInternals::class)
override fun addMetadataVisibleAnnotationsToElement(declaration: IrDeclaration, annotations: List<IrConstructorCall>) { override fun addMetadataVisibleAnnotationsToElement(declaration: IrDeclaration, annotations: List<IrConstructorCall>) {
require(annotations.all { it.typeArgumentsCount == 0 && it.hasOnlySupportedAnnotationArgumentTypes() }) { require(annotations.all { it.typeArgumentsCount == 0 && it.hasOnlySupportedAnnotationArgumentTypes() }) {
"Saving annotations with arguments from IR to metadata is only supported for basic constants. See KT-58968" "Saving annotations with arguments from IR to metadata is only supported for basic constants. See KT-58968"
@@ -105,6 +106,7 @@ class Fir2IrAnnotationsFromPluginRegistrar(private val components: Fir2IrCompone
private val ClassId.topmostParentClassId: ClassId private val ClassId.topmostParentClassId: ClassId
get() = parentClassId?.topmostParentClassId ?: this get() = parentClassId?.topmostParentClassId ?: this
@OptIn(IrSymbolInternals::class)
private fun IrConstructorCall.toFirAnnotation(): FirAnnotation { private fun IrConstructorCall.toFirAnnotation(): FirAnnotation {
val annotationClassId = this.symbol.owner.constructedClass.classId!! val annotationClassId = this.symbol.owner.constructedClass.classId!!
return buildAnnotation { return buildAnnotation {
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.ir.declarations.IrConstructor
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.expressions.impl.IrConstructorCallImpl import org.jetbrains.kotlin.ir.expressions.impl.IrConstructorCallImpl
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbolInternals
import org.jetbrains.kotlin.ir.types.defaultType import org.jetbrains.kotlin.ir.types.defaultType
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.name.StandardClassIds
@@ -79,6 +80,7 @@ class Fir2IrBuiltIns(
return session.symbolProvider.getClassLikeSymbolByClassId(id) as? FirRegularClassSymbol return session.symbolProvider.getClassLikeSymbolByClassId(id) as? FirRegularClassSymbol
} }
@OptIn(IrSymbolInternals::class)
private fun IrClassSymbol.toConstructorCall(firSymbol: FirRegularClassSymbol? = null): IrConstructorCallImpl? { private fun IrClassSymbol.toConstructorCall(firSymbol: FirRegularClassSymbol? = null): IrConstructorCallImpl? {
val constructorSymbol = if (firSymbol == null) { val constructorSymbol = if (firSymbol == null) {
owner.declarations.firstIsInstance<IrConstructor>().symbol owner.declarations.firstIsInstance<IrConstructor>().symbol
@@ -71,6 +71,7 @@ class Fir2IrClassifierStorage(
private fun FirTypeRef.toIrType(typeOrigin: ConversionTypeOrigin = ConversionTypeOrigin.DEFAULT): IrType = private fun FirTypeRef.toIrType(typeOrigin: ConversionTypeOrigin = ConversionTypeOrigin.DEFAULT): IrType =
with(typeConverter) { toIrType(typeOrigin) } with(typeConverter) { toIrType(typeOrigin) }
@OptIn(IrSymbolInternals::class)
fun preCacheBuiltinClasses() { fun preCacheBuiltinClasses() {
for ((classId, irBuiltinSymbol) in typeConverter.classIdToSymbolMap) { for ((classId, irBuiltinSymbol) in typeConverter.classIdToSymbolMap) {
// toSymbol() can return null when using an old stdlib that's missing some types // toSymbol() can return null when using an old stdlib that's missing some types
@@ -582,6 +583,7 @@ class Fir2IrClassifierStorage(
) )
} }
@OptIn(IrSymbolInternals::class)
fun findIrClass(lookupTag: ConeClassLikeLookupTag): IrClass? { fun findIrClass(lookupTag: ConeClassLikeLookupTag): IrClass? {
return if (lookupTag.classId.isLocal) { return if (lookupTag.classId.isLocal) {
getCachedLocalClass(lookupTag) getCachedLocalClass(lookupTag)
@@ -670,6 +672,7 @@ class Fir2IrClassifierStorage(
return irClass.symbol return irClass.symbol
} }
@OptIn(IrSymbolInternals::class)
fun getIrClassSymbolForNotFoundClass(classLikeLookupTag: ConeClassLikeLookupTag): IrClassSymbol { fun getIrClassSymbolForNotFoundClass(classLikeLookupTag: ConeClassLikeLookupTag): IrClassSymbol {
val classId = classLikeLookupTag.classId val classId = classLikeLookupTag.classId
val signature = IdSignature.CommonSignature( val signature = IdSignature.CommonSignature(
@@ -43,6 +43,7 @@ import org.jetbrains.kotlin.ir.interpreter.IrInterpreterConfiguration
import org.jetbrains.kotlin.ir.interpreter.IrInterpreterEnvironment import org.jetbrains.kotlin.ir.interpreter.IrInterpreterEnvironment
import org.jetbrains.kotlin.ir.interpreter.checker.EvaluationMode import org.jetbrains.kotlin.ir.interpreter.checker.EvaluationMode
import org.jetbrains.kotlin.ir.interpreter.transformer.transformConst import org.jetbrains.kotlin.ir.interpreter.transformer.transformConst
import org.jetbrains.kotlin.ir.symbols.IrSymbolInternals
import org.jetbrains.kotlin.ir.util.KotlinMangler import org.jetbrains.kotlin.ir.util.KotlinMangler
import org.jetbrains.kotlin.ir.util.NaiveSourceBasedFileEntryImpl import org.jetbrains.kotlin.ir.util.NaiveSourceBasedFileEntryImpl
import org.jetbrains.kotlin.ir.util.defaultType import org.jetbrains.kotlin.ir.util.defaultType
@@ -239,6 +240,7 @@ class Fir2IrConverter(
return irClass return irClass
} }
@OptIn(IrSymbolInternals::class)
private fun processCodeFragmentMembers( private fun processCodeFragmentMembers(
codeFragment: FirCodeFragment, codeFragment: FirCodeFragment,
irClass: IrClass = classifierStorage.getCachedIrCodeFragment(codeFragment)!! irClass: IrClass = classifierStorage.getCachedIrCodeFragment(codeFragment)!!
@@ -47,7 +47,6 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin.GeneratedByPlugi
import org.jetbrains.kotlin.ir.declarations.impl.* import org.jetbrains.kotlin.ir.declarations.impl.*
import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyClass import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyClass
import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
import org.jetbrains.kotlin.ir.expressions.IrSyntheticBodyKind import org.jetbrains.kotlin.ir.expressions.IrSyntheticBodyKind
import org.jetbrains.kotlin.ir.expressions.impl.IrErrorExpressionImpl import org.jetbrains.kotlin.ir.expressions.impl.IrErrorExpressionImpl
import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.symbols.*
@@ -161,6 +160,7 @@ class Fir2IrDeclarationStorage(
private val localStorage: Fir2IrLocalCallableStorage by threadLocal { Fir2IrLocalCallableStorage() } private val localStorage: Fir2IrLocalCallableStorage by threadLocal { Fir2IrLocalCallableStorage() }
@OptIn(IrSymbolInternals::class)
private fun areCompatible(firFunction: FirFunction, irFunction: IrFunction): Boolean { private fun areCompatible(firFunction: FirFunction, irFunction: IrFunction): Boolean {
if (firFunction is FirSimpleFunction && irFunction is IrSimpleFunction) { if (firFunction is FirSimpleFunction && irFunction is IrSimpleFunction) {
if (irFunction.name != firFunction.name) return false if (irFunction.name != firFunction.name) return false
@@ -578,6 +578,7 @@ class Fir2IrDeclarationStorage(
return getCachedIrFunction(function, fakeOverrideOwnerLookupTag = null) { signatureComposer.composeSignature(function) } return getCachedIrFunction(function, fakeOverrideOwnerLookupTag = null) { signatureComposer.composeSignature(function) }
} }
@OptIn(IrSymbolInternals::class)
fun getCachedIrFunction( fun getCachedIrFunction(
function: FirSimpleFunction, function: FirSimpleFunction,
fakeOverrideOwnerLookupTag: ConeClassLikeLookupTag?, fakeOverrideOwnerLookupTag: ConeClassLikeLookupTag?,
@@ -753,6 +754,7 @@ class Fir2IrDeclarationStorage(
} }
} }
@OptIn(IrSymbolInternals::class)
fun getCachedIrConstructor( fun getCachedIrConstructor(
constructor: FirConstructor, constructor: FirConstructor,
signatureCalculator: () -> IdSignature? = { null } signatureCalculator: () -> IdSignature? = { null }
@@ -1161,6 +1163,7 @@ class Fir2IrDeclarationStorage(
} }
} }
@OptIn(IrSymbolInternals::class)
fun getCachedIrProperty( fun getCachedIrProperty(
property: FirProperty, property: FirProperty,
fakeOverrideOwnerLookupTag: ConeClassLikeLookupTag?, fakeOverrideOwnerLookupTag: ConeClassLikeLookupTag?,
@@ -1564,6 +1567,7 @@ class Fir2IrDeclarationStorage(
) as IrConstructorSymbol ) as IrConstructorSymbol
} }
@OptIn(IrSymbolInternals::class)
fun getIrFunctionSymbol( fun getIrFunctionSymbol(
firFunctionSymbol: FirFunctionSymbol<*>, firFunctionSymbol: FirFunctionSymbol<*>,
fakeOverrideOwnerLookupTag: ConeClassLikeLookupTag? = null, fakeOverrideOwnerLookupTag: ConeClassLikeLookupTag? = null,
@@ -1634,6 +1638,7 @@ class Fir2IrDeclarationStorage(
return irFunction return irFunction
} }
@OptIn(IrSymbolInternals::class)
fun getIrPropertySymbol( fun getIrPropertySymbol(
firPropertySymbol: FirPropertySymbol, firPropertySymbol: FirPropertySymbol,
fakeOverrideOwnerLookupTag: ConeClassLikeLookupTag? = null, fakeOverrideOwnerLookupTag: ConeClassLikeLookupTag? = null,
@@ -1686,6 +1691,7 @@ class Fir2IrDeclarationStorage(
} }
} }
@OptIn(IrSymbolInternals::class)
private fun createIrLazyProperty( private fun createIrLazyProperty(
fir: FirProperty, fir: FirProperty,
signature: IdSignature, signature: IdSignature,
@@ -1725,6 +1731,7 @@ class Fir2IrDeclarationStorage(
return irProperty return irProperty
} }
@OptIn(IrSymbolInternals::class)
private inline fun <reified S : IrSymbol, reified D : IrOverridableDeclaration<S>> ConeClassLookupTagWithFixedSymbol.findIrFakeOverride( private inline fun <reified S : IrSymbol, reified D : IrOverridableDeclaration<S>> ConeClassLookupTagWithFixedSymbol.findIrFakeOverride(
name: Name, originalDeclaration: IrOverridableDeclaration<S> name: Name, originalDeclaration: IrOverridableDeclaration<S>
): IrSymbol? { ): IrSymbol? {
@@ -1735,6 +1742,7 @@ class Fir2IrDeclarationStorage(
}?.symbol }?.symbol
} }
@OptIn(IrSymbolInternals::class)
private fun generateLazyFakeOverrides(name: Name, fakeOverrideOwnerLookupTag: ConeClassLikeLookupTag?) { private fun generateLazyFakeOverrides(name: Name, fakeOverrideOwnerLookupTag: ConeClassLikeLookupTag?) {
val firClassSymbol = fakeOverrideOwnerLookupTag?.toSymbol(session) as? FirClassSymbol val firClassSymbol = fakeOverrideOwnerLookupTag?.toSymbol(session) as? FirClassSymbol
if (firClassSymbol != null) { if (firClassSymbol != null) {
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.ir.IrBuiltIns
import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.IrTypeOperatorCallImpl import org.jetbrains.kotlin.ir.expressions.impl.IrTypeOperatorCallImpl
import org.jetbrains.kotlin.ir.symbols.IrSymbolInternals
import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.util.classId import org.jetbrains.kotlin.ir.util.classId
import org.jetbrains.kotlin.ir.util.parentAsClass import org.jetbrains.kotlin.ir.util.parentAsClass
@@ -352,6 +353,7 @@ class Fir2IrImplicitCastInserter(
) )
} }
@OptIn(IrSymbolInternals::class)
internal fun implicitNotNullCast(original: IrExpression): IrTypeOperatorCall { internal fun implicitNotNullCast(original: IrExpression): IrTypeOperatorCall {
// Cast type massage 1. Remove @EnhancedNullability // Cast type massage 1. Remove @EnhancedNullability
// Cast type massage 2. Convert it to a non-null variant (in case of @FlexibleNullability) // Cast type massage 2. Convert it to a non-null variant (in case of @FlexibleNullability)
@@ -43,6 +43,7 @@ import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbolInternals
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.types.impl.IrErrorClassImpl import org.jetbrains.kotlin.ir.types.impl.IrErrorClassImpl
@@ -656,6 +657,7 @@ class Fir2IrVisitor(
!((scopeOwner is IrFunction || scopeOwner is IrProperty || scopeOwner is IrField) && (scopeOwner as IrDeclaration).parent == irClass) // Members of object !((scopeOwner is IrFunction || scopeOwner is IrProperty || scopeOwner is IrField) && (scopeOwner as IrDeclaration).parent == irClass) // Members of object
} }
@OptIn(IrSymbolInternals::class)
override fun visitThisReceiverExpression( override fun visitThisReceiverExpression(
thisReceiverExpression: FirThisReceiverExpression, thisReceiverExpression: FirThisReceiverExpression,
data: Any? data: Any?
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.fir.declarations.utils.classId
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.fir.types.ConeClassLikeType import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
@@ -24,7 +23,6 @@ import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@OptIn(SymbolInternals::class)
class FirIrProvider(val fir2IrComponents: Fir2IrComponents) : IrProvider { class FirIrProvider(val fir2IrComponents: Fir2IrComponents) : IrProvider {
private val symbolProvider = fir2IrComponents.session.symbolProvider private val symbolProvider = fir2IrComponents.session.symbolProvider
private val declarationStorage = fir2IrComponents.declarationStorage private val declarationStorage = fir2IrComponents.declarationStorage
@@ -64,6 +62,7 @@ class FirIrProvider(val fir2IrComponents: Fir2IrComponents) : IrProvider {
return getDeclarationForSignature(signature.nearestPublicSig(), kind) return getDeclarationForSignature(signature.nearestPublicSig(), kind)
} }
@OptIn(IrSymbolInternals::class)
private fun getDeclarationForCommonSignature(signature: IdSignature.CommonSignature, kind: SymbolKind): IrDeclaration? { private fun getDeclarationForCommonSignature(signature: IdSignature.CommonSignature, kind: SymbolKind): IrDeclaration? {
val packageFqName = FqName(signature.packageFqName) val packageFqName = FqName(signature.packageFqName)
val nameSegments = signature.nameSegments val nameSegments = signature.nameSegments
@@ -61,6 +61,7 @@ class IrBuiltInsOverFir(
private val irSignatureBuilder = PublicIdSignatureComputer(irMangler) private val irSignatureBuilder = PublicIdSignatureComputer(irMangler)
@OptIn(IrSymbolInternals::class)
override val booleanNotSymbol: IrSimpleFunctionSymbol by lazy { override val booleanNotSymbol: IrSimpleFunctionSymbol by lazy {
boolean.ensureLazyContentsCreated() boolean.ensureLazyContentsCreated()
booleanClass.owner.functions.first { it.name == OperatorNameConventions.NOT && it.returnType == booleanType }.symbol booleanClass.owner.functions.first { it.name == OperatorNameConventions.NOT && it.returnType == booleanType }.symbol
@@ -122,6 +123,7 @@ class IrBuiltInsOverFir(
override val booleanType: IrType get() = boolean.type override val booleanType: IrType get() = boolean.type
override val booleanClass: IrClassSymbol get() = boolean.klass override val booleanClass: IrClassSymbol get() = boolean.klass
@OptIn(IrSymbolInternals::class)
private val char by createClass(kotlinIrPackage, IdSignatureValues._char) { private val char by createClass(kotlinIrPackage, IdSignatureValues._char) {
configureSuperTypes(number) configureSuperTypes(number)
createStandardNumericAndCharMembers(charType) createStandardNumericAndCharMembers(charType)
@@ -201,6 +203,7 @@ class IrBuiltInsOverFir(
override val stringType: IrType get() = string.type override val stringType: IrType get() = string.type
private val intrinsicConstAnnotationFqName = kotlinInternalPackage.child(Name.identifier("IntrinsicConstEvaluation")) private val intrinsicConstAnnotationFqName = kotlinInternalPackage.child(Name.identifier("IntrinsicConstEvaluation"))
@OptIn(IrSymbolInternals::class)
internal val intrinsicConst = kotlinInternalIrPackage.createClass(intrinsicConstAnnotationFqName).apply { internal val intrinsicConst = kotlinInternalIrPackage.createClass(intrinsicConstAnnotationFqName).apply {
owner.createConstructor() owner.createConstructor()
owner.finalizeClassDefinition() owner.finalizeClassDefinition()
@@ -222,7 +225,9 @@ class IrBuiltInsOverFir(
} }
override val arrayClass: IrClassSymbol get() = array.klass override val arrayClass: IrClassSymbol get() = array.klass
@OptIn(IrSymbolInternals::class)
private val intRangeType by lazy { referenceClassByClassId(StandardClassIds.IntRange)!!.owner.defaultType } private val intRangeType by lazy { referenceClassByClassId(StandardClassIds.IntRange)!!.owner.defaultType }
@OptIn(IrSymbolInternals::class)
private val longRangeType by lazy { referenceClassByClassId(StandardClassIds.LongRange)!!.owner.defaultType } private val longRangeType by lazy { referenceClassByClassId(StandardClassIds.LongRange)!!.owner.defaultType }
private val annotation by loadClass(StandardClassIds.Annotation) private val annotation by loadClass(StandardClassIds.Annotation)
@@ -403,6 +408,7 @@ class IrBuiltInsOverFir(
override var dataClassArrayMemberToStringSymbol: IrSimpleFunctionSymbol private set override var dataClassArrayMemberToStringSymbol: IrSimpleFunctionSymbol private set
override var checkNotNullSymbol: IrSimpleFunctionSymbol private set override var checkNotNullSymbol: IrSimpleFunctionSymbol private set
@OptIn(IrSymbolInternals::class)
override val arrayOfNulls: IrSimpleFunctionSymbol by lazy { override val arrayOfNulls: IrSimpleFunctionSymbol by lazy {
findFunctions(kotlinPackage, Name.identifier("arrayOfNulls")).first { findFunctions(kotlinPackage, Name.identifier("arrayOfNulls")).first {
it.owner.dispatchReceiverParameter == null && it.owner.valueParameters.size == 1 && it.owner.dispatchReceiverParameter == null && it.owner.valueParameters.size == 1 &&
@@ -502,6 +508,7 @@ class IrBuiltInsOverFir(
}.toMap() }.toMap()
} }
@OptIn(IrSymbolInternals::class)
override val unsignedArraysElementTypes: Map<IrClassSymbol, IrType?> by lazy { override val unsignedArraysElementTypes: Map<IrClassSymbol, IrType?> by lazy {
unsignedTypesToUnsignedArrays.map { (k,v) -> v to referenceClassByClassId(k.classId)?.owner?.defaultType }.toMap() unsignedTypesToUnsignedArrays.map { (k,v) -> v to referenceClassByClassId(k.classId)?.owner?.defaultType }.toMap()
} }
@@ -516,33 +523,39 @@ class IrBuiltInsOverFir(
private val enum by loadClass(StandardClassIds.Enum) private val enum by loadClass(StandardClassIds.Enum)
override val enumClass: IrClassSymbol get() = enum.klass override val enumClass: IrClassSymbol get() = enum.klass
@OptIn(IrSymbolInternals::class)
override val intPlusSymbol: IrSimpleFunctionSymbol override val intPlusSymbol: IrSimpleFunctionSymbol
get() = intClass.functions.single { get() = intClass.functions.single {
it.owner.name == OperatorNameConventions.PLUS && it.owner.valueParameters[0].type == intType it.owner.name == OperatorNameConventions.PLUS && it.owner.valueParameters[0].type == intType
} }
@OptIn(IrSymbolInternals::class)
override val intTimesSymbol: IrSimpleFunctionSymbol override val intTimesSymbol: IrSimpleFunctionSymbol
get() = intClass.functions.single { get() = intClass.functions.single {
it.owner.name == OperatorNameConventions.TIMES && it.owner.valueParameters[0].type == intType it.owner.name == OperatorNameConventions.TIMES && it.owner.valueParameters[0].type == intType
} }
@OptIn(IrSymbolInternals::class)
override val intXorSymbol: IrSimpleFunctionSymbol override val intXorSymbol: IrSimpleFunctionSymbol
get() = intClass.functions.single { get() = intClass.functions.single {
it.owner.name == OperatorNameConventions.XOR && it.owner.valueParameters[0].type == intType it.owner.name == OperatorNameConventions.XOR && it.owner.valueParameters[0].type == intType
} }
@OptIn(IrSymbolInternals::class)
override val extensionToString: IrSimpleFunctionSymbol by lazy { override val extensionToString: IrSimpleFunctionSymbol by lazy {
findFunctions(kotlinPackage, OperatorNameConventions.TO_STRING).single { function -> findFunctions(kotlinPackage, OperatorNameConventions.TO_STRING).single { function ->
function.owner.extensionReceiverParameter?.let { receiver -> receiver.type == anyNType } ?: false function.owner.extensionReceiverParameter?.let { receiver -> receiver.type == anyNType } ?: false
} }
} }
@OptIn(IrSymbolInternals::class)
override val memberToString: IrSimpleFunctionSymbol by lazy { override val memberToString: IrSimpleFunctionSymbol by lazy {
findBuiltInClassMemberFunctions(anyClass, OperatorNameConventions.TO_STRING).single { function -> findBuiltInClassMemberFunctions(anyClass, OperatorNameConventions.TO_STRING).single { function ->
function.owner.valueParameters.isEmpty() function.owner.valueParameters.isEmpty()
} }
} }
@OptIn(IrSymbolInternals::class)
override val extensionStringPlus: IrSimpleFunctionSymbol by lazy { override val extensionStringPlus: IrSimpleFunctionSymbol by lazy {
findFunctions(kotlinPackage, OperatorNameConventions.PLUS).single { function -> findFunctions(kotlinPackage, OperatorNameConventions.PLUS).single { function ->
val isStringExtension = val isStringExtension =
@@ -552,6 +565,7 @@ class IrBuiltInsOverFir(
} }
} }
@OptIn(IrSymbolInternals::class)
override val memberStringPlus: IrSimpleFunctionSymbol by lazy { override val memberStringPlus: IrSimpleFunctionSymbol by lazy {
findBuiltInClassMemberFunctions(stringClass, OperatorNameConventions.PLUS).single { function -> findBuiltInClassMemberFunctions(stringClass, OperatorNameConventions.PLUS).single { function ->
function.owner.valueParameters.size == 1 && function.owner.valueParameters[0].type == anyNType function.owner.valueParameters.size == 1 && function.owner.valueParameters[0].type == anyNType
@@ -578,6 +592,7 @@ class IrBuiltInsOverFir(
return result return result
} }
@OptIn(IrSymbolInternals::class)
override fun getNonBuiltInFunctionsByExtensionReceiver( override fun getNonBuiltInFunctionsByExtensionReceiver(
name: Name, vararg packageNameSegments: String name: Name, vararg packageNameSegments: String
): Map<IrClassifierSymbol, IrSimpleFunctionSymbol> = ): Map<IrClassifierSymbol, IrSimpleFunctionSymbol> =
@@ -585,6 +600,7 @@ class IrBuiltInsOverFir(
fn.owner.extensionReceiverParameter?.type?.classifierOrNull fn.owner.extensionReceiverParameter?.type?.classifierOrNull
} }
@OptIn(IrSymbolInternals::class)
override fun getNonBuiltinFunctionsByReturnType( override fun getNonBuiltinFunctionsByReturnType(
name: Name, vararg packageNameSegments: String name: Name, vararg packageNameSegments: String
): Map<IrClassifierSymbol, IrSimpleFunctionSymbol> = ): Map<IrClassifierSymbol, IrSimpleFunctionSymbol> =
@@ -597,18 +613,22 @@ class IrBuiltInsOverFir(
private val suspendFunctionNMap = mutableMapOf<Int, IrClass>() private val suspendFunctionNMap = mutableMapOf<Int, IrClass>()
private val kSuspendFunctionNMap = mutableMapOf<Int, IrClass>() private val kSuspendFunctionNMap = mutableMapOf<Int, IrClass>()
@OptIn(IrSymbolInternals::class)
override fun functionN(arity: Int): IrClass = functionNMap.getOrPut(arity) { override fun functionN(arity: Int): IrClass = functionNMap.getOrPut(arity) {
referenceClassByClassId(StandardClassIds.FunctionN(arity))!!.owner referenceClassByClassId(StandardClassIds.FunctionN(arity))!!.owner
} }
@OptIn(IrSymbolInternals::class)
override fun kFunctionN(arity: Int): IrClass = kFunctionNMap.getOrPut(arity) { override fun kFunctionN(arity: Int): IrClass = kFunctionNMap.getOrPut(arity) {
referenceClassByClassId(StandardClassIds.KFunctionN(arity))!!.owner referenceClassByClassId(StandardClassIds.KFunctionN(arity))!!.owner
} }
@OptIn(IrSymbolInternals::class)
override fun suspendFunctionN(arity: Int): IrClass = suspendFunctionNMap.getOrPut(arity) { override fun suspendFunctionN(arity: Int): IrClass = suspendFunctionNMap.getOrPut(arity) {
referenceClassByClassId(StandardClassIds.SuspendFunctionN(arity))!!.owner referenceClassByClassId(StandardClassIds.SuspendFunctionN(arity))!!.owner
} }
@OptIn(IrSymbolInternals::class)
override fun kSuspendFunctionN(arity: Int): IrClass = kSuspendFunctionNMap.getOrPut(arity) { override fun kSuspendFunctionN(arity: Int): IrClass = kSuspendFunctionNMap.getOrPut(arity) {
referenceClassByClassId(StandardClassIds.KSuspendFunctionN(arity))!!.owner referenceClassByClassId(StandardClassIds.KSuspendFunctionN(arity))!!.owner
} }
@@ -635,6 +655,7 @@ class IrBuiltInsOverFir(
setOf(anyClass) setOf(anyClass)
} }
@OptIn(IrSymbolInternals::class)
override fun findBuiltInClassMemberFunctions(builtInClass: IrClassSymbol, name: Name): Iterable<IrSimpleFunctionSymbol> { override fun findBuiltInClassMemberFunctions(builtInClass: IrClassSymbol, name: Name): Iterable<IrSimpleFunctionSymbol> {
require(builtInClass in builtInClasses) require(builtInClass in builtInClasses)
return builtInClass.functions.filter { it.owner.name == name }.asIterable() return builtInClass.functions.filter { it.owner.name == name }.asIterable()
@@ -660,6 +681,7 @@ class IrBuiltInsOverFir(
private val generatedClass: IrClassSymbol, private val generatedClass: IrClassSymbol,
private var lazyContents: (IrClass.() -> Unit)? private var lazyContents: (IrClass.() -> Unit)?
) { ) {
@OptIn(IrSymbolInternals::class)
fun ensureLazyContentsCreated() { fun ensureLazyContentsCreated() {
if (lazyContents != null) synchronized(this) { if (lazyContents != null) synchronized(this) {
lazyContents?.invoke(generatedClass.owner) lazyContents?.invoke(generatedClass.owner)
@@ -754,6 +776,7 @@ class IrBuiltInsOverFir(
return components.classifierStorage.getIrClassSymbol(firClassSymbol) return components.classifierStorage.getIrClassSymbol(firClassSymbol)
} }
@OptIn(IrSymbolInternals::class)
private fun IrType.getMaybeBuiltinClass(): IrClass? { private fun IrType.getMaybeBuiltinClass(): IrClass? {
val lhsClassFqName = classFqName!! val lhsClassFqName = classFqName!!
return baseIrTypes.find { it.classFqName == lhsClassFqName }?.getClass() return baseIrTypes.find { it.classFqName == lhsClassFqName }?.getClass()
@@ -996,6 +1019,7 @@ class IrBuiltInsOverFir(
createMemberFunction(OperatorNameConventions.ITERATOR, iteratorType, isOperator = true) createMemberFunction(OperatorNameConventions.ITERATOR, iteratorType, isOperator = true)
} }
@OptIn(IrSymbolInternals::class)
private fun IrClass.createProperty( private fun IrClass.createProperty(
propertyName: String, returnType: IrType, propertyName: String, returnType: IrType,
modality: Modality = Modality.FINAL, modality: Modality = Modality.FINAL,
@@ -1142,6 +1166,7 @@ class IrBuiltInsOverFir(
finalizeClassDefinition() finalizeClassDefinition()
} }
@OptIn(IrSymbolInternals::class)
private fun IrClass.createCompanionObject(block: IrClass.() -> Unit = {}): IrClassSymbol = private fun IrClass.createCompanionObject(block: IrClass.() -> Unit = {}): IrClassSymbol =
this.createClass( this.createClass(
kotlinFqName.child(Name.identifier("Companion")), classKind = ClassKind.OBJECT, builderBlock = { kotlinFqName.child(Name.identifier("Companion")), classKind = ClassKind.OBJECT, builderBlock = {
@@ -36,6 +36,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbolInternals
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.types.*
@@ -134,6 +135,7 @@ internal class AdapterGenerator(
} }
} }
@OptIn(IrSymbolInternals::class)
internal fun generateAdaptedCallableReference( internal fun generateAdaptedCallableReference(
callableReferenceAccess: FirCallableReferenceAccess, callableReferenceAccess: FirCallableReferenceAccess,
explicitReceiverExpression: IrExpression?, explicitReceiverExpression: IrExpression?,
@@ -283,6 +285,7 @@ internal class AdapterGenerator(
private fun IrValueDeclaration.toIrGetValue(startOffset: Int, endOffset: Int): IrGetValue = private fun IrValueDeclaration.toIrGetValue(startOffset: Int, endOffset: Int): IrGetValue =
IrGetValueImpl(startOffset, endOffset, this.type, this.symbol) IrGetValueImpl(startOffset, endOffset, this.type, this.symbol)
@OptIn(IrSymbolInternals::class)
private fun createAdapteeCallForCallableReference( private fun createAdapteeCallForCallableReference(
callableReferenceAccess: FirCallableReferenceAccess, callableReferenceAccess: FirCallableReferenceAccess,
firAdaptee: FirFunction, firAdaptee: FirFunction,
@@ -67,6 +67,7 @@ class CallAndReferenceGenerator(
private fun ConeKotlinType.toIrType(): IrType = private fun ConeKotlinType.toIrType(): IrType =
with(typeConverter) { toIrType(conversionScope.defaultConversionTypeOrigin()) } with(typeConverter) { toIrType(conversionScope.defaultConversionTypeOrigin()) }
@OptIn(IrSymbolInternals::class)
fun convertToIrCallableReference( fun convertToIrCallableReference(
callableReferenceAccess: FirCallableReferenceAccess, callableReferenceAccess: FirCallableReferenceAccess,
explicitReceiverExpression: IrExpression?, explicitReceiverExpression: IrExpression?,
@@ -364,6 +365,7 @@ class CallAndReferenceGenerator(
return IrGetValueImpl(startOffset, endOffset, type, injectedValue.irParameterSymbol, origin) return IrGetValueImpl(startOffset, endOffset, type, injectedValue.irParameterSymbol, origin)
} }
@OptIn(IrSymbolInternals::class)
fun convertToIrCall( fun convertToIrCall(
qualifiedAccess: FirQualifiedAccessExpression, qualifiedAccess: FirQualifiedAccessExpression,
typeRef: FirTypeRef, typeRef: FirTypeRef,
@@ -575,6 +577,7 @@ class CallAndReferenceGenerator(
internal fun findInjectedValue(calleeReference: FirReference) = extensions.findInjectedValue(calleeReference, conversionScope) internal fun findInjectedValue(calleeReference: FirReference) = extensions.findInjectedValue(calleeReference, conversionScope)
@OptIn(IrSymbolInternals::class)
fun convertToIrSetCall(variableAssignment: FirVariableAssignment, explicitReceiverExpression: IrExpression?): IrExpression { fun convertToIrSetCall(variableAssignment: FirVariableAssignment, explicitReceiverExpression: IrExpression?): IrExpression {
try { try {
val type = irBuiltIns.unitType val type = irBuiltIns.unitType
@@ -692,6 +695,7 @@ class CallAndReferenceGenerator(
} }
} }
@OptIn(IrSymbolInternals::class)
private fun IrProperty.overriddenBackingFieldOrNull(): IrField? { private fun IrProperty.overriddenBackingFieldOrNull(): IrField? {
return overriddenSymbols.firstNotNullOfOrNull { return overriddenSymbols.firstNotNullOfOrNull {
val owner = it.owner val owner = it.owner
@@ -699,6 +703,7 @@ class CallAndReferenceGenerator(
} }
} }
@OptIn(IrSymbolInternals::class)
fun convertToIrConstructorCall(annotation: FirAnnotation): IrExpression { fun convertToIrConstructorCall(annotation: FirAnnotation): IrExpression {
val coneType = annotation.annotationTypeRef.coneTypeSafe<ConeLookupTagBasedType>() val coneType = annotation.annotationTypeRef.coneTypeSafe<ConeLookupTagBasedType>()
?.fullyExpandedType(session) as? ConeLookupTagBasedType ?.fullyExpandedType(session) as? ConeLookupTagBasedType
@@ -834,6 +839,7 @@ class CallAndReferenceGenerator(
return Triple(valueParameters, argumentMapping, substitutor) return Triple(valueParameters, argumentMapping, substitutor)
} }
@OptIn(IrSymbolInternals::class)
internal fun IrExpression.applyCallArguments( internal fun IrExpression.applyCallArguments(
statement: FirStatement?, statement: FirStatement?,
): IrExpression { ): IrExpression {
@@ -1045,6 +1051,7 @@ class CallAndReferenceGenerator(
return this return this
} }
@OptIn(IrSymbolInternals::class)
private fun IrExpression.applyImplicitIntegerCoercionIfNeeded( private fun IrExpression.applyImplicitIntegerCoercionIfNeeded(
argument: FirExpression, argument: FirExpression,
parameter: FirValueParameter? parameter: FirValueParameter?
@@ -1154,6 +1161,7 @@ class CallAndReferenceGenerator(
} }
} }
@OptIn(IrSymbolInternals::class)
private fun IrExpression.applyTypeArguments( private fun IrExpression.applyTypeArguments(
typeArguments: List<FirTypeProjection>?, typeArguments: List<FirTypeProjection>?,
typeParameters: List<FirTypeParameter>?, typeParameters: List<FirTypeParameter>?,
@@ -1207,6 +1215,7 @@ class CallAndReferenceGenerator(
?: explicitReceiverExpression ?: explicitReceiverExpression
} }
@OptIn(IrSymbolInternals::class)
private fun IrExpression.applyReceivers( private fun IrExpression.applyReceivers(
qualifiedAccess: FirQualifiedAccessExpression, qualifiedAccess: FirQualifiedAccessExpression,
explicitReceiverExpression: IrExpression?, explicitReceiverExpression: IrExpression?,
@@ -35,6 +35,7 @@ import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrFieldAccessExpression import org.jetbrains.kotlin.ir.expressions.IrFieldAccessExpression
import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbolInternals
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.util.constructedClassType import org.jetbrains.kotlin.ir.util.constructedClassType
import org.jetbrains.kotlin.ir.util.isSetter import org.jetbrains.kotlin.ir.util.isSetter
@@ -98,6 +99,7 @@ internal class ClassMemberGenerator(
declarationStorage.leaveScope(irClass) declarationStorage.leaveScope(irClass)
} }
@OptIn(IrSymbolInternals::class)
fun <T : IrFunction> convertFunctionContent(irFunction: T, firFunction: FirFunction?, containingClass: FirClass?): T { fun <T : IrFunction> convertFunctionContent(irFunction: T, firFunction: FirFunction?, containingClass: FirClass?): T {
conversionScope.withParent(irFunction) { conversionScope.withParent(irFunction) {
if (firFunction != null) { if (firFunction != null) {
@@ -335,6 +337,7 @@ internal class ClassMemberGenerator(
return this return this
} }
@OptIn(IrSymbolInternals::class)
internal fun FirDelegatedConstructorCall.toIrDelegatingConstructorCall(): IrExpression { internal fun FirDelegatedConstructorCall.toIrDelegatingConstructorCall(): IrExpression {
val constructedIrType = constructedTypeRef.toIrType() val constructedIrType = constructedTypeRef.toIrType()
val referencedSymbol = calleeReference.toResolvedConstructorSymbol() val referencedSymbol = calleeReference.toResolvedConstructorSymbol()
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbolInternals
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
@@ -71,6 +72,7 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) : Fir2IrCompon
val lookupTag: ConeClassLikeLookupTag, val lookupTag: ConeClassLikeLookupTag,
val origin: IrDeclarationOrigin val origin: IrDeclarationOrigin
) { ) {
@OptIn(IrSymbolInternals::class)
private val irDataClassMembersGenerator = object : IrBasedDataClassMembersGenerator( private val irDataClassMembersGenerator = object : IrBasedDataClassMembersGenerator(
IrGeneratorContextBase(components.irBuiltIns), IrGeneratorContextBase(components.irBuiltIns),
components.symbolTable, components.symbolTable,
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrReturnImpl import org.jetbrains.kotlin.ir.expressions.impl.IrReturnImpl
import org.jetbrains.kotlin.ir.symbols.IrSymbolInternals
import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
import org.jetbrains.kotlin.ir.util.SYNTHETIC_OFFSET import org.jetbrains.kotlin.ir.util.SYNTHETIC_OFFSET
@@ -53,6 +54,7 @@ class DelegatedMemberGenerator(private val components: Fir2IrComponents) : Fir2I
private val bodiesInfo = mutableListOf<DeclarationBodyInfo>() private val bodiesInfo = mutableListOf<DeclarationBodyInfo>()
@OptIn(IrSymbolInternals::class)
fun generateBodies() { fun generateBodies() {
for ((declaration, irField, delegateToSymbol, delegateToLookupTag) in bodiesInfo) { for ((declaration, irField, delegateToSymbol, delegateToLookupTag) in bodiesInfo) {
val callTypeCanBeNullable = Fir2IrImplicitCastInserter.typeCanBeEnhancedOrFlexibleNullable(delegateToSymbol.fir.returnTypeRef.coneType.fullyExpandedType(session)) val callTypeCanBeNullable = Fir2IrImplicitCastInserter.typeCanBeEnhancedOrFlexibleNullable(delegateToSymbol.fir.returnTypeRef.coneType.fullyExpandedType(session))
@@ -175,6 +177,7 @@ class DelegatedMemberGenerator(private val components: Fir2IrComponents) : Fir2I
return result?.unwrapSubstitutionOverrides() return result?.unwrapSubstitutionOverrides()
} }
@OptIn(IrSymbolInternals::class)
fun bindDelegatedMembersOverriddenSymbols(irClass: IrClass) { fun bindDelegatedMembersOverriddenSymbols(irClass: IrClass) {
val superClasses by lazy(LazyThreadSafetyMode.NONE) { val superClasses by lazy(LazyThreadSafetyMode.NONE) {
irClass.superTypes.mapNotNullTo(mutableSetOf()) { it.classifierOrNull?.owner as? IrClass } irClass.superTypes.mapNotNullTo(mutableSetOf()) { it.classifierOrNull?.owner as? IrClass }
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbolInternals
import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.util.IdSignature import org.jetbrains.kotlin.ir.util.IdSignature
import org.jetbrains.kotlin.ir.util.parentAsClass import org.jetbrains.kotlin.ir.util.parentAsClass
@@ -427,6 +428,7 @@ class FakeOverrideGenerator(
) { declarationStorage.getIrPropertySymbol(it) as IrPropertySymbol } ) { declarationStorage.getIrPropertySymbol(it) as IrPropertySymbol }
} }
@OptIn(IrSymbolInternals::class)
private fun <I : IrDeclaration, S : IrSymbol, F : FirCallableSymbol<*>> getOverriddenSymbolsInSupertypes( private fun <I : IrDeclaration, S : IrSymbol, F : FirCallableSymbol<*>> getOverriddenSymbolsInSupertypes(
declaration: I, declaration: I,
baseSymbols: List<F>, baseSymbols: List<F>,
@@ -440,6 +442,7 @@ class FakeOverrideGenerator(
}.distinct() }.distinct()
} }
@OptIn(IrSymbolInternals::class)
private fun <F : FirCallableSymbol<*>, S : IrSymbol> getOverriddenSymbolsInSupertypes( private fun <F : FirCallableSymbol<*>, S : IrSymbol> getOverriddenSymbolsInSupertypes(
overridden: F, overridden: F,
superClasses: Set<IrClass>, superClasses: Set<IrClass>,
@@ -505,6 +508,7 @@ class FakeOverrideGenerator(
} }
} }
@OptIn(IrSymbolInternals::class)
private fun IrProperty.setOverriddenSymbolsForProperty( private fun IrProperty.setOverriddenSymbolsForProperty(
declarationStorage: Fir2IrDeclarationStorage, declarationStorage: Fir2IrDeclarationStorage,
isVar: Boolean, isVar: Boolean,
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbolInternals
import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.util.getSimpleFunction import org.jetbrains.kotlin.ir.util.getSimpleFunction
@@ -235,6 +236,7 @@ internal class OperatorExpressionGenerator(
private fun IrExpression.negate(origin: IrStatementOrigin) = private fun IrExpression.negate(origin: IrStatementOrigin) =
primitiveOp1(startOffset, endOffset, irBuiltIns.booleanNotSymbol, irBuiltIns.booleanType, origin, this) primitiveOp1(startOffset, endOffset, irBuiltIns.booleanNotSymbol, irBuiltIns.booleanType, origin, this)
@OptIn(IrSymbolInternals::class)
private fun FirExpression.convertToIrExpression( private fun FirExpression.convertToIrExpression(
comparisonInfo: PrimitiveConeNumericComparisonInfo?, comparisonInfo: PrimitiveConeNumericComparisonInfo?,
isLeftType: Boolean isLeftType: Boolean
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.ir.declarations.lazy.IrMaybeDeserializedClass
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbolInternals
import org.jetbrains.kotlin.ir.types.IrSimpleType import org.jetbrains.kotlin.ir.types.IrSimpleType
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
@@ -149,6 +150,7 @@ class Fir2IrLazyClass(
.also(converter::bindFakeOverridesOrPostpone) .also(converter::bindFakeOverridesOrPostpone)
} }
@OptIn(IrSymbolInternals::class)
override val declarations: MutableList<IrDeclaration> by lazyVar(lock) { override val declarations: MutableList<IrDeclaration> by lazyVar(lock) {
val result = mutableListOf<IrDeclaration>() val result = mutableListOf<IrDeclaration>()
// NB: it's necessary to take all callables from scope, // NB: it's necessary to take all callables from scope,
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.ir.declarations.IrValueParameter
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbolInternals
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.util.isFacadeClass import org.jetbrains.kotlin.ir.util.isFacadeClass
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -112,6 +113,7 @@ class Fir2IrLazyPropertyAccessor(
firParentProperty.generateOverriddenAccessorSymbols(firParentClass, !isSetter) firParentProperty.generateOverriddenAccessorSymbols(firParentClass, !isSetter)
} }
@OptIn(IrSymbolInternals::class)
override val initialSignatureFunction: IrFunction? by lazy { override val initialSignatureFunction: IrFunction? by lazy {
(fir as? FirSyntheticPropertyAccessor)?.delegate?.let { declarationStorage.getIrFunctionSymbol(it.symbol).owner } (fir as? FirSyntheticPropertyAccessor)?.delegate?.let { declarationStorage.getIrFunctionSymbol(it.symbol).owner }
} }
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.ir.declarations.IrValueParameter
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbolInternals
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
@@ -101,6 +102,7 @@ class Fir2IrLazySimpleFunction(
fir.generateOverriddenFunctionSymbols(firParent) fir.generateOverriddenFunctionSymbols(firParent)
} }
@OptIn(IrSymbolInternals::class)
override val initialSignatureFunction: IrFunction? by lazy { override val initialSignatureFunction: IrFunction? by lazy {
(fir.initialSignatureAttr as? FirFunction)?.symbol?.let { declarationStorage.getIrFunctionSymbol(it).owner }?.takeIf { it !== this } (fir.initialSignatureAttr as? FirFunction)?.symbol?.let { declarationStorage.getIrFunctionSymbol(it).owner }?.takeIf { it !== this }
} }
@@ -10,15 +10,17 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.descriptors.* import org.jetbrains.kotlin.ir.descriptors.*
import org.jetbrains.kotlin.ir.symbols.IrBindableSymbol import org.jetbrains.kotlin.ir.symbols.IrBindableSymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbolInternals
import org.jetbrains.kotlin.ir.util.IdSignature import org.jetbrains.kotlin.ir.util.IdSignature
import org.jetbrains.kotlin.ir.util.render import org.jetbrains.kotlin.ir.util.render
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
abstract class Fir2IrBindableSymbol<out D : DeclarationDescriptor, B : IrDeclaration>( abstract class Fir2IrBindableSymbol<out D : DeclarationDescriptor, B : IrDeclaration>(
override val signature: IdSignature, override val signature: IdSignature,
) : IrBindableSymbol<D, B> { ) : IrBindableSymbol<D, B> {
private var _owner: B? = null private var _owner: B? = null
@IrSymbolInternals
override val owner: B override val owner: B
get() = _owner ?: throw IllegalStateException("Symbol is unbound") get() = _owner ?: throw IllegalStateException("Symbol is unbound")
@@ -33,6 +35,7 @@ abstract class Fir2IrBindableSymbol<out D : DeclarationDescriptor, B : IrDeclara
override val isBound: Boolean override val isBound: Boolean
get() = _owner != null get() = _owner != null
@OptIn(IrSymbolInternals::class)
@ObsoleteDescriptorBasedAPI @ObsoleteDescriptorBasedAPI
override val descriptor: D override val descriptor: D
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
@@ -44,6 +47,7 @@ abstract class Fir2IrBindableSymbol<out D : DeclarationDescriptor, B : IrDeclara
override var privateSignature: IdSignature? = null override var privateSignature: IdSignature? = null
@OptIn(IrSymbolInternals::class)
override fun toString(): String { override fun toString(): String {
if (isBound) return owner.render() if (isBound) return owner.render()
return "Unbound public symbol for $signature" return "Unbound public symbol for $signature"