[LL API] Encapsulate on-air class provider logic in LLFirProvider
The old 'FirProviderInterceptor' is too invasive, ad-hoc, and only a few places in the compiler are aware of it. This fixes the test 'FirOnAirResolveTestGenerated#testOnAirTypesResolve' which started failing after the designation path collection refactoring. The newly appeared class existence check started to fail: ``` val declaration = firProvider.getFirClassifierByFqName(classId) check(declaration != null) ```
This commit is contained in:
+22
-24
@@ -12,8 +12,8 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.api.tryCollectDesignation
|
|||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.llFirModuleData
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.llFirModuleData
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionInvalidator
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionInvalidator
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.llFirSession
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.llFirSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.transformers.LLFirFirProviderInterceptor
|
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.transformers.LLFirLazyTransformerExecutor
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.transformers.LLFirLazyTransformerExecutor
|
||||||
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.transformers.withSyntheticClasses
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkCanceled
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkCanceled
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.getContainingFile
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.getContainingFile
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirEntry
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirEntry
|
||||||
@@ -163,8 +163,7 @@ internal class LLFirModuleLazyDeclarationResolver(val moduleComponents: LLFirMod
|
|||||||
scopeSession = scopeSession,
|
scopeSession = scopeSession,
|
||||||
phaseRunner = moduleComponents.globalResolveComponents.phaseRunner,
|
phaseRunner = moduleComponents.globalResolveComponents.phaseRunner,
|
||||||
lockProvider = moduleComponents.globalResolveComponents.lockProvider,
|
lockProvider = moduleComponents.globalResolveComponents.lockProvider,
|
||||||
towerDataContextCollector = null,
|
towerDataContextCollector = null
|
||||||
firProviderInterceptor = null,
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -175,31 +174,30 @@ internal class LLFirModuleLazyDeclarationResolver(val moduleComponents: LLFirMod
|
|||||||
towerDataContextCollector: FirTowerDataContextCollector?,
|
towerDataContextCollector: FirTowerDataContextCollector?,
|
||||||
) {
|
) {
|
||||||
resolveFileToImportsWithoutLock(designation.firFile)
|
resolveFileToImportsWithoutLock(designation.firFile)
|
||||||
var currentPhase = maxOf(designation.target.resolvePhase, FirResolvePhase.IMPORTS)
|
|
||||||
|
|
||||||
val scopeSession = ScopeSession()
|
fun runTransformation() {
|
||||||
|
val scopeSession = ScopeSession()
|
||||||
|
var currentPhase = maxOf(designation.target.resolvePhase, FirResolvePhase.IMPORTS)
|
||||||
|
|
||||||
val firProviderInterceptor = if (onAirCreatedDeclaration) {
|
while (currentPhase < FirResolvePhase.BODY_RESOLVE) {
|
||||||
LLFirFirProviderInterceptor.createForFirElement(
|
currentPhase = currentPhase.next
|
||||||
session = designation.firFile.moduleData.session,
|
checkCanceled()
|
||||||
firFile = designation.firFile,
|
|
||||||
element = designation.target
|
|
||||||
)
|
|
||||||
} else null
|
|
||||||
|
|
||||||
while (currentPhase < FirResolvePhase.BODY_RESOLVE) {
|
LLFirLazyTransformerExecutor.execute(
|
||||||
currentPhase = currentPhase.next
|
phase = currentPhase,
|
||||||
checkCanceled()
|
designation = designation,
|
||||||
|
scopeSession = scopeSession,
|
||||||
|
phaseRunner = moduleComponents.globalResolveComponents.phaseRunner,
|
||||||
|
lockProvider = moduleComponents.globalResolveComponents.lockProvider,
|
||||||
|
towerDataContextCollector = towerDataContextCollector
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
LLFirLazyTransformerExecutor.execute(
|
if (onAirCreatedDeclaration) {
|
||||||
phase = currentPhase,
|
withSyntheticClasses(designation, ::runTransformation)
|
||||||
designation = designation,
|
} else {
|
||||||
scopeSession = scopeSession,
|
runTransformation()
|
||||||
phaseRunner = moduleComponents.globalResolveComponents.phaseRunner,
|
|
||||||
lockProvider = moduleComponents.globalResolveComponents.lockProvider,
|
|
||||||
towerDataContextCollector = towerDataContextCollector,
|
|
||||||
firProviderInterceptor = firProviderInterceptor,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-2
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.analysis.low.level.api.fir.providers
|
package org.jetbrains.kotlin.analysis.low.level.api.fir.providers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.transformers.SyntheticFirClassProvider
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.FirProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.FirProvider
|
||||||
@@ -17,8 +18,10 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
internal class LLFirLibrarySessionProvider(
|
internal class LLFirLibrarySessionProvider(
|
||||||
override val symbolProvider: FirSymbolProvider
|
override val symbolProvider: FirSymbolProvider
|
||||||
) : FirProvider() {
|
) : FirProvider() {
|
||||||
override fun getFirClassifierByFqName(classId: ClassId): FirClassLikeDeclaration? =
|
override fun getFirClassifierByFqName(classId: ClassId): FirClassLikeDeclaration? {
|
||||||
symbolProvider.getClassLikeSymbolByClassId(classId)?.fir
|
return SyntheticFirClassProvider.getInstance(symbolProvider.session).getFirClassifierByFqName(classId)
|
||||||
|
?: symbolProvider.getClassLikeSymbolByClassId(classId)?.fir
|
||||||
|
}
|
||||||
|
|
||||||
override fun getFirClassifierContainerFile(fqName: ClassId): FirFile = shouldNotBeCalled()
|
override fun getFirClassifierContainerFile(fqName: ClassId): FirFile = shouldNotBeCalled()
|
||||||
|
|
||||||
|
|||||||
+11
-7
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.analysis.low.level.api.fir.providers
|
package org.jetbrains.kotlin.analysis.low.level.api.fir.providers
|
||||||
|
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirModuleResolveComponents
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirModuleResolveComponents
|
||||||
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.transformers.SyntheticFirClassProvider
|
||||||
import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider
|
import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider
|
||||||
import org.jetbrains.kotlin.analysis.providers.KotlinPackageProvider
|
import org.jetbrains.kotlin.analysis.providers.KotlinPackageProvider
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
@@ -44,8 +45,10 @@ internal class LLFirProvider(
|
|||||||
|
|
||||||
override val isPhasedFirAllowed: Boolean get() = true
|
override val isPhasedFirAllowed: Boolean get() = true
|
||||||
|
|
||||||
override fun getFirClassifierByFqName(classId: ClassId): FirClassLikeDeclaration? =
|
override fun getFirClassifierByFqName(classId: ClassId): FirClassLikeDeclaration? {
|
||||||
providerHelper.getFirClassifierByFqName(classId)
|
return SyntheticFirClassProvider.getInstance(session).getFirClassifierByFqName(classId)
|
||||||
|
?: providerHelper.getFirClassifierByFqName(classId)
|
||||||
|
}
|
||||||
|
|
||||||
override fun getFirClassifierContainerFile(fqName: ClassId): FirFile {
|
override fun getFirClassifierContainerFile(fqName: ClassId): FirFile {
|
||||||
return getFirClassifierContainerFileIfAny(fqName)
|
return getFirClassifierContainerFileIfAny(fqName)
|
||||||
@@ -53,8 +56,8 @@ internal class LLFirProvider(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getFirClassifierContainerFileIfAny(fqName: ClassId): FirFile? {
|
override fun getFirClassifierContainerFileIfAny(fqName: ClassId): FirFile? {
|
||||||
val fir = getFirClassifierByFqName(fqName) ?: return null // Necessary to ensure cacheProvider contains this classifier
|
return SyntheticFirClassProvider.getInstance(session).getFirClassifierContainerFileIfAny(fqName)
|
||||||
return moduleComponents.cache.getContainerFirFile(fir)
|
?: getFirClassifierByFqName(fqName)?.let { moduleComponents.cache.getContainerFirFile(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getFirClassifierContainerFile(symbol: FirClassLikeSymbol<*>): FirFile {
|
override fun getFirClassifierContainerFile(symbol: FirClassLikeSymbol<*>): FirFile {
|
||||||
@@ -62,9 +65,10 @@ internal class LLFirProvider(
|
|||||||
?: error("Couldn't find container for ${symbol.classId}")
|
?: error("Couldn't find container for ${symbol.classId}")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getFirClassifierContainerFileIfAny(symbol: FirClassLikeSymbol<*>): FirFile? =
|
override fun getFirClassifierContainerFileIfAny(symbol: FirClassLikeSymbol<*>): FirFile? {
|
||||||
moduleComponents.cache.getContainerFirFile(symbol.fir)
|
return SyntheticFirClassProvider.getInstance(session).getFirClassifierContainerFileIfAny(symbol.classId)
|
||||||
|
?: moduleComponents.cache.getContainerFirFile(symbol.fir)
|
||||||
|
}
|
||||||
|
|
||||||
override fun getFirCallableContainerFile(symbol: FirCallableSymbol<*>): FirFile? {
|
override fun getFirCallableContainerFile(symbol: FirCallableSymbol<*>): FirFile? {
|
||||||
symbol.fir.originalForSubstitutionOverride?.symbol?.let { originalSymbol ->
|
symbol.fir.originalForSubstitutionOverride?.symbol?.let { originalSymbol ->
|
||||||
|
|||||||
+2
-5
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.fir.FirSession
|
|||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.ResolutionMode
|
import org.jetbrains.kotlin.fir.resolve.ResolutionMode
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirProviderInterceptor
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer
|
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirTowerDataContextCollector
|
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirTowerDataContextCollector
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.ImplicitBodyResolveComputationSession
|
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.ImplicitBodyResolveComputationSession
|
||||||
@@ -28,8 +27,7 @@ internal class LLFirDesignatedBodyResolveTransformer(
|
|||||||
private val designation: FirDesignationWithFile,
|
private val designation: FirDesignationWithFile,
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
scopeSession: ScopeSession,
|
scopeSession: ScopeSession,
|
||||||
towerDataContextCollector: FirTowerDataContextCollector?,
|
towerDataContextCollector: FirTowerDataContextCollector?
|
||||||
firProviderInterceptor: FirProviderInterceptor?,
|
|
||||||
) : LLFirLazyTransformer, FirBodyResolveTransformer(
|
) : LLFirLazyTransformer, FirBodyResolveTransformer(
|
||||||
session,
|
session,
|
||||||
phase = FirResolvePhase.BODY_RESOLVE,
|
phase = FirResolvePhase.BODY_RESOLVE,
|
||||||
@@ -40,8 +38,7 @@ internal class LLFirDesignatedBodyResolveTransformer(
|
|||||||
ImplicitBodyResolveComputationSession(),
|
ImplicitBodyResolveComputationSession(),
|
||||||
::LLFirEnsureBasedTransformerForReturnTypeCalculator
|
::LLFirEnsureBasedTransformerForReturnTypeCalculator
|
||||||
),
|
),
|
||||||
firTowerDataContextCollector = towerDataContextCollector,
|
firTowerDataContextCollector = towerDataContextCollector
|
||||||
firProviderInterceptor = firProviderInterceptor,
|
|
||||||
) {
|
) {
|
||||||
private val ideDeclarationTransformer = LLFirDeclarationTransformer(designation)
|
private val ideDeclarationTransformer = LLFirDeclarationTransformer(designation)
|
||||||
|
|
||||||
|
|||||||
+2
-4
@@ -35,8 +35,7 @@ internal class LLFirDesignatedSupertypeResolverTransformer(
|
|||||||
private val designation: FirDesignationWithFile,
|
private val designation: FirDesignationWithFile,
|
||||||
private val session: FirSession,
|
private val session: FirSession,
|
||||||
private val scopeSession: ScopeSession,
|
private val scopeSession: ScopeSession,
|
||||||
private val lockProvider: LLFirLockProvider,
|
private val lockProvider: LLFirLockProvider
|
||||||
private val firProviderInterceptor: FirProviderInterceptor?,
|
|
||||||
) : LLFirLazyTransformer {
|
) : LLFirLazyTransformer {
|
||||||
|
|
||||||
private val supertypeComputationSession = SupertypeComputationSession()
|
private val supertypeComputationSession = SupertypeComputationSession()
|
||||||
@@ -47,8 +46,7 @@ internal class LLFirDesignatedSupertypeResolverTransformer(
|
|||||||
supertypeComputationSession = supertypeComputationSession,
|
supertypeComputationSession = supertypeComputationSession,
|
||||||
scopeSession = scopeSession,
|
scopeSession = scopeSession,
|
||||||
scopeForLocalClass = null,
|
scopeForLocalClass = null,
|
||||||
localClassesNavigationInfo = null,
|
localClassesNavigationInfo = null
|
||||||
firProviderInterceptor = firProviderInterceptor,
|
|
||||||
) {
|
) {
|
||||||
val declarationTransformer = LLFirDeclarationTransformer(classDesignation)
|
val declarationTransformer = LLFirDeclarationTransformer(classDesignation)
|
||||||
|
|
||||||
|
|||||||
-49
@@ -1,49 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2021 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.analysis.low.level.api.fir.transformers
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirProviderInterceptor
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
|
||||||
|
|
||||||
internal class LLFirFirProviderInterceptor private constructor(
|
|
||||||
private val firFile: FirFile,
|
|
||||||
private val session: FirSession,
|
|
||||||
private val symbolSet: Set<FirClassLikeSymbol<*>>,
|
|
||||||
private val classIdToElementMap: Map<ClassId, FirClassLikeDeclaration>
|
|
||||||
) : FirProviderInterceptor {
|
|
||||||
|
|
||||||
override fun getFirClassifierContainerFileIfAny(symbol: FirClassLikeSymbol<*>): FirFile? =
|
|
||||||
if (symbolSet.contains(symbol)) firFile else session.firProvider.getFirClassifierContainerFileIfAny(symbol)
|
|
||||||
|
|
||||||
override fun getFirClassifierByFqName(classId: ClassId): FirClassLikeDeclaration? =
|
|
||||||
classIdToElementMap[classId] ?: session.firProvider.getFirClassifierByFqName(classId)
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
fun createForFirElement(session: FirSession, firFile: FirFile, element: FirElement): FirProviderInterceptor {
|
|
||||||
val nodeInfoCollector = object : FirVisitorVoid() {
|
|
||||||
val symbolSet = mutableSetOf<FirClassLikeSymbol<*>>()
|
|
||||||
val classIdToElementMap = mutableMapOf<ClassId, FirClassLikeDeclaration>()
|
|
||||||
override fun visitElement(element: FirElement) {
|
|
||||||
if (element is FirClassLikeDeclaration) {
|
|
||||||
symbolSet.add(element.symbol)
|
|
||||||
classIdToElementMap[element.symbol.classId] = element
|
|
||||||
}
|
|
||||||
element.acceptChildren(this)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
nodeInfoCollector.visitElement(element)
|
|
||||||
|
|
||||||
return LLFirFirProviderInterceptor(firFile, session, nodeInfoCollector.symbolSet, nodeInfoCollector.classIdToElementMap)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+2
-5
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDesignationWithFil
|
|||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirLockProvider
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirLockProvider
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirProviderInterceptor
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirTowerDataContextCollector
|
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirTowerDataContextCollector
|
||||||
|
|
||||||
internal class LLFirLazyTransformerExecutor {
|
internal class LLFirLazyTransformerExecutor {
|
||||||
@@ -21,8 +20,7 @@ internal class LLFirLazyTransformerExecutor {
|
|||||||
scopeSession: ScopeSession,
|
scopeSession: ScopeSession,
|
||||||
phaseRunner: LLFirPhaseRunner,
|
phaseRunner: LLFirPhaseRunner,
|
||||||
lockProvider: LLFirLockProvider,
|
lockProvider: LLFirLockProvider,
|
||||||
towerDataContextCollector: FirTowerDataContextCollector?,
|
towerDataContextCollector: FirTowerDataContextCollector?
|
||||||
firProviderInterceptor: FirProviderInterceptor?,
|
|
||||||
) {
|
) {
|
||||||
|
|
||||||
val lazyTransformer = LazyTransformerFactory.createLazyTransformer(
|
val lazyTransformer = LazyTransformerFactory.createLazyTransformer(
|
||||||
@@ -30,8 +28,7 @@ internal class LLFirLazyTransformerExecutor {
|
|||||||
designation,
|
designation,
|
||||||
scopeSession,
|
scopeSession,
|
||||||
lockProvider,
|
lockProvider,
|
||||||
towerDataContextCollector,
|
towerDataContextCollector
|
||||||
firProviderInterceptor,
|
|
||||||
)
|
)
|
||||||
lazyTransformer.transformDeclaration(phaseRunner)
|
lazyTransformer.transformDeclaration(phaseRunner)
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-7
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDesignationWithFil
|
|||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirLockProvider
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirLockProvider
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirProviderInterceptor
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirTowerDataContextCollector
|
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirTowerDataContextCollector
|
||||||
|
|
||||||
internal object LazyTransformerFactory {
|
internal object LazyTransformerFactory {
|
||||||
@@ -18,8 +17,7 @@ internal object LazyTransformerFactory {
|
|||||||
designation: FirDesignationWithFile,
|
designation: FirDesignationWithFile,
|
||||||
scopeSession: ScopeSession,
|
scopeSession: ScopeSession,
|
||||||
lockProvider: LLFirLockProvider,
|
lockProvider: LLFirLockProvider,
|
||||||
towerDataContextCollector: FirTowerDataContextCollector?,
|
towerDataContextCollector: FirTowerDataContextCollector?
|
||||||
firProviderInterceptor: FirProviderInterceptor?,
|
|
||||||
): LLFirLazyTransformer = when (phase) {
|
): LLFirLazyTransformer = when (phase) {
|
||||||
FirResolvePhase.COMPANION_GENERATION -> LLFirDesignatedGeneratedCompanionObjectResolveTransformer(
|
FirResolvePhase.COMPANION_GENERATION -> LLFirDesignatedGeneratedCompanionObjectResolveTransformer(
|
||||||
designation = designation,
|
designation = designation,
|
||||||
@@ -30,8 +28,7 @@ internal object LazyTransformerFactory {
|
|||||||
designation = designation,
|
designation = designation,
|
||||||
session = designation.firFile.moduleData.session,
|
session = designation.firFile.moduleData.session,
|
||||||
scopeSession = scopeSession,
|
scopeSession = scopeSession,
|
||||||
lockProvider = lockProvider,
|
lockProvider = lockProvider
|
||||||
firProviderInterceptor = firProviderInterceptor,
|
|
||||||
)
|
)
|
||||||
FirResolvePhase.TYPES -> LLFirDesignatedTypeResolverTransformer(
|
FirResolvePhase.TYPES -> LLFirDesignatedTypeResolverTransformer(
|
||||||
designation,
|
designation,
|
||||||
@@ -73,8 +70,7 @@ internal object LazyTransformerFactory {
|
|||||||
designation,
|
designation,
|
||||||
designation.firFile.moduleData.session,
|
designation.firFile.moduleData.session,
|
||||||
scopeSession,
|
scopeSession,
|
||||||
towerDataContextCollector,
|
towerDataContextCollector
|
||||||
firProviderInterceptor,
|
|
||||||
)
|
)
|
||||||
FirResolvePhase.EXPECT_ACTUAL_MATCHING -> LLFirDesignatedExpectActualMatcherTransformer(
|
FirResolvePhase.EXPECT_ACTUAL_MATCHING -> LLFirDesignatedExpectActualMatcherTransformer(
|
||||||
designation,
|
designation,
|
||||||
|
|||||||
+105
@@ -0,0 +1,105 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2021 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.analysis.low.level.api.fir.transformers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDesignationWithFile
|
||||||
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
import java.util.WeakHashMap
|
||||||
|
|
||||||
|
internal interface SyntheticFirClassProvider {
|
||||||
|
fun getFirClassifierContainerFileIfAny(classId: ClassId): FirFile?
|
||||||
|
fun getFirClassifierByFqName(classId: ClassId): FirClassLikeDeclaration?
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun getInstance(session: FirSession): SyntheticFirClassProvider {
|
||||||
|
return providersForThread.get()[session] ?: EmptySyntheticFirClassProvider
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun withSyntheticClasses(designation: FirDesignationWithFile, block: () -> Unit) {
|
||||||
|
val firSession = designation.firFile.moduleData.session
|
||||||
|
|
||||||
|
val compoundProvider = providersForThread.get()
|
||||||
|
.getOrPut(firSession) { CompoundSyntheticFirClassProvider() }
|
||||||
|
|
||||||
|
val provider = StaticSyntheticFirClassProvider.create(designation)
|
||||||
|
|
||||||
|
try {
|
||||||
|
compoundProvider.push(provider)
|
||||||
|
block()
|
||||||
|
} finally {
|
||||||
|
compoundProvider.pop(provider)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class StaticSyntheticFirClassProvider private constructor(
|
||||||
|
private val firFile: FirFile,
|
||||||
|
private val classes: Map<ClassId, FirClassLikeDeclaration>
|
||||||
|
) : SyntheticFirClassProvider {
|
||||||
|
override fun getFirClassifierContainerFileIfAny(classId: ClassId): FirFile? {
|
||||||
|
return if (classId in classes) firFile else null
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getFirClassifierByFqName(classId: ClassId): FirClassLikeDeclaration? {
|
||||||
|
return classes[classId]
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun create(designation: FirDesignationWithFile): SyntheticFirClassProvider {
|
||||||
|
val firFile = designation.firFile
|
||||||
|
val firElement = designation.target
|
||||||
|
|
||||||
|
val nodeInfoCollector = object : FirVisitorVoid() {
|
||||||
|
val classes = mutableMapOf<ClassId, FirClassLikeDeclaration>()
|
||||||
|
override fun visitElement(element: FirElement) {
|
||||||
|
if (element is FirClassLikeDeclaration) {
|
||||||
|
classes[element.symbol.classId] = element
|
||||||
|
}
|
||||||
|
element.acceptChildren(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
nodeInfoCollector.visitElement(firElement)
|
||||||
|
return StaticSyntheticFirClassProvider(firFile, nodeInfoCollector.classes)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class CompoundSyntheticFirClassProvider : SyntheticFirClassProvider {
|
||||||
|
private val providers = ArrayDeque<SyntheticFirClassProvider>()
|
||||||
|
|
||||||
|
fun push(provider: SyntheticFirClassProvider) {
|
||||||
|
providers.addFirst(provider)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun pop(provider: SyntheticFirClassProvider) {
|
||||||
|
assert(providers.removeFirst() === provider)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getFirClassifierContainerFileIfAny(classId: ClassId): FirFile? {
|
||||||
|
return providers.asReversed()
|
||||||
|
.firstNotNullOfOrNull { it.getFirClassifierContainerFileIfAny(classId) }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getFirClassifierByFqName(classId: ClassId): FirClassLikeDeclaration? {
|
||||||
|
return providers.asReversed()
|
||||||
|
.firstNotNullOfOrNull { it.getFirClassifierByFqName(classId) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private object EmptySyntheticFirClassProvider : SyntheticFirClassProvider {
|
||||||
|
override fun getFirClassifierContainerFileIfAny(classId: ClassId) = null
|
||||||
|
override fun getFirClassifierByFqName(classId: ClassId) = null
|
||||||
|
}
|
||||||
|
|
||||||
|
private val providersForThread: ThreadLocal<WeakHashMap<FirSession, CompoundSyntheticFirClassProvider>> =
|
||||||
|
ThreadLocal.withInitial { WeakHashMap() }
|
||||||
+6
-17
@@ -50,14 +50,6 @@ class FirSupertypeResolverProcessor(session: FirSession, scopeSession: ScopeSess
|
|||||||
override val transformer = FirSupertypeResolverTransformer(session, scopeSession)
|
override val transformer = FirSupertypeResolverTransformer(session, scopeSession)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Interceptor needed by IDE to resolve in-air created declarations.
|
|
||||||
*/
|
|
||||||
interface FirProviderInterceptor {
|
|
||||||
fun getFirClassifierContainerFileIfAny(symbol: FirClassLikeSymbol<*>): FirFile?
|
|
||||||
fun getFirClassifierByFqName(classId: ClassId): FirClassLikeDeclaration?
|
|
||||||
}
|
|
||||||
|
|
||||||
open class FirSupertypeResolverTransformer(
|
open class FirSupertypeResolverTransformer(
|
||||||
final override val session: FirSession,
|
final override val session: FirSession,
|
||||||
scopeSession: ScopeSession
|
scopeSession: ScopeSession
|
||||||
@@ -84,7 +76,6 @@ fun <F : FirClassLikeDeclaration> F.runSupertypeResolvePhaseForLocalClass(
|
|||||||
scopeSession: ScopeSession,
|
scopeSession: ScopeSession,
|
||||||
currentScopeList: List<FirScope>,
|
currentScopeList: List<FirScope>,
|
||||||
localClassesNavigationInfo: LocalClassesNavigationInfo,
|
localClassesNavigationInfo: LocalClassesNavigationInfo,
|
||||||
firProviderInterceptor: FirProviderInterceptor?,
|
|
||||||
useSiteFile: FirFile,
|
useSiteFile: FirFile,
|
||||||
containingDeclarations: List<FirDeclaration>,
|
containingDeclarations: List<FirDeclaration>,
|
||||||
): F {
|
): F {
|
||||||
@@ -93,7 +84,6 @@ fun <F : FirClassLikeDeclaration> F.runSupertypeResolvePhaseForLocalClass(
|
|||||||
session, supertypeComputationSession, scopeSession,
|
session, supertypeComputationSession, scopeSession,
|
||||||
currentScopeList.toPersistentList(),
|
currentScopeList.toPersistentList(),
|
||||||
localClassesNavigationInfo,
|
localClassesNavigationInfo,
|
||||||
firProviderInterceptor,
|
|
||||||
useSiteFile,
|
useSiteFile,
|
||||||
containingDeclarations,
|
containingDeclarations,
|
||||||
)
|
)
|
||||||
@@ -220,7 +210,6 @@ open class FirSupertypeResolverVisitor(
|
|||||||
private val scopeSession: ScopeSession,
|
private val scopeSession: ScopeSession,
|
||||||
private val scopeForLocalClass: PersistentList<FirScope>? = null,
|
private val scopeForLocalClass: PersistentList<FirScope>? = null,
|
||||||
private val localClassesNavigationInfo: LocalClassesNavigationInfo? = null,
|
private val localClassesNavigationInfo: LocalClassesNavigationInfo? = null,
|
||||||
private val firProviderInterceptor: FirProviderInterceptor? = null,
|
|
||||||
@property:PrivateForInline var useSiteFile: FirFile? = null,
|
@property:PrivateForInline var useSiteFile: FirFile? = null,
|
||||||
containingDeclarations: List<FirDeclaration> = emptyList(),
|
containingDeclarations: List<FirDeclaration> = emptyList(),
|
||||||
) : FirDefaultVisitor<Unit, Any?>() {
|
) : FirDefaultVisitor<Unit, Any?>() {
|
||||||
@@ -246,13 +235,13 @@ open class FirSupertypeResolverVisitor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getFirClassifierContainerFileIfAny(symbol: FirClassLikeSymbol<*>): FirFile? =
|
private fun getFirClassifierContainerFileIfAny(symbol: FirClassLikeSymbol<*>): FirFile? {
|
||||||
if (firProviderInterceptor != null) firProviderInterceptor.getFirClassifierContainerFileIfAny(symbol)
|
return symbol.moduleData.session.firProvider.getFirClassifierContainerFileIfAny(symbol.classId)
|
||||||
else symbol.moduleData.session.firProvider.getFirClassifierContainerFileIfAny(symbol.classId)
|
}
|
||||||
|
|
||||||
private fun getFirClassifierByFqName(moduleSession: FirSession, classId: ClassId): FirClassLikeDeclaration? =
|
private fun getFirClassifierByFqName(moduleSession: FirSession, classId: ClassId): FirClassLikeDeclaration? {
|
||||||
if (firProviderInterceptor != null) firProviderInterceptor.getFirClassifierByFqName(classId)
|
return moduleSession.firProvider.getFirClassifierByFqName(classId)
|
||||||
else moduleSession.firProvider.getFirClassifierByFqName(classId)
|
}
|
||||||
|
|
||||||
override fun visitElement(element: FirElement, data: Any?) {}
|
override fun visitElement(element: FirElement, data: Any?) {}
|
||||||
|
|
||||||
|
|||||||
-11
@@ -10,19 +10,9 @@ import org.jetbrains.kotlin.fir.declarations.*
|
|||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.*
|
import org.jetbrains.kotlin.fir.resolve.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.ResolutionContext
|
import org.jetbrains.kotlin.fir.resolve.calls.ResolutionContext
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.ResolutionStageRunner
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.dfa.DataFlowAnalyzerContext
|
import org.jetbrains.kotlin.fir.resolve.dfa.DataFlowAnalyzerContext
|
||||||
import org.jetbrains.kotlin.fir.resolve.dfa.FirDataFlowAnalyzer
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.FirCallCompleter
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.InferenceComponents
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.inferenceComponents
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.*
|
import org.jetbrains.kotlin.fir.resolve.transformers.*
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirLocalScope
|
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.types.builder.buildImplicitTypeRef
|
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
|
|
||||||
abstract class FirAbstractBodyResolveTransformerDispatcher(
|
abstract class FirAbstractBodyResolveTransformerDispatcher(
|
||||||
@@ -33,7 +23,6 @@ abstract class FirAbstractBodyResolveTransformerDispatcher(
|
|||||||
val returnTypeCalculator: ReturnTypeCalculator = ReturnTypeCalculatorForFullBodyResolve,
|
val returnTypeCalculator: ReturnTypeCalculator = ReturnTypeCalculatorForFullBodyResolve,
|
||||||
outerBodyResolveContext: BodyResolveContext? = null,
|
outerBodyResolveContext: BodyResolveContext? = null,
|
||||||
val firTowerDataContextCollector: FirTowerDataContextCollector? = null,
|
val firTowerDataContextCollector: FirTowerDataContextCollector? = null,
|
||||||
val firProviderInterceptor: FirProviderInterceptor? = null,
|
|
||||||
) : FirAbstractBodyResolveTransformer(phase) {
|
) : FirAbstractBodyResolveTransformer(phase) {
|
||||||
|
|
||||||
final override val context: BodyResolveContext =
|
final override val context: BodyResolveContext =
|
||||||
|
|||||||
+2
-5
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.fir.resolve.transformers.body.resolve
|
|||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirProviderInterceptor
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator
|
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculatorForFullBodyResolve
|
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculatorForFullBodyResolve
|
||||||
|
|
||||||
@@ -19,8 +18,7 @@ open class FirBodyResolveTransformer(
|
|||||||
scopeSession: ScopeSession,
|
scopeSession: ScopeSession,
|
||||||
returnTypeCalculator: ReturnTypeCalculator = ReturnTypeCalculatorForFullBodyResolve,
|
returnTypeCalculator: ReturnTypeCalculator = ReturnTypeCalculatorForFullBodyResolve,
|
||||||
outerBodyResolveContext: BodyResolveContext? = null,
|
outerBodyResolveContext: BodyResolveContext? = null,
|
||||||
firTowerDataContextCollector: FirTowerDataContextCollector? = null,
|
firTowerDataContextCollector: FirTowerDataContextCollector? = null
|
||||||
firProviderInterceptor: FirProviderInterceptor? = null,
|
|
||||||
) : FirAbstractBodyResolveTransformerDispatcher(
|
) : FirAbstractBodyResolveTransformerDispatcher(
|
||||||
session,
|
session,
|
||||||
phase,
|
phase,
|
||||||
@@ -28,8 +26,7 @@ open class FirBodyResolveTransformer(
|
|||||||
scopeSession,
|
scopeSession,
|
||||||
returnTypeCalculator,
|
returnTypeCalculator,
|
||||||
outerBodyResolveContext,
|
outerBodyResolveContext,
|
||||||
firTowerDataContextCollector,
|
firTowerDataContextCollector
|
||||||
firProviderInterceptor,
|
|
||||||
) {
|
) {
|
||||||
final override val expressionsTransformer = FirExpressionsResolveTransformer(this)
|
final override val expressionsTransformer = FirExpressionsResolveTransformer(this)
|
||||||
final override val declarationsTransformer = FirDeclarationsResolveTransformer(this)
|
final override val declarationsTransformer = FirDeclarationsResolveTransformer(this)
|
||||||
|
|||||||
+3
-21
@@ -493,13 +493,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirAbstractBodyResolve
|
|||||||
override fun transformRegularClass(regularClass: FirRegularClass, data: ResolutionMode): FirStatement = whileAnalysing(session, regularClass) {
|
override fun transformRegularClass(regularClass: FirRegularClass, data: ResolutionMode): FirStatement = whileAnalysing(session, regularClass) {
|
||||||
return context.withContainingClass(regularClass) {
|
return context.withContainingClass(regularClass) {
|
||||||
if (regularClass.isLocal && regularClass !in context.targetedLocalClasses) {
|
if (regularClass.isLocal && regularClass !in context.targetedLocalClasses) {
|
||||||
return regularClass.runAllPhasesForLocalClass(
|
return regularClass.runAllPhasesForLocalClass(transformer, components, data, transformer.firTowerDataContextCollector)
|
||||||
transformer,
|
|
||||||
components,
|
|
||||||
data,
|
|
||||||
transformer.firTowerDataContextCollector,
|
|
||||||
transformer.firProviderInterceptor
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
doTransformTypeParameters(regularClass)
|
doTransformTypeParameters(regularClass)
|
||||||
@@ -519,13 +513,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirAbstractBodyResolve
|
|||||||
|
|
||||||
override fun transformTypeAlias(typeAlias: FirTypeAlias, data: ResolutionMode): FirTypeAlias = whileAnalysing(session, typeAlias) {
|
override fun transformTypeAlias(typeAlias: FirTypeAlias, data: ResolutionMode): FirTypeAlias = whileAnalysing(session, typeAlias) {
|
||||||
if (typeAlias.isLocal && typeAlias !in context.targetedLocalClasses) {
|
if (typeAlias.isLocal && typeAlias !in context.targetedLocalClasses) {
|
||||||
return typeAlias.runAllPhasesForLocalClass(
|
return typeAlias.runAllPhasesForLocalClass(transformer, components, data, transformer.firTowerDataContextCollector)
|
||||||
transformer,
|
|
||||||
components,
|
|
||||||
data,
|
|
||||||
transformer.firTowerDataContextCollector,
|
|
||||||
transformer.firProviderInterceptor
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
doTransformTypeParameters(typeAlias)
|
doTransformTypeParameters(typeAlias)
|
||||||
typeAlias.transformAnnotations(transformer, data)
|
typeAlias.transformAnnotations(transformer, data)
|
||||||
@@ -554,13 +542,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirAbstractBodyResolve
|
|||||||
data: ResolutionMode
|
data: ResolutionMode
|
||||||
): FirStatement = whileAnalysing(session, anonymousObject) {
|
): FirStatement = whileAnalysing(session, anonymousObject) {
|
||||||
if (anonymousObject !in context.targetedLocalClasses) {
|
if (anonymousObject !in context.targetedLocalClasses) {
|
||||||
return anonymousObject.runAllPhasesForLocalClass(
|
return anonymousObject.runAllPhasesForLocalClass(transformer, components, data, transformer.firTowerDataContextCollector)
|
||||||
transformer,
|
|
||||||
components,
|
|
||||||
data,
|
|
||||||
transformer.firTowerDataContextCollector,
|
|
||||||
transformer.firProviderInterceptor
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
// TODO: why would there be a graph already?
|
// TODO: why would there be a graph already?
|
||||||
val buildGraph = !implicitTypeOnly && anonymousObject.controlFlowGraphReference == null
|
val buildGraph = !implicitTypeOnly && anonymousObject.controlFlowGraphReference == null
|
||||||
|
|||||||
+1
-4
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.fir.resolve.transformers.body.resolve
|
|||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.ResolutionMode
|
import org.jetbrains.kotlin.fir.resolve.ResolutionMode
|
||||||
import org.jetbrains.kotlin.fir.resolve.createCurrentScopeList
|
import org.jetbrains.kotlin.fir.resolve.createCurrentScopeList
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirProviderInterceptor
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.plugin.runCompilerRequiredAnnotationsResolvePhaseForLocalClass
|
import org.jetbrains.kotlin.fir.resolve.transformers.plugin.runCompilerRequiredAnnotationsResolvePhaseForLocalClass
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.plugin.runCompanionGenerationPhaseForLocalClass
|
import org.jetbrains.kotlin.fir.resolve.transformers.plugin.runCompanionGenerationPhaseForLocalClass
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.runStatusResolveForLocalClass
|
import org.jetbrains.kotlin.fir.resolve.transformers.runStatusResolveForLocalClass
|
||||||
@@ -19,8 +18,7 @@ fun <F : FirClassLikeDeclaration> F.runAllPhasesForLocalClass(
|
|||||||
transformer: FirAbstractBodyResolveTransformer,
|
transformer: FirAbstractBodyResolveTransformer,
|
||||||
components: FirAbstractBodyResolveTransformer.BodyResolveTransformerComponents,
|
components: FirAbstractBodyResolveTransformer.BodyResolveTransformerComponents,
|
||||||
resolutionMode: ResolutionMode,
|
resolutionMode: ResolutionMode,
|
||||||
firTowerDataContextCollector: FirTowerDataContextCollector?,
|
firTowerDataContextCollector: FirTowerDataContextCollector?
|
||||||
firProviderInterceptor: FirProviderInterceptor?,
|
|
||||||
): F {
|
): F {
|
||||||
if (status is FirResolvedDeclarationStatus) return this
|
if (status is FirResolvedDeclarationStatus) return this
|
||||||
if (this is FirRegularClass) {
|
if (this is FirRegularClass) {
|
||||||
@@ -47,7 +45,6 @@ fun <F : FirClassLikeDeclaration> F.runAllPhasesForLocalClass(
|
|||||||
components.scopeSession,
|
components.scopeSession,
|
||||||
components.createCurrentScopeList(),
|
components.createCurrentScopeList(),
|
||||||
localClassesNavigationInfo,
|
localClassesNavigationInfo,
|
||||||
firProviderInterceptor,
|
|
||||||
components.file,
|
components.file,
|
||||||
components.containingDeclarations,
|
components.containingDeclarations,
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user