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