[FIR2IR] Pre-cache original function type parameters for fake overrides
This commit is contained in:
committed by
Mikhail Glukhikh
parent
bc96e42585
commit
39e1635c41
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.ir.declarations.*
|
|||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl
|
import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrEnumEntryImpl
|
import org.jetbrains.kotlin.ir.declarations.impl.IrEnumEntryImpl
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrTypeParameterImpl
|
import org.jetbrains.kotlin.ir.declarations.impl.IrTypeParameterImpl
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl
|
|
||||||
import org.jetbrains.kotlin.ir.descriptors.*
|
import org.jetbrains.kotlin.ir.descriptors.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrEnumConstructorCallImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrEnumConstructorCallImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl
|
||||||
|
|||||||
@@ -214,6 +214,7 @@ class Fir2IrDeclarationStorage(
|
|||||||
if (functionSymbol is FirNamedFunctionSymbol) {
|
if (functionSymbol is FirNamedFunctionSymbol) {
|
||||||
val fakeOverrideSymbol =
|
val fakeOverrideSymbol =
|
||||||
FirClassSubstitutionScope.createFakeOverrideFunction(session, functionSymbol.fir, functionSymbol)
|
FirClassSubstitutionScope.createFakeOverrideFunction(session, functionSymbol.fir, functionSymbol)
|
||||||
|
classifierStorage.preCacheTypeParameters(functionSymbol.fir)
|
||||||
irClass.declarations += createIrFunction(fakeOverrideSymbol.fir, irClass)
|
irClass.declarations += createIrFunction(fakeOverrideSymbol.fir, irClass)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -221,6 +222,7 @@ class Fir2IrDeclarationStorage(
|
|||||||
if (propertySymbol is FirPropertySymbol) {
|
if (propertySymbol is FirPropertySymbol) {
|
||||||
val fakeOverrideSymbol =
|
val fakeOverrideSymbol =
|
||||||
FirClassSubstitutionScope.createFakeOverrideProperty(session, propertySymbol.fir, propertySymbol)
|
FirClassSubstitutionScope.createFakeOverrideProperty(session, propertySymbol.fir, propertySymbol)
|
||||||
|
classifierStorage.preCacheTypeParameters(propertySymbol.fir)
|
||||||
irClass.declarations += createIrProperty(fakeOverrideSymbol.fir, irClass)
|
irClass.declarations += createIrProperty(fakeOverrideSymbol.fir, irClass)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -33,7 +33,7 @@ internal class ClassMemberGenerator(
|
|||||||
) : Fir2IrComponents by components {
|
) : Fir2IrComponents by components {
|
||||||
|
|
||||||
private val fakeOverrideGenerator = FakeOverrideGenerator(
|
private val fakeOverrideGenerator = FakeOverrideGenerator(
|
||||||
session, components.scopeSession, declarationStorage, conversionScope, fakeOverrideMode
|
session, components.scopeSession, classifierStorage, declarationStorage, conversionScope, fakeOverrideMode
|
||||||
)
|
)
|
||||||
|
|
||||||
private fun FirTypeRef.toIrType(): IrType = with(typeConverter) { toIrType() }
|
private fun FirTypeRef.toIrType(): IrType = with(typeConverter) { toIrType() }
|
||||||
|
|||||||
+3
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
internal class FakeOverrideGenerator(
|
internal class FakeOverrideGenerator(
|
||||||
private val session: FirSession,
|
private val session: FirSession,
|
||||||
private val scopeSession: ScopeSession,
|
private val scopeSession: ScopeSession,
|
||||||
|
private val classifierStorage: Fir2IrClassifierStorage,
|
||||||
private val declarationStorage: Fir2IrDeclarationStorage,
|
private val declarationStorage: Fir2IrDeclarationStorage,
|
||||||
private val conversionScope: Fir2IrConversionScope,
|
private val conversionScope: Fir2IrConversionScope,
|
||||||
private val fakeOverrideMode: FakeOverrideMode
|
private val fakeOverrideMode: FakeOverrideMode
|
||||||
@@ -109,6 +110,7 @@ internal class FakeOverrideGenerator(
|
|||||||
)
|
)
|
||||||
val fakeOverrideFunction = fakeOverrideSymbol.fir
|
val fakeOverrideFunction = fakeOverrideSymbol.fir
|
||||||
|
|
||||||
|
classifierStorage.preCacheTypeParameters(originalFunction)
|
||||||
val irFunction = declarationStorage.createIrFunction(
|
val irFunction = declarationStorage.createIrFunction(
|
||||||
fakeOverrideFunction, irParent = this,
|
fakeOverrideFunction, irParent = this,
|
||||||
thisReceiverOwner = declarationStorage.findIrParent(originalFunction) as? IrClass,
|
thisReceiverOwner = declarationStorage.findIrParent(originalFunction) as? IrClass,
|
||||||
@@ -146,6 +148,7 @@ internal class FakeOverrideGenerator(
|
|||||||
)
|
)
|
||||||
val fakeOverrideProperty = fakeOverrideSymbol.fir
|
val fakeOverrideProperty = fakeOverrideSymbol.fir
|
||||||
|
|
||||||
|
classifierStorage.preCacheTypeParameters(originalProperty)
|
||||||
val irProperty = declarationStorage.createIrProperty(
|
val irProperty = declarationStorage.createIrProperty(
|
||||||
fakeOverrideProperty, irParent = this,
|
fakeOverrideProperty, irParent = this,
|
||||||
thisReceiverOwner = declarationStorage.findIrParent(originalProperty) as? IrClass,
|
thisReceiverOwner = declarationStorage.findIrParent(originalProperty) as? IrClass,
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
// WITH_COROUTINES
|
// WITH_COROUTINES
|
||||||
// COMMON_COROUTINES_TEST
|
// COMMON_COROUTINES_TEST
|
||||||
|
|||||||
-1
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
// WITH_COROUTINES
|
// WITH_COROUTINES
|
||||||
// COMMON_COROUTINES_TEST
|
// COMMON_COROUTINES_TEST
|
||||||
|
|||||||
Reference in New Issue
Block a user