[LL FIR] support script tests
This commit is contained in:
committed by
Space Team
parent
cba9f1c559
commit
8e623ee73a
+1
@@ -53,6 +53,7 @@ val TestServices.ktModuleProvider: AnalysisApiKtModuleProvider by TestServices.t
|
|||||||
fun List<KtModuleWithFiles>.associateByName(): Map<String, KtModuleWithFiles> {
|
fun List<KtModuleWithFiles>.associateByName(): Map<String, KtModuleWithFiles> {
|
||||||
return associateBy { (ktModule, _) ->
|
return associateBy { (ktModule, _) ->
|
||||||
when (ktModule) {
|
when (ktModule) {
|
||||||
|
is KtModuleByCompilerConfiguration -> ktModule.moduleName
|
||||||
is KtSourceModule -> ktModule.moduleName
|
is KtSourceModule -> ktModule.moduleName
|
||||||
is KtLibraryModule -> ktModule.libraryName
|
is KtLibraryModule -> ktModule.libraryName
|
||||||
is KtLibrarySourceModule -> ktModule.libraryName
|
is KtLibrarySourceModule -> ktModule.libraryName
|
||||||
|
|||||||
+10
@@ -110,6 +110,16 @@ class KtSourceModuleByCompilerConfiguration(
|
|||||||
TopDownAnalyzerFacadeForJVM.newModuleSearchScope(project, psiFiles.filterIsInstance<KtFile>())
|
TopDownAnalyzerFacadeForJVM.newModuleSearchScope(project, psiFiles.filterIsInstance<KtFile>())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class KtScriptModuleByCompilerConfiguration(
|
||||||
|
project: Project,
|
||||||
|
testModule: TestModule,
|
||||||
|
override val file: KtFile,
|
||||||
|
testServices: TestServices,
|
||||||
|
) : KtModuleByCompilerConfiguration(project, testModule, listOf(file), testServices), KtScriptModule {
|
||||||
|
override val ktModule: KtModule get() = this
|
||||||
|
override val contentScope: GlobalSearchScope get() = GlobalSearchScope.fileScope(file)
|
||||||
|
}
|
||||||
|
|
||||||
class KtLibraryModuleByCompilerConfiguration(
|
class KtLibraryModuleByCompilerConfiguration(
|
||||||
project: Project,
|
project: Project,
|
||||||
testModule: TestModule,
|
testModule: TestModule,
|
||||||
|
|||||||
+9
-9
@@ -11,9 +11,10 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.api.DiagnosticCheckerFilt
|
|||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirFile
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirFile
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostic.compiler.based.facades.LLFirAnalyzerFacadeFactory
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostic.compiler.based.facades.LLFirAnalyzerFacadeFactory
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.FirLowLevelCompilerBasedTestConfigurator
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.FirLowLevelCompilerBasedTestConfigurator
|
||||||
|
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.AbstractCompilerBasedTest
|
import org.jetbrains.kotlin.analysis.test.framework.AbstractCompilerBasedTest
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.base.registerAnalysisApiBaseTestServices
|
import org.jetbrains.kotlin.analysis.test.framework.base.registerAnalysisApiBaseTestServices
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtSourceModuleByCompilerConfiguration
|
import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtModuleByCompilerConfiguration
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.project.structure.ktModuleProvider
|
import org.jetbrains.kotlin.analysis.test.framework.project.structure.ktModuleProvider
|
||||||
import org.jetbrains.kotlin.config.LanguageFeature
|
import org.jetbrains.kotlin.config.LanguageFeature
|
||||||
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
||||||
@@ -84,17 +85,16 @@ abstract class AbstractCompilerBasedTestForFir : AbstractCompilerBasedTest() {
|
|||||||
|
|
||||||
private fun analyzeDependsOnModule(module: TestModule): FirOutputPartForDependsOnModule {
|
private fun analyzeDependsOnModule(module: TestModule): FirOutputPartForDependsOnModule {
|
||||||
val moduleInfoProvider = testServices.ktModuleProvider
|
val moduleInfoProvider = testServices.ktModuleProvider
|
||||||
val ktModule = moduleInfoProvider.getModule(module.name) as KtSourceModuleByCompilerConfiguration
|
val ktModule = moduleInfoProvider.getModule(module.name) as KtModuleByCompilerConfiguration
|
||||||
|
|
||||||
val project = ktModule.project
|
val project = ktModule.project
|
||||||
val firResolveSession = LLFirResolveSessionService.getInstance(project).getFirResolveSessionNoCaching(ktModule)
|
val firResolveSession = LLFirResolveSessionService.getInstance(project).getFirResolveSessionNoCaching(ktModule as KtModule)
|
||||||
|
|
||||||
val allFirFiles =
|
val allFirFiles = module.files.filter { it.isKtFile }.zip(
|
||||||
module.files.filter { it.isKtFile }.zip(
|
ktModule.psiFiles
|
||||||
ktModule.psiFiles
|
.filterIsInstance<KtFile>()
|
||||||
.filterIsInstance<KtFile>()
|
.map { psiFile -> psiFile.getOrBuildFirFile(firResolveSession) }
|
||||||
.map { psiFile -> psiFile.getOrBuildFirFile(firResolveSession) }
|
)
|
||||||
)
|
|
||||||
|
|
||||||
val diagnosticCheckerFilter = if (FirDiagnosticsDirectives.WITH_EXTENDED_CHECKERS in module.directives) {
|
val diagnosticCheckerFilter = if (FirDiagnosticsDirectives.WITH_EXTENDED_CHECKERS in module.directives) {
|
||||||
DiagnosticCheckerFilter.EXTENDED_AND_COMMON_CHECKERS
|
DiagnosticCheckerFilter.EXTENDED_AND_COMMON_CHECKERS
|
||||||
|
|||||||
+18
-9
@@ -7,20 +7,23 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.test.base
|
|||||||
|
|
||||||
import com.intellij.openapi.Disposable
|
import com.intellij.openapi.Disposable
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator
|
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestServiceRegistrar
|
|
||||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
|
||||||
import org.jetbrains.kotlin.test.services.TestModuleStructure
|
|
||||||
import org.jetbrains.kotlin.test.services.TestServices
|
|
||||||
import org.jetbrains.kotlin.analysis.api.impl.base.test.configurators.AnalysisApiBaseTestServiceRegistrar
|
import org.jetbrains.kotlin.analysis.api.impl.base.test.configurators.AnalysisApiBaseTestServiceRegistrar
|
||||||
import org.jetbrains.kotlin.analysis.api.impl.base.test.configurators.AnalysisApiDecompiledCodeTestServiceRegistrar
|
import org.jetbrains.kotlin.analysis.api.impl.base.test.configurators.AnalysisApiDecompiledCodeTestServiceRegistrar
|
||||||
|
import org.jetbrains.kotlin.analysis.api.impl.base.test.configurators.AnalysisApiScriptTestServiceRegistrar
|
||||||
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtModuleProjectStructure
|
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtModuleProjectStructure
|
||||||
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtModuleWithFiles
|
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtModuleWithFiles
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.KtBinaryModule
|
import org.jetbrains.kotlin.analysis.project.structure.KtBinaryModule
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.allDirectDependenciesOfType
|
import org.jetbrains.kotlin.analysis.project.structure.allDirectDependenciesOfType
|
||||||
|
import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtScriptModuleByCompilerConfiguration
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtSourceModuleByCompilerConfiguration
|
import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtSourceModuleByCompilerConfiguration
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.project.structure.TestModuleStructureFactory
|
import org.jetbrains.kotlin.analysis.test.framework.project.structure.TestModuleStructureFactory
|
||||||
|
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator
|
||||||
|
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestServiceRegistrar
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.FrontendKind
|
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.FrontendKind
|
||||||
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||||
|
import org.jetbrains.kotlin.test.services.TestModuleStructure
|
||||||
|
import org.jetbrains.kotlin.test.services.TestServices
|
||||||
|
|
||||||
object FirLowLevelCompilerBasedTestConfigurator : AnalysisApiTestConfigurator() {
|
object FirLowLevelCompilerBasedTestConfigurator : AnalysisApiTestConfigurator() {
|
||||||
override val analyseInDependentSession: Boolean get() = false
|
override val analyseInDependentSession: Boolean get() = false
|
||||||
@@ -35,6 +38,7 @@ object FirLowLevelCompilerBasedTestConfigurator : AnalysisApiTestConfigurator()
|
|||||||
AnalysisApiBaseTestServiceRegistrar,
|
AnalysisApiBaseTestServiceRegistrar,
|
||||||
AnalysisApiDecompiledCodeTestServiceRegistrar,
|
AnalysisApiDecompiledCodeTestServiceRegistrar,
|
||||||
AnalysisApiFirTestServiceRegistrar,
|
AnalysisApiFirTestServiceRegistrar,
|
||||||
|
AnalysisApiScriptTestServiceRegistrar,
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun createModules(
|
override fun createModules(
|
||||||
@@ -44,11 +48,16 @@ object FirLowLevelCompilerBasedTestConfigurator : AnalysisApiTestConfigurator()
|
|||||||
): KtModuleProjectStructure {
|
): KtModuleProjectStructure {
|
||||||
val mainModules = moduleStructure.modules.map { testModule ->
|
val mainModules = moduleStructure.modules.map { testModule ->
|
||||||
val files = TestModuleStructureFactory.createSourcePsiFiles(testModule, testServices, project)
|
val files = TestModuleStructureFactory.createSourcePsiFiles(testModule, testServices, project)
|
||||||
KtModuleWithFiles(
|
val scriptFile = files.singleOrNull() as? KtFile
|
||||||
KtSourceModuleByCompilerConfiguration(project, testModule, files, testServices),
|
val ktModule = if (scriptFile?.isScript() == true) {
|
||||||
files
|
KtScriptModuleByCompilerConfiguration(project, testModule, scriptFile, testServices)
|
||||||
)
|
} else {
|
||||||
|
KtSourceModuleByCompilerConfiguration(project, testModule, files, testServices)
|
||||||
|
}
|
||||||
|
|
||||||
|
KtModuleWithFiles(ktModule, files)
|
||||||
}
|
}
|
||||||
|
|
||||||
return KtModuleProjectStructure(
|
return KtModuleProjectStructure(
|
||||||
mainModules = mainModules,
|
mainModules = mainModules,
|
||||||
binaryModules = mainModules.asSequence().flatMap { it.ktModule.allDirectDependenciesOfType<KtBinaryModule>() }.asIterable(),
|
binaryModules = mainModules.asSequence().flatMap { it.ktModule.allDirectDependenciesOfType<KtBinaryModule>() }.asIterable(),
|
||||||
|
|||||||
Reference in New Issue
Block a user