[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
This commit is contained in:
Ilya Kirillov
2023-08-31 14:03:23 +02:00
committed by Space Team
parent a2015a6eb5
commit c76f365efb
2 changed files with 11 additions and 8 deletions
@@ -11,14 +11,14 @@ import com.intellij.openapi.application.Application
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.psi.PsiFile import com.intellij.psi.PsiFile
import com.intellij.psi.search.GlobalSearchScope 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.cli.jvm.compiler.KotlinCoreProjectEnvironment
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
public class StandaloneAnalysisAPISession internal constructor( public class StandaloneAnalysisAPISession internal constructor(
kotlinCoreProjectEnvironment: KotlinCoreProjectEnvironment, kotlinCoreProjectEnvironment: KotlinCoreProjectEnvironment,
public val createPackagePartProvider: (GlobalSearchScope) -> PackagePartProvider, public val createPackagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
modulesWithFilesProvider: () -> Map<KtModule, List<PsiFile>> modulesWithFilesProvider: () -> Map<KtSourceModule, List<PsiFile>>
) { ) {
// TODO: better to limit exposure? Current usages are: addExtension, jarFileSystem // TODO: better to limit exposure? Current usages are: addExtension, jarFileSystem
public val coreApplicationEnvironment: CoreApplicationEnvironment = kotlinCoreProjectEnvironment.environment public val coreApplicationEnvironment: CoreApplicationEnvironment = kotlinCoreProjectEnvironment.environment
@@ -33,5 +33,5 @@ public class StandaloneAnalysisAPISession internal constructor(
) )
public val mockProject: MockProject = kotlinCoreProjectEnvironment.project public val mockProject: MockProject = kotlinCoreProjectEnvironment.project
public val modulesWithFiles: Map<KtModule, List<PsiFile>> by lazy(modulesWithFilesProvider) public val modulesWithFiles: Map<KtSourceModule, List<PsiFile>> by lazy(modulesWithFilesProvider)
} }
@@ -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.low.level.api.fir.project.structure.JvmFirDeserializedSymbolProviderFactory
import org.jetbrains.kotlin.analysis.project.structure.KtModuleScopeProvider import org.jetbrains.kotlin.analysis.project.structure.KtModuleScopeProvider
import org.jetbrains.kotlin.analysis.project.structure.KtModuleScopeProviderImpl 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.KtModuleProviderBuilder
import org.jetbrains.kotlin.analysis.project.structure.builder.buildProjectStructureProvider 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.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.buildKtModuleProviderByCompilerConfiguration
import org.jetbrains.kotlin.analysis.project.structure.impl.getPsiFilesFromPaths import org.jetbrains.kotlin.analysis.project.structure.impl.getPsiFilesFromPaths
import org.jetbrains.kotlin.analysis.project.structure.impl.getSourceFilePaths import org.jetbrains.kotlin.analysis.project.structure.impl.getSourceFilePaths
@@ -216,10 +218,11 @@ public class StandaloneAnalysisAPISessionBuilder(
kotlinCoreProjectEnvironment, kotlinCoreProjectEnvironment,
createPackagePartProvider, createPackagePartProvider,
) { ) {
projectStructureProvider.allSourceFiles projectStructureProvider.allKtModules.mapNotNull { ktModule ->
.asSequence() if (ktModule !is KtSourceModule) return@mapNotNull null
.filterIsInstance<PsiFile>() check(ktModule is KtSourceModuleImpl)
.groupBy { projectStructureProvider.getModule(it.originalElement, null) } ktModule to ktModule.sourceRoots.filterIsInstance<PsiFile>()
}.toMap()
} }
} }
} }
@@ -231,7 +234,7 @@ public inline fun buildStandaloneAnalysisAPISession(
unitTestMode: Boolean = false, unitTestMode: Boolean = false,
withPsiDeclarationFromBinaryModuleProvider: Boolean = false, withPsiDeclarationFromBinaryModuleProvider: Boolean = false,
classLoader: ClassLoader = MockProject::class.java.classLoader, classLoader: ClassLoader = MockProject::class.java.classLoader,
init: StandaloneAnalysisAPISessionBuilder.() -> Unit init: StandaloneAnalysisAPISessionBuilder.() -> Unit,
): StandaloneAnalysisAPISession { ): StandaloneAnalysisAPISession {
contract { contract {
callsInPlace(init, InvocationKind.EXACTLY_ONCE) callsInPlace(init, InvocationKind.EXACTLY_ONCE)