From f6f667c3871dff74e0ba4cf93388d75246cb65d2 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Tue, 24 Jan 2023 17:56:04 +0900 Subject: [PATCH] [LL API] Adjust services required by LLFirBuiltinsSessionFactory As 'initialiseVirtualFileFinderServices()' that is run during test initialization collects transitive dependencies, all of them must be ready. However, 'KtNotUnderContentRootModuleForTest' has a built-in dependency provided by 'LLFirBuiltinsSessionFactory'. --- .../AnalysisApiFe10TestServiceRegistrar.kt | 4 +++- .../AnalysisApiBaseTestServiceRegistrar.kt | 8 ++++++-- .../AnalysisApiLibraryBaseTestServiceRegistrar.kt | 3 +++ .../project/structure/StandaloneProjectFactory.kt | 13 +++++++------ .../fir/test/StandaloneModeTestServiceRegistrar.kt | 3 +++ ...jectStructureInitialisationPreAnalysisHandler.kt | 3 ++- .../configurators/AnalysisApiTestConfigurator.kt | 4 ++++ .../AnalysisApiTestServiceRegistrar.kt | 4 +++- .../test/base/AnalysisApiFirTestServiceRegistrar.kt | 5 ++++- ...bolLightClassesDecompiledTestServiceRegistrar.kt | 4 +++- 10 files changed, 38 insertions(+), 13 deletions(-) diff --git a/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/fe10/test/configurator/AnalysisApiFe10TestServiceRegistrar.kt b/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/fe10/test/configurator/AnalysisApiFe10TestServiceRegistrar.kt index f23ca0f4efa..6eff67d17ab 100644 --- a/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/fe10/test/configurator/AnalysisApiFe10TestServiceRegistrar.kt +++ b/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/fe10/test/configurator/AnalysisApiFe10TestServiceRegistrar.kt @@ -29,8 +29,10 @@ object AnalysisApiFe10TestServiceRegistrar : AnalysisApiTestServiceRegistrar() { AnalysisHandlerExtension.registerExtensionPoint(project) } + override fun registerProjectServices(project: MockProject, testServices: TestServices) {} + @OptIn(KtAnalysisApiInternals::class) - override fun registerProjectServices(project: MockProject, testServices: TestServices) { + override fun registerProjectModelServices(project: MockProject, testServices: TestServices) { project.apply { registerService(KtAnalysisSessionProvider::class.java, KtFe10AnalysisSessionProvider(project)) registerService(Fe10AnalysisFacade::class.java, CliFe10AnalysisFacade(project)) diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/configurators/AnalysisApiBaseTestServiceRegistrar.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/configurators/AnalysisApiBaseTestServiceRegistrar.kt index b86d7c60f3e..e94acb53afb 100644 --- a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/configurators/AnalysisApiBaseTestServiceRegistrar.kt +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/configurators/AnalysisApiBaseTestServiceRegistrar.kt @@ -32,12 +32,16 @@ object AnalysisApiBaseTestServiceRegistrar: AnalysisApiTestServiceRegistrar() { @OptIn(KtAnalysisApiInternals::class) override fun registerProjectServices(project: MockProject, testServices: TestServices) { - val allKtFiles = testServices.ktModuleProvider.getModuleStructure().mainModules.flatMap { it.files.filterIsInstance() } - project.apply { registerService(KotlinModificationTrackerFactory::class.java, KotlinStaticModificationTrackerFactory::class.java) registerService(KtDefaultLifetimeTokenProvider::class.java, KtReadActionConfinementDefaultLifetimeTokenProvider::class.java) + } + } + override fun registerProjectModelServices(project: MockProject, testServices: TestServices) { + val allKtFiles = testServices.ktModuleProvider.getModuleStructure().mainModules.flatMap { it.files.filterIsInstance() } + + project.apply { registerService(KtModuleScopeProvider::class.java, KtModuleScopeProviderImpl()) registerService(KotlinAnnotationsResolverFactory::class.java, KotlinStaticAnnotationsResolverFactory(allKtFiles)) registerService(KotlinDeclarationProviderFactory::class.java, KotlinStaticDeclarationProviderFactory(project, allKtFiles)) diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/configurators/AnalysisApiLibraryBaseTestServiceRegistrar.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/configurators/AnalysisApiLibraryBaseTestServiceRegistrar.kt index 9faa66f3d6a..78fd841c4c6 100644 --- a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/configurators/AnalysisApiLibraryBaseTestServiceRegistrar.kt +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/configurators/AnalysisApiLibraryBaseTestServiceRegistrar.kt @@ -30,6 +30,9 @@ object AnalysisApiLibraryBaseTestServiceRegistrar : AnalysisApiTestServiceRegist override fun registerProjectServices(project: MockProject, testServices: TestServices) { } + override fun registerProjectModelServices(project: MockProject, testServices: TestServices) { + } + override fun registerApplicationServices(application: MockApplication, testServices: TestServices) { application.apply { registerService(ClsKotlinBinaryClassCache::class.java) diff --git a/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/StandaloneProjectFactory.kt b/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/StandaloneProjectFactory.kt index bcc54f612e0..71ff0073256 100644 --- a/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/StandaloneProjectFactory.kt +++ b/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/StandaloneProjectFactory.kt @@ -103,9 +103,15 @@ object StandaloneProjectFactory { val javaModuleGraph = JavaModuleGraph(javaModuleFinder) val allSourceFileRoots = sourceFiles.map { JavaRoot(it.virtualFile, JavaRoot.RootType.SOURCE) } - val libraryRoots = getAllBinaryRoots(modules, environment) val jdkRoots = getDefaultJdkModuleRoots(javaModuleFinder, javaModuleGraph) + project.registerService( + JavaModuleResolver::class.java, + CliJavaModuleResolver(javaModuleGraph, emptyList(), javaModuleFinder.systemModules.toList(), project) + ) + + val libraryRoots = getAllBinaryRoots(modules, environment) + val rootsWithSingleJavaFileRoots = buildList { addAll(libraryRoots) addAll(allSourceFileRoots) @@ -148,11 +154,6 @@ object StandaloneProjectFactory { true ) - project.registerService( - JavaModuleResolver::class.java, - CliJavaModuleResolver(javaModuleGraph, emptyList(), javaModuleFinder.systemModules.toList(), project) - ) - val finderFactory = CliVirtualFileFinderFactory(rootsIndex, false) project.registerService(MetadataFinderFactory::class.java, finderFactory) diff --git a/analysis/analysis-api-standalone/tests/org/jetbrains/kotlin/analysis/api/standalone/fir/test/StandaloneModeTestServiceRegistrar.kt b/analysis/analysis-api-standalone/tests/org/jetbrains/kotlin/analysis/api/standalone/fir/test/StandaloneModeTestServiceRegistrar.kt index 67a65340f50..f2b344394a9 100644 --- a/analysis/analysis-api-standalone/tests/org/jetbrains/kotlin/analysis/api/standalone/fir/test/StandaloneModeTestServiceRegistrar.kt +++ b/analysis/analysis-api-standalone/tests/org/jetbrains/kotlin/analysis/api/standalone/fir/test/StandaloneModeTestServiceRegistrar.kt @@ -23,6 +23,9 @@ object StandaloneModeTestServiceRegistrar : AnalysisApiTestServiceRegistrar() { } override fun registerProjectServices(project: MockProject, testServices: TestServices) { + } + + override fun registerProjectModelServices(project: MockProject, testServices: TestServices) { val projectStructureProvider = project.getService(ProjectStructureProvider::class.java) val binaryModules = (projectStructureProvider as? KtStaticModuleProvider)?.projectStructure?.allKtModules()?.filterIsInstance() diff --git a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/ProjectStructureInitialisationPreAnalysisHandler.kt b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/ProjectStructureInitialisationPreAnalysisHandler.kt index 69a22f48d83..3157c041c20 100644 --- a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/ProjectStructureInitialisationPreAnalysisHandler.kt +++ b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/ProjectStructureInitialisationPreAnalysisHandler.kt @@ -30,8 +30,9 @@ class ProjectStructureInitialisationPreAnalysisHandler( configurator.registerApplicationServices(application, testServices) createAndRegisterKtModules(moduleStructure, project) configurator.registerProjectExtensionPoints(project, testServices) - testServices.environmentManager.initializeProjectStructure() configurator.registerProjectServices(project, testServices) + testServices.environmentManager.initializeProjectStructure() + configurator.registerProjectModelServices(project, testServices) } private fun createAndRegisterKtModules(moduleStructure: TestModuleStructure, project: MockProject) { diff --git a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/test/configurators/AnalysisApiTestConfigurator.kt b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/test/configurators/AnalysisApiTestConfigurator.kt index 1cf74f73e97..39e00325da7 100644 --- a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/test/configurators/AnalysisApiTestConfigurator.kt +++ b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/test/configurators/AnalysisApiTestConfigurator.kt @@ -57,6 +57,10 @@ abstract class AnalysisApiTestConfigurator { serviceRegistrars.forEach { it.registerProjectServices(project, testServices) } } + fun registerProjectModelServices(project: MockProject, testServices: TestServices) { + serviceRegistrars.forEach { it.registerProjectModelServices(project, testServices) } + } + fun registerApplicationServices(application: MockApplication, testServices: TestServices) { ApplicationServiceRegistrar.register(application, serviceRegistrars, testServices) } diff --git a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/test/configurators/AnalysisApiTestServiceRegistrar.kt b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/test/configurators/AnalysisApiTestServiceRegistrar.kt index f2e71f77fef..32e108ac951 100644 --- a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/test/configurators/AnalysisApiTestServiceRegistrar.kt +++ b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/test/configurators/AnalysisApiTestServiceRegistrar.kt @@ -10,9 +10,11 @@ import com.intellij.mock.MockProject import org.jetbrains.kotlin.test.services.TestServices abstract class AnalysisApiTestServiceRegistrar { + abstract fun registerApplicationServices(application: MockApplication, testServices: TestServices) + abstract fun registerProjectExtensionPoints(project: MockProject, testServices: TestServices) abstract fun registerProjectServices(project: MockProject, testServices: TestServices) - abstract fun registerApplicationServices(application: MockApplication, testServices: TestServices) + abstract fun registerProjectModelServices(project: MockProject, testServices: TestServices) } \ No newline at end of file diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/AnalysisApiFirTestServiceRegistrar.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/AnalysisApiFirTestServiceRegistrar.kt index 5c8c2b2a8e2..905d374134c 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/AnalysisApiFirTestServiceRegistrar.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/AnalysisApiFirTestServiceRegistrar.kt @@ -41,7 +41,7 @@ object AnalysisApiFirTestServiceRegistrar : AnalysisApiTestServiceRegistrar() { FirExtensionRegistrarAdapter.registerExtensionPoint(project) } - @OptIn(TestInfrastructureInternals::class, KtAnalysisApiInternals::class) + @OptIn(KtAnalysisApiInternals::class) override fun registerProjectServices(project: MockProject, testServices: TestServices) { project.apply { registerService(KtAnalysisSessionProvider::class.java, KtFirAnalysisSessionProvider(this)) @@ -56,7 +56,10 @@ object AnalysisApiFirTestServiceRegistrar : AnalysisApiTestServiceRegistrar() { registerService(ReadWriteAccessChecker::class.java, ReadWriteAccessCheckerFirImpl()) registerService(KotlinReferenceProviderContributor::class.java, KotlinFirReferenceContributor::class.java) } + } + @OptIn(TestInfrastructureInternals::class) + override fun registerProjectModelServices(project: MockProject, testServices: TestServices) { with(PsiElementFinder.EP.getPoint(project)) { registerExtension(JavaElementFinder(project), testServices.testConfiguration.rootDisposable) registerExtension(PsiElementFinderImpl(project), testServices.testConfiguration.rootDisposable) diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/test/configurators/AnalysisApiSymbolLightClassesDecompiledTestServiceRegistrar.kt b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/test/configurators/AnalysisApiSymbolLightClassesDecompiledTestServiceRegistrar.kt index 8ebf085541a..6e914ca77fa 100644 --- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/test/configurators/AnalysisApiSymbolLightClassesDecompiledTestServiceRegistrar.kt +++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/test/configurators/AnalysisApiSymbolLightClassesDecompiledTestServiceRegistrar.kt @@ -15,7 +15,9 @@ object AnalysisApiSymbolLightClassesDecompiledTestServiceRegistrar : AnalysisApi override fun registerProjectExtensionPoints(project: MockProject, testServices: TestServices) { } - override fun registerProjectServices(project: MockProject, testServices: TestServices) { + override fun registerProjectServices(project: MockProject, testServices: TestServices) {} + + override fun registerProjectModelServices(project: MockProject, testServices: TestServices) { project.apply { registerService(ClsJavaStubByVirtualFileCache::class.java) }