[FIR] Make session & symbolProvider abstract classes
This commit is contained in:
committed by
Mikhail Glukhikh
parent
5a06027c53
commit
810fa9c171
@@ -10,7 +10,8 @@ import org.jetbrains.kotlin.fir.resolve.*
|
||||
import org.jetbrains.kotlin.fir.resolve.impl.*
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.FirClassDeclaredMemberScopeProvider
|
||||
|
||||
abstract class FirModuleBasedSession(override val moduleInfo: ModuleInfo) : FirSessionBase() {
|
||||
abstract class FirModuleBasedSession(override val moduleInfo: ModuleInfo, sessionProvider: FirSessionProvider?) :
|
||||
FirSessionBase(sessionProvider) {
|
||||
init {
|
||||
val firProvider = FirProviderImpl(this)
|
||||
registerComponent(FirProvider::class, firProvider)
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
/*
|
||||
* 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
|
||||
}
|
||||
+1
-1
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
|
||||
abstract class AbstractFirSymbolProvider : FirSymbolProvider {
|
||||
abstract class AbstractFirSymbolProvider : FirSymbolProvider() {
|
||||
protected val classCache = mutableMapOf<ClassId, ConeClassLikeSymbol?>()
|
||||
protected val topLevelCallableCache = mutableMapOf<CallableId, List<ConeCallableSymbol>>()
|
||||
protected val packageCache = mutableMapOf<FqName, FqName?>()
|
||||
|
||||
@@ -9,32 +9,31 @@ import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
||||
import org.jetbrains.kotlin.fir.service
|
||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
interface FirProvider : FirSymbolProvider {
|
||||
fun getFirClassifierByFqName(fqName: ClassId): FirMemberDeclaration?
|
||||
abstract class FirProvider : FirSymbolProvider() {
|
||||
abstract fun getFirClassifierByFqName(fqName: ClassId): FirMemberDeclaration?
|
||||
|
||||
override fun getClassLikeSymbolByFqName(classId: ClassId): ConeClassLikeSymbol?
|
||||
abstract override fun getClassLikeSymbolByFqName(classId: ClassId): ConeClassLikeSymbol?
|
||||
|
||||
override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<ConeCallableSymbol>
|
||||
abstract override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<ConeCallableSymbol>
|
||||
|
||||
override fun getPackage(fqName: FqName): FqName? {
|
||||
if (getFirFilesByPackage(fqName).isNotEmpty()) return fqName
|
||||
return null
|
||||
}
|
||||
|
||||
fun getFirClassifierContainerFile(fqName: ClassId): FirFile
|
||||
abstract fun getFirClassifierContainerFile(fqName: ClassId): FirFile
|
||||
|
||||
fun getFirCallableContainerFile(symbol: ConeCallableSymbol): FirFile?
|
||||
abstract fun getFirCallableContainerFile(symbol: ConeCallableSymbol): FirFile?
|
||||
|
||||
companion object {
|
||||
fun getInstance(session: FirSession): FirProvider = session.service()
|
||||
}
|
||||
|
||||
fun getFirFilesByPackage(fqName: FqName): List<FirFile>
|
||||
abstract fun getFirFilesByPackage(fqName: FqName): List<FirFile>
|
||||
}
|
||||
|
||||
@@ -15,9 +15,9 @@ import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
interface FirSymbolProvider {
|
||||
abstract class FirSymbolProvider {
|
||||
|
||||
fun getClassLikeSymbolByFqName(classId: ClassId): ConeClassLikeSymbol?
|
||||
abstract fun getClassLikeSymbolByFqName(classId: ClassId): ConeClassLikeSymbol?
|
||||
|
||||
fun getSymbolByLookupTag(lookupTag: ConeClassifierLookupTag): ConeClassifierSymbol? {
|
||||
return when (lookupTag) {
|
||||
@@ -35,22 +35,22 @@ interface FirSymbolProvider {
|
||||
}
|
||||
}
|
||||
|
||||
fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<ConeCallableSymbol>
|
||||
abstract fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<ConeCallableSymbol>
|
||||
|
||||
fun getClassDeclaredMemberScope(classId: ClassId): FirScope?
|
||||
fun getClassUseSiteMemberScope(
|
||||
abstract fun getClassDeclaredMemberScope(classId: ClassId): FirScope?
|
||||
abstract fun getClassUseSiteMemberScope(
|
||||
classId: ClassId,
|
||||
useSiteSession: FirSession,
|
||||
scopeSession: ScopeSession
|
||||
): FirScope?
|
||||
|
||||
fun getAllCallableNamesInPackage(fqName: FqName): Set<Name> = emptySet()
|
||||
fun getClassNamesInPackage(fqName: FqName): Set<Name> = emptySet()
|
||||
open fun getAllCallableNamesInPackage(fqName: FqName): Set<Name> = emptySet()
|
||||
open fun getClassNamesInPackage(fqName: FqName): Set<Name> = emptySet()
|
||||
|
||||
fun getAllCallableNamesInClass(classId: ClassId): Set<Name> = emptySet()
|
||||
fun getNestedClassesNamesInClass(classId: ClassId): Set<Name> = emptySet()
|
||||
open fun getAllCallableNamesInClass(classId: ClassId): Set<Name> = emptySet()
|
||||
open fun getNestedClassesNamesInClass(classId: ClassId): Set<Name> = emptySet()
|
||||
|
||||
fun getPackage(fqName: FqName): FqName? // TODO: Replace to symbol sometime
|
||||
abstract fun getPackage(fqName: FqName): FqName? // TODO: Replace to symbol sometime
|
||||
|
||||
// TODO: should not retrieve session through the FirElement::session
|
||||
fun getSessionForClass(classId: ClassId): FirSession? = getClassLikeSymbolByFqName(classId)?.toFirClassLike()?.session
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.resolve
|
||||
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.FirSymbolProviderAwareSession
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.render
|
||||
import org.jetbrains.kotlin.fir.service
|
||||
@@ -32,11 +32,10 @@ inline fun <K, V, VA : V> MutableMap<K, V>.getOrPut(key: K, defaultValue: (K) ->
|
||||
}
|
||||
}
|
||||
|
||||
fun ConeClassLikeLookupTag.toSymbol(useSiteSession: FirSession): ConeClassifierSymbol? {
|
||||
val firSymbolProvider =
|
||||
(useSiteSession as? FirSymbolProviderAwareSession)?.firSymbolProvider
|
||||
?: useSiteSession.getService(FirSymbolProvider::class)
|
||||
val FirSession.firSymbolProvider: FirSymbolProvider get() = _firSymbolProvider as FirSymbolProvider? ?: service()
|
||||
|
||||
fun ConeClassLikeLookupTag.toSymbol(useSiteSession: FirSession): ConeClassifierSymbol? {
|
||||
val firSymbolProvider = useSiteSession.firSymbolProvider
|
||||
return firSymbolProvider.getSymbolByLookupTag(this)
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult
|
||||
|
||||
class FirCompositeSymbolProvider(val providers: List<FirSymbolProvider>) : FirSymbolProvider {
|
||||
class FirCompositeSymbolProvider(val providers: List<FirSymbolProvider>) : FirSymbolProvider() {
|
||||
override fun getClassUseSiteMemberScope(
|
||||
classId: ClassId,
|
||||
useSiteSession: FirSession,
|
||||
|
||||
+1
-1
@@ -41,7 +41,7 @@ import org.jetbrains.kotlin.serialization.deserialization.getName
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult
|
||||
import java.io.InputStream
|
||||
|
||||
class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider {
|
||||
class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider() {
|
||||
private class BuiltInsPackageFragment(stream: InputStream, val fqName: FqName, val session: FirSession) {
|
||||
lateinit var version: BuiltInsBinaryVersion
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
class FirProviderImpl(val session: FirSession) : FirProvider {
|
||||
class FirProviderImpl(val session: FirSession) : FirProvider() {
|
||||
override fun getFirCallableContainerFile(symbol: ConeCallableSymbol): FirFile? {
|
||||
return state.callableContainerMap[symbol]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user