[Analysis API] add support for generated declarations to KtFirPackageScope
^KT-58262
This commit is contained in:
+33
-1
@@ -18,9 +18,15 @@ import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
|||||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LowLevelFirApiFacadeForResolveOnAir
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LowLevelFirApiFacadeForResolveOnAir
|
||||||
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.CompositeKotlinDeclarationProvider
|
||||||
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.CompositeKotlinPackageProvider
|
||||||
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.resolve.extensions.llResolveExtensionTool
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||||
|
import org.jetbrains.kotlin.analysis.project.structure.allDirectDependencies
|
||||||
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.createDeclarationProvider
|
import org.jetbrains.kotlin.analysis.providers.createDeclarationProvider
|
||||||
|
import org.jetbrains.kotlin.analysis.providers.createPackageProvider
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.moduleData
|
import org.jetbrains.kotlin.fir.moduleData
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
@@ -29,6 +35,7 @@ import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
|||||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||||
|
|
||||||
@OptIn(KtAnalysisApiInternals::class)
|
@OptIn(KtAnalysisApiInternals::class)
|
||||||
@Suppress("AnalysisApiMissingLifetimeCheck")
|
@Suppress("AnalysisApiMissingLifetimeCheck")
|
||||||
@@ -142,7 +149,32 @@ private constructor(
|
|||||||
internal val targetPlatform: TargetPlatform get() = useSiteSession.moduleData.platform
|
internal val targetPlatform: TargetPlatform get() = useSiteSession.moduleData.platform
|
||||||
|
|
||||||
val useSiteAnalysisScope: GlobalSearchScope = analysisScopeProviderImpl.getAnalysisScope()
|
val useSiteAnalysisScope: GlobalSearchScope = analysisScopeProviderImpl.getAnalysisScope()
|
||||||
val useSiteScopeDeclarationProvider: KotlinDeclarationProvider = project.createDeclarationProvider(useSiteAnalysisScope)
|
|
||||||
|
val useSiteScopeDeclarationProvider: KotlinDeclarationProvider
|
||||||
|
val useSitePackageProvider: KotlinPackageProvider
|
||||||
|
|
||||||
|
init {
|
||||||
|
val extensionTools = buildList {
|
||||||
|
addIfNotNull(useSiteSession.llResolveExtensionTool)
|
||||||
|
useSiteModule.allDirectDependencies().mapNotNullTo(this) { dependency ->
|
||||||
|
firResolveSession.getSessionFor(dependency).llResolveExtensionTool
|
||||||
|
}
|
||||||
|
}
|
||||||
|
useSiteScopeDeclarationProvider = CompositeKotlinDeclarationProvider.create(
|
||||||
|
buildList {
|
||||||
|
add(project.createDeclarationProvider(useSiteAnalysisScope))
|
||||||
|
extensionTools.mapTo(this) { it.declarationProvider }
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
useSitePackageProvider = CompositeKotlinPackageProvider.create(
|
||||||
|
buildList {
|
||||||
|
add(project.createPackageProvider(useSiteAnalysisScope))
|
||||||
|
extensionTools.mapTo(this) { it.packageProvider }
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
fun getScopeSessionFor(session: FirSession): ScopeSession = withValidityAssertion { firResolveSession.getScopeSessionFor(session) }
|
fun getScopeSessionFor(session: FirSession): ScopeSession = withValidityAssertion { firResolveSession.getScopeSessionFor(session) }
|
||||||
|
|
||||||
|
|||||||
+1
@@ -252,6 +252,7 @@ internal class KtFirScopeProvider(
|
|||||||
builder,
|
builder,
|
||||||
analysisSession.useSiteAnalysisScope,
|
analysisSession.useSiteAnalysisScope,
|
||||||
analysisSession.useSiteScopeDeclarationProvider,
|
analysisSession.useSiteScopeDeclarationProvider,
|
||||||
|
analysisSession.useSitePackageProvider,
|
||||||
analysisSession.targetPlatform
|
analysisSession.targetPlatform
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-3
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtClassifierSymbol
|
|||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtConstructorSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtConstructorSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPackageSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtPackageSymbol
|
||||||
import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider
|
import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider
|
||||||
import org.jetbrains.kotlin.analysis.providers.createPackageProvider
|
import org.jetbrains.kotlin.analysis.providers.KotlinPackageProvider
|
||||||
import org.jetbrains.kotlin.fir.extensions.FirExtensionService
|
import org.jetbrains.kotlin.fir.extensions.FirExtensionService
|
||||||
import org.jetbrains.kotlin.fir.extensions.declarationGenerators
|
import org.jetbrains.kotlin.fir.extensions.declarationGenerators
|
||||||
import org.jetbrains.kotlin.fir.extensions.extensionService
|
import org.jetbrains.kotlin.fir.extensions.extensionService
|
||||||
@@ -33,12 +33,11 @@ internal class KtFirPackageScope(
|
|||||||
private val builder: KtSymbolByFirBuilder,
|
private val builder: KtSymbolByFirBuilder,
|
||||||
private val searchScope: GlobalSearchScope,
|
private val searchScope: GlobalSearchScope,
|
||||||
private val declarationProvider: KotlinDeclarationProvider,
|
private val declarationProvider: KotlinDeclarationProvider,
|
||||||
|
private val packageProvider: KotlinPackageProvider,
|
||||||
private val targetPlatform: TargetPlatform,
|
private val targetPlatform: TargetPlatform,
|
||||||
) : KtScope {
|
) : KtScope {
|
||||||
override val token: KtLifetimeToken get() = builder.token
|
override val token: KtLifetimeToken get() = builder.token
|
||||||
|
|
||||||
private val packageProvider = project.createPackageProvider(searchScope)
|
|
||||||
|
|
||||||
private val firScope: FirPackageMemberScope by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
private val firScope: FirPackageMemberScope by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
||||||
FirPackageMemberScope(fqName, builder.rootSession)
|
FirPackageMemberScope(fqName, builder.rootSession)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.name.FqName
|
|||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
|
||||||
internal class CompositeKotlinDeclarationProvider
|
class CompositeKotlinDeclarationProvider
|
||||||
private constructor(
|
private constructor(
|
||||||
private val providers: List<KotlinDeclarationProvider>
|
private val providers: List<KotlinDeclarationProvider>
|
||||||
) : KotlinDeclarationProvider() {
|
) : KotlinDeclarationProvider() {
|
||||||
|
|||||||
+1
-1
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.name.FqName
|
|||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||||
|
|
||||||
internal class CompositeKotlinPackageProvider
|
class CompositeKotlinPackageProvider
|
||||||
private constructor(
|
private constructor(
|
||||||
private val providers: List<KotlinPackageProvider>
|
private val providers: List<KotlinPackageProvider>
|
||||||
) : KotlinPackageProvider() {
|
) : KotlinPackageProvider() {
|
||||||
|
|||||||
+3
-3
@@ -34,14 +34,14 @@ import java.util.concurrent.ConcurrentHashMap
|
|||||||
*
|
*
|
||||||
* Caches generated [KtResolveExtensionFile]s, creates [KotlinDeclarationProvider], [KotlinPackageProvider], [LLFirSymbolProviderNameCache] needed for the [org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider].
|
* Caches generated [KtResolveExtensionFile]s, creates [KotlinDeclarationProvider], [KotlinPackageProvider], [LLFirSymbolProviderNameCache] needed for the [org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider].
|
||||||
*/
|
*/
|
||||||
internal abstract class LLFirResolveExtensionTool : FirSessionComponent {
|
abstract class LLFirResolveExtensionTool : FirSessionComponent {
|
||||||
abstract val modificationTrackers: List<ModificationTracker>
|
abstract val modificationTrackers: List<ModificationTracker>
|
||||||
abstract val declarationProvider: KotlinDeclarationProvider
|
abstract val declarationProvider: KotlinDeclarationProvider
|
||||||
abstract val packageProvider: KotlinPackageProvider
|
abstract val packageProvider: KotlinPackageProvider
|
||||||
abstract val symbolNameCache: LLFirSymbolProviderNameCache
|
internal abstract val symbolNameCache: LLFirSymbolProviderNameCache
|
||||||
}
|
}
|
||||||
|
|
||||||
internal val FirSession.llResolveExtensionTool: LLFirResolveExtensionTool? by FirSession.nullableSessionComponentAccessor()
|
val FirSession.llResolveExtensionTool: LLFirResolveExtensionTool? by FirSession.nullableSessionComponentAccessor()
|
||||||
|
|
||||||
internal class LLFirNonEmptyResolveExtensionTool(
|
internal class LLFirNonEmptyResolveExtensionTool(
|
||||||
session: LLFirSession,
|
session: LLFirSession,
|
||||||
|
|||||||
Reference in New Issue
Block a user