AA: remove unnecessary source path retrieval/cache

Instead, use source module's contentScope
This commit is contained in:
Jinseong Jeon
2022-02-25 17:37:10 -08:00
committed by Ilya Kirillov
parent a68fd25982
commit 47b0e66ca1
@@ -11,39 +11,19 @@ import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.analysis.project.structure.KtModule
import org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider import org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.cli.jvm.config.javaSourceRoots
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import java.nio.file.Files
import java.nio.file.Paths
internal class ProjectStructureProviderByCompilerConfiguration( internal class ProjectStructureProviderByCompilerConfiguration(
private val compilerConfig: CompilerConfiguration, compilerConfig: CompilerConfiguration,
project: Project, project: Project,
ktFiles: List<KtFile>, ktFiles: List<KtFile>,
jarFileSystem: CoreJarFileSystem, jarFileSystem: CoreJarFileSystem,
) : ProjectStructureProvider() { ) : ProjectStructureProvider() {
private val sourceFiles: Set<String> by lazy {
buildSet {
compilerConfig.javaSourceRoots.forEach { srcRoot ->
val path = Paths.get(srcRoot)
if (Files.isDirectory(path)) {
// E.g., project/app/src
Files.walk(path)
.filter(Files::isRegularFile)
.forEach { add(it.toString()) }
} else {
// E.g., project/app/src/some/pkg/main.kt
add(srcRoot)
}
}
}
}
private val sourceModule = KtSourceModuleByCompilerConfiguration(compilerConfig, project, ktFiles, jarFileSystem) private val sourceModule = KtSourceModuleByCompilerConfiguration(compilerConfig, project, ktFiles, jarFileSystem)
override fun getKtModuleForKtElement(element: PsiElement): KtModule { override fun getKtModuleForKtElement(element: PsiElement): KtModule {
val containingFile = element.containingFile.virtualFile val containingFile = element.containingFile.virtualFile
return if (containingFile.path in sourceFiles) { return if (containingFile in sourceModule.contentScope) {
sourceModule sourceModule
} else { } else {
sourceModule.directRegularDependencies.find { libModule -> containingFile in libModule.contentScope } sourceModule.directRegularDependencies.find { libModule -> containingFile in libModule.contentScope }