From 4cff6d93be7130ca73eabe16daabbe74709b4b7b Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 4 Mar 2021 12:52:28 +0300 Subject: [PATCH] Get rid of containingClass storage in FirDeclarationsResolveTransformer --- .../resolve/FirDeclarationsResolveTransformer.kt | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt index 9f08fca91e0..1305f679252 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt @@ -41,10 +41,11 @@ import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult -import org.jetbrains.kotlin.utils.addToStdlib.safeAs open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer) : FirPartialBodyResolveTransformer(transformer) { - private var containingClass: FirRegularClass? = null + private val containingClass: FirRegularClass? + get() = context.containers.asReversed().firstOrNull { it is FirRegularClass } as? FirRegularClass + private val statusResolver: FirStatusResolver = FirStatusResolver(session, scopeSession) private fun FirDeclaration.visibilityForApproximation(): Visibility { @@ -414,8 +415,6 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor dataFlowAnalyzer.enterClass() } - val oldContainingClass = containingClass - containingClass = regularClass val type = regularClass.defaultType() val result = withScopesForClass(regularClass.name, regularClass, type) { transformDeclarationContent(regularClass, data).single as FirRegularClass @@ -430,7 +429,6 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor } } - containingClass = oldContainingClass return (@Suppress("UNCHECKED_CAST") result.compose()) } @@ -603,7 +601,8 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor override fun transformConstructor(constructor: FirConstructor, data: ResolutionMode): CompositeTransformResult { if (implicitTypeOnly) return constructor.compose() - if (constructor.isPrimary && containingClass?.classKind == ClassKind.ANNOTATION_CLASS) { + val container = context.containerIfAny as? FirRegularClass + if (constructor.isPrimary && container?.classKind == ClassKind.ANNOTATION_CLASS) { return withFirArrayOfCallTransformer { @Suppress("UNCHECKED_CAST") doTransformConstructor(constructor, data) @@ -614,6 +613,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor } private fun doTransformConstructor(constructor: FirConstructor, data: ResolutionMode): CompositeTransformResult { + val owningClass = context.containerIfAny as? FirRegularClass return context.withContainer(constructor) { transformer.replaceDeclarationResolvePhaseIfNeeded(constructor, transformerPhase) dataFlowAnalyzer.enterFunction(constructor) @@ -623,9 +623,6 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor .transformReceiverTypeRef(transformer, data) .transformReturnTypeRef(transformer, data) - val containers = context.containers - val owningClass = containers[containers.lastIndex - 1].safeAs() - /* * Default values of constructor can't access members of constructing class */