[LL FIR] LLFirLazyResolver: deduplicate code
This commit is contained in:
committed by
Space Team
parent
84f3cc9f9c
commit
0ecb174720
+3
-6
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@@ -31,15 +31,12 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
||||
import org.jetbrains.kotlin.fir.visitors.transformSingle
|
||||
|
||||
internal object LLFirAnnotationArgumentsLazyResolver : LLFirLazyResolver(FirResolvePhase.ANNOTATION_ARGUMENTS) {
|
||||
override fun resolve(
|
||||
override fun createTargetResolver(
|
||||
target: LLFirResolveTarget,
|
||||
lockProvider: LLFirLockProvider,
|
||||
scopeSession: ScopeSession,
|
||||
towerDataContextCollector: FirResolveContextCollector?,
|
||||
) {
|
||||
val resolver = LLFirAnnotationArgumentsTargetResolver(target, lockProvider, scopeSession, towerDataContextCollector)
|
||||
resolver.resolveDesignation()
|
||||
}
|
||||
): LLFirTargetResolver = LLFirAnnotationArgumentsTargetResolver(target, lockProvider, scopeSession, towerDataContextCollector)
|
||||
|
||||
override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) {
|
||||
if (target !is FirAnnotationContainer) return
|
||||
|
||||
+3
-6
@@ -52,15 +52,12 @@ import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
|
||||
import org.jetbrains.kotlin.utils.exceptions.withPsiEntry
|
||||
|
||||
internal object LLFirBodyLazyResolver : LLFirLazyResolver(FirResolvePhase.BODY_RESOLVE) {
|
||||
override fun resolve(
|
||||
override fun createTargetResolver(
|
||||
target: LLFirResolveTarget,
|
||||
lockProvider: LLFirLockProvider,
|
||||
scopeSession: ScopeSession,
|
||||
towerDataContextCollector: FirResolveContextCollector?,
|
||||
) {
|
||||
val resolver = LLFirBodyTargetResolver(target, lockProvider, scopeSession, towerDataContextCollector)
|
||||
resolver.resolveDesignation()
|
||||
}
|
||||
): LLFirTargetResolver = LLFirBodyTargetResolver(target, lockProvider, scopeSession, towerDataContextCollector)
|
||||
|
||||
override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) {
|
||||
when (target) {
|
||||
@@ -527,5 +524,5 @@ private fun delegatedConstructorCallGuard(fir: FirDelegatedConstructorCall): Fir
|
||||
|
||||
private class LLFirCodeFragmentContext(
|
||||
override val towerDataContext: FirTowerDataContext,
|
||||
override val smartCasts: Map<RealVariable, Set<ConeKotlinType>>
|
||||
override val smartCasts: Map<RealVariable, Set<ConeKotlinType>>,
|
||||
) : FirCodeFragmentContext
|
||||
|
||||
+2
-5
@@ -33,15 +33,12 @@ import org.jetbrains.kotlin.fir.types.FirUserTypeRef
|
||||
import org.jetbrains.kotlin.util.PrivateForInline
|
||||
|
||||
internal object LLFirCompilerAnnotationsLazyResolver : LLFirLazyResolver(FirResolvePhase.COMPILER_REQUIRED_ANNOTATIONS) {
|
||||
override fun resolve(
|
||||
override fun createTargetResolver(
|
||||
target: LLFirResolveTarget,
|
||||
lockProvider: LLFirLockProvider,
|
||||
scopeSession: ScopeSession,
|
||||
towerDataContextCollector: FirResolveContextCollector?,
|
||||
) {
|
||||
val resolver = LLFirCompilerRequiredAnnotationsTargetResolver(target, lockProvider, scopeSession)
|
||||
resolver.resolveDesignation()
|
||||
}
|
||||
): LLFirTargetResolver = LLFirCompilerRequiredAnnotationsTargetResolver(target, lockProvider, scopeSession)
|
||||
|
||||
override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) {
|
||||
when (target) {
|
||||
|
||||
+2
-5
@@ -26,15 +26,12 @@ import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef
|
||||
import org.jetbrains.kotlin.util.PrivateForInline
|
||||
|
||||
internal object LLFirContractsLazyResolver : LLFirLazyResolver(FirResolvePhase.CONTRACTS) {
|
||||
override fun resolve(
|
||||
override fun createTargetResolver(
|
||||
target: LLFirResolveTarget,
|
||||
lockProvider: LLFirLockProvider,
|
||||
scopeSession: ScopeSession,
|
||||
towerDataContextCollector: FirResolveContextCollector?,
|
||||
) {
|
||||
val resolver = LLFirContractsTargetResolver(target, lockProvider, scopeSession, towerDataContextCollector)
|
||||
resolver.resolveDesignation()
|
||||
}
|
||||
): LLFirTargetResolver = LLFirContractsTargetResolver(target, lockProvider, scopeSession, towerDataContextCollector)
|
||||
|
||||
override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) {
|
||||
if (target !is FirContractDescriptionOwner) return
|
||||
|
||||
+3
-6
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@@ -20,15 +20,12 @@ import org.jetbrains.kotlin.fir.resolve.transformers.mpp.FirExpectActualMatcherT
|
||||
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
|
||||
|
||||
internal object LLFirExpectActualMatcherLazyResolver : LLFirLazyResolver(FirResolvePhase.EXPECT_ACTUAL_MATCHING) {
|
||||
override fun resolve(
|
||||
override fun createTargetResolver(
|
||||
target: LLFirResolveTarget,
|
||||
lockProvider: LLFirLockProvider,
|
||||
scopeSession: ScopeSession,
|
||||
towerDataContextCollector: FirResolveContextCollector?,
|
||||
) {
|
||||
val resolver = LLFirExpectActualMatchingTargetResolver(target, lockProvider, scopeSession)
|
||||
resolver.resolveDesignation()
|
||||
}
|
||||
): LLFirTargetResolver = LLFirExpectActualMatchingTargetResolver(target, lockProvider, scopeSession)
|
||||
|
||||
override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) {
|
||||
if (target.moduleData.session.languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformProjects) &&
|
||||
|
||||
+5
-6
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@@ -15,15 +15,14 @@ import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirResolveCont
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.plugin.FirCompanionGenerationTransformer
|
||||
|
||||
internal object LLFirGeneratedCompanionObjectLazyResolver : LLFirLazyResolver(FirResolvePhase.COMPANION_GENERATION) {
|
||||
override fun resolve(
|
||||
override fun createTargetResolver(
|
||||
target: LLFirResolveTarget,
|
||||
lockProvider: LLFirLockProvider,
|
||||
scopeSession: ScopeSession,
|
||||
towerDataContextCollector: FirResolveContextCollector?,
|
||||
) {
|
||||
val resolver = LLFirCompanionGenerationTargetResolver(target, lockProvider)
|
||||
resolver.resolveDesignation()
|
||||
}
|
||||
): LLFirTargetResolver = LLFirCompanionGenerationTargetResolver(target, lockProvider)
|
||||
|
||||
override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) {}
|
||||
}
|
||||
|
||||
private class LLFirCompanionGenerationTargetResolver(
|
||||
|
||||
+2
-5
@@ -29,15 +29,12 @@ import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
|
||||
import org.jetbrains.kotlin.utils.exceptions.requireWithAttachment
|
||||
|
||||
internal object LLFirImplicitTypesLazyResolver : LLFirLazyResolver(FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE) {
|
||||
override fun resolve(
|
||||
override fun createTargetResolver(
|
||||
target: LLFirResolveTarget,
|
||||
lockProvider: LLFirLockProvider,
|
||||
scopeSession: ScopeSession,
|
||||
towerDataContextCollector: FirResolveContextCollector?,
|
||||
) {
|
||||
val resolver = LLFirImplicitBodyTargetResolver(target, lockProvider, scopeSession, towerDataContextCollector)
|
||||
resolver.resolveDesignation()
|
||||
}
|
||||
): LLFirTargetResolver = LLFirImplicitBodyTargetResolver(target, lockProvider, scopeSession, towerDataContextCollector)
|
||||
|
||||
override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) {
|
||||
if (target !is FirCallableDeclaration) return
|
||||
|
||||
+31
-4
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@@ -13,14 +13,41 @@ import org.jetbrains.kotlin.fir.FirElementWithResolveState
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirResolveContextCollector
|
||||
import org.jetbrains.kotlin.utils.exceptions.requireWithAttachment
|
||||
|
||||
/**
|
||||
* This class is responsible for [LLFirResolveTarget] resolution and "is resolved" check after that.
|
||||
*
|
||||
* @see LLFirLazyResolverRunner
|
||||
* @see LLFirTargetResolver
|
||||
*/
|
||||
internal abstract class LLFirLazyResolver(val resolverPhase: FirResolvePhase) {
|
||||
abstract fun resolve(
|
||||
fun resolve(
|
||||
target: LLFirResolveTarget,
|
||||
lockProvider: LLFirLockProvider,
|
||||
scopeSession: ScopeSession,
|
||||
towerDataContextCollector: FirResolveContextCollector?,
|
||||
)
|
||||
) {
|
||||
val resolver = createTargetResolver(target, lockProvider, scopeSession, towerDataContextCollector)
|
||||
requireWithAttachment(
|
||||
resolverPhase == resolver.resolverPhase,
|
||||
{
|
||||
"""
|
||||
Phase mismatch between ${this::class.simpleName} and ${resolver::class.simpleName}.
|
||||
The resolver phase is ${resolver.resolverPhase}, but $resolverPhase is expected
|
||||
""".trimIndent()
|
||||
},
|
||||
)
|
||||
|
||||
resolver.resolveDesignation()
|
||||
}
|
||||
|
||||
protected abstract fun createTargetResolver(
|
||||
target: LLFirResolveTarget,
|
||||
lockProvider: LLFirLockProvider,
|
||||
scopeSession: ScopeSession,
|
||||
towerDataContextCollector: FirResolveContextCollector?,
|
||||
): LLFirTargetResolver
|
||||
|
||||
fun checkIsResolved(target: FirElementWithResolveState) {
|
||||
target.checkPhase(resolverPhase)
|
||||
@@ -33,7 +60,7 @@ internal abstract class LLFirLazyResolver(val resolverPhase: FirResolvePhase) {
|
||||
* Will be performed to resolved declaration and its nested declarations
|
||||
* @see checkNestedDeclarationsAreResolved
|
||||
*/
|
||||
protected open fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) {}
|
||||
protected abstract fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState)
|
||||
|
||||
fun updatePhaseForDeclarationInternals(target: FirElementWithResolveState) {
|
||||
LLFirPhaseUpdater.updateDeclarationInternalsPhase(
|
||||
|
||||
+5
-6
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@@ -13,15 +13,14 @@ import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirResolveContextCollector
|
||||
|
||||
internal object LLFirSealedClassInheritorsLazyResolver : LLFirLazyResolver(FirResolvePhase.SEALED_CLASS_INHERITORS) {
|
||||
override fun resolve(
|
||||
override fun createTargetResolver(
|
||||
target: LLFirResolveTarget,
|
||||
lockProvider: LLFirLockProvider,
|
||||
scopeSession: ScopeSession,
|
||||
towerDataContextCollector: FirResolveContextCollector?,
|
||||
) {
|
||||
val resolver = LLFirSealedClassInheritorsDesignatedResolver(target, lockProvider)
|
||||
resolver.resolveDesignation()
|
||||
}
|
||||
): LLFirTargetResolver = LLFirSealedClassInheritorsDesignatedResolver(target, lockProvider)
|
||||
|
||||
override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) {}
|
||||
}
|
||||
|
||||
|
||||
|
||||
+7
-11
@@ -31,21 +31,17 @@ import org.jetbrains.kotlin.fir.visitors.transformSingle
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
internal object LLFirStatusLazyResolver : LLFirLazyResolver(FirResolvePhase.STATUS) {
|
||||
override fun resolve(
|
||||
override fun createTargetResolver(
|
||||
target: LLFirResolveTarget,
|
||||
lockProvider: LLFirLockProvider,
|
||||
scopeSession: ScopeSession,
|
||||
towerDataContextCollector: FirResolveContextCollector?,
|
||||
) {
|
||||
val resolver = LLFirStatusTargetResolver(
|
||||
target = target,
|
||||
lockProvider = lockProvider,
|
||||
scopeSession = scopeSession,
|
||||
resolveMode = target.resolveMode(),
|
||||
)
|
||||
|
||||
resolver.resolveDesignation()
|
||||
}
|
||||
): LLFirTargetResolver = LLFirStatusTargetResolver(
|
||||
target = target,
|
||||
lockProvider = lockProvider,
|
||||
scopeSession = scopeSession,
|
||||
resolveMode = target.resolveMode(),
|
||||
)
|
||||
|
||||
override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) {
|
||||
if (target !is FirMemberDeclaration) return
|
||||
|
||||
+2
-5
@@ -34,15 +34,12 @@ import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
|
||||
internal object LLFirSupertypeLazyResolver : LLFirLazyResolver(FirResolvePhase.SUPER_TYPES) {
|
||||
override fun resolve(
|
||||
override fun createTargetResolver(
|
||||
target: LLFirResolveTarget,
|
||||
lockProvider: LLFirLockProvider,
|
||||
scopeSession: ScopeSession,
|
||||
towerDataContextCollector: FirResolveContextCollector?,
|
||||
) {
|
||||
val resolver = LLFirSuperTypeTargetResolver(target, lockProvider, scopeSession)
|
||||
resolver.resolveDesignation()
|
||||
}
|
||||
): LLFirTargetResolver = LLFirSuperTypeTargetResolver(target, lockProvider, scopeSession)
|
||||
|
||||
override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) {
|
||||
when (target) {
|
||||
|
||||
+1
-1
@@ -39,7 +39,7 @@ import org.jetbrains.kotlin.utils.exceptions.requireWithAttachment
|
||||
internal abstract class LLFirTargetResolver(
|
||||
protected val resolveTarget: LLFirResolveTarget,
|
||||
protected val lockProvider: LLFirLockProvider,
|
||||
protected val resolverPhase: FirResolvePhase,
|
||||
val resolverPhase: FirResolvePhase,
|
||||
private val isJumpingPhase: Boolean = false,
|
||||
) : LLFirResolveTargetVisitor {
|
||||
val resolveTargetSession: LLFirSession get() = resolveTarget.session
|
||||
|
||||
+2
-5
@@ -31,15 +31,12 @@ import org.jetbrains.kotlin.util.PrivateForInline
|
||||
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
|
||||
|
||||
internal object LLFirTypeLazyResolver : LLFirLazyResolver(FirResolvePhase.TYPES) {
|
||||
override fun resolve(
|
||||
override fun createTargetResolver(
|
||||
target: LLFirResolveTarget,
|
||||
lockProvider: LLFirLockProvider,
|
||||
scopeSession: ScopeSession,
|
||||
towerDataContextCollector: FirResolveContextCollector?,
|
||||
) {
|
||||
val resolver = LLFirTypeTargetResolver(target, lockProvider, scopeSession)
|
||||
resolver.resolveDesignation()
|
||||
}
|
||||
): LLFirTargetResolver = LLFirTypeTargetResolver(target, lockProvider, scopeSession)
|
||||
|
||||
override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) {
|
||||
if (target is FirAnnotationContainer) {
|
||||
|
||||
Reference in New Issue
Block a user