From c76f365efb45e56eafb06e42dc57341f3348852d Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Thu, 31 Aug 2023 14:03:23 +0200 Subject: [PATCH] [Analysis API Standalone] change behavior of `StandaloneAnalysisAPISession.getModulesWithFiles` - it now returns a map only for `KtSourceModule` - every `KtSourceModule` is present there, even a module without source files ^KT-60884 --- .../api/standalone/StandaloneAnalysisAPISession.kt | 6 +++--- .../StandaloneAnalysisAPISessionBuilder.kt | 13 ++++++++----- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneAnalysisAPISession.kt b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneAnalysisAPISession.kt index fc23085d565..9d3f33d5b07 100644 --- a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneAnalysisAPISession.kt +++ b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneAnalysisAPISession.kt @@ -11,14 +11,14 @@ import com.intellij.openapi.application.Application import com.intellij.openapi.project.Project import com.intellij.psi.PsiFile import com.intellij.psi.search.GlobalSearchScope -import org.jetbrains.kotlin.analysis.project.structure.KtModule +import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment import org.jetbrains.kotlin.load.kotlin.PackagePartProvider public class StandaloneAnalysisAPISession internal constructor( kotlinCoreProjectEnvironment: KotlinCoreProjectEnvironment, public val createPackagePartProvider: (GlobalSearchScope) -> PackagePartProvider, - modulesWithFilesProvider: () -> Map> + modulesWithFilesProvider: () -> Map> ) { // TODO: better to limit exposure? Current usages are: addExtension, jarFileSystem public val coreApplicationEnvironment: CoreApplicationEnvironment = kotlinCoreProjectEnvironment.environment @@ -33,5 +33,5 @@ public class StandaloneAnalysisAPISession internal constructor( ) public val mockProject: MockProject = kotlinCoreProjectEnvironment.project - public val modulesWithFiles: Map> by lazy(modulesWithFilesProvider) + public val modulesWithFiles: Map> by lazy(modulesWithFilesProvider) } \ No newline at end of file diff --git a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneAnalysisAPISessionBuilder.kt b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneAnalysisAPISessionBuilder.kt index 4f6be1a197e..2a683fa860e 100644 --- a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneAnalysisAPISessionBuilder.kt +++ b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneAnalysisAPISessionBuilder.kt @@ -21,9 +21,11 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.api.services.FirSealedCla import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.JvmFirDeserializedSymbolProviderFactory import org.jetbrains.kotlin.analysis.project.structure.KtModuleScopeProvider import org.jetbrains.kotlin.analysis.project.structure.KtModuleScopeProviderImpl +import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule import org.jetbrains.kotlin.analysis.project.structure.builder.KtModuleProviderBuilder import org.jetbrains.kotlin.analysis.project.structure.builder.buildProjectStructureProvider import org.jetbrains.kotlin.analysis.project.structure.impl.KtModuleProviderImpl +import org.jetbrains.kotlin.analysis.project.structure.impl.KtSourceModuleImpl import org.jetbrains.kotlin.analysis.project.structure.impl.buildKtModuleProviderByCompilerConfiguration import org.jetbrains.kotlin.analysis.project.structure.impl.getPsiFilesFromPaths import org.jetbrains.kotlin.analysis.project.structure.impl.getSourceFilePaths @@ -216,10 +218,11 @@ public class StandaloneAnalysisAPISessionBuilder( kotlinCoreProjectEnvironment, createPackagePartProvider, ) { - projectStructureProvider.allSourceFiles - .asSequence() - .filterIsInstance() - .groupBy { projectStructureProvider.getModule(it.originalElement, null) } + projectStructureProvider.allKtModules.mapNotNull { ktModule -> + if (ktModule !is KtSourceModule) return@mapNotNull null + check(ktModule is KtSourceModuleImpl) + ktModule to ktModule.sourceRoots.filterIsInstance() + }.toMap() } } } @@ -231,7 +234,7 @@ public inline fun buildStandaloneAnalysisAPISession( unitTestMode: Boolean = false, withPsiDeclarationFromBinaryModuleProvider: Boolean = false, classLoader: ClassLoader = MockProject::class.java.classLoader, - init: StandaloneAnalysisAPISessionBuilder.() -> Unit + init: StandaloneAnalysisAPISessionBuilder.() -> Unit, ): StandaloneAnalysisAPISession { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE)