[FIR] Use ScopeSession from resolve transformer in FIR2IR
This commit is contained in:
@@ -6,11 +6,13 @@
|
||||
package org.jetbrains.kotlin.fir.backend
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||
import org.jetbrains.kotlin.ir.util.SymbolTable
|
||||
|
||||
interface Fir2IrComponents {
|
||||
val session: FirSession
|
||||
val scopeSession: ScopeSession
|
||||
val symbolTable: SymbolTable
|
||||
val irBuiltIns: IrBuiltIns
|
||||
val classifierStorage: Fir2IrClassifierStorage
|
||||
|
||||
@@ -6,11 +6,13 @@
|
||||
package org.jetbrains.kotlin.fir.backend
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||
import org.jetbrains.kotlin.ir.util.SymbolTable
|
||||
|
||||
class Fir2IrComponentsStorage(
|
||||
override val session: FirSession,
|
||||
override val scopeSession: ScopeSession,
|
||||
override val symbolTable: SymbolTable,
|
||||
override val irBuiltIns: IrBuiltIns
|
||||
) : Fir2IrComponents {
|
||||
|
||||
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.descriptors.FirModuleDescriptor
|
||||
import org.jetbrains.kotlin.fir.psi
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrModuleFragmentImpl
|
||||
@@ -156,6 +157,7 @@ class Fir2IrConverter(
|
||||
companion object {
|
||||
fun createModuleFragment(
|
||||
session: FirSession,
|
||||
scopeSession: ScopeSession,
|
||||
firFiles: List<FirFile>,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
fakeOverrideMode: FakeOverrideMode = FakeOverrideMode.NORMAL,
|
||||
@@ -169,7 +171,7 @@ class Fir2IrConverter(
|
||||
typeTranslator.constantValueGenerator = constantValueGenerator
|
||||
val builtIns = IrBuiltIns(moduleDescriptor.builtIns, typeTranslator, signaturer, symbolTable)
|
||||
val sourceManager = PsiSourceManager()
|
||||
val components = Fir2IrComponentsStorage(session, symbolTable, builtIns)
|
||||
val components = Fir2IrComponentsStorage(session, scopeSession, symbolTable, builtIns)
|
||||
val declarationStorage = Fir2IrDeclarationStorage(components, moduleDescriptor)
|
||||
val classifierStorage = Fir2IrClassifierStorage(components)
|
||||
val typeConverter = Fir2IrTypeConverter(components)
|
||||
|
||||
+1
-1
@@ -208,7 +208,7 @@ class Fir2IrDeclarationStorage(
|
||||
}
|
||||
}
|
||||
val allNames = regularClass.collectCallableNamesFromSupertypes(session)
|
||||
val scope = regularClass.buildUseSiteMemberScope(session, ScopeSession())
|
||||
val scope = regularClass.buildUseSiteMemberScope(session, scopeSession)
|
||||
if (scope != null) {
|
||||
for (name in allNames) {
|
||||
if (name in processedNames) continue
|
||||
|
||||
+13
-10
@@ -23,7 +23,6 @@ import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
internal class ClassMemberGenerator(
|
||||
private val components: Fir2IrComponents,
|
||||
@@ -32,7 +31,9 @@ internal class ClassMemberGenerator(
|
||||
fakeOverrideMode: FakeOverrideMode
|
||||
) : Fir2IrComponents by components {
|
||||
|
||||
private val fakeOverrideGenerator = FakeOverrideGenerator(session, declarationStorage, conversionScope, fakeOverrideMode)
|
||||
private val fakeOverrideGenerator = FakeOverrideGenerator(
|
||||
session, components.scopeSession, declarationStorage, conversionScope, fakeOverrideMode
|
||||
)
|
||||
|
||||
private fun FirTypeRef.toIrType(): IrType = with(typeConverter) { toIrType() }
|
||||
|
||||
@@ -53,17 +54,19 @@ internal class ClassMemberGenerator(
|
||||
convertFunctionContent(irPrimaryConstructor, primaryConstructor)
|
||||
}
|
||||
}
|
||||
val processedCallableNames = mutableListOf<Name>()
|
||||
klass.declarations.forEach {
|
||||
if (it !is FirTypeAlias && (it !is FirConstructor || !it.isPrimary)) {
|
||||
it.accept(visitor, null)
|
||||
when (it) {
|
||||
is FirSimpleFunction -> processedCallableNames += it.name
|
||||
is FirProperty -> processedCallableNames += it.name
|
||||
}
|
||||
val processedCallableNames = klass.declarations.mapNotNullTo(mutableListOf()) {
|
||||
when (it) {
|
||||
is FirSimpleFunction -> it.name
|
||||
is FirProperty -> it.name
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
with(fakeOverrideGenerator) { irClass.addFakeOverrides(klass, processedCallableNames) }
|
||||
klass.declarations.forEach {
|
||||
if (it !is FirTypeAlias && (it !is FirConstructor || !it.isPrimary)) {
|
||||
it.accept(visitor, null)
|
||||
}
|
||||
}
|
||||
annotations = klass.annotations.mapNotNull {
|
||||
it.accept(visitor, null) as? IrConstructorCall
|
||||
}
|
||||
|
||||
+6
-2
@@ -10,8 +10,8 @@ import org.jetbrains.kotlin.fir.backend.*
|
||||
import org.jetbrains.kotlin.fir.backend.collectCallableNamesFromSupertypes
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.declarations.allowsToHaveFakeOverride
|
||||
import org.jetbrains.kotlin.fir.declarations.isStatic
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.fir.resolve.buildUseSiteMemberScope
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope
|
||||
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.name.Name
|
||||
|
||||
internal class FakeOverrideGenerator(
|
||||
private val session: FirSession,
|
||||
private val scopeSession: ScopeSession,
|
||||
private val declarationStorage: Fir2IrDeclarationStorage,
|
||||
private val conversionScope: Fir2IrConversionScope,
|
||||
private val fakeOverrideMode: FakeOverrideMode
|
||||
@@ -59,13 +60,16 @@ internal class FakeOverrideGenerator(
|
||||
fun IrClass.addFakeOverrides(klass: FirClass<*>, processedCallableNames: MutableList<Name>) {
|
||||
if (fakeOverrideMode == FakeOverrideMode.NONE) return
|
||||
val superTypesCallableNames = klass.collectCallableNamesFromSupertypes(session)
|
||||
val useSiteMemberScope = (klass as? FirRegularClass)?.buildUseSiteMemberScope(session, ScopeSession()) ?: return
|
||||
val useSiteMemberScope = klass.buildUseSiteMemberScope(session, scopeSession) ?: return
|
||||
for (name in superTypesCallableNames) {
|
||||
if (name in processedCallableNames) continue
|
||||
processedCallableNames += name
|
||||
useSiteMemberScope.processFunctionsByName(name) { functionSymbol ->
|
||||
if (functionSymbol is FirNamedFunctionSymbol) {
|
||||
val originalFunction = functionSymbol.fir
|
||||
if (originalFunction.isStatic && originalFunction.name in Fir2IrDeclarationStorage.ENUM_SYNTHETIC_NAMES) {
|
||||
return@processFunctionsByName
|
||||
}
|
||||
val origin = IrDeclarationOrigin.FAKE_OVERRIDE
|
||||
if (functionSymbol.isFakeOverride) {
|
||||
// Substitution case
|
||||
|
||||
@@ -83,7 +83,9 @@ abstract class AbstractFir2IrTextTest : AbstractIrTextTestCase() {
|
||||
val signaturer = IdSignatureDescriptor(JvmManglerDesc())
|
||||
|
||||
return Fir2IrConverter.createModuleFragment(
|
||||
session, firFiles, myEnvironment.configuration.languageVersionSettings, signaturer = signaturer
|
||||
session, resolveTransformer.scopeSession, firFiles,
|
||||
myEnvironment.configuration.languageVersionSettings,
|
||||
signaturer = signaturer
|
||||
).irModuleFragment
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
// TODO: rework, see rr/FIR/semoro-dev FirStagesTransformerFactory
|
||||
class FirTotalResolveTransformer {
|
||||
|
||||
private val scopeSession = ScopeSession()
|
||||
val scopeSession = ScopeSession()
|
||||
|
||||
val transformers: List<FirTransformer<Nothing?>> =
|
||||
FirResolvePhase.values()
|
||||
|
||||
Reference in New Issue
Block a user