From 9e413bde115d6dd072e70ade4a87a73fb8f59333 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 22 Apr 2020 19:35:38 +0300 Subject: [PATCH] [FIR] Don't visit locals in status resolve transformer --- .../FirStatusResolveTransformer.kt | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt index 576209bfafd..c3c72f8ff72 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt @@ -40,8 +40,9 @@ fun > F.runStatusResolveForLocalClass(session: FirSession): F { return this.transform(transformer, null).single } -private class FirStatusResolveTransformer(override val session: FirSession) : - FirAbstractTreeTransformer(phase = FirResolvePhase.STATUS) { +private class FirStatusResolveTransformer( + override val session: FirSession +) : FirAbstractTreeTransformer(phase = FirResolvePhase.STATUS) { private val classes = mutableListOf>() private val containingClass: FirClass<*>? get() = classes.lastOrNull() @@ -63,6 +64,27 @@ private class FirStatusResolveTransformer(override val session: FirSession) : return result } + override fun transformDeclaration(declaration: FirDeclaration, data: FirDeclarationStatus?): CompositeTransformResult { + declaration.replaceResolvePhase(transformerPhase) + return if (declaration is FirCallableDeclaration<*>) { + when (declaration) { + is FirProperty -> { + declaration.getter?.let { transformPropertyAccessor(it, data) } + declaration.setter?.let { transformPropertyAccessor(it, data) } + } + is FirFunction<*> -> { + // Should we do it here? + for (valueParameter in declaration.valueParameters) { + transformValueParameter(valueParameter, data) + } + } + } + declaration.compose() + } else { + transformElement(declaration, data) + } + } + override fun transformTypeAlias(typeAlias: FirTypeAlias, data: FirDeclarationStatus?): CompositeTransformResult { typeAlias.typeParameters.forEach { transformDeclaration(it, data) } typeAlias.transformStatus(this, typeAlias.resolveStatus(typeAlias.status, containingClass, isLocal = false)) @@ -82,7 +104,7 @@ private class FirStatusResolveTransformer(override val session: FirSession) : data: FirDeclarationStatus? ): CompositeTransformResult { return storeClass(anonymousObject) { - transformElement(anonymousObject, data) + transformDeclaration(anonymousObject, data) } as CompositeTransformResult }