[FIR] move lazy expression assertions to more common class

^KT-56543
This commit is contained in:
Dmitrii Gridin
2023-04-05 15:01:02 +02:00
committed by Space Team
parent efdae98ba8
commit 22b5d940f1
3 changed files with 19 additions and 11 deletions
@@ -9,6 +9,9 @@ import org.jetbrains.kotlin.fir.FirCallResolver
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.PrivateForInline
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.FirLazyBlock
import org.jetbrains.kotlin.fir.expressions.FirLazyExpression
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.resolve.calls.ResolutionContext
import org.jetbrains.kotlin.fir.resolve.calls.ResolutionStageRunner
@@ -50,6 +53,21 @@ abstract class FirAbstractBodyResolveTransformer(phase: FirResolvePhase) : FirAb
}
}
override fun transformLazyExpression(lazyExpression: FirLazyExpression, data: ResolutionMode): FirStatement {
suppressOrThrowError("FirLazyExpression should be calculated before accessing")
return lazyExpression
}
override fun transformLazyBlock(lazyBlock: FirLazyBlock, data: ResolutionMode): FirStatement {
suppressOrThrowError("FirLazyBlock should be calculated before accessing")
return lazyBlock
}
private fun suppressOrThrowError(message: String) {
if (System.getProperty("kotlin.suppress.lazy.expression.access").toBoolean()) return
error(message)
}
protected inline val localScopes: List<FirLocalScope> get() = components.localScopes
protected inline val noExpectedType: FirTypeRef get() = components.noExpectedType
@@ -7,9 +7,6 @@ package org.jetbrains.kotlin.fir.resolve.transformers.body.resolve
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.PrivateForInline
import org.jetbrains.kotlin.fir.expressions.FirLazyBlock
import org.jetbrains.kotlin.fir.expressions.FirLazyExpression
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.resolve.ResolutionMode
import org.jetbrains.kotlin.fir.resolve.calls.ResolutionContext
@@ -38,12 +35,4 @@ abstract class FirPartialBodyResolveTransformer(
override fun <E : FirElement> transformElement(element: E, data: ResolutionMode): E {
return element.transform(transformer, data)
}
override fun transformLazyExpression(lazyExpression: FirLazyExpression, data: ResolutionMode): FirStatement {
error("FirLazyExpression should be calculated before accessing")
}
override fun transformLazyBlock(lazyBlock: FirLazyBlock, data: ResolutionMode): FirStatement {
error("FirLazyBlock should be calculated before accessing")
}
}
@@ -17,6 +17,7 @@ abstract class AbstractLazyBodyIsNotTouchedTest : AbstractFirBaseDiagnosticsTest
override fun runAnalysis(testDataFile: File, testFiles: List<TestFile>, firFilesPerSession: Map<FirSession, List<FirFile>>) {
val phases = FirResolvePhase.values()
.dropWhile { it <= FirResolvePhase.RAW_FIR }
.filterNot { it == FirResolvePhase.COMPILER_REQUIRED_ANNOTATIONS }
.takeWhile { it < FirResolvePhase.ARGUMENTS_OF_ANNOTATIONS }
for ((session, firFiles) in firFilesPerSession) {