FIR: Optimize access to FirSymbolProvider via session
This commit is contained in:
committed by
Mikhail Glukhikh
parent
5e42f0c31d
commit
91d8f1fc88
@@ -26,18 +26,23 @@ class FirJavaModuleBasedSession(
|
|||||||
override val sessionProvider: FirProjectSessionProvider,
|
override val sessionProvider: FirProjectSessionProvider,
|
||||||
scope: GlobalSearchScope,
|
scope: GlobalSearchScope,
|
||||||
dependenciesProvider: FirSymbolProvider? = null
|
dependenciesProvider: FirSymbolProvider? = null
|
||||||
) : FirModuleBasedSession(moduleInfo) {
|
) : FirModuleBasedSession(moduleInfo), FirSymbolProviderAwareSession {
|
||||||
|
|
||||||
|
override val firSymbolProvider: FirSymbolProvider
|
||||||
|
|
||||||
init {
|
init {
|
||||||
sessionProvider.sessionCache[moduleInfo] = this
|
sessionProvider.sessionCache[moduleInfo] = this
|
||||||
|
firSymbolProvider = FirCompositeSymbolProvider(
|
||||||
|
listOf(
|
||||||
|
service<FirProvider>(),
|
||||||
|
JavaSymbolProvider(this, sessionProvider.project, scope),
|
||||||
|
dependenciesProvider ?: FirDependenciesSymbolProviderImpl(this)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
registerComponent(
|
registerComponent(
|
||||||
FirSymbolProvider::class,
|
FirSymbolProvider::class,
|
||||||
FirCompositeSymbolProvider(
|
firSymbolProvider
|
||||||
listOf(
|
|
||||||
service<FirProvider>(),
|
|
||||||
JavaSymbolProvider(this, sessionProvider.project, scope),
|
|
||||||
dependenciesProvider ?: FirDependenciesSymbolProviderImpl(this)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -49,11 +54,13 @@ class FirLibrarySession private constructor(
|
|||||||
packagePartProvider: PackagePartProvider,
|
packagePartProvider: PackagePartProvider,
|
||||||
kotlinClassFinder: KotlinClassFinder,
|
kotlinClassFinder: KotlinClassFinder,
|
||||||
javaClassFinder: JavaClassFinder
|
javaClassFinder: JavaClassFinder
|
||||||
) : FirSessionBase() {
|
) : FirSessionBase(), FirSymbolProviderAwareSession {
|
||||||
|
|
||||||
|
override val firSymbolProvider: FirSymbolProvider
|
||||||
|
|
||||||
init {
|
init {
|
||||||
sessionProvider.sessionCache[moduleInfo] = this
|
sessionProvider.sessionCache[moduleInfo] = this
|
||||||
registerComponent(
|
firSymbolProvider =
|
||||||
FirSymbolProvider::class,
|
|
||||||
FirCompositeSymbolProvider(
|
FirCompositeSymbolProvider(
|
||||||
listOf(
|
listOf(
|
||||||
KotlinDeserializedJvmSymbolsProvider(
|
KotlinDeserializedJvmSymbolsProvider(
|
||||||
@@ -66,6 +73,10 @@ class FirLibrarySession private constructor(
|
|||||||
FirDependenciesSymbolProviderImpl(this)
|
FirDependenciesSymbolProviderImpl(this)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
registerComponent(
|
||||||
|
FirSymbolProvider::class,
|
||||||
|
firSymbolProvider
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 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.fir
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
|
||||||
|
|
||||||
|
interface FirSymbolProviderAwareSession : FirSession {
|
||||||
|
val firSymbolProvider: FirSymbolProvider
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.fir.resolve
|
package org.jetbrains.kotlin.fir.resolve
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
|
import org.jetbrains.kotlin.fir.FirSymbolProviderAwareSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.render
|
import org.jetbrains.kotlin.fir.render
|
||||||
import org.jetbrains.kotlin.fir.service
|
import org.jetbrains.kotlin.fir.service
|
||||||
@@ -31,8 +32,13 @@ inline fun <K, V, VA : V> MutableMap<K, V>.getOrPut(key: K, defaultValue: (K) ->
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun ConeClassLikeLookupTag.toSymbol(useSiteSession: FirSession): ConeClassifierSymbol? =
|
fun ConeClassLikeLookupTag.toSymbol(useSiteSession: FirSession): ConeClassifierSymbol? {
|
||||||
useSiteSession.getService(FirSymbolProvider::class).getSymbolByLookupTag(this)
|
val firSymbolProvider =
|
||||||
|
(useSiteSession as? FirSymbolProviderAwareSession)?.firSymbolProvider
|
||||||
|
?: useSiteSession.getService(FirSymbolProvider::class)
|
||||||
|
|
||||||
|
return firSymbolProvider.getSymbolByLookupTag(this)
|
||||||
|
}
|
||||||
|
|
||||||
fun ConeAbbreviatedType.directExpansionType(useSiteSession: FirSession): ConeClassLikeType? =
|
fun ConeAbbreviatedType.directExpansionType(useSiteSession: FirSession): ConeClassLikeType? =
|
||||||
abbreviationLookupTag
|
abbreviationLookupTag
|
||||||
|
|||||||
Reference in New Issue
Block a user