Fir2IrClassifierStorage: don't calculate signature in registerClass

This commit is contained in:
Mikhail Glukhikh
2022-06-28 19:01:58 +02:00
committed by Space
parent 24c1380b2e
commit 45eb9238b3
9 changed files with 27 additions and 16 deletions
@@ -45,6 +45,7 @@ fun FirSession.convertToIr(
FirJvmKotlinMangler(this), JvmIrMangler, IrFactoryImpl,
FirJvmVisibilityConverter,
Fir2IrJvmSpecialAnnotationSymbolProvider(),
irGeneratorExtensions
irGeneratorExtensions,
generateSignatures = false
)
}
@@ -22,7 +22,6 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.builders.declarations.UNDEFINED_PARAMETER_INDEX
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrEnumConstructorCallImpl
@@ -35,6 +34,7 @@ import org.jetbrains.kotlin.ir.util.constructors
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.utils.addToStdlib.runUnless
class Fir2IrClassifierStorage(
private val components: Fir2IrComponents
@@ -292,14 +292,14 @@ class Fir2IrClassifierStorage(
predefinedOrigin: IrDeclarationOrigin? = null
): IrClass {
val visibility = regularClass.visibility
val modality = if (regularClass.classKind == ClassKind.ENUM_CLASS) {
regularClass.enumClassModality()
} else if (regularClass.classKind == ClassKind.ANNOTATION_CLASS) {
Modality.OPEN
} else {
regularClass.modality ?: Modality.FINAL
val modality = when (regularClass.classKind) {
ClassKind.ENUM_CLASS -> regularClass.enumClassModality()
ClassKind.ANNOTATION_CLASS -> Modality.OPEN
else -> regularClass.modality ?: Modality.FINAL
}
val signature = runUnless(regularClass.isLocal || !generateSignatures) {
signatureComposer.composeSignature(regularClass)
}
val signature = if (regularClass.isLocal) null else signatureComposer.composeSignature(regularClass)
val irClass = regularClass.convertWithOffsets { startOffset, endOffset ->
declareIrClass(signature) { symbol ->
irFactory.createClass(
@@ -43,4 +43,5 @@ interface Fir2IrComponents {
val delegatedMemberGenerator: DelegatedMemberGenerator
val extensions: Fir2IrExtensions
val generateSignatures: Boolean
}
@@ -25,6 +25,7 @@ class Fir2IrComponentsStorage(
override val irFactory: IrFactory,
override val signatureComposer: FirBasedSignatureComposer,
override val extensions: Fir2IrExtensions,
override val generateSignatures: Boolean
) : Fir2IrComponents {
override lateinit var converter: Fir2IrConverter
@@ -396,7 +396,6 @@ class Fir2IrConverter(
}
}
@OptIn(ObsoleteDescriptorBasedAPI::class)
fun createModuleFragment(
session: FirSession,
scopeSession: ScopeSession,
@@ -409,13 +408,16 @@ class Fir2IrConverter(
irFactory: IrFactory,
visibilityConverter: Fir2IrVisibilityConverter,
specialSymbolProvider: Fir2IrSpecialSymbolProvider,
irGenerationExtensions: Collection<IrGenerationExtension>
irGenerationExtensions: Collection<IrGenerationExtension>,
generateSignatures: Boolean
): Fir2IrResult {
val moduleDescriptor = FirModuleDescriptor(session)
val signatureComposer = FirBasedSignatureComposer(mangler)
val wrappedSignaturer = WrappedDescriptorSignatureComposer(signaturer, signatureComposer)
val symbolTable = SymbolTable(wrappedSignaturer, irFactory)
val components = Fir2IrComponentsStorage(session, scopeSession, symbolTable, irFactory, signatureComposer, fir2IrExtensions)
val components = Fir2IrComponentsStorage(
session, scopeSession, symbolTable, irFactory, signatureComposer, fir2IrExtensions, generateSignatures
)
val converter = Fir2IrConverter(moduleDescriptor, components)
components.converter = converter