From 8e623ee73a7bcd746823733b47fe981ab93b8936 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Tue, 24 Oct 2023 20:18:16 +0200 Subject: [PATCH] [LL FIR] support script tests --- .../AnalysisApiKtModuleProviderImpl.kt | 1 + .../KtSourceModuleByCompilerConfiguration.kt | 10 +++++++ .../based/AbstractCompilerBasedTestForFir.kt | 18 ++++++------- ...irLowLevelCompilerBasedTestConfigurator.kt | 27 ++++++++++++------- 4 files changed, 38 insertions(+), 18 deletions(-) diff --git a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/AnalysisApiKtModuleProviderImpl.kt b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/AnalysisApiKtModuleProviderImpl.kt index 178ff9b4597..e2a4cc00fba 100644 --- a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/AnalysisApiKtModuleProviderImpl.kt +++ b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/AnalysisApiKtModuleProviderImpl.kt @@ -53,6 +53,7 @@ val TestServices.ktModuleProvider: AnalysisApiKtModuleProvider by TestServices.t fun List.associateByName(): Map { return associateBy { (ktModule, _) -> when (ktModule) { + is KtModuleByCompilerConfiguration -> ktModule.moduleName is KtSourceModule -> ktModule.moduleName is KtLibraryModule -> ktModule.libraryName is KtLibrarySourceModule -> ktModule.libraryName diff --git a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtSourceModuleByCompilerConfiguration.kt b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtSourceModuleByCompilerConfiguration.kt index c4cce5d288c..893c7d67248 100644 --- a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtSourceModuleByCompilerConfiguration.kt +++ b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtSourceModuleByCompilerConfiguration.kt @@ -110,6 +110,16 @@ class KtSourceModuleByCompilerConfiguration( TopDownAnalyzerFacadeForJVM.newModuleSearchScope(project, psiFiles.filterIsInstance()) } +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( project: Project, testModule: TestModule, diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/compiler/based/AbstractCompilerBasedTestForFir.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/compiler/based/AbstractCompilerBasedTestForFir.kt index 263bb8a5f30..39af6ab08ce 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/compiler/based/AbstractCompilerBasedTestForFir.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/compiler/based/AbstractCompilerBasedTestForFir.kt @@ -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.diagnostic.compiler.based.facades.LLFirAnalyzerFacadeFactory 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.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.config.LanguageFeature import org.jetbrains.kotlin.platform.jvm.JvmPlatforms @@ -84,17 +85,16 @@ abstract class AbstractCompilerBasedTestForFir : AbstractCompilerBasedTest() { private fun analyzeDependsOnModule(module: TestModule): FirOutputPartForDependsOnModule { 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 firResolveSession = LLFirResolveSessionService.getInstance(project).getFirResolveSessionNoCaching(ktModule) + val firResolveSession = LLFirResolveSessionService.getInstance(project).getFirResolveSessionNoCaching(ktModule as KtModule) - val allFirFiles = - module.files.filter { it.isKtFile }.zip( - ktModule.psiFiles - .filterIsInstance() - .map { psiFile -> psiFile.getOrBuildFirFile(firResolveSession) } - ) + val allFirFiles = module.files.filter { it.isKtFile }.zip( + ktModule.psiFiles + .filterIsInstance() + .map { psiFile -> psiFile.getOrBuildFirFile(firResolveSession) } + ) val diagnosticCheckerFilter = if (FirDiagnosticsDirectives.WITH_EXTENDED_CHECKERS in module.directives) { DiagnosticCheckerFilter.EXTENDED_AND_COMMON_CHECKERS diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/FirLowLevelCompilerBasedTestConfigurator.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/FirLowLevelCompilerBasedTestConfigurator.kt index e6ca55fec34..c87dbe85443 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/FirLowLevelCompilerBasedTestConfigurator.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/FirLowLevelCompilerBasedTestConfigurator.kt @@ -7,20 +7,23 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.test.base import com.intellij.openapi.Disposable 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.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.KtModuleWithFiles import org.jetbrains.kotlin.analysis.project.structure.KtBinaryModule 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.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.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() { override val analyseInDependentSession: Boolean get() = false @@ -35,6 +38,7 @@ object FirLowLevelCompilerBasedTestConfigurator : AnalysisApiTestConfigurator() AnalysisApiBaseTestServiceRegistrar, AnalysisApiDecompiledCodeTestServiceRegistrar, AnalysisApiFirTestServiceRegistrar, + AnalysisApiScriptTestServiceRegistrar, ) override fun createModules( @@ -44,11 +48,16 @@ object FirLowLevelCompilerBasedTestConfigurator : AnalysisApiTestConfigurator() ): KtModuleProjectStructure { val mainModules = moduleStructure.modules.map { testModule -> val files = TestModuleStructureFactory.createSourcePsiFiles(testModule, testServices, project) - KtModuleWithFiles( - KtSourceModuleByCompilerConfiguration(project, testModule, files, testServices), - files - ) + val scriptFile = files.singleOrNull() as? KtFile + val ktModule = if (scriptFile?.isScript() == true) { + KtScriptModuleByCompilerConfiguration(project, testModule, scriptFile, testServices) + } else { + KtSourceModuleByCompilerConfiguration(project, testModule, files, testServices) + } + + KtModuleWithFiles(ktModule, files) } + return KtModuleProjectStructure( mainModules = mainModules, binaryModules = mainModules.asSequence().flatMap { it.ktModule.allDirectDependenciesOfType() }.asIterable(),