[LL FIR] add missing isJumping phase and update contract violation check for such phases
^KT-56550
This commit is contained in:
committed by
Space Team
parent
41e551e321
commit
2778b3bdd6
+3
-1
@@ -83,7 +83,9 @@ internal class LLFirLockProvider(private val checker: LLFirLazyResolveContractCh
|
||||
phase: FirResolvePhase,
|
||||
action: () -> Unit
|
||||
) {
|
||||
target.withCriticalSection(phase, action)
|
||||
checker.lazyResolveToPhaseInside(phase, isJumpingPhase = true) {
|
||||
target.withCriticalSection(phase, action)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+4
-4
@@ -12,8 +12,8 @@ import org.jetbrains.kotlin.fir.symbols.FirLazyResolveContractViolationException
|
||||
internal class LLFirLazyResolveContractChecker {
|
||||
private val currentTransformerPhase = ThreadLocal.withInitial<FirResolvePhase?> { null }
|
||||
|
||||
inline fun lazyResolveToPhaseInside(phase: FirResolvePhase, resolve: () -> Unit) {
|
||||
checkIfCanLazyResolveToPhase(phase)
|
||||
inline fun lazyResolveToPhaseInside(phase: FirResolvePhase, isJumpingPhase: Boolean = false, resolve: () -> Unit) {
|
||||
checkIfCanLazyResolveToPhase(phase, isJumpingPhase)
|
||||
val previousPhase = currentTransformerPhase.get()
|
||||
currentTransformerPhase.set(phase)
|
||||
try {
|
||||
@@ -23,10 +23,10 @@ internal class LLFirLazyResolveContractChecker {
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkIfCanLazyResolveToPhase(requestedPhase: FirResolvePhase) {
|
||||
private fun checkIfCanLazyResolveToPhase(requestedPhase: FirResolvePhase, isJumpingPhase: Boolean) {
|
||||
val currentPhase = currentTransformerPhase.get() ?: return
|
||||
|
||||
if (requestedPhase >= currentPhase) {
|
||||
if (requestedPhase > currentPhase || !isJumpingPhase && requestedPhase == currentPhase) {
|
||||
val exception = FirLazyResolveContractViolationException(currentPhase = currentPhase, requestedPhase = requestedPhase)
|
||||
if (System.getProperty("kotlin.suppress.lazy.resolve.contract.violation") != null) {
|
||||
LoggerHolder.LOG.warn(exception)
|
||||
|
||||
+3
-2
@@ -25,8 +25,9 @@ internal abstract class LLFirAbstractBodyTargetResolver(
|
||||
lockProvider: LLFirLockProvider,
|
||||
private val scopeSession: ScopeSession,
|
||||
resolvePhase: FirResolvePhase,
|
||||
protected val implicitBodyResolveComputationSession: ImplicitBodyResolveComputationSession = ImplicitBodyResolveComputationSession()
|
||||
) : LLFirTargetResolver(resolveTarget, lockProvider, resolvePhase) {
|
||||
protected val implicitBodyResolveComputationSession: ImplicitBodyResolveComputationSession = ImplicitBodyResolveComputationSession(),
|
||||
isJumpingPhase: Boolean = false
|
||||
) : LLFirTargetResolver(resolveTarget, lockProvider, resolvePhase, isJumpingPhase) {
|
||||
|
||||
protected fun createReturnTypeCalculator(): ReturnTypeCalculator = createReturnTypeCalculatorForIDE(
|
||||
scopeSession,
|
||||
|
||||
+1
@@ -62,6 +62,7 @@ private class LLFirImplicitBodyTargetResolver(
|
||||
lockProvider,
|
||||
scopeSession,
|
||||
FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE,
|
||||
isJumpingPhase = true,
|
||||
) {
|
||||
override val transformer = object : FirImplicitAwareBodyResolveTransformer(
|
||||
session,
|
||||
|
||||
+1
-1
@@ -75,7 +75,7 @@ internal class LLFirSuperTypeTargetResolver(
|
||||
lockProvider: LLFirLockProvider,
|
||||
private val session: FirSession,
|
||||
private val scopeSession: ScopeSession,
|
||||
) : LLFirTargetResolver(target, lockProvider, FirResolvePhase.SUPER_TYPES) {
|
||||
) : LLFirTargetResolver(target, lockProvider, FirResolvePhase.SUPER_TYPES, isJumpingPhase = true) {
|
||||
|
||||
private val supertypeComputationSession = SupertypeComputationSession()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user