From a7692ba2c5f081a486212a650f0b11927c9a98ba Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Wed, 10 May 2023 10:36:28 +0200 Subject: [PATCH] [LL FIR] do not calculate lazy body recursively by default To avoid visiting not locked declarations ^KT-56550 --- .../lazy/resolve/FirLazyBodiesCalculator.kt | 22 ++++++++++++++----- .../AbstractFirLazyBodiesCalculatorTest.kt | 2 +- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/FirLazyBodiesCalculator.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/FirLazyBodiesCalculator.kt index e7762970cd7..a01b07a9e86 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/FirLazyBodiesCalculator.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/FirLazyBodiesCalculator.kt @@ -34,14 +34,14 @@ internal object FirLazyBodiesCalculator { fun calculateLazyBodiesInside(designation: FirDesignation) { calculateAnnotations(designation.target) designation.target.transform>( - FirLazyBodiesCalculatorTransformer, + FirTargetLazyBodiesCalculatorTransformer, designation.path.toPersistentList(), ) } - fun calculateLazyBodies(firFile: FirFile) { + fun calculateAllLazyExpressionsInFile(firFile: FirFile) { calculateAnnotations(firFile) - firFile.transform>(FirLazyBodiesCalculatorTransformer, persistentListOf()) + firFile.transform>(FirAllLazyBodiesCalculatorTransformer, persistentListOf()) } fun calculateAnnotations(firElement: FirElementWithResolveState) { @@ -295,12 +295,12 @@ private object FirLazyAnnotationTransformer : FirTransformer>() { - +private object FirAllLazyBodiesCalculatorTransformer : FirLazyBodiesCalculatorTransformer() { override fun transformFile(file: FirFile, data: PersistentList): FirFile { file.declarations.forEach { it.transformSingle(this, data) } + return file } @@ -312,8 +312,15 @@ private object FirLazyBodiesCalculatorTransformer : FirTransformer>() { + override fun transformElement(element: E, data: PersistentList): E = element override fun transformField(field: FirField, data: PersistentList): FirStatement { if (field.initializer is FirLazyExpression) { @@ -331,6 +338,7 @@ private object FirLazyBodiesCalculatorTransformer : FirTransformer