Fir2IR: introduce IdSignature?.iscomposite()

This commit is contained in:
Georgy Bronnikov
2022-05-08 20:53:58 +03:00
committed by Alexander Udalov
parent 64818c817f
commit a8cc3ec316
4 changed files with 12 additions and 11 deletions
@@ -34,6 +34,7 @@ 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.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.isComposite
import org.jetbrains.kotlin.ir.util.parentAsClass import org.jetbrains.kotlin.ir.util.parentAsClass
import org.jetbrains.kotlin.load.java.JavaDescriptorVisibilities import org.jetbrains.kotlin.load.java.JavaDescriptorVisibilities
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -231,7 +232,7 @@ class FakeOverrideGenerator(
// have the same signature. // have the same signature.
// Now we avoid this problem by signature caching, // Now we avoid this problem by signature caching,
// so both FIR overrides correspond to one IR fake override // so both FIR overrides correspond to one IR fake override
val isTopLevelPrivate = irClass.symbol.signature is IdSignature.CompositeSignature val isTopLevelPrivate = irClass.symbol.signature.isComposite()
signatureComposer.composeSignature(fakeOverrideFirDeclaration, forceTopLevelPrivate = isTopLevelPrivate) signatureComposer.composeSignature(fakeOverrideFirDeclaration, forceTopLevelPrivate = isTopLevelPrivate)
}?.takeIf { it.parent == irClass } }?.takeIf { it.parent == irClass }
?: createIrDeclaration( ?: createIrDeclaration(
@@ -283,7 +284,7 @@ class FakeOverrideGenerator(
} }
} }
fun createFirFunctionFakeOverride( internal fun createFirFunctionFakeOverride(
klass: FirClass, klass: FirClass,
irClass: IrClass, irClass: IrClass,
originalSymbol: FirNamedFunctionSymbol, originalSymbol: FirNamedFunctionSymbol,
@@ -301,7 +302,7 @@ class FakeOverrideGenerator(
scope scope
) )
fun createFirPropertyFakeOverride( internal fun createFirPropertyFakeOverride(
klass: FirClass, klass: FirClass,
irClass: IrClass, irClass: IrClass,
originalSymbol: FirPropertySymbol, originalSymbol: FirPropertySymbol,
@@ -26,10 +26,7 @@ import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
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
import org.jetbrains.kotlin.ir.util.DeserializableClass import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.util.IdSignature
import org.jetbrains.kotlin.ir.util.isEnumClass
import org.jetbrains.kotlin.ir.util.isObject
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.util.OperatorNameConventions import org.jetbrains.kotlin.util.OperatorNameConventions
import org.jetbrains.kotlin.utils.addIfNotNull import org.jetbrains.kotlin.utils.addIfNotNull
@@ -150,7 +147,7 @@ class Fir2IrLazyClass(
} }
override val declarations: MutableList<IrDeclaration> by lazyVar(lock) { override val declarations: MutableList<IrDeclaration> by lazyVar(lock) {
val isTopLevelPrivate = symbol.signature is IdSignature.CompositeSignature val isTopLevelPrivate = symbol.signature.isComposite()
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,
// e.g. to avoid accessing un-enhanced Java declarations with FirJavaTypeRef etc. inside // e.g. to avoid accessing un-enhanced Java declarations with FirJavaTypeRef etc. inside
@@ -32,7 +32,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.*
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
import org.jetbrains.kotlin.ir.util.IdSignature import org.jetbrains.kotlin.ir.util.isComposite
class Fir2IrLazyProperty( class Fir2IrLazyProperty(
components: Fir2IrComponents, components: Fir2IrComponents,
@@ -165,7 +165,7 @@ class Fir2IrLazyProperty(
fir, fir,
isSetter = false, isSetter = false,
containingClass?.symbol?.toLookupTag(), containingClass?.symbol?.toLookupTag(),
forceTopLevelPrivate = symbol.signature is IdSignature.CompositeSignature forceTopLevelPrivate = symbol.signature.isComposite()
)!! )!!
symbolTable.declareSimpleFunction(signature, symbolFactory = { Fir2IrSimpleFunctionSymbol(signature) }) { symbol -> symbolTable.declareSimpleFunction(signature, symbolFactory = { Fir2IrSimpleFunctionSymbol(signature) }) { symbol ->
Fir2IrLazyPropertyAccessor( Fir2IrLazyPropertyAccessor(
@@ -199,7 +199,7 @@ class Fir2IrLazyProperty(
fir, fir,
isSetter = true, isSetter = true,
containingClass?.symbol?.toLookupTag(), containingClass?.symbol?.toLookupTag(),
forceTopLevelPrivate = symbol.signature is IdSignature.CompositeSignature forceTopLevelPrivate = symbol.signature.isComposite()
)!! )!!
symbolTable.declareSimpleFunction(signature, symbolFactory = { Fir2IrSimpleFunctionSymbol(signature) }) { symbol -> symbolTable.declareSimpleFunction(signature, symbolFactory = { Fir2IrSimpleFunctionSymbol(signature) }) { symbol ->
Fir2IrLazyPropertyAccessor( Fir2IrLazyPropertyAccessor(
@@ -1256,3 +1256,6 @@ private fun computeAllOverridden(function: IrSimpleFunction, result: MutableSet<
fun IrBuiltIns.getKFunctionType(returnType: IrType, parameterTypes: List<IrType>) = fun IrBuiltIns.getKFunctionType(returnType: IrType, parameterTypes: List<IrType>) =
kFunctionN(parameterTypes.size).typeWith(parameterTypes + returnType) kFunctionN(parameterTypes.size).typeWith(parameterTypes + returnType)
fun IdSignature?.isComposite(): Boolean =
this is IdSignature.CompositeSignature