AA: look up built-ins module for deserialized declarations from built-ins
This commit is contained in:
committed by
Ilya Kirillov
parent
df95602e06
commit
5bf333f6f5
+9
-1
@@ -8,14 +8,22 @@ package org.jetbrains.kotlin.analysis.api.standalone.base.project.structure
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.analysis.project.structure.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.contains
|
||||
import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol
|
||||
|
||||
class KtStaticModuleProvider(
|
||||
private val builtinsModule: KtBuiltinsModule,
|
||||
val projectStructure: KtModuleProjectStructure,
|
||||
) : ProjectStructureProvider() {
|
||||
override fun getKtModuleForKtElement(element: PsiElement): KtModule {
|
||||
val containingFileAsPsiFile = element.containingFile
|
||||
val containingFileAsVirtualFile = containingFileAsPsiFile.virtualFile
|
||||
if (containingFileAsVirtualFile.extension == BuiltInSerializerProtocol.BUILTINS_FILE_EXTENSION) {
|
||||
return builtinsModule
|
||||
}
|
||||
|
||||
return projectStructure.mainModules
|
||||
.first { module ->
|
||||
module.ktModule.contentScope.contains(element)
|
||||
element in module.ktModule.contentScope
|
||||
}.ktModule
|
||||
}
|
||||
}
|
||||
+7
@@ -5,9 +5,11 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.project.structure.builder
|
||||
|
||||
import com.intellij.openapi.project.Project
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||
import org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider
|
||||
import org.jetbrains.kotlin.analysis.project.structure.impl.KtModuleProviderImpl
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
import kotlin.contracts.ExperimentalContracts
|
||||
import kotlin.contracts.InvocationKind
|
||||
import kotlin.contracts.contract
|
||||
@@ -20,8 +22,13 @@ public class KtModuleProviderBuilder {
|
||||
mainModules.add(module)
|
||||
}
|
||||
|
||||
public lateinit var platform: TargetPlatform
|
||||
public lateinit var project: Project
|
||||
|
||||
public fun build(): ProjectStructureProvider {
|
||||
return KtModuleProviderImpl(
|
||||
platform,
|
||||
project,
|
||||
mainModules,
|
||||
)
|
||||
}
|
||||
|
||||
+14
@@ -5,15 +5,21 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.project.structure.impl
|
||||
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.psi.PsiFileSystemItem
|
||||
import com.intellij.psi.PsiJavaFile
|
||||
import com.intellij.util.containers.ContainerUtil
|
||||
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.StandaloneProjectFactory.findJvmRootsForJavaFiles
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirBuiltinsSessionFactory
|
||||
import org.jetbrains.kotlin.analysis.project.structure.*
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol
|
||||
|
||||
internal class KtModuleProviderImpl(
|
||||
private val platform: TargetPlatform,
|
||||
private val project: Project,
|
||||
internal val mainModules: List<KtModule>,
|
||||
) : ProjectStructureProvider() {
|
||||
private val ktNotUnderContentRootModuleWithoutPsiFile by lazy {
|
||||
@@ -24,6 +30,10 @@ internal class KtModuleProviderImpl(
|
||||
|
||||
private val notUnderContentRootModuleCache = ContainerUtil.createConcurrentWeakMap<PsiFile, KtNotUnderContentRootModule>()
|
||||
|
||||
private val builtinsModule: KtBuiltinsModule by lazy {
|
||||
LLFirBuiltinsSessionFactory.getInstance(project).getBuiltinsSession(platform).ktModule as KtBuiltinsModule
|
||||
}
|
||||
|
||||
override fun getKtModuleForKtElement(element: PsiElement): KtModule {
|
||||
val containingFileAsPsiFile = element.containingFile
|
||||
?: return ktNotUnderContentRootModuleWithoutPsiFile
|
||||
@@ -38,6 +48,10 @@ internal class KtModuleProviderImpl(
|
||||
)
|
||||
}
|
||||
|
||||
if (containingFileAsVirtualFile.extension == BuiltInSerializerProtocol.BUILTINS_FILE_EXTENSION) {
|
||||
return builtinsModule
|
||||
}
|
||||
|
||||
return mainModules.first { module ->
|
||||
containingFileAsVirtualFile in module.contentScope
|
||||
}
|
||||
|
||||
+3
-1
@@ -151,9 +151,9 @@ internal fun buildKtModuleProviderByCompilerConfiguration(
|
||||
project: Project,
|
||||
ktFiles: List<KtFile>,
|
||||
): ProjectStructureProvider = buildProjectStructureProvider {
|
||||
val platform = JvmPlatforms.defaultJvmPlatform
|
||||
addModule(
|
||||
buildKtSourceModule {
|
||||
val platform = JvmPlatforms.defaultJvmPlatform
|
||||
val moduleName = compilerConfig.get(CommonConfigurationKeys.MODULE_NAME) ?: "<no module name provided>"
|
||||
|
||||
val libraryRoots = compilerConfig.jvmModularRoots + compilerConfig.jvmClasspathRoots
|
||||
@@ -196,4 +196,6 @@ internal fun buildKtModuleProviderByCompilerConfiguration(
|
||||
)
|
||||
}
|
||||
)
|
||||
this.platform = platform
|
||||
this.project = project
|
||||
}
|
||||
|
||||
+8
-1
@@ -10,11 +10,13 @@ import com.intellij.openapi.application.Application
|
||||
import com.intellij.openapi.project.Project
|
||||
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtStaticModuleProvider
|
||||
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.StandaloneProjectFactory
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtBuiltinsModule
|
||||
import org.jetbrains.kotlin.analysis.test.framework.project.structure.ktModuleProvider
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreApplicationEnvironment
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment
|
||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||
import org.jetbrains.kotlin.test.frontend.fir.getAnalyzerServices
|
||||
import org.jetbrains.kotlin.test.services.*
|
||||
|
||||
abstract class AnalysisApiEnvironmentManager : TestService {
|
||||
@@ -55,10 +57,15 @@ class AnalysisApiEnvironmentManagerImpl(
|
||||
val ktModuleProjectStructure = testServices.ktModuleProvider.getModuleStructure()
|
||||
val useSiteModule = testServices.moduleStructure.modules.first()
|
||||
val useSiteCompilerConfiguration = testServices.compilerConfigurationProvider.getCompilerConfiguration(useSiteModule)
|
||||
val builtinsModule = KtBuiltinsModule(
|
||||
useSiteModule.targetPlatform,
|
||||
useSiteModule.targetPlatform.getAnalyzerServices(),
|
||||
getProject()
|
||||
)
|
||||
|
||||
StandaloneProjectFactory.registerServicesForProjectEnvironment(
|
||||
_projectEnvironment,
|
||||
KtStaticModuleProvider(ktModuleProjectStructure),
|
||||
KtStaticModuleProvider(builtinsModule, ktModuleProjectStructure),
|
||||
ktModuleProjectStructure.allKtModules(),
|
||||
ktModuleProjectStructure.allSourceFiles(),
|
||||
useSiteCompilerConfiguration.languageVersionSettings,
|
||||
|
||||
Reference in New Issue
Block a user