[FIR] Don't visit locals in status resolve transformer
This commit is contained in:
+25
-3
@@ -40,8 +40,9 @@ fun <F : FirClass<F>> F.runStatusResolveForLocalClass(session: FirSession): F {
|
|||||||
return this.transform<F, Nothing?>(transformer, null).single
|
return this.transform<F, Nothing?>(transformer, null).single
|
||||||
}
|
}
|
||||||
|
|
||||||
private class FirStatusResolveTransformer(override val session: FirSession) :
|
private class FirStatusResolveTransformer(
|
||||||
FirAbstractTreeTransformer<FirDeclarationStatus?>(phase = FirResolvePhase.STATUS) {
|
override val session: FirSession
|
||||||
|
) : FirAbstractTreeTransformer<FirDeclarationStatus?>(phase = FirResolvePhase.STATUS) {
|
||||||
private val classes = mutableListOf<FirClass<*>>()
|
private val classes = mutableListOf<FirClass<*>>()
|
||||||
|
|
||||||
private val containingClass: FirClass<*>? get() = classes.lastOrNull()
|
private val containingClass: FirClass<*>? get() = classes.lastOrNull()
|
||||||
@@ -63,6 +64,27 @@ private class FirStatusResolveTransformer(override val session: FirSession) :
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun transformDeclaration(declaration: FirDeclaration, data: FirDeclarationStatus?): CompositeTransformResult<FirDeclaration> {
|
||||||
|
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<FirDeclaration> {
|
override fun transformTypeAlias(typeAlias: FirTypeAlias, data: FirDeclarationStatus?): CompositeTransformResult<FirDeclaration> {
|
||||||
typeAlias.typeParameters.forEach { transformDeclaration(it, data) }
|
typeAlias.typeParameters.forEach { transformDeclaration(it, data) }
|
||||||
typeAlias.transformStatus(this, typeAlias.resolveStatus(typeAlias.status, containingClass, isLocal = false))
|
typeAlias.transformStatus(this, typeAlias.resolveStatus(typeAlias.status, containingClass, isLocal = false))
|
||||||
@@ -82,7 +104,7 @@ private class FirStatusResolveTransformer(override val session: FirSession) :
|
|||||||
data: FirDeclarationStatus?
|
data: FirDeclarationStatus?
|
||||||
): CompositeTransformResult<FirStatement> {
|
): CompositeTransformResult<FirStatement> {
|
||||||
return storeClass(anonymousObject) {
|
return storeClass(anonymousObject) {
|
||||||
transformElement(anonymousObject, data)
|
transformDeclaration(anonymousObject, data)
|
||||||
} as CompositeTransformResult<FirStatement>
|
} as CompositeTransformResult<FirStatement>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user