Fir2IrClassifierStorage: drop unnecessary signature manipulations

This commit is contained in:
Mikhail Glukhikh
2022-12-13 12:12:18 +01:00
committed by Space Team
parent 8580461b5b
commit 0ecd9000cd
5 changed files with 22 additions and 31 deletions
@@ -35,6 +35,7 @@ import org.jetbrains.kotlin.ir.util.IdSignature
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.utils.addToStdlib.runIf
import org.jetbrains.kotlin.utils.addToStdlib.runUnless import org.jetbrains.kotlin.utils.addToStdlib.runUnless
class Fir2IrClassifierStorage( class Fir2IrClassifierStorage(
@@ -355,20 +356,17 @@ class Fir2IrClassifierStorage(
): IrClass { ): IrClass {
val origin = IrDeclarationOrigin.DEFINED val origin = IrDeclarationOrigin.DEFINED
val modality = Modality.FINAL val modality = Modality.FINAL
val signature = null
val result = anonymousObject.convertWithOffsets { startOffset, endOffset -> val result = anonymousObject.convertWithOffsets { startOffset, endOffset ->
declareIrClass(signature) { symbol -> irFactory.createClass(
irFactory.createClass( startOffset, endOffset, origin, IrClassSymbolImpl(), name,
startOffset, endOffset, origin, symbol, name, // NB: for unknown reason, IR uses 'CLASS' kind for simple anonymous objects
// NB: for unknown reason, IR uses 'CLASS' kind for simple anonymous objects anonymousObject.classKind.takeIf { it == ClassKind.ENUM_ENTRY } ?: ClassKind.CLASS,
anonymousObject.classKind.takeIf { it == ClassKind.ENUM_ENTRY } ?: ClassKind.CLASS, components.visibilityConverter.convertToDescriptorVisibility(visibility), modality
components.visibilityConverter.convertToDescriptorVisibility(visibility), modality ).apply {
).apply { metadata = FirMetadataSource.Class(anonymousObject)
metadata = FirMetadataSource.Class(anonymousObject) setThisReceiver(anonymousObject.typeParameters)
setThisReceiver(anonymousObject.typeParameters) if (irParent != null) {
if (irParent != null) { this.parent = irParent
this.parent = irParent
}
} }
} }
}.declareSupertypesAndTypeParameters(anonymousObject) }.declareSupertypesAndTypeParameters(anonymousObject)
@@ -553,17 +551,6 @@ class Fir2IrClassifierStorage(
if (firClass is FirAnonymousObject || firClass is FirRegularClass && firClass.visibility == Visibilities.Local) { if (firClass is FirAnonymousObject || firClass is FirRegularClass && firClass.visibility == Visibilities.Local) {
return createLocalIrClassOnTheFly(firClass).symbol return createLocalIrClassOnTheFly(firClass).symbol
} }
val signature = signatureComposer.composeSignature(firClass, forceTopLevelPrivate = forceTopLevelPrivate)!!
val symbol = symbolTable.referenceClass(signature)
if (symbol.isBound) {
val irClass = symbol.owner
classCache[firClass as FirRegularClass] = irClass
val mappedTypeParameters = firClass.typeParameters.filterIsInstance<FirTypeParameter>().zip(irClass.typeParameters)
for ((firTypeParameter, irTypeParameter) in mappedTypeParameters) {
typeParameterCache[firTypeParameter] = irTypeParameter
}
return symbol
}
firClass as FirRegularClass firClass as FirRegularClass
val classId = firClassSymbol.classId val classId = firClassSymbol.classId
val parentId = classId.outerClassId val parentId = classId.outerClassId
@@ -573,9 +560,12 @@ class Fir2IrClassifierStorage(
// firClass may be referenced by some parent's type parameters as a bound. In that case, getIrClassSymbol will be called recursively. // firClass may be referenced by some parent's type parameters as a bound. In that case, getIrClassSymbol will be called recursively.
getCachedIrClass(firClass)?.let { return it.symbol } getCachedIrClass(firClass)?.let { return it.symbol }
val signature = runIf(generateSignatures) {
signatureComposer.composeSignature(firClass, forceTopLevelPrivate = forceTopLevelPrivate)
}
val irClass = firClass.convertWithOffsets { startOffset, endOffset -> val irClass = firClass.convertWithOffsets { startOffset, endOffset ->
symbolTable.declareClass(signature, { symbol }) { declareIrClass(signature) { irClassSymbol ->
Fir2IrLazyClass(components, startOffset, endOffset, firClass.irOrigin(firProvider), firClass, symbol).apply { Fir2IrLazyClass(components, startOffset, endOffset, firClass.irOrigin(firProvider), firClass, irClassSymbol).apply {
parent = irParent parent = irParent
} }
} }
@@ -584,7 +574,7 @@ class Fir2IrClassifierStorage(
// NB: this is needed to prevent recursions in case of self bounds // NB: this is needed to prevent recursions in case of self bounds
(irClass as Fir2IrLazyClass).prepareTypeParameters() (irClass as Fir2IrLazyClass).prepareTypeParameters()
return symbol return irClass.symbol
} }
fun getIrClassSymbolForNotFoundClass(classLikeLookupTag: ConeClassLikeLookupTag): IrClassSymbol { fun getIrClassSymbolForNotFoundClass(classLikeLookupTag: ConeClassLikeLookupTag): IrClassSymbol {
@@ -24,7 +24,7 @@ interface Fir2IrComponents {
val converter: Fir2IrConverter val converter: Fir2IrConverter
val symbolTable: SymbolTable val symbolTable: SymbolTable
val irBuiltIns: IrBuiltIns val irBuiltIns: IrBuiltInsOverFir
val builtIns: Fir2IrBuiltIns val builtIns: Fir2IrBuiltIns
val irFactory: IrFactory val irFactory: IrFactory
val irProviders: List<IrProvider> val irProviders: List<IrProvider>
@@ -33,7 +33,7 @@ class Fir2IrComponentsStorage(
override lateinit var classifierStorage: Fir2IrClassifierStorage override lateinit var classifierStorage: Fir2IrClassifierStorage
override lateinit var declarationStorage: Fir2IrDeclarationStorage override lateinit var declarationStorage: Fir2IrDeclarationStorage
override lateinit var irBuiltIns: IrBuiltIns override lateinit var irBuiltIns: IrBuiltInsOverFir
override lateinit var builtIns: Fir2IrBuiltIns override lateinit var builtIns: Fir2IrBuiltIns
override lateinit var irProviders: List<IrProvider> override lateinit var irProviders: List<IrProvider>
@@ -49,7 +49,8 @@ class Fir2IrTypeConverter(
StandardClassIds.Float to irBuiltIns.floatClass, StandardClassIds.Float to irBuiltIns.floatClass,
StandardClassIds.Double to irBuiltIns.doubleClass, StandardClassIds.Double to irBuiltIns.doubleClass,
StandardClassIds.Char to irBuiltIns.charClass, StandardClassIds.Char to irBuiltIns.charClass,
StandardClassIds.Array to irBuiltIns.arrayClass StandardClassIds.Array to irBuiltIns.arrayClass,
INTRINSIC_CONST_EVALUATION_ANNOTATION to irBuiltIns.intrinsicConst
) )
} }
@@ -196,7 +196,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"))
private val intrinsicConst = kotlinInternalIrPackage.createClass(intrinsicConstAnnotationFqName).apply { internal val intrinsicConst = kotlinInternalIrPackage.createClass(intrinsicConstAnnotationFqName).apply {
owner.createConstructor() owner.createConstructor()
owner.finalizeClassDefinition() owner.finalizeClassDefinition()
} }