[Analysis API] Move test-only project provider closer to tests
This commit is contained in:
-61
@@ -1,61 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2022 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.analysis.api.standalone.base.project.structure
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiFileSystemItem
|
||||
import org.jetbrains.kotlin.analysis.project.structure.*
|
||||
import org.jetbrains.kotlin.analysis.project.structure.impl.KtDanglingFileModuleImpl
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.psi.KtCodeFragment
|
||||
import org.jetbrains.kotlin.psi.psiUtil.contains
|
||||
import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol
|
||||
import org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments
|
||||
|
||||
class KtStaticModuleProvider(
|
||||
override val globalLanguageVersionSettings: LanguageVersionSettings,
|
||||
private val builtinsModule: KtBuiltinsModule,
|
||||
private val projectStructure: KtModuleProjectStructure,
|
||||
) : KtStaticProjectStructureProvider() {
|
||||
@OptIn(KtModuleStructureInternals::class)
|
||||
override fun getModule(element: PsiElement, contextualModule: KtModule?): KtModule {
|
||||
// Unwrap context-dependent file copies coming from dependent sessions
|
||||
val containingPsiFile = element.containingFile.originalFile
|
||||
|
||||
if (containingPsiFile is KtCodeFragment) {
|
||||
val contextElement = containingPsiFile.context
|
||||
?: throw KotlinExceptionWithAttachments("Context not found for a code fragment")
|
||||
.withAttachment("codeFragment.kt", containingPsiFile.text)
|
||||
|
||||
val contextModule = getModule(contextElement, contextualModule)
|
||||
return KtDanglingFileModuleImpl(containingPsiFile, contextModule)
|
||||
}
|
||||
|
||||
val containingVirtualFile = containingPsiFile.virtualFile
|
||||
if (containingVirtualFile.extension == BuiltInSerializerProtocol.BUILTINS_FILE_EXTENSION) {
|
||||
return builtinsModule
|
||||
}
|
||||
|
||||
containingVirtualFile.analysisExtensionFileContextModule?.let { return it }
|
||||
|
||||
projectStructure.binaryModules.firstOrNull { binaryModule ->
|
||||
containingVirtualFile in binaryModule.contentScope
|
||||
}?.let { return it }
|
||||
|
||||
return projectStructure.mainModules.firstOrNull { module ->
|
||||
element in module.ktModule.contentScope
|
||||
}?.ktModule
|
||||
?: throw KotlinExceptionWithAttachments("Cannot find KtModule; see the attachment for more details.")
|
||||
.withAttachment(
|
||||
containingVirtualFile.path,
|
||||
allKtModules.joinToString(separator = System.lineSeparator()) { it.asDebugString() }
|
||||
)
|
||||
}
|
||||
|
||||
override val allKtModules: List<KtModule> = projectStructure.allKtModules()
|
||||
|
||||
override val allSourceFiles: List<PsiFileSystemItem> = projectStructure.allSourceFiles()
|
||||
}
|
||||
+2
-2
@@ -10,13 +10,13 @@ import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem
|
||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeTokenProvider
|
||||
import org.jetbrains.kotlin.analysis.api.standalone.KtAlwaysAccessibleLifetimeTokenProvider
|
||||
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtStaticModuleProvider
|
||||
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.LLFirStandaloneLibrarySymbolProviderFactory
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirLibrarySymbolProviderFactory
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtBinaryModule
|
||||
import org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider
|
||||
import org.jetbrains.kotlin.analysis.providers.KotlinPsiDeclarationProviderFactory
|
||||
import org.jetbrains.kotlin.analysis.providers.impl.KotlinStaticPsiDeclarationProviderFactory
|
||||
import org.jetbrains.kotlin.analysis.test.framework.services.KtTestProjectStructureProvider
|
||||
import org.jetbrains.kotlin.analysis.test.framework.services.environmentManager
|
||||
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestServiceRegistrar
|
||||
import org.jetbrains.kotlin.test.services.TestServices
|
||||
@@ -33,7 +33,7 @@ public object StandaloneModeTestServiceRegistrar : AnalysisApiTestServiceRegistr
|
||||
override fun registerProjectModelServices(project: MockProject, testServices: TestServices) {
|
||||
val projectStructureProvider = ProjectStructureProvider.getInstance(project)
|
||||
val binaryModules =
|
||||
(projectStructureProvider as? KtStaticModuleProvider)?.allKtModules?.filterIsInstance<KtBinaryModule>()
|
||||
(projectStructureProvider as? KtTestProjectStructureProvider)?.allKtModules?.filterIsInstance<KtBinaryModule>()
|
||||
?: emptyList()
|
||||
val projectEnvironment = testServices.environmentManager.getProjectEnvironment()
|
||||
project.apply {
|
||||
|
||||
Reference in New Issue
Block a user