diff --git a/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/fe10/test/configurator/AnalysisApiFe10TestConfigurator.kt b/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/fe10/test/configurator/AnalysisApiFe10TestConfigurator.kt index e5f21ea7441..2e8b595a192 100644 --- a/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/fe10/test/configurator/AnalysisApiFe10TestConfigurator.kt +++ b/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/fe10/test/configurator/AnalysisApiFe10TestConfigurator.kt @@ -38,7 +38,7 @@ object AnalysisApiFe10TestConfigurator : AnalysisApiTestConfigurator() { override fun configureTest(builder: TestConfigurationBuilder, disposable: Disposable) { builder.apply { - useAdditionalService { KtSourceModuleFactory() } + useAdditionalService { KtSourceModuleFactory } } } diff --git a/analysis/analysis-api-standalone/tests/org/jetbrains/kotlin/analysis/api/standalone/fir/test/configurators/StandaloneModeLibraryBinaryTestConfigurator.kt b/analysis/analysis-api-standalone/tests/org/jetbrains/kotlin/analysis/api/standalone/fir/test/configurators/StandaloneModeLibraryBinaryTestConfigurator.kt index 9e2266e3838..d87707282a2 100644 --- a/analysis/analysis-api-standalone/tests/org/jetbrains/kotlin/analysis/api/standalone/fir/test/configurators/StandaloneModeLibraryBinaryTestConfigurator.kt +++ b/analysis/analysis-api-standalone/tests/org/jetbrains/kotlin/analysis/api/standalone/fir/test/configurators/StandaloneModeLibraryBinaryTestConfigurator.kt @@ -13,7 +13,7 @@ import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtMod import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtModuleWithFiles import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AnalysisApiFirTestServiceRegistrar import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.configureOptionalTestCompilerPlugin -import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.KtLibraryBinaryModuleFactory +import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtLibraryBinaryModuleFactory import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtModuleFactory import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtSourceModuleFactory import org.jetbrains.kotlin.analysis.test.framework.project.structure.TestModuleStructureFactory @@ -66,14 +66,11 @@ object StandaloneModeLibraryBinaryTestConfigurator : StandaloneModeConfiguratorB } private class KtCombinedModuleFactory : KtModuleFactory { - private val sourceModuleFactory = KtSourceModuleFactory() - private val libraryBinaryModuleFactory = KtLibraryBinaryModuleFactory() - override fun createModule(testModule: TestModule, testServices: TestServices, project: Project): KtModuleWithFiles { return if (testModule.name == "app") { - sourceModuleFactory.createModule(testModule, testServices, project) + KtSourceModuleFactory.createModule(testModule, testServices, project) } else { - libraryBinaryModuleFactory.createModule(testModule, testServices, project) + KtLibraryBinaryModuleFactory.createModule(testModule, testServices, project) } } } diff --git a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/AnalysisApiTestDirectives.kt b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/AnalysisApiTestDirectives.kt index 6ba4c523891..2ad6784837c 100644 --- a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/AnalysisApiTestDirectives.kt +++ b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/AnalysisApiTestDirectives.kt @@ -5,10 +5,12 @@ package org.jetbrains.kotlin.analysis.test.framework +import org.jetbrains.kotlin.analysis.test.framework.test.configurators.TestModuleKind import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer object AnalysisApiTestDirectives : SimpleDirectivesContainer() { + val MODULE_KIND by enumDirective("Overrides the kind of `KtModule` that is built from the associated test module") val DISABLE_DEPENDED_MODE by directive("Analysis in dependent mode should not be run in this test") val IGNORE_FE10 by directive("FE10 Analysis API implementation test should mot be run") val IGNORE_FIR by directive("FIR Analysis API implementation test should mot be run") -} \ No newline at end of file +} diff --git a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtLibraryBinaryModuleFactory.kt b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtLibraryBinaryModuleFactory.kt new file mode 100644 index 00000000000..62455dd0e60 --- /dev/null +++ b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtLibraryBinaryModuleFactory.kt @@ -0,0 +1,36 @@ +/* + * Copyright 2010-2023 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.test.framework.project.structure + +import com.intellij.openapi.project.Project +import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtModuleWithFiles +import org.jetbrains.kotlin.analysis.test.framework.services.libraries.compiledLibraryProvider +import org.jetbrains.kotlin.analysis.test.framework.services.libraries.testModuleDecompiler +import org.jetbrains.kotlin.test.model.TestModule +import org.jetbrains.kotlin.test.services.TestServices + +/** + * @see org.jetbrains.kotlin.analysis.test.framework.test.configurators.TestModuleKind.LibraryBinary + */ +object KtLibraryBinaryModuleFactory : KtModuleFactory { + override fun createModule(testModule: TestModule, testServices: TestServices, project: Project): KtModuleWithFiles { + val library = testServices.compiledLibraryProvider.compileToLibrary(testModule).artifact + val decompiledFiles = testServices.testModuleDecompiler.getAllPsiFilesFromLibrary(library, project) + + return KtModuleWithFiles( + KtLibraryModuleImpl( + testModule.name, + testModule.targetPlatform, + GlobalSearchScope.filesScope(project, decompiledFiles.mapTo(mutableSetOf()) { it.virtualFile }), + project, + binaryRoots = listOf(library), + librarySources = null, + ), + decompiledFiles + ) + } +} diff --git a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtLibrarySourceModuleFactory.kt b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtLibrarySourceModuleFactory.kt new file mode 100644 index 00000000000..aef34810bd7 --- /dev/null +++ b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtLibrarySourceModuleFactory.kt @@ -0,0 +1,56 @@ +/* + * Copyright 2010-2023 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.test.framework.project.structure + +import com.intellij.openapi.project.Project +import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.kotlin.analysis.api.impl.base.util.LibraryUtils +import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtModuleWithFiles +import org.jetbrains.kotlin.test.model.TestModule +import org.jetbrains.kotlin.test.services.TestServices +import org.jetbrains.kotlin.analysis.test.framework.services.libraries.compiledLibraryProvider +import java.nio.file.Path + +/** + * @see org.jetbrains.kotlin.analysis.test.framework.test.configurators.TestModuleKind.LibrarySource + */ +object KtLibrarySourceModuleFactory : KtModuleFactory { + override fun createModule(testModule: TestModule, testServices: TestServices, project: Project): KtModuleWithFiles { + val (libraryJar, librarySourcesJar) = testServices.compiledLibraryProvider.compileToLibrary(testModule) + + require(librarySourcesJar != null) + + return createKtLibrarySourceModule( + libraryJar = libraryJar, + librarySourcesJar = librarySourcesJar, + testModule = testModule, + project = project, + ) + } +} + +fun createKtLibrarySourceModule(libraryJar: Path, librarySourcesJar: Path, testModule: TestModule, project: Project): KtModuleWithFiles { + val libraryKtModule = KtLibraryModuleImpl( + testModule.name, + testModule.targetPlatform, + GlobalSearchScope.filesScope(project, LibraryUtils.getAllVirtualFilesFromJar(libraryJar)), + project, + binaryRoots = listOf(libraryJar), + librarySources = null, + ) + + val decompiledPsiFilesFromSourceJar = LibraryUtils.getAllPsiFilesFromJar(librarySourcesJar, project) + val librarySourceKtModule = KtLibrarySourceModuleImpl( + testModule.name, + testModule.targetPlatform, + GlobalSearchScope.filesScope(project, decompiledPsiFilesFromSourceJar.map { it.virtualFile }), + project, + binaryLibrary = libraryKtModule, + ) + + libraryKtModule.librarySources = librarySourceKtModule + return KtModuleWithFiles(librarySourceKtModule, decompiledPsiFilesFromSourceJar) +} diff --git a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtModuleFactory.kt b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtModuleFactory.kt index deceffa69df..ca33e40c119 100644 --- a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtModuleFactory.kt +++ b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtModuleFactory.kt @@ -7,6 +7,8 @@ package org.jetbrains.kotlin.analysis.test.framework.project.structure import com.intellij.openapi.project.Project import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtModuleWithFiles +import org.jetbrains.kotlin.analysis.test.framework.AnalysisApiTestDirectives +import org.jetbrains.kotlin.analysis.test.framework.test.configurators.TestModuleKind import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.services.TestService import org.jetbrains.kotlin.test.services.TestServices @@ -15,4 +17,26 @@ fun interface KtModuleFactory : TestService { fun createModule(testModule: TestModule, testServices: TestServices, project: Project): KtModuleWithFiles } -val TestServices.ktModuleFactory: KtModuleFactory by TestServices.testServiceAccessor() \ No newline at end of file +private val TestServices.ktModuleFactory: KtModuleFactory by TestServices.testServiceAccessor() + +/** + * Returns the appropriate [KtModuleFactory] to build a [KtModule][org.jetbrains.kotlin.analysis.project.structure.KtModule] for the given + * [testModule]. + * + * By default, the [KtModuleFactory] registered with these [TestServices] is returned. It may be overruled by the + * [MODULE_KIND][org.jetbrains.kotlin.analysis.test.framework.AnalysisApiTestDirectives.MODULE_KIND] directive for a specific test module. + */ +fun TestServices.getKtModuleFactoryForTestModule(testModule: TestModule): KtModuleFactory { + val explicitKinds = testModule.directives[AnalysisApiTestDirectives.MODULE_KIND] + if (explicitKinds.size > 1) { + throw IllegalArgumentException("A test module may only specify one `${AnalysisApiTestDirectives.MODULE_KIND.name}`.") + } + + return when (explicitKinds.singleOrNull()) { + TestModuleKind.Source -> KtSourceModuleFactory + TestModuleKind.LibraryBinary -> KtLibraryBinaryModuleFactory + TestModuleKind.LibrarySource -> KtLibrarySourceModuleFactory + TestModuleKind.ScriptSource -> KtScriptModuleFactory + else -> ktModuleFactory + } +} diff --git a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtScriptModuleFactory.kt b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtScriptModuleFactory.kt index 5b964c93ace..7c20c4f5f3d 100644 --- a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtScriptModuleFactory.kt +++ b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtScriptModuleFactory.kt @@ -11,7 +11,10 @@ import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.services.TestServices -class KtScriptModuleFactory : KtModuleFactory { +/** + * @see org.jetbrains.kotlin.analysis.test.framework.test.configurators.TestModuleKind.ScriptSource + */ +object KtScriptModuleFactory : KtModuleFactory { override fun createModule(testModule: TestModule, testServices: TestServices, project: Project): KtModuleWithFiles { val ktFile = TestModuleStructureFactory.createSourcePsiFiles(testModule, testServices, project).single() as KtFile val module = KtScriptModuleImpl( diff --git a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtSourceModuleFactory.kt b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtSourceModuleFactory.kt index 4c37a3baf1b..3a89445809f 100644 --- a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtSourceModuleFactory.kt +++ b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtSourceModuleFactory.kt @@ -11,7 +11,10 @@ import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtMod import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.services.TestServices -class KtSourceModuleFactory : KtModuleFactory { +/** + * @see org.jetbrains.kotlin.analysis.test.framework.test.configurators.TestModuleKind.Source + */ +object KtSourceModuleFactory : KtModuleFactory { override fun createModule(testModule: TestModule, testServices: TestServices, project: Project): KtModuleWithFiles { val psiFiles = TestModuleStructureFactory.createSourcePsiFiles(testModule, testServices, project) @@ -25,4 +28,4 @@ class KtSourceModuleFactory : KtModuleFactory { return KtModuleWithFiles(module, psiFiles) } -} \ No newline at end of file +} diff --git a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/TestModuleStructureFactory.kt b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/TestModuleStructureFactory.kt index ff188a8e507..190d111345e 100644 --- a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/TestModuleStructureFactory.kt +++ b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/TestModuleStructureFactory.kt @@ -43,8 +43,9 @@ object TestModuleStructureFactory { testServices: TestServices, project: Project ): KtModuleProjectStructure { - val moduleEntries = moduleStructure.modules - .map { testModule -> testServices.ktModuleFactory.createModule(testModule, testServices, project) } + val moduleEntries = moduleStructure.modules.map { testModule -> + testServices.getKtModuleFactoryForTestModule(testModule).createModule(testModule, testServices, project) + } val moduleEntriesByName = moduleEntries.associateByName() diff --git a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/test/configurators/AnalysisApiTestConfiguratorServiceFactory.kt b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/test/configurators/AnalysisApiTestConfiguratorServiceFactory.kt index c2259e5a8cc..fcd1d2be48d 100644 --- a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/test/configurators/AnalysisApiTestConfiguratorServiceFactory.kt +++ b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/test/configurators/AnalysisApiTestConfiguratorServiceFactory.kt @@ -48,10 +48,3 @@ enum class FrontendKind(val suffix: String) { Fir("Fir"), Fe10("Fe10"), } - -enum class TestModuleKind(val suffix: String) { - Source("Source"), - LibraryBinary("LibraryBinary"), - LibrarySource("LibrarySource"), - ScriptSource("ScriptSource"), -} diff --git a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/test/configurators/TestModuleKind.kt b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/test/configurators/TestModuleKind.kt new file mode 100644 index 00000000000..400c69bc04e --- /dev/null +++ b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/test/configurators/TestModuleKind.kt @@ -0,0 +1,37 @@ +/* + * Copyright 2010-2023 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.test.framework.test.configurators + +/** + * In an Analysis API test configuration, the [TestModuleKind] determines the kind of the default + * [KtModule][org.jetbrains.kotlin.analysis.project.structure.KtModule]s used in the test. This essentially defines the context in which a + * test file is analyzed. + * + * The test module kind can also be overridden for a specific test module in multi-module tests using the + * [MODULE_KIND][org.jetbrains.kotlin.analysis.test.framework.AnalysisApiTestDirectives.MODULE_KIND] directive. This allows e.g. source + * module tests to refer to binary library dependencies. + */ +enum class TestModuleKind(val suffix: String) { + /** + * @see org.jetbrains.kotlin.analysis.test.framework.project.structure.KtSourceModuleFactory + */ + Source("Source"), + + /** + * @see org.jetbrains.kotlin.analysis.test.framework.project.structure.KtLibraryBinaryModuleFactory + */ + LibraryBinary("LibraryBinary"), + + /** + * @see org.jetbrains.kotlin.analysis.test.framework.project.structure.KtLibrarySourceModuleFactory + */ + LibrarySource("LibrarySource"), + + /** + * @see org.jetbrains.kotlin.analysis.test.framework.project.structure.KtScriptModuleFactory + */ + ScriptSource("ScriptSource"), +} diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirLibraryBinaryTestConfigurator.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirLibraryBinaryTestConfigurator.kt index a1ed8dd1b4e..b3092718a74 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirLibraryBinaryTestConfigurator.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirLibraryBinaryTestConfigurator.kt @@ -7,15 +7,12 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators import com.intellij.openapi.Disposable import com.intellij.openapi.project.Project -import com.intellij.psi.search.GlobalSearchScope 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.AnalysisApiLibraryBaseTestServiceRegistrar -import org.jetbrains.kotlin.analysis.api.impl.base.util.LibraryUtils 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.low.level.api.fir.test.base.AnalysisApiFirTestServiceRegistrar -import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtLibraryModuleImpl +import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtLibraryBinaryModuleFactory import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtModuleFactory import org.jetbrains.kotlin.analysis.test.framework.project.structure.TestModuleStructureFactory import org.jetbrains.kotlin.analysis.test.framework.services.libraries.* @@ -23,7 +20,6 @@ import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisA import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestServiceRegistrar import org.jetbrains.kotlin.analysis.test.framework.test.configurators.FrontendKind import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder -import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.services.TestModuleStructure import org.jetbrains.kotlin.test.services.TestServices @@ -33,7 +29,7 @@ object AnalysisApiFirLibraryBinaryTestConfigurator : AnalysisApiTestConfigurator override fun configureTest(builder: TestConfigurationBuilder, disposable: Disposable) { builder.apply { - useAdditionalService { KtLibraryBinaryModuleFactory() } + useAdditionalService { KtLibraryBinaryModuleFactory } useAdditionalService { DispatchingTestModuleCompiler() } useAdditionalService { TestModuleDecompilerJar() } } @@ -55,22 +51,3 @@ object AnalysisApiFirLibraryBinaryTestConfigurator : AnalysisApiTestConfigurator AnalysisApiLibraryBaseTestServiceRegistrar, ) } - -class KtLibraryBinaryModuleFactory : KtModuleFactory { - override fun createModule(testModule: TestModule, testServices: TestServices, project: Project): KtModuleWithFiles { - val library = testServices.compiledLibraryProvider.compileToLibrary(testModule).artifact - val decompiledFiles = testServices.testModuleDecompiler.getAllPsiFilesFromLibrary(library, project) - - return KtModuleWithFiles( - KtLibraryModuleImpl( - testModule.name, - testModule.targetPlatform, - GlobalSearchScope.filesScope(project, decompiledFiles.mapTo(mutableSetOf()) { it.virtualFile }), - project, - binaryRoots = listOf(library), - librarySources = null, - ), - decompiledFiles - ) - } -} diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirLibrarySourceTestConfigurator.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirLibrarySourceTestConfigurator.kt index aad9b436e98..d3e3bfbe58e 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirLibrarySourceTestConfigurator.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirLibrarySourceTestConfigurator.kt @@ -11,19 +11,17 @@ import org.jetbrains.kotlin.analysis.api.impl.base.test.configurators.AnalysisAp import org.jetbrains.kotlin.analysis.api.impl.base.test.configurators.AnalysisApiDecompiledCodeTestServiceRegistrar import org.jetbrains.kotlin.analysis.api.impl.base.test.configurators.AnalysisApiLibraryBaseTestServiceRegistrar 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.low.level.api.fir.compiler.based.SealedClassesInheritorsCaclulatorPreAnalysisHandler import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AnalysisApiFirTestServiceRegistrar +import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtLibrarySourceModuleFactory import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtModuleFactory import org.jetbrains.kotlin.analysis.test.framework.project.structure.TestModuleStructureFactory -import org.jetbrains.kotlin.analysis.test.framework.services.libraries.* import org.jetbrains.kotlin.analysis.test.framework.services.configuration.AnalysisApiJvmEnvironmentConfigurator -import org.jetbrains.kotlin.analysis.test.framework.services.libraries.compiledLibraryProvider +import org.jetbrains.kotlin.analysis.test.framework.services.libraries.* 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.test.builders.TestConfigurationBuilder -import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.services.TestModuleStructure import org.jetbrains.kotlin.test.services.TestServices @@ -36,7 +34,7 @@ object AnalysisApiFirLibrarySourceTestConfigurator : AnalysisApiTestConfigurator disposable: Disposable ) { builder.apply { - useAdditionalService { KtLibrarySourceModuleFactory() } + useAdditionalService { KtLibrarySourceModuleFactory } useAdditionalService { DispatchingTestModuleCompiler() } useDirectives(SealedClassesInheritorsCaclulatorPreAnalysisHandler.Directives) usePreAnalysisHandlers(::SealedClassesInheritorsCaclulatorPreAnalysisHandler) @@ -60,18 +58,3 @@ object AnalysisApiFirLibrarySourceTestConfigurator : AnalysisApiTestConfigurator AnalysisApiLibraryBaseTestServiceRegistrar, ) } - -private class KtLibrarySourceModuleFactory : KtModuleFactory { - override fun createModule(testModule: TestModule, testServices: TestServices, project: Project): KtModuleWithFiles { - val (libraryJar, librarySourcesJar) = testServices.compiledLibraryProvider.compileToLibrary(testModule) - - require(librarySourcesJar != null) - - return createKtLibrarySourceModule( - libraryJar = libraryJar, - librarySourcesJar = librarySourcesJar, - testModule = testModule, - project = project, - ) - } -} \ No newline at end of file diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirOutOfContentRootTestConfigurator.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirOutOfContentRootTestConfigurator.kt index 666e9d21757..98be027b32a 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirOutOfContentRootTestConfigurator.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirOutOfContentRootTestConfigurator.kt @@ -34,7 +34,7 @@ object AnalysisApiFirOutOfContentRootTestConfigurator : AnalysisApiFirSourceLike builder.apply { useDirectives(Directives) - useAdditionalService { KtOutOfContentRootModuleFactory() } + useAdditionalService { KtOutOfContentRootModuleFactory } } } @@ -56,7 +56,7 @@ object AnalysisApiFirOutOfContentRootTestConfigurator : AnalysisApiFirSourceLike private class SkipWhenOutOfContentRootException : SkipTestException() -private class KtOutOfContentRootModuleFactory : KtModuleFactory { +private object KtOutOfContentRootModuleFactory : KtModuleFactory { override fun createModule(testModule: TestModule, testServices: TestServices, project: Project): KtModuleWithFiles { val psiFiles = TestModuleStructureFactory.createSourcePsiFiles(testModule, testServices, project) val platform = testModule.targetPlatform @@ -94,4 +94,4 @@ private class KtNotUnderContentRootModuleForTest( override val moduleDescription: String get() = "Not under content root \"${name}\" for ${file.virtualFile.path}" -} \ No newline at end of file +} diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirScriptTestConfigurator.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirScriptTestConfigurator.kt index 95855f1103f..05c148a5e7a 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirScriptTestConfigurator.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirScriptTestConfigurator.kt @@ -18,7 +18,7 @@ class AnalysisApiFirScriptTestConfigurator(analyseInDependentSession: Boolean) : super.configureTest(builder, disposable) builder.apply { - useAdditionalService { KtScriptModuleFactory() } + useAdditionalService { KtScriptModuleFactory } } } diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirSourceTestConfigurator.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirSourceTestConfigurator.kt index c03d704db97..8be36951100 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirSourceTestConfigurator.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirSourceTestConfigurator.kt @@ -17,7 +17,7 @@ open class AnalysisApiFirSourceTestConfigurator( super.configureTest(builder, disposable) builder.apply { - useAdditionalService { KtSourceModuleFactory() } + useAdditionalService { KtSourceModuleFactory } } } } \ No newline at end of file diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirStdlibSourceTestConfigurator.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirStdlibSourceTestConfigurator.kt index a222a084ae0..3e20be9a143 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirStdlibSourceTestConfigurator.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirStdlibSourceTestConfigurator.kt @@ -7,13 +7,9 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators import com.intellij.openapi.Disposable import com.intellij.openapi.project.Project -import com.intellij.psi.search.GlobalSearchScope -import java.nio.file.Path -import org.jetbrains.kotlin.analysis.api.impl.base.util.LibraryUtils import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtModuleWithFiles -import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtLibraryModuleImpl -import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtLibrarySourceModuleImpl import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtModuleFactory +import org.jetbrains.kotlin.analysis.test.framework.project.structure.createKtLibrarySourceModule import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder import org.jetbrains.kotlin.test.model.TestModule @@ -23,35 +19,12 @@ object AnalysisApiFirStdlibSourceTestConfigurator : AnalysisApiFirSourceLikeTest override fun configureTest(builder: TestConfigurationBuilder, disposable: Disposable) { super.configureTest(builder, disposable) builder.apply { - useAdditionalService { KtStdlibSourceModuleFactory() } + useAdditionalService { KtStdlibSourceModuleFactory } } } } -fun createKtLibrarySourceModule(libraryJar: Path, librarySourcesJar: Path, testModule: TestModule, project: Project): KtModuleWithFiles { - val libraryKtModule = KtLibraryModuleImpl( - testModule.name, - testModule.targetPlatform, - GlobalSearchScope.filesScope(project, LibraryUtils.getAllVirtualFilesFromJar(libraryJar)), - project, - binaryRoots = listOf(libraryJar), - librarySources = null, - ) - - val decompiledPsiFilesFromSourceJar = LibraryUtils.getAllPsiFilesFromJar(librarySourcesJar, project) - val librarySourceKtModule = KtLibrarySourceModuleImpl( - testModule.name, - testModule.targetPlatform, - GlobalSearchScope.filesScope(project, decompiledPsiFilesFromSourceJar.map { it.virtualFile }), - project, - binaryLibrary = libraryKtModule, - ) - - libraryKtModule.librarySources = librarySourceKtModule - return KtModuleWithFiles(librarySourceKtModule, decompiledPsiFilesFromSourceJar) -} - -private class KtStdlibSourceModuleFactory : KtModuleFactory { +private object KtStdlibSourceModuleFactory : KtModuleFactory { override fun createModule(testModule: TestModule, testServices: TestServices, project: Project): KtModuleWithFiles { val libraryJar = ForTestCompileRuntime.runtimeJarForTests().toPath() val librarySourcesJar = ForTestCompileRuntime.runtimeSourcesJarForTests().toPath() @@ -62,5 +35,4 @@ private class KtStdlibSourceModuleFactory : KtModuleFactory { project = project, ) } - -} \ No newline at end of file +}