[LL API] Do not pass redundant 'project' instance to low-level sessions

This commit is contained in:
Yan Zhulanow
2023-02-27 23:15:59 +09:00
committed by Space Team
parent 1584fe77ba
commit be71d75f9e
12 changed files with 36 additions and 41 deletions
@@ -49,7 +49,7 @@ class LLFirBuiltinsSessionFactory(
private fun createBuiltinsAndCloneableSession(platform: TargetPlatform): LLFirBuiltinsAndCloneableSession {
val builtinsModule = KtBuiltinsModule(platform, platform.getAnalyzerServices(), project)
return LLFirBuiltinsAndCloneableSession(builtinsModule, project, builtInTypes).apply session@{
return LLFirBuiltinsAndCloneableSession(builtinsModule, builtInTypes).apply session@{
val moduleData = LLFirModuleData(builtinsModule).apply {
bindSession(this@session)
}
@@ -44,7 +44,7 @@ class LLFirLibrarySessionFactory(
val platform = ktLibraryModule.platform
val builtinsSession = LLFirBuiltinsSessionFactory.getInstance(project).getBuiltinsSession(platform)
sessionsCache.putIfAbsent(builtinsSession.ktModule, builtinsSession)
return LLFirLibrarySession(ktLibraryModule, project, builtinsSession.builtinTypes).apply session@{
return LLFirLibrarySession(ktLibraryModule, builtinsSession.builtinTypes).apply session@{
val moduleData = LLFirModuleData(ktLibraryModule).apply { bindSession(this@session) }
registerModuleData(moduleData)
registerIdeComponents(project)
@@ -5,13 +5,11 @@
package org.jetbrains.kotlin.analysis.low.level.api.fir.sessions
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.analysis.project.structure.KtModule
import org.jetbrains.kotlin.fir.BuiltinTypes
import org.jetbrains.kotlin.fir.PrivateSessionConstructor
class LLFirBuiltinsAndCloneableSession @PrivateSessionConstructor constructor(
override val ktModule: KtModule,
project: Project,
ktModule: KtModule,
builtinTypes: BuiltinTypes,
) : LLFirLibraryLikeSession(project, builtinTypes)
) : LLFirLibraryLikeSession(ktModule, builtinTypes)
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.analysis.low.level.api.fir.sessions
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.analysis.project.structure.KtModule
import org.jetbrains.kotlin.fir.BuiltinTypes
import org.jetbrains.kotlin.fir.PrivateSessionConstructor
@@ -14,7 +13,6 @@ import org.jetbrains.kotlin.fir.PrivateSessionConstructor
* [org.jetbrains.kotlin.fir.FirSession] responsible for all libraries analysing module transitively depends on
*/
internal class LLFirLibrarySession @PrivateSessionConstructor constructor(
override val ktModule: KtModule,
project: Project,
ktModule: KtModule,
builtinTypes: BuiltinTypes,
) : LLFirLibraryLikeSession(project, builtinTypes)
) : LLFirLibraryLikeSession(ktModule, builtinTypes)
@@ -5,15 +5,15 @@
package org.jetbrains.kotlin.analysis.low.level.api.fir.sessions
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.LLFirScopeSessionProvider
import org.jetbrains.kotlin.analysis.project.structure.KtModule
import org.jetbrains.kotlin.fir.BuiltinTypes
import org.jetbrains.kotlin.fir.resolve.ScopeSession
abstract class LLFirLibraryLikeSession(
final override val project: Project,
ktModule: KtModule,
builtinTypes: BuiltinTypes,
) : LLFirSession(builtinTypes, Kind.Library) {
) : LLFirSession(ktModule, builtinTypes, Kind.Library) {
private val scopeSessionProvider = LLFirScopeSessionProvider.create(project, invalidationTrackers = emptyList())
override fun getScopeSession(): ScopeSession {
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.analysis.low.level.api.fir.sessions
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirModuleResolveComponents
import org.jetbrains.kotlin.analysis.project.structure.KtLibraryModule
import org.jetbrains.kotlin.analysis.project.structure.KtLibrarySourceModule
@@ -13,11 +12,10 @@ import org.jetbrains.kotlin.analysis.project.structure.KtModule
import org.jetbrains.kotlin.fir.BuiltinTypes
internal class LLFirLibraryOrLibrarySourceResolvableModuleSession(
override val ktModule: KtModule,
override val project: Project,
ktModule: KtModule,
override val moduleComponents: LLFirModuleResolveComponents,
builtinTypes: BuiltinTypes,
) : LLFirResolvableModuleSession(builtinTypes) {
) : LLFirResolvableModuleSession(ktModule, builtinTypes) {
init {
checkIsValidKtModule(ktModule)
}
@@ -5,15 +5,13 @@
package org.jetbrains.kotlin.analysis.low.level.api.fir.sessions
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirModuleResolveComponents
import org.jetbrains.kotlin.analysis.project.structure.KtNotUnderContentRootModule
import org.jetbrains.kotlin.fir.BuiltinTypes
import org.jetbrains.kotlin.fir.PrivateSessionConstructor
internal class LLFirNonUnderContentRootResolvableModuleSession @PrivateSessionConstructor constructor(
override val ktModule: KtNotUnderContentRootModule,
override val project: Project,
ktModule: KtNotUnderContentRootModule,
override val moduleComponents: LLFirModuleResolveComponents,
builtinTypes: BuiltinTypes,
) : LLFirResolvableModuleSession(builtinTypes)
) : LLFirResolvableModuleSession(ktModule, builtinTypes)
@@ -6,14 +6,16 @@
package org.jetbrains.kotlin.analysis.low.level.api.fir.sessions
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirModuleResolveComponents
import org.jetbrains.kotlin.analysis.project.structure.KtModule
import org.jetbrains.kotlin.fir.BuiltinTypes
import org.jetbrains.kotlin.fir.FirElementWithResolvePhase
import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
abstract class LLFirResolvableModuleSession(
builtinTypes: BuiltinTypes,
) : LLFirModuleSession(builtinTypes, Kind.Source) {
ktModule: KtModule,
builtinTypes: BuiltinTypes
) : LLFirModuleSession(ktModule, builtinTypes, Kind.Source) {
internal abstract val moduleComponents: LLFirModuleResolveComponents
final override fun getScopeSession(): ScopeSession {
@@ -5,15 +5,13 @@
package org.jetbrains.kotlin.analysis.low.level.api.fir.sessions
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirModuleResolveComponents
import org.jetbrains.kotlin.analysis.project.structure.KtScriptModule
import org.jetbrains.kotlin.fir.BuiltinTypes
import org.jetbrains.kotlin.fir.PrivateSessionConstructor
internal class LLFirScriptSession @PrivateSessionConstructor constructor(
override val ktModule: KtScriptModule,
override val project: Project,
ktModule: KtScriptModule,
override val moduleComponents: LLFirModuleResolveComponents,
builtinTypes: BuiltinTypes
) : LLFirResolvableModuleSession(builtinTypes)
) : LLFirResolvableModuleSession(ktModule, builtinTypes)
@@ -15,14 +15,22 @@ import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
@OptIn(PrivateSessionConstructor::class)
abstract class LLFirSession(override val builtinTypes: BuiltinTypes, kind: Kind) : FirSession(sessionProvider = null, kind) {
abstract val project: Project
abstract val ktModule: KtModule
abstract class LLFirSession(
val ktModule: KtModule,
override val builtinTypes: BuiltinTypes,
kind: Kind
) : FirSession(sessionProvider = null, kind) {
val project: Project
get() = ktModule.project
abstract fun getScopeSession(): ScopeSession
}
abstract class LLFirModuleSession(builtinTypes: BuiltinTypes, kind: Kind) : LLFirSession(builtinTypes, kind)
abstract class LLFirModuleSession(
ktModule: KtModule,
builtinTypes: BuiltinTypes,
kind: Kind
) : LLFirSession(ktModule, builtinTypes, kind)
val FirElementWithResolvePhase.llFirSession: LLFirSession
get() = moduleData.session as LLFirSession
@@ -67,7 +67,6 @@ internal object LLFirSessionFactory {
val contentScope = module.contentScope
val session = LLFirSourcesSession(
module,
project,
components,
builtinsSession.builtinTypes
)
@@ -169,7 +168,7 @@ internal object LLFirSessionFactory {
val components = LLFirModuleResolveComponents(module, globalComponents, scopeProvider, sessionInvalidator)
val contentScope = module.contentScope
val session = LLFirLibraryOrLibrarySourceResolvableModuleSession(module, project, components, builtinSession.builtinTypes)
val session = LLFirLibraryOrLibrarySourceResolvableModuleSession(module, components, builtinSession.builtinTypes)
sessionsCache[module] = session
components.session = session
@@ -262,7 +261,7 @@ internal object LLFirSessionFactory {
val components = LLFirModuleResolveComponents(module, globalResolveComponents, scopeProvider, sessionInvalidator)
val contentScope = module.contentScope
val session = LLFirScriptSession(module, project, components, builtinsSession.builtinTypes)
val session = LLFirScriptSession(module, components, builtinsSession.builtinTypes)
sessionsCache[module] = session
components.session = session
@@ -343,7 +342,7 @@ internal object LLFirSessionFactory {
val components = LLFirModuleResolveComponents(module, globalResolveComponents, scopeProvider, sessionInvalidator)
val contentScope = module.contentScope
val session = LLFirNonUnderContentRootResolvableModuleSession(module, project, components, builtinsSession.builtinTypes)
val session = LLFirNonUnderContentRootResolvableModuleSession(module, components, builtinsSession.builtinTypes)
sessionsCache[module] = session
components.session = session
@@ -5,17 +5,13 @@
package org.jetbrains.kotlin.analysis.low.level.api.fir.sessions
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirModuleResolveComponents
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirFileBuilder
import org.jetbrains.kotlin.analysis.project.structure.KtNotUnderContentRootModule
import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule
import org.jetbrains.kotlin.fir.BuiltinTypes
import org.jetbrains.kotlin.fir.PrivateSessionConstructor
internal class LLFirSourcesSession @PrivateSessionConstructor constructor(
override val ktModule: KtSourceModule,
override val project: Project,
ktModule: KtSourceModule,
override val moduleComponents: LLFirModuleResolveComponents,
builtinTypes: BuiltinTypes,
) : LLFirResolvableModuleSession(builtinTypes)
) : LLFirResolvableModuleSession(ktModule, builtinTypes)