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