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.Name
import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.utils.addToStdlib.runIf
import org.jetbrains.kotlin.utils.addToStdlib.runUnless
class Fir2IrClassifierStorage(
@@ -355,20 +356,17 @@ class Fir2IrClassifierStorage(
): IrClass {
val origin = IrDeclarationOrigin.DEFINED
val modality = Modality.FINAL
val signature = null
val result = anonymousObject.convertWithOffsets { startOffset, endOffset ->
declareIrClass(signature) { symbol ->
irFactory.createClass(
startOffset, endOffset, origin, symbol, name,
// NB: for unknown reason, IR uses 'CLASS' kind for simple anonymous objects
anonymousObject.classKind.takeIf { it == ClassKind.ENUM_ENTRY } ?: ClassKind.CLASS,
components.visibilityConverter.convertToDescriptorVisibility(visibility), modality
).apply {
metadata = FirMetadataSource.Class(anonymousObject)
setThisReceiver(anonymousObject.typeParameters)
if (irParent != null) {
this.parent = irParent
}
irFactory.createClass(
startOffset, endOffset, origin, IrClassSymbolImpl(), name,
// NB: for unknown reason, IR uses 'CLASS' kind for simple anonymous objects
anonymousObject.classKind.takeIf { it == ClassKind.ENUM_ENTRY } ?: ClassKind.CLASS,
components.visibilityConverter.convertToDescriptorVisibility(visibility), modality
).apply {
metadata = FirMetadataSource.Class(anonymousObject)
setThisReceiver(anonymousObject.typeParameters)
if (irParent != null) {
this.parent = irParent
}
}
}.declareSupertypesAndTypeParameters(anonymousObject)
@@ -553,17 +551,6 @@ class Fir2IrClassifierStorage(
if (firClass is FirAnonymousObject || firClass is FirRegularClass && firClass.visibility == Visibilities.Local) {
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
val classId = firClassSymbol.classId
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.
getCachedIrClass(firClass)?.let { return it.symbol }
val signature = runIf(generateSignatures) {
signatureComposer.composeSignature(firClass, forceTopLevelPrivate = forceTopLevelPrivate)
}
val irClass = firClass.convertWithOffsets { startOffset, endOffset ->
symbolTable.declareClass(signature, { symbol }) {
Fir2IrLazyClass(components, startOffset, endOffset, firClass.irOrigin(firProvider), firClass, symbol).apply {
declareIrClass(signature) { irClassSymbol ->
Fir2IrLazyClass(components, startOffset, endOffset, firClass.irOrigin(firProvider), firClass, irClassSymbol).apply {
parent = irParent
}
}
@@ -584,7 +574,7 @@ class Fir2IrClassifierStorage(
// NB: this is needed to prevent recursions in case of self bounds
(irClass as Fir2IrLazyClass).prepareTypeParameters()
return symbol
return irClass.symbol
}
fun getIrClassSymbolForNotFoundClass(classLikeLookupTag: ConeClassLikeLookupTag): IrClassSymbol {
@@ -24,7 +24,7 @@ interface Fir2IrComponents {
val converter: Fir2IrConverter
val symbolTable: SymbolTable
val irBuiltIns: IrBuiltIns
val irBuiltIns: IrBuiltInsOverFir
val builtIns: Fir2IrBuiltIns
val irFactory: IrFactory
val irProviders: List<IrProvider>
@@ -33,7 +33,7 @@ class Fir2IrComponentsStorage(
override lateinit var classifierStorage: Fir2IrClassifierStorage
override lateinit var declarationStorage: Fir2IrDeclarationStorage
override lateinit var irBuiltIns: IrBuiltIns
override lateinit var irBuiltIns: IrBuiltInsOverFir
override lateinit var builtIns: Fir2IrBuiltIns
override lateinit var irProviders: List<IrProvider>
@@ -49,7 +49,8 @@ class Fir2IrTypeConverter(
StandardClassIds.Float to irBuiltIns.floatClass,
StandardClassIds.Double to irBuiltIns.doubleClass,
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
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.finalizeClassDefinition()
}