From a4a58a9d74a1cddcd37e1e286dd51644b3b9f59b Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Wed, 22 Apr 2020 16:07:16 +0300 Subject: [PATCH] [FIR] Get rid of FirSession.service --- .../kotlin/fir/resolve/FirQualifierResolver.kt | 9 ++------- .../kotlin/fir/resolve/FirTypeResolver.kt | 9 ++------- .../jetbrains/kotlin/fir/resolve/ResolveUtils.kt | 2 ++ .../fir/resolve/impl/FirTypeResolverImpl.kt | 7 ++----- .../FirSpecificTypeResolverTransformer.kt | 3 ++- .../src/org/jetbrains/kotlin/fir/FirSession.kt | 15 +++------------ 6 files changed, 13 insertions(+), 32 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirQualifierResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirQualifierResolver.kt index 416e3063550..0bb304bee04 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirQualifierResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirQualifierResolver.kt @@ -5,19 +5,14 @@ package org.jetbrains.kotlin.fir.resolve -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.service +import org.jetbrains.kotlin.fir.FirSessionComponent import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol import org.jetbrains.kotlin.fir.types.FirQualifierPart import org.jetbrains.kotlin.name.ClassId -interface FirQualifierResolver { +interface FirQualifierResolver : FirSessionComponent { fun resolveSymbolWithPrefix(parts: List, prefix: ClassId): FirClassifierSymbol<*>? fun resolveSymbol(parts: List): FirClassifierSymbol<*>? - - companion object { - fun getInstance(session: FirSession): FirQualifierResolver = session.service() - } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirTypeResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirTypeResolver.kt index e749d19f10a..a26a138627a 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirTypeResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirTypeResolver.kt @@ -5,23 +5,18 @@ 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.FirScope -import org.jetbrains.kotlin.fir.service import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirUserTypeRef -interface FirTypeResolver { +interface FirTypeResolver : FirSessionComponent { fun resolveType(typeRef: FirTypeRef, scope: FirIterableScope): ConeKotlinType 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 } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt index 92a12f3fca5..8c99a325786 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt @@ -56,6 +56,8 @@ val FirSession.firSymbolProvider: FirSymbolProvider by componentArrayAccessor() val FirSession.firProvider: FirProvider by componentArrayAccessor() val FirSession.correspondingSupertypesCache: FirCorrespondingSupertypesCache 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<*>? { if (this is ConeClassLookupTagWithFixedSymbol) { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirTypeResolverImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirTypeResolverImpl.kt index bab095303f1..36d40d3636f 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirTypeResolverImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirTypeResolverImpl.kt @@ -8,10 +8,7 @@ package org.jetbrains.kotlin.fir.resolve.impl import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.render -import org.jetbrains.kotlin.fir.resolve.FirQualifierResolver -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.resolve.* import org.jetbrains.kotlin.fir.scopes.FirIterableScope import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.processClassifiersByName @@ -49,7 +46,7 @@ class FirTypeResolverImpl(private val session: FirSession) : FirTypeResolver { is FirResolvedTypeRef -> typeRef.coneTypeSafe()?.lookupTag?.let(symbolProvider::getSymbolByLookupTag) is FirUserTypeRef -> { - val qualifierResolver = FirQualifierResolver.getInstance(session) + val qualifierResolver = session.qualifierResolver var resolvedSymbol: FirClassifierSymbol<*>? = null for (typeScope in scope.scopes) { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSpecificTypeResolverTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSpecificTypeResolverTransformer.kt index f574ee35e1f..08f5da131e6 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSpecificTypeResolverTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSpecificTypeResolverTransformer.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.resolve.transformers import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirResolvePhase 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.types.* import org.jetbrains.kotlin.fir.types.builder.buildResolvedFunctionTypeRef @@ -19,7 +20,7 @@ class FirSpecificTypeResolverTransformer( private val towerScope: FirIterableScope, override val session: FirSession ) : FirAbstractTreeTransformer(phase = FirResolvePhase.SUPER_TYPES) { - private val typeResolver = FirTypeResolver.getInstance(session) + private val typeResolver = session.typeResolver override fun transformTypeRef(typeRef: FirTypeRef, data: Nothing?): CompositeTransformResult { typeRef.transformChildren(this, null) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSession.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSession.kt index f17e6faa593..a1a5fd3a73b 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSession.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSession.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir import com.intellij.openapi.project.Project import org.jetbrains.kotlin.analyzer.ModuleInfo -import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.impl.* import org.jetbrains.kotlin.utils.Jsr305State import kotlin.properties.ReadOnlyProperty @@ -21,17 +20,13 @@ abstract class FirSession(val sessionProvider: FirSessionProvider?) { val builtinTypes: BuiltinTypes = BuiltinTypes() - val components: MutableMap, Any> = mutableMapOf() + private val registeredComponents: MutableSet> = mutableSetOf() internal val componentArray = ComponentArray() - @Suppress("UNCHECKED_CAST") - fun getService(kclass: KClass): T = - components[kclass] as T - protected fun registerComponent(tClass: KClass, t: T) { - assert(tClass !in components) { "Already registered component" } - components[tClass] = t + assert(tClass !in registeredComponents) { "Already registered component" } + registeredComponents += tClass // TODO: Make t of FirSessionComponent if (t is FirSessionComponent) { @@ -60,10 +55,6 @@ interface FirSessionProvider { fun getSession(moduleInfo: ModuleInfo): FirSession? } -@Deprecated("This is very slow, introduce & use componentArrayAccessor instead") -inline fun FirSession.service(): T = - getService(T::class) - internal object ComponentTypeRegistry { private val idPerType = mutableMapOf, Int>()