Use .firSymbolProvider instead of service, deprecate FirSession.service

This commit is contained in:
Mikhail Glukhikh
2019-10-04 17:11:27 +03:00
parent 3fee1445b9
commit 9801e06eac
20 changed files with 37 additions and 50 deletions
@@ -20,10 +20,7 @@ import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition
import org.jetbrains.kotlin.fir.expressions.impl.FirUnitExpression
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.directExpansionType
import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.resolve.withNullability
import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.symbols.*
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
@@ -1172,7 +1169,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
private fun FlowContent.generate(resolvedQualifier: FirResolvedQualifier) {
resolved {
val symbolProvider = session.service<FirSymbolProvider>()
val symbolProvider = session.firSymbolProvider
val classId = resolvedQualifier.classId
if (classId != null) {
symbolRef(symbolProvider.getClassLikeSymbolByFqName(classId)) {
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.fir.expressions.FirVariable
import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.resolve.FirProvider
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.resolve.getOrPut
import org.jetbrains.kotlin.fir.service
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
@@ -43,7 +44,7 @@ class Fir2IrDeclarationStorage(
private val irSymbolTable: SymbolTable,
private val moduleDescriptor: FirModuleDescriptor
) {
private val firSymbolProvider = session.service<FirSymbolProvider>()
private val firSymbolProvider = session.firSymbolProvider
private val firProvider = session.service<FirProvider>()
@@ -17,11 +17,8 @@ import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
import org.jetbrains.kotlin.fir.expressions.impl.FirUnitExpression
import org.jetbrains.kotlin.fir.references.FirPropertyFromParameterCallableReference
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.buildUseSiteScope
import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.resolve.calls.SyntheticPropertySymbol
import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope
import org.jetbrains.kotlin.fir.symbols.impl.*
@@ -335,7 +332,7 @@ class Fir2IrVisitor(
if (ownerClassId == null) {
lastClass
} else {
val classLikeSymbol = session.service<FirSymbolProvider>().getClassLikeSymbolByFqName(ownerClassId)
val classLikeSymbol = session.firSymbolProvider.getClassLikeSymbolByFqName(ownerClassId)
if (classLikeSymbol !is FirClassSymbol) {
lastClass
} else {
@@ -423,7 +420,7 @@ class Fir2IrVisitor(
val constructedIrType = constructedTypeRef.toIrType(this@Fir2IrVisitor.session, declarationStorage)
// TODO: find delegated constructor correctly
val classId = constructedClassSymbol.classId
val provider = this@Fir2IrVisitor.session.service<FirSymbolProvider>()
val provider = this@Fir2IrVisitor.session.firSymbolProvider
var constructorSymbol: FirConstructorSymbol? = null
provider.getClassUseSiteMemberScope(classId, this@Fir2IrVisitor.session, ScopeSession())!!.processFunctionsByName(
classId.shortClassName
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.references.FirResolvedCallableReferenceImpl
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.constructClassType
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.resolve.getClassDeclaredCallableSymbols
import org.jetbrains.kotlin.fir.service
import org.jetbrains.kotlin.fir.symbols.StandardClassIds
@@ -247,7 +248,7 @@ private fun JavaAnnotationArgument.toFirExpression(
val classId = this@toFirExpression.enumClassId
val entryName = this@toFirExpression.entryName
val calleeReference = if (classId != null && entryName != null) {
val callableSymbol = session.service<FirSymbolProvider>().getClassDeclaredCallableSymbols(
val callableSymbol = session.firSymbolProvider.getClassDeclaredCallableSymbols(
classId, entryName
).firstOrNull()
callableSymbol?.let {
@@ -210,7 +210,7 @@ class KotlinDeserializedJvmSymbolsProvider(
val entryLookupTag = ConeClassLikeLookupTagImpl(entryClassId)
val entryClassSymbol = entryLookupTag.toSymbol(this@KotlinDeserializedJvmSymbolsProvider.session)
val entryCallableSymbol =
this@KotlinDeserializedJvmSymbolsProvider.session.service<FirSymbolProvider>().getClassDeclaredCallableSymbols(
this@KotlinDeserializedJvmSymbolsProvider.session.firSymbolProvider.getClassDeclaredCallableSymbols(
this@toEnumEntryReferenceExpression, name
).firstOrNull()
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.expressions.impl.FirResolvedQualifierImpl
import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference
import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.resolve.transformers.PackageOrClass
import org.jetbrains.kotlin.fir.resolve.transformers.resolveToPackageOrClass
import org.jetbrains.kotlin.fir.resolve.transformers.resultType
@@ -44,7 +44,7 @@ class FirQualifiedNameResolver(components: BodyResolveComponents) : BodyResolveC
}
fun tryResolveAsQualifier(): FirResolvedQualifier? {
val symbolProvider = session.service<FirSymbolProvider>()
val symbolProvider = session.firSymbolProvider
var qualifierParts = qualifierStack.asReversed().map { it.asString() }
var resolved: PackageOrClass?
do {
@@ -62,7 +62,7 @@ abstract class FirSymbolProvider : FirSessionComponent {
fun getSessionForClass(classId: ClassId): FirSession? = getClassLikeSymbolByFqName(classId)?.fir?.session
companion object {
fun getInstance(session: FirSession) = session.service<FirSymbolProvider>()
fun getInstance(session: FirSession) = session.firSymbolProvider
}
}
@@ -214,7 +214,7 @@ fun createFunctionalType(
val receiverAndParameterTypes = listOfNotNull(receiverType) + parameters + listOf(rawReturnType)
val functionalTypeId = StandardClassIds.byName("Function${receiverAndParameterTypes.size - 1}")
val functionalType = functionalTypeId(session.service()).constructType(receiverAndParameterTypes.toTypedArray(), isNullable = false)
val functionalType = functionalTypeId(session.firSymbolProvider).constructType(receiverAndParameterTypes.toTypedArray(), isNullable = false)
return functionalType
}
@@ -54,7 +54,7 @@ val DECLARED = scopeSessionKey<FirScope>()
data class SubstitutionScopeKey<T : FirClassSubstitutionScope>(val type: ConeClassLikeType) : ScopeSessionKey<T>() {}
fun FirRegularClass.buildUseSiteScope(useSiteSession: FirSession, builder: ScopeSession): FirScope? {
val symbolProvider = useSiteSession.service<FirSymbolProvider>()
val symbolProvider = useSiteSession.firSymbolProvider
return symbolProvider.getClassUseSiteMemberScope(this.classId, useSiteSession, builder)
}
@@ -5,13 +5,9 @@
package org.jetbrains.kotlin.fir.resolve.calls
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.constructType
import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.resolve.substitution.AbstractConeSubstitutor
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
import org.jetbrains.kotlin.fir.resolve.withArguments
import org.jetbrains.kotlin.fir.resolve.withNullability
import org.jetbrains.kotlin.fir.service
import org.jetbrains.kotlin.fir.symbols.StandardClassIds
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol
@@ -28,7 +24,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.cast
interface ConeInferenceContext : TypeSystemInferenceExtensionContext,
ConeTypeContext {
val symbolProvider: FirSymbolProvider get() = session.service()
val symbolProvider: FirSymbolProvider get() = session.firSymbolProvider
override val isErrorTypeAllowed: Boolean get() = false
@@ -8,9 +8,9 @@ package org.jetbrains.kotlin.fir.resolve.calls
import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration
import org.jetbrains.kotlin.fir.renderWithType
import org.jetbrains.kotlin.fir.resolve.constructType
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
import org.jetbrains.kotlin.fir.service
import org.jetbrains.kotlin.fir.symbols.StandardClassIds
import org.jetbrains.kotlin.fir.symbols.invoke
import org.jetbrains.kotlin.fir.types.*
@@ -71,7 +71,7 @@ internal object CreateFreshTypeVariableSubstitutorStage : ResolutionStage() {
is FirStarProjection -> csBuilder.addEqualityConstraint(
freshVariable.defaultType,
typeParameter.bounds.firstOrNull()?.coneTypeUnsafe()
?: StandardClassIds.Any(sink.components.session.service()).constructType(emptyArray(), true),
?: StandardClassIds.Any(sink.components.session.firSymbolProvider).constructType(emptyArray(), true),
SimpleConstraintSystemConstraintPosition
)
else -> assert(typeArgument == FirTypePlaceholderProjection) {
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.resolve.calls
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
import org.jetbrains.kotlin.fir.resolve.constructType
import org.jetbrains.kotlin.fir.service
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.symbols.StandardClassIds
import org.jetbrains.kotlin.fir.symbols.invoke
import org.jetbrains.kotlin.fir.types.*
@@ -117,7 +117,7 @@ private fun extraLambdaInfo(
?: expectedType?.typeArguments?.singleOrNull()?.safeAs<ConeTypedProjection>()?.type?.takeIf { isFunctionSupertype }
?: typeVariable.defaultType
val nothingType = StandardClassIds.Nothing(argument.session.service()).constructType(emptyArray(), false)
val nothingType = StandardClassIds.Nothing(argument.session.firSymbolProvider).constructType(emptyArray(), false)
val parameters = argument.valueParameters?.map {
it.returnTypeRef.coneTypeSafe<ConeKotlinType>() ?: nothingType
} ?: emptyList()
@@ -156,7 +156,7 @@ private fun extractLambdaParameters(expectedType: ConeKotlinType, argument: FirA
val parameters = argument.valueParameters
val expectedParameters = expectedType.valueParameterTypes
val nullableAnyType = StandardClassIds.Any(argument.session.service()).constructType(emptyArray(), true)
val nullableAnyType = StandardClassIds.Any(argument.session.firSymbolProvider).constructType(emptyArray(), true)
if (parameters.isEmpty()) {
return expectedParameters.map { it?.type ?: nullableAnyType }
@@ -5,11 +5,10 @@
package org.jetbrains.kotlin.fir.resolve.calls
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.resolve.constructType
import org.jetbrains.kotlin.fir.service
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.symbols.StandardClassIds.Unit
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -69,7 +68,7 @@ class PostponedArgumentsAnalyzer(
lambda: ResolvedLambdaAtom//,
//diagnosticHolder: KotlinDiagnosticsHolder
) {
val unitType = Unit(components.session.service()).constructType(emptyArray(), false)
val unitType = Unit(components.session.firSymbolProvider).constructType(emptyArray(), false)
val stubsForPostponedVariables = c.bindingStubsForPostponedVariables()
val currentSubstitutor = c.buildCurrentSubstitutor(stubsForPostponedVariables.mapKeys { it.key.freshTypeConstructor(c) })
@@ -267,7 +267,7 @@ fun FirCallableDeclaration<*>.dispatchReceiverValue(session: FirSession): ClassD
// TODO: this is not true atCall least for inner class constructors
if (this is FirConstructor) return null
val id = this.symbol.callableId.classId ?: return null
val symbol = session.service<FirSymbolProvider>().getClassLikeSymbolByFqName(id) as? FirClassSymbol ?: return null
val symbol = session.firSymbolProvider.getClassLikeSymbolByFqName(id) as? FirClassSymbol ?: return null
val regularClass = symbol.fir
return ClassDispatchReceiverValue(regularClass.symbol)
@@ -8,10 +8,9 @@ package org.jetbrains.kotlin.fir.resolve.impl
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.dependenciesWithoutSelf
import org.jetbrains.kotlin.fir.resolve.AbstractFirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.service
import org.jetbrains.kotlin.fir.symbols.CallableId
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
@@ -24,7 +23,7 @@ class FirDependenciesSymbolProviderImpl(val session: FirSession) : AbstractFirSy
private val dependencyProviders by lazy {
val moduleInfo = session.moduleInfo ?: return@lazy emptyList()
moduleInfo.dependenciesWithoutSelf().mapNotNull {
session.sessionProvider?.getSession(it)?.service<FirSymbolProvider>()
session.sessionProvider?.getSession(it)?.firSymbolProvider
}.toList()
}
@@ -54,7 +54,7 @@ open class FirBodyResolveTransformer(
final override val noExpectedType = FirImplicitTypeRefImpl(null)
private inline val builtinTypes: BuiltinTypes get() = session.builtinTypes
final override val symbolProvider = session.service<FirSymbolProvider>()
final override val symbolProvider = session.firSymbolProvider
private var packageFqName = FqName.ROOT
final override lateinit var file: FirFile
@@ -173,7 +173,7 @@ open class FirBodyResolveTransformer(
}
override fun transformTypeOperatorCall(typeOperatorCall: FirTypeOperatorCall, data: Any?): CompositeTransformResult<FirStatement> {
val symbolProvider = session.service<FirSymbolProvider>()
val symbolProvider = session.firSymbolProvider
val resolved = transformExpression(typeOperatorCall, data).single
when ((resolved as FirTypeOperatorCall).operation) {
FirOperation.IS, FirOperation.NOT_IS -> {
@@ -826,7 +826,7 @@ open class FirBodyResolveTransformer(
override fun transformGetClassCall(getClassCall: FirGetClassCall, data: Any?): CompositeTransformResult<FirStatement> {
val transformedGetClassCall = transformExpression(getClassCall, data).single as FirGetClassCall
val kClassSymbol = ClassId.fromString("kotlin/reflect/KClass")(session.service())
val kClassSymbol = ClassId.fromString("kotlin/reflect/KClass")(session.firSymbolProvider)
val typeOfExpression = when (val lhs = transformedGetClassCall.argument) {
is FirResolvedQualifier -> {
@@ -8,13 +8,13 @@ package org.jetbrains.kotlin.fir.types
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.constructType
import org.jetbrains.kotlin.fir.service
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.symbols.StandardClassIds
import org.jetbrains.kotlin.fir.symbols.invoke
fun ConeKotlinType.createArrayOf(session: FirSession, nullable: Boolean = false): ConeKotlinType {
val symbolProvider: FirSymbolProvider = session.service()
val symbolProvider: FirSymbolProvider = session.firSymbolProvider
if (this is ConeClassType) {
val primitiveArrayId = StandardClassIds.primitiveArrayTypeByElementType[lookupTag.classId]
if (primitiveArrayId != null) {
@@ -33,7 +33,7 @@ fun ConeKotlinType.arrayElementType(session: FirSession): ConeKotlinType? {
return (typeArguments.first() as ConeTypedProjection).type
val elementType = StandardClassIds.elementTypeByPrimitiveArrayType[classId]
if (elementType != null) {
return elementType.invoke(session.service()).constructType(emptyArray(), isNullable = false)
return elementType.invoke(session.firSymbolProvider).constructType(emptyArray(), isNullable = false)
}
return null
@@ -155,7 +155,7 @@ interface ConeTypeContext : TypeSystemContext, TypeSystemOptimizationContext, Ty
require(this is ConeKotlinType)
return this.typeArguments.getOrNull(index)
?: StandardClassIds.Any(session.service()).constructType(emptyArray(), false) // TODO wtf
?: StandardClassIds.Any(session.firSymbolProvider).constructType(emptyArray(), false) // TODO wtf
}
override fun KotlinTypeMarker.asTypeArgument(): TypeArgumentMarker {
@@ -28,15 +28,11 @@ import org.jetbrains.kotlin.fir.java.declarations.FirJavaConstructor
import org.jetbrains.kotlin.fir.java.declarations.FirJavaField
import org.jetbrains.kotlin.fir.java.declarations.FirJavaMethod
import org.jetbrains.kotlin.fir.java.scopes.JavaClassEnhancementScope
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.resolve.impl.FirCompositeSymbolProvider
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.scopes.impl.FirCompositeScope
import org.jetbrains.kotlin.fir.service
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
@@ -151,7 +147,7 @@ abstract class AbstractFirTypeEnhancementTest : KtUsefulTestCase() {
val javaFirDump = StringBuilder().also { builder ->
val renderer = FirRenderer(builder)
val symbolProvider = session.service<FirSymbolProvider>() as FirCompositeSymbolProvider
val symbolProvider = session.firSymbolProvider as FirCompositeSymbolProvider
val javaProvider = symbolProvider.providers.filterIsInstance<JavaSymbolProvider>().first()
fun processClassWithChildren(psiClass: PsiClass, parentFqName: FqName) {
@@ -56,6 +56,7 @@ interface FirSessionProvider {
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)