[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.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<KtModule, List<PsiFile>>
modulesWithFilesProvider: () -> Map<KtSourceModule, List<PsiFile>>
) {
// 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<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.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<PsiFile>()
.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<PsiFile>()
}.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)