[FIR] Get rid of FirSession.service
This commit is contained in:
@@ -5,19 +5,14 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.resolve
|
package org.jetbrains.kotlin.fir.resolve
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSessionComponent
|
||||||
import org.jetbrains.kotlin.fir.service
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.FirQualifierPart
|
import org.jetbrains.kotlin.fir.types.FirQualifierPart
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
|
||||||
interface FirQualifierResolver {
|
interface FirQualifierResolver : FirSessionComponent {
|
||||||
fun resolveSymbolWithPrefix(parts: List<FirQualifierPart>, prefix: ClassId): FirClassifierSymbol<*>?
|
fun resolveSymbolWithPrefix(parts: List<FirQualifierPart>, prefix: ClassId): FirClassifierSymbol<*>?
|
||||||
|
|
||||||
fun resolveSymbol(parts: List<FirQualifierPart>): FirClassifierSymbol<*>?
|
fun resolveSymbol(parts: List<FirQualifierPart>): FirClassifierSymbol<*>?
|
||||||
|
|
||||||
companion object {
|
|
||||||
fun getInstance(session: FirSession): FirQualifierResolver = session.service()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,23 +5,18 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.resolve
|
package org.jetbrains.kotlin.fir.resolve
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSessionComponent
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirIterableScope
|
import org.jetbrains.kotlin.fir.scopes.FirIterableScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.service
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.FirUserTypeRef
|
import org.jetbrains.kotlin.fir.types.FirUserTypeRef
|
||||||
|
|
||||||
interface FirTypeResolver {
|
interface FirTypeResolver : FirSessionComponent {
|
||||||
|
|
||||||
fun resolveType(typeRef: FirTypeRef, scope: FirIterableScope): ConeKotlinType
|
fun resolveType(typeRef: FirTypeRef, scope: FirIterableScope): ConeKotlinType
|
||||||
fun resolveToSymbol(typeRef: FirTypeRef, scope: FirIterableScope): FirClassifierSymbol<*>?
|
fun resolveToSymbol(typeRef: FirTypeRef, scope: FirIterableScope): FirClassifierSymbol<*>?
|
||||||
|
|
||||||
companion object {
|
|
||||||
fun getInstance(session: FirSession): FirTypeResolver = session.service()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun resolveUserType(typeRef: FirUserTypeRef, symbol: FirClassifierSymbol<*>?, scope: FirScope): ConeKotlinType
|
fun resolveUserType(typeRef: FirUserTypeRef, symbol: FirClassifierSymbol<*>?, scope: FirScope): ConeKotlinType
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,6 +56,8 @@ val FirSession.firSymbolProvider: FirSymbolProvider by componentArrayAccessor()
|
|||||||
val FirSession.firProvider: FirProvider by componentArrayAccessor()
|
val FirSession.firProvider: FirProvider by componentArrayAccessor()
|
||||||
val FirSession.correspondingSupertypesCache: FirCorrespondingSupertypesCache by componentArrayAccessor()
|
val FirSession.correspondingSupertypesCache: FirCorrespondingSupertypesCache by componentArrayAccessor()
|
||||||
val FirSession.declaredMemberScopeProvider: FirDeclaredMemberScopeProvider by componentArrayAccessor()
|
val FirSession.declaredMemberScopeProvider: FirDeclaredMemberScopeProvider by componentArrayAccessor()
|
||||||
|
val FirSession.qualifierResolver: FirQualifierResolver by componentArrayAccessor()
|
||||||
|
val FirSession.typeResolver: FirTypeResolver by componentArrayAccessor()
|
||||||
|
|
||||||
fun ConeClassLikeLookupTag.toSymbol(useSiteSession: FirSession): FirClassLikeSymbol<*>? {
|
fun ConeClassLikeLookupTag.toSymbol(useSiteSession: FirSession): FirClassLikeSymbol<*>? {
|
||||||
if (this is ConeClassLookupTagWithFixedSymbol) {
|
if (this is ConeClassLookupTagWithFixedSymbol) {
|
||||||
|
|||||||
+2
-5
@@ -8,10 +8,7 @@ package org.jetbrains.kotlin.fir.resolve.impl
|
|||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.render
|
import org.jetbrains.kotlin.fir.render
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirQualifierResolver
|
import org.jetbrains.kotlin.fir.resolve.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirTypeResolver
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.constructType
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirIterableScope
|
import org.jetbrains.kotlin.fir.scopes.FirIterableScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.processClassifiersByName
|
import org.jetbrains.kotlin.fir.scopes.processClassifiersByName
|
||||||
@@ -49,7 +46,7 @@ class FirTypeResolverImpl(private val session: FirSession) : FirTypeResolver {
|
|||||||
is FirResolvedTypeRef -> typeRef.coneTypeSafe<ConeLookupTagBasedType>()?.lookupTag?.let(symbolProvider::getSymbolByLookupTag)
|
is FirResolvedTypeRef -> typeRef.coneTypeSafe<ConeLookupTagBasedType>()?.lookupTag?.let(symbolProvider::getSymbolByLookupTag)
|
||||||
is FirUserTypeRef -> {
|
is FirUserTypeRef -> {
|
||||||
|
|
||||||
val qualifierResolver = FirQualifierResolver.getInstance(session)
|
val qualifierResolver = session.qualifierResolver
|
||||||
|
|
||||||
var resolvedSymbol: FirClassifierSymbol<*>? = null
|
var resolvedSymbol: FirClassifierSymbol<*>? = null
|
||||||
for (typeScope in scope.scopes) {
|
for (typeScope in scope.scopes) {
|
||||||
|
|||||||
+2
-1
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.resolve.transformers
|
|||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirTypeResolver
|
import org.jetbrains.kotlin.fir.resolve.FirTypeResolver
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.typeResolver
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirIterableScope
|
import org.jetbrains.kotlin.fir.scopes.FirIterableScope
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.types.builder.buildResolvedFunctionTypeRef
|
import org.jetbrains.kotlin.fir.types.builder.buildResolvedFunctionTypeRef
|
||||||
@@ -19,7 +20,7 @@ class FirSpecificTypeResolverTransformer(
|
|||||||
private val towerScope: FirIterableScope,
|
private val towerScope: FirIterableScope,
|
||||||
override val session: FirSession
|
override val session: FirSession
|
||||||
) : FirAbstractTreeTransformer<Nothing?>(phase = FirResolvePhase.SUPER_TYPES) {
|
) : FirAbstractTreeTransformer<Nothing?>(phase = FirResolvePhase.SUPER_TYPES) {
|
||||||
private val typeResolver = FirTypeResolver.getInstance(session)
|
private val typeResolver = session.typeResolver
|
||||||
|
|
||||||
override fun transformTypeRef(typeRef: FirTypeRef, data: Nothing?): CompositeTransformResult<FirTypeRef> {
|
override fun transformTypeRef(typeRef: FirTypeRef, data: Nothing?): CompositeTransformResult<FirTypeRef> {
|
||||||
typeRef.transformChildren(this, null)
|
typeRef.transformChildren(this, null)
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir
|
|||||||
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
|
||||||
import org.jetbrains.kotlin.fir.types.impl.*
|
import org.jetbrains.kotlin.fir.types.impl.*
|
||||||
import org.jetbrains.kotlin.utils.Jsr305State
|
import org.jetbrains.kotlin.utils.Jsr305State
|
||||||
import kotlin.properties.ReadOnlyProperty
|
import kotlin.properties.ReadOnlyProperty
|
||||||
@@ -21,17 +20,13 @@ abstract class FirSession(val sessionProvider: FirSessionProvider?) {
|
|||||||
|
|
||||||
val builtinTypes: BuiltinTypes = BuiltinTypes()
|
val builtinTypes: BuiltinTypes = BuiltinTypes()
|
||||||
|
|
||||||
val components: MutableMap<KClass<*>, Any> = mutableMapOf()
|
private val registeredComponents: MutableSet<KClass<*>> = mutableSetOf()
|
||||||
|
|
||||||
internal val componentArray = ComponentArray()
|
internal val componentArray = ComponentArray()
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
|
||||||
fun <T : Any> getService(kclass: KClass<T>): T =
|
|
||||||
components[kclass] as T
|
|
||||||
|
|
||||||
protected fun <T : Any /* TODO: FirSessionComponent */> registerComponent(tClass: KClass<T>, t: T) {
|
protected fun <T : Any /* TODO: FirSessionComponent */> registerComponent(tClass: KClass<T>, t: T) {
|
||||||
assert(tClass !in components) { "Already registered component" }
|
assert(tClass !in registeredComponents) { "Already registered component" }
|
||||||
components[tClass] = t
|
registeredComponents += tClass
|
||||||
|
|
||||||
// TODO: Make t of FirSessionComponent
|
// TODO: Make t of FirSessionComponent
|
||||||
if (t is FirSessionComponent) {
|
if (t is FirSessionComponent) {
|
||||||
@@ -60,10 +55,6 @@ interface FirSessionProvider {
|
|||||||
fun getSession(moduleInfo: ModuleInfo): FirSession?
|
fun getSession(moduleInfo: ModuleInfo): FirSession?
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated("This is very slow, introduce & use componentArrayAccessor instead")
|
|
||||||
inline fun <reified T : Any> FirSession.service(): T =
|
|
||||||
getService(T::class)
|
|
||||||
|
|
||||||
internal object ComponentTypeRegistry {
|
internal object ComponentTypeRegistry {
|
||||||
private val idPerType = mutableMapOf<KClass<out FirSessionComponent>, Int>()
|
private val idPerType = mutableMapOf<KClass<out FirSessionComponent>, Int>()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user