[analysis] introduce KtBuiltinsModule and remove hacks related to the stdlib module search
This commit is contained in:
+15
-1
@@ -9,6 +9,8 @@ import com.intellij.openapi.project.Project
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.providers.LLFirBuiltinSymbolProvider
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.providers.LLFirBuiltinsAndCloneableSessionProvider
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirBuiltinsAndCloneableSession
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtBuiltinsModule
|
||||
import org.jetbrains.kotlin.analyzer.common.CommonPlatformAnalyzerServices
|
||||
import org.jetbrains.kotlin.fir.BuiltinTypes
|
||||
import org.jetbrains.kotlin.fir.PrivateSessionConstructor
|
||||
import org.jetbrains.kotlin.fir.SessionConfiguration
|
||||
@@ -25,6 +27,9 @@ import org.jetbrains.kotlin.fir.symbols.FirPhaseManager
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
import org.jetbrains.kotlin.platform.isCommon
|
||||
import org.jetbrains.kotlin.platform.js.isJs
|
||||
import org.jetbrains.kotlin.platform.jvm.isJvm
|
||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
|
||||
|
||||
@OptIn(PrivateSessionConstructor::class, SessionConfiguration::class)
|
||||
@@ -39,8 +44,9 @@ import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
|
||||
}
|
||||
|
||||
private fun createBuiltinsAndCloneableSession(platform: TargetPlatform): LLFirBuiltinsAndCloneableSession {
|
||||
val builtinsModule = KtBuiltinsModule(platform, platform.getAnalyzerServices(), project)
|
||||
return LLFirBuiltinsAndCloneableSession(project, builtInTypes).apply session@{
|
||||
val moduleData = LLFirBuiltinsModuleData(platform, JvmPlatformAnalyzerServices/*TODO*/).apply {
|
||||
val moduleData = LLFirKtModuleBasedModuleData(builtinsModule).apply {
|
||||
bindSession(this@session)
|
||||
}
|
||||
registerIdeComponents(project)
|
||||
@@ -65,4 +71,12 @@ import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
|
||||
fun getInstance(project: Project): LLFirBuiltinsSessionFactory =
|
||||
project.getService(LLFirBuiltinsSessionFactory::class.java)
|
||||
}
|
||||
}
|
||||
|
||||
private fun TargetPlatform.getAnalyzerServices() = when {
|
||||
isJvm() -> JvmPlatformAnalyzerServices
|
||||
isJs() -> JvmPlatformAnalyzerServices/*TODO*/
|
||||
// isNative() -> NativePlatformAnalyzerServices
|
||||
isCommon() -> CommonPlatformAnalyzerServices
|
||||
else -> JvmPlatformAnalyzerServices/*TODO*/
|
||||
}
|
||||
-27
@@ -36,33 +36,6 @@ val FirSession.firKtModuleBasedModuleData: LLFirKtModuleBasedModuleData
|
||||
val FirBasedSymbol<*>.firModuleData: LLFirModuleData
|
||||
get() = fir.firModuleData
|
||||
|
||||
class LLFirBuiltinsModuleData(
|
||||
override val platform: TargetPlatform,
|
||||
override val analyzerServices: PlatformDependentAnalyzerServices
|
||||
) : LLFirModuleData() {
|
||||
override val name: Name
|
||||
get() = Name.special("<builtins for $platform>")
|
||||
|
||||
override val dependencies: List<FirModuleData> get() = emptyList()
|
||||
override val dependsOnDependencies: List<FirModuleData> get() = emptyList()
|
||||
override val friendDependencies: List<FirModuleData> get() = emptyList()
|
||||
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
if (javaClass != other?.javaClass) return false
|
||||
|
||||
other as LLFirBuiltinsModuleData
|
||||
|
||||
if (platform != other.platform) return false
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
return platform.hashCode()
|
||||
}
|
||||
}
|
||||
|
||||
class LLFirKtModuleBasedModuleData(
|
||||
val ktModule: KtModule,
|
||||
|
||||
-5
@@ -7,15 +7,11 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.sessions
|
||||
|
||||
import com.intellij.openapi.project.Project
|
||||
import org.jetbrains.kotlin.analysis.api.impl.barebone.annotations.Immutable
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.ModuleFileCache
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirBuiltinsModuleData
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirKtModuleBasedModuleData
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirModuleData
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||
import org.jetbrains.kotlin.analysis.project.structure.NoCacheForModuleException
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.requireIsInstance
|
||||
import org.jetbrains.kotlin.fir.FirModuleData
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.FirSessionProvider
|
||||
|
||||
@Immutable
|
||||
@@ -28,7 +24,6 @@ class LLFirSessionProvider internal constructor(
|
||||
override fun getSession(moduleData: FirModuleData): LLFirSession {
|
||||
requireIsInstance<LLFirModuleData>(moduleData)
|
||||
return when (moduleData) {
|
||||
is LLFirBuiltinsModuleData -> moduleData.session as LLFirBuiltinsAndCloneableSession
|
||||
is LLFirKtModuleBasedModuleData -> getSession(moduleData.ktModule)
|
||||
}
|
||||
}
|
||||
|
||||
-4
@@ -58,9 +58,6 @@ object FirLowLevelCompilerBasedTestConfigurator : AnalysisApiTestConfigurator()
|
||||
return KtModuleProjectStructure(
|
||||
mainModules = mainModules,
|
||||
binaryModules = mainModules.asSequence().flatMap { it.ktModule.allDirectDependenciesOfType<KtLibraryModule>() }.asIterable(),
|
||||
stdlibFor = { platform ->
|
||||
createFakeStdlibModule(platform, project)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@@ -74,7 +71,6 @@ object FirLowLevelCompilerBasedTestConfigurator : AnalysisApiTestConfigurator()
|
||||
project = project,
|
||||
binaryRoots = emptyList(),
|
||||
librarySources = null,
|
||||
isBuitinsContainingStdlib = true
|
||||
)
|
||||
|
||||
override fun doOutOfBlockModification(file: KtFile) {
|
||||
|
||||
Reference in New Issue
Block a user