From 8ebb412705108384d7efd80deeb674ee54149915 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Wed, 15 Nov 2023 15:52:48 +0200 Subject: [PATCH] [FIR2IR] Introduce special FirProvider with plugin-generated files For declarations generated by plugins, fir2ir creates special synthetic FIR files, which are not registered in the regular FirProvider. This leads to incorrect determination of ir parent for generated declarations, because `irParent` utility relies on file returned from fir provider To fix this issue, the new FirProvider for fir2ir is introduced, which wraps the original provider and allows to register newly created files Note that this means that it's illegal anymore to use FirProvider from session anywhere in fir2ir. `firProvider` from `Fir2IrComponents` should be used instead --- .../backend/jvm/FirJvmSerializerExtension.kt | 10 +-- .../kotlin/fir/backend/ConversionUtils.kt | 18 +++-- .../Fir2IrAnnotationsFromPluginRegistrar.kt | 2 +- .../fir/backend/Fir2IrClassifierStorage.kt | 4 +- .../kotlin/fir/backend/Fir2IrComponents.kt | 7 ++ .../fir/backend/Fir2IrComponentsStorage.kt | 1 + .../kotlin/fir/backend/Fir2IrConverter.kt | 5 +- .../fir/backend/Fir2IrDeclarationStorage.kt | 27 ++++++-- .../backend/FirProviderWithGeneratedFiles.kt | 66 +++++++++++++++++++ .../generators/Fir2IrClassifiersGenerator.kt | 8 ++- .../Fir2IrLazyDeclarationsGenerator.kt | 3 +- 11 files changed, 124 insertions(+), 27 deletions(-) create mode 100644 compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirProviderWithGeneratedFiles.kt diff --git a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmSerializerExtension.kt b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmSerializerExtension.kt index cdfa9c57370..650184c0c4c 100644 --- a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmSerializerExtension.kt +++ b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmSerializerExtension.kt @@ -24,7 +24,8 @@ import org.jetbrains.kotlin.fir.java.hasJvmFieldAnnotation import org.jetbrains.kotlin.fir.languageVersionSettings import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.resolve.ScopeSession -import org.jetbrains.kotlin.fir.resolve.providers.firProvider +import org.jetbrains.kotlin.fir.resolve.providers.getRegularClassSymbolByClassId +import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol import org.jetbrains.kotlin.fir.serialization.* import org.jetbrains.kotlin.fir.serialization.constant.ConstValueProvider @@ -292,10 +293,9 @@ class FirJvmSerializerExtension( return false } - val grandParent = - containerSymbol.classId.outerClassId?.let { - session.firProvider.getFirClassifierByFqName(it) as? FirRegularClass - } + val grandParent = containerSymbol.classId.outerClassId?.let { + session.symbolProvider.getRegularClassSymbolByClassId(it)?.fir + } return grandParent != null && (grandParent.classKind == ClassKind.INTERFACE || grandParent.classKind == ClassKind.ANNOTATION_CLASS) } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt index cbb3da54864..546aecd0a7d 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt @@ -18,7 +18,9 @@ import org.jetbrains.kotlin.fir.builder.buildPackageDirective import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.builder.buildFile import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty -import org.jetbrains.kotlin.fir.declarations.utils.* +import org.jetbrains.kotlin.fir.declarations.utils.isInline +import org.jetbrains.kotlin.fir.declarations.utils.isJava +import org.jetbrains.kotlin.fir.declarations.utils.isStatic import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.extensions.FirExtensionApiInternals import org.jetbrains.kotlin.fir.extensions.declarationGenerators @@ -30,13 +32,15 @@ import org.jetbrains.kotlin.fir.references.impl.FirPropertyFromParameterResolved import org.jetbrains.kotlin.fir.references.toResolvedCallableSymbol import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.calls.FirSimpleSyntheticPropertySymbol -import org.jetbrains.kotlin.fir.resolve.providers.FirProvider import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutorByMap -import org.jetbrains.kotlin.fir.scopes.* +import org.jetbrains.kotlin.fir.scopes.FirContainingNamesAwareScope +import org.jetbrains.kotlin.fir.scopes.FirTypeScope +import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope import org.jetbrains.kotlin.fir.scopes.impl.originalConstructorIfTypeAlias +import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.* @@ -48,7 +52,10 @@ import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin.GeneratedByPlugin import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.* -import org.jetbrains.kotlin.ir.symbols.* +import org.jetbrains.kotlin.ir.symbols.IrClassSymbol +import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol +import org.jetbrains.kotlin.ir.symbols.IrSymbol +import org.jetbrains.kotlin.ir.symbols.IrValueSymbol import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.types.impl.IrErrorTypeImpl @@ -575,7 +582,8 @@ internal fun IrDeclarationParent.declareThisReceiverParameter( } } -fun FirClass.irOrigin(firProvider: FirProvider): IrDeclarationOrigin = when { +context(Fir2IrComponents) +fun FirClass.irOrigin(): IrDeclarationOrigin = when { firProvider.getFirClassifierContainerFileIfAny(symbol) != null -> IrDeclarationOrigin.DEFINED isJava -> IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB else -> when (val origin = origin) { diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrAnnotationsFromPluginRegistrar.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrAnnotationsFromPluginRegistrar.kt index c500d24a0d8..dfe8ec5d243 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrAnnotationsFromPluginRegistrar.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrAnnotationsFromPluginRegistrar.kt @@ -90,7 +90,7 @@ class Fir2IrAnnotationsFromPluginRegistrar(private val components: Fir2IrCompone // we need to use the original session of the declaration val containingSession = moduleData.session val topmostParent = topmostParent(containingSession) - return containingSession.firProvider.getContainingFile(topmostParent.symbol) + return components.firProvider.getContainingFile(topmostParent.symbol) } private fun FirDeclaration.topmostParent(session: FirSession): FirDeclaration { diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt index 779928f312b..fa4f13715eb 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt @@ -12,7 +12,6 @@ import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.utils.isLocal import org.jetbrains.kotlin.fir.declarations.utils.visibility import org.jetbrains.kotlin.fir.expressions.FirAnonymousObjectExpression -import org.jetbrains.kotlin.fir.resolve.providers.firProvider import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag @@ -335,8 +334,7 @@ class Fir2IrClassifierStorage( ): IrEnumEntry { getCachedIrEnumEntry(enumEntry)?.let { return it } - val firProviderForEntry = enumEntry.moduleData.session.firProvider - val containingFile = firProviderForEntry.getFirCallableContainerFile(enumEntry.symbol) + val containingFile = firProvider.getFirCallableContainerFile(enumEntry.symbol) @Suppress("NAME_SHADOWING") val predefinedOrigin = predefinedOrigin ?: if (containingFile != null) { diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrComponents.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrComponents.kt index 587715e2422..f37d951b7f3 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrComponents.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrComponents.kt @@ -19,6 +19,13 @@ interface Fir2IrComponents { val session: FirSession val scopeSession: ScopeSession + /** + * It's important to use this fir provider in fir2ir instead of provider from session, + * because this provider will also contain synthetic fir files for declarations generated + * by frontend plugins + */ + val firProvider: FirProviderWithGeneratedFiles + val converter: Fir2IrConverter val symbolTable: SymbolTable diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrComponentsStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrComponentsStorage.kt index a7ba46b10fd..02ea1fc1c6e 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrComponentsStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrComponentsStorage.kt @@ -32,6 +32,7 @@ class Fir2IrComponentsStorage( specialSymbolProvider: Fir2IrSpecialSymbolProvider, initializedIrBuiltIns: IrBuiltInsOverFir? ) : Fir2IrComponents { + override val firProvider: FirProviderWithGeneratedFiles = FirProviderWithGeneratedFiles(session) override val signatureComposer: FirBasedSignatureComposer = commonMemberStorage.firSignatureComposer override val symbolTable: SymbolTable = commonMemberStorage.symbolTable diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt index e8656ad5ae9..80accfdd1d3 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt @@ -15,7 +15,6 @@ import org.jetbrains.kotlin.ir.overrides.FakeOverrideRebuilder import org.jetbrains.kotlin.backend.common.sourceElement import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.config.LanguageFeature -import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.DescriptorVisibilities import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.fir.* @@ -721,7 +720,9 @@ class Fir2IrConverter( val allFirFiles = buildList { addAll(firFiles) - addAll(session.createFilesWithGeneratedDeclarations()) + val generatedFiles = session.createFilesWithGeneratedDeclarations() + addAll(generatedFiles) + generatedFiles.forEach { components.firProvider.recordFile(it) } } components.converter.runSourcesConversion( diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index 46dd4c58189..3b523d1fa3e 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -14,7 +14,10 @@ import org.jetbrains.kotlin.fir.backend.generators.isExternalParent import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.builder.buildProperty import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty -import org.jetbrains.kotlin.fir.declarations.utils.* +import org.jetbrains.kotlin.fir.declarations.utils.hasBackingField +import org.jetbrains.kotlin.fir.declarations.utils.isExpect +import org.jetbrains.kotlin.fir.declarations.utils.isStatic +import org.jetbrains.kotlin.fir.declarations.utils.visibility import org.jetbrains.kotlin.fir.descriptors.FirBuiltInsPackageFragment import org.jetbrains.kotlin.fir.descriptors.FirModuleDescriptor import org.jetbrains.kotlin.fir.java.symbols.FirJavaOverriddenSyntheticPropertySymbol @@ -894,8 +897,7 @@ class Fir2IrDeclarationStorage( classifierStorage.getCachedIrEnumEntry(firDeclaration)?.let { return it.symbol } val irParentClass = firDeclaration.containingClassLookupTag()?.let { classifierStorage.findIrClass(it) }!! - val firProviderForSymbol = firVariableSymbol.moduleData.session.firProvider - val containingFile = firProviderForSymbol.getFirCallableContainerFile(firVariableSymbol) + val containingFile = firProvider.getFirCallableContainerFile(firVariableSymbol) classifierStorage.getOrCreateIrEnumEntry( firDeclaration, @@ -1330,10 +1332,23 @@ class Fir2IrDeclarationStorage( } } - val firProviderForSymbol = firBasedSymbol.moduleData.session.firProvider + /** + * In `allowNonCachedDeclarations` mode there is a situation possible when we get source declaration + * from session which is different from one which we convert right now. So we need to take an original firProvider + * for this declaration to correctly find containig file and properly generate NonCachedSourceFileFacadeClass if needed + */ + val firProvider = if (configuration.allowNonCachedDeclarations) { + when { + firBasedSymbol.moduleData == session.moduleData -> components.firProvider + else -> firBasedSymbol.moduleData.session.firProvider + } + } else { + components.firProvider + } + val containerFile = when (firBasedSymbol) { - is FirCallableSymbol -> firProviderForSymbol.getFirCallableContainerFile(firBasedSymbol) - is FirClassLikeSymbol -> firProviderForSymbol.getFirClassifierContainerFileIfAny(firBasedSymbol) + is FirCallableSymbol -> firProvider.getFirCallableContainerFile(firBasedSymbol) + is FirClassLikeSymbol -> firProvider.getFirClassifierContainerFileIfAny(firBasedSymbol) else -> error("Unknown symbol: $firBasedSymbol") } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirProviderWithGeneratedFiles.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirProviderWithGeneratedFiles.kt new file mode 100644 index 00000000000..73033e2374e --- /dev/null +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirProviderWithGeneratedFiles.kt @@ -0,0 +1,66 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.fir.backend + +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration +import org.jetbrains.kotlin.fir.declarations.FirFile +import org.jetbrains.kotlin.fir.resolve.providers.FirProvider +import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider +import org.jetbrains.kotlin.fir.resolve.providers.firProvider +import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl +import org.jetbrains.kotlin.fir.scopes.kotlinScopeProvider +import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirScriptSymbol +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.Name + + +class FirProviderWithGeneratedFiles(val session: FirSession) : FirProvider() { + private val generatedFilesProvider = FirProviderImpl(session, session.kotlinScopeProvider) + + private val providers: List = listOf(session.firProvider, generatedFilesProvider) + + override val symbolProvider: FirSymbolProvider + get() = providers.first().symbolProvider + + override fun getFirClassifierByFqName(classId: ClassId): FirClassLikeDeclaration? { + return providers.firstNotNullOfOrNull { it.getFirClassifierByFqName(classId) } + } + + override fun getFirClassifierContainerFile(fqName: ClassId): FirFile { + return getFirClassifierContainerFileIfAny(fqName) ?: error("Couldn't find container for $fqName") + } + + override fun getFirClassifierContainerFileIfAny(fqName: ClassId): FirFile? { + return providers.firstNotNullOfOrNull { it.getFirClassifierContainerFileIfAny(fqName) } + } + + override fun getFirCallableContainerFile(symbol: FirCallableSymbol<*>): FirFile? { + return providers.firstNotNullOfOrNull { it.getFirCallableContainerFile(symbol) } + } + + override fun getFirScriptContainerFile(symbol: FirScriptSymbol): FirFile? { + return providers.firstNotNullOfOrNull { it.getFirScriptContainerFile(symbol) } + } + + override fun getFirScriptByFilePath(path: String): FirScriptSymbol? { + return providers.firstNotNullOfOrNull { it.getFirScriptByFilePath(path) } + } + + override fun getFirFilesByPackage(fqName: FqName): List { + return providers.flatMap { it.getFirFilesByPackage(fqName) } + } + + override fun getClassNamesInPackage(fqName: FqName): Set { + return providers.flatMapTo(mutableSetOf()) { it.getClassNamesInPackage(fqName) } + } + + fun recordFile(file: FirFile) { + generatedFilesProvider.recordFile(file) + } +} diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrClassifiersGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrClassifiersGenerator.kt index c74ca9eccb0..d15d857d2c4 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrClassifiersGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrClassifiersGenerator.kt @@ -15,14 +15,16 @@ import org.jetbrains.kotlin.fir.hasEnumEntries import org.jetbrains.kotlin.fir.lazy.Fir2IrLazyClass import org.jetbrains.kotlin.fir.moduleData import org.jetbrains.kotlin.fir.resolve.getSymbolByLookupTag -import org.jetbrains.kotlin.fir.resolve.providers.firProvider import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.types.toLookupTag import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl import org.jetbrains.kotlin.ir.symbols.* -import org.jetbrains.kotlin.ir.symbols.impl.* +import org.jetbrains.kotlin.ir.symbols.impl.IrClassPublicSymbolImpl +import org.jetbrains.kotlin.ir.symbols.impl.IrClassSymbolImpl +import org.jetbrains.kotlin.ir.symbols.impl.IrExternalPackageFragmentSymbolImpl +import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl import org.jetbrains.kotlin.ir.util.IdSignature import org.jetbrains.kotlin.name.FqName @@ -203,7 +205,7 @@ class Fir2IrClassifiersGenerator(val components: Fir2IrComponents) : Fir2IrCompo // finding the parent class that actually contains the [klass] in the tree - it is the root one that should be created on the fly val classOrLocalParent = generateSequence(klass) { c -> (c as? FirRegularClass)?.containingClassForLocalAttr?.let { lookupTag -> - (session.firProvider.symbolProvider.getSymbolByLookupTag(lookupTag)?.fir as? FirClass)?.takeIf { + (firProvider.symbolProvider.getSymbolByLookupTag(lookupTag)?.fir as? FirClass)?.takeIf { it.declarations.contains(c) } } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrLazyDeclarationsGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrLazyDeclarationsGenerator.kt index 6e38348fb4a..396601d930a 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrLazyDeclarationsGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrLazyDeclarationsGenerator.kt @@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.containingClassLookupTag import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.isSubstitutionOrIntersectionOverride import org.jetbrains.kotlin.fir.lazy.* -import org.jetbrains.kotlin.fir.resolve.providers.firProvider import org.jetbrains.kotlin.fir.unwrapUseSiteSubstitutionOverrides import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.symbols.IrClassSymbol @@ -72,7 +71,7 @@ class Fir2IrLazyDeclarationsGenerator(val components: Fir2IrComponents) : Fir2Ir irParent: IrDeclarationParent, symbol: IrClassSymbol ): Fir2IrLazyClass = firClass.convertWithOffsets { startOffset, endOffset -> - val firClassOrigin = firClass.irOrigin(session.firProvider) + val firClassOrigin = firClass.irOrigin() Fir2IrLazyClass(components, startOffset, endOffset, firClassOrigin, firClass, symbol, irParent) }