From 3aadf58354777037c1ca2f751caa7e1b5c7619da Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Wed, 5 Jun 2019 14:19:12 +0300 Subject: [PATCH] Fix leak of BodyResolveTransformer due to inference components capture --- .../transformers/FirBodyResolveTransformer.kt | 36 ++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt index 5d2654e3b7c..84b935e7c72 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt @@ -239,23 +239,7 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn } } - private val inferenceComponents = InferenceComponents(object : ConeInferenceContext, TypeSystemInferenceExtensionContextDelegate { - override fun findCommonIntegerLiteralTypesSuperType(explicitSupertypes: List): SimpleTypeMarker? { - //TODO wtf - return explicitSupertypes.firstOrNull() - } - override fun TypeConstructorMarker.getApproximatedIntegerLiteralType(): KotlinTypeMarker { - TODO("not implemented") - } - - override val session: FirSession - get() = this@FirBodyResolveTransformer.session - - override fun KotlinTypeMarker.removeExactAnnotation(): KotlinTypeMarker { - return this - } - }, session, jump) private var qualifierStack = mutableListOf() private var qualifierPartsToDrop = 0 @@ -522,6 +506,7 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn } private val noExpectedType = FirImplicitTypeRefImpl(session, null) + private val inferenceComponents = inferenceComponents(session, jump) private fun resolveCallAndSelectCandidate(functionCall: FirFunctionCall, expectedTypeRef: FirTypeRef?): FirFunctionCall { @@ -999,6 +984,25 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn } } +private fun inferenceComponents(session: FirSession, jump: ReturnTypeCalculatorWithJump) = + InferenceComponents(object : ConeInferenceContext, TypeSystemInferenceExtensionContextDelegate { + override fun findCommonIntegerLiteralTypesSuperType(explicitSupertypes: List): SimpleTypeMarker? { + //TODO wtf + return explicitSupertypes.firstOrNull() + } + + override fun TypeConstructorMarker.getApproximatedIntegerLiteralType(): KotlinTypeMarker { + TODO("not implemented") + } + + override val session: FirSession + get() = session + + override fun KotlinTypeMarker.removeExactAnnotation(): KotlinTypeMarker { + return this + } + }, session, jump) + class ReturnTypeCalculatorWithJump(val session: FirSession) : ReturnTypeCalculator {