Add flag for ct.sym serch

This commit is contained in:
Mikhael Bogdanov
2021-11-08 12:16:03 +01:00
committed by Space
parent 22b3688493
commit 6026a96349
3 changed files with 12 additions and 6 deletions
@@ -30,7 +30,8 @@ import java.io.InputStream
class CliVirtualFileFinder( class CliVirtualFileFinder(
private val index: JvmDependenciesIndex, private val index: JvmDependenciesIndex,
private val scope: GlobalSearchScope private val scope: GlobalSearchScope,
private val enableSearchInCtSym: Boolean
) : VirtualFileFinder() { ) : VirtualFileFinder() {
override fun findVirtualFileWithHeader(classId: ClassId): VirtualFile? = override fun findVirtualFileWithHeader(classId: ClassId): VirtualFile? =
findBinaryOrSigClass(classId) findBinaryOrSigClass(classId)
@@ -70,9 +71,14 @@ class CliVirtualFileFinder(
dir.findChild(fileName)?.takeIf(VirtualFile::isValid) dir.findChild(fileName)?.takeIf(VirtualFile::isValid)
}?.takeIf { it in scope } }?.takeIf { it in scope }
private fun findSigFileIfEnabled(
dir: VirtualFile,
simpleName: String
) = if (enableSearchInCtSym) dir.findChild("$simpleName.sig") else null
private fun findBinaryOrSigClass(classId: ClassId, simpleName: String, rootType: Set<JavaRoot.RootType>) = private fun findBinaryOrSigClass(classId: ClassId, simpleName: String, rootType: Set<JavaRoot.RootType>) =
index.findClass(classId, acceptedRootTypes = rootType) { dir, _ -> index.findClass(classId, acceptedRootTypes = rootType) { dir, _ ->
(dir.findChild("$simpleName.class") ?: dir.findChild("$simpleName.sig"))?.takeIf(VirtualFile::isValid) (dir.findChild("$simpleName.class") ?: findSigFileIfEnabled(dir, simpleName))?.takeIf(VirtualFile::isValid)
}?.takeIf { it in scope } }?.takeIf { it in scope }
private fun findBinaryOrSigClass(classId: ClassId) = private fun findBinaryOrSigClass(classId: ClassId) =
@@ -24,9 +24,9 @@ import org.jetbrains.kotlin.load.kotlin.VirtualFileFinder
import org.jetbrains.kotlin.load.kotlin.VirtualFileFinderFactory import org.jetbrains.kotlin.load.kotlin.VirtualFileFinderFactory
// TODO: create different JvmDependenciesIndex instances for different sets of source roots to improve performance // TODO: create different JvmDependenciesIndex instances for different sets of source roots to improve performance
class CliVirtualFileFinderFactory(private val index: JvmDependenciesIndex) : VirtualFileFinderFactory { class CliVirtualFileFinderFactory(private val index: JvmDependenciesIndex, private val enableSearchInCtSym: Boolean) : VirtualFileFinderFactory {
override fun create(scope: GlobalSearchScope): VirtualFileFinder = CliVirtualFileFinder(index, scope) override fun create(scope: GlobalSearchScope): VirtualFileFinder = CliVirtualFileFinder(index, scope, enableSearchInCtSym)
override fun create(project: Project, module: ModuleDescriptor): VirtualFileFinder = override fun create(project: Project, module: ModuleDescriptor): VirtualFileFinder =
CliVirtualFileFinder(index, GlobalSearchScope.allScope(project)) CliVirtualFileFinder(index, GlobalSearchScope.allScope(project), enableSearchInCtSym)
} }
@@ -288,7 +288,7 @@ class KotlinCoreEnvironment private constructor(
CliJavaModuleResolver(classpathRootsResolver.javaModuleGraph, javaModules, javaModuleFinder.systemModules.toList(), project) CliJavaModuleResolver(classpathRootsResolver.javaModuleGraph, javaModules, javaModuleFinder.systemModules.toList(), project)
) )
val finderFactory = CliVirtualFileFinderFactory(rootsIndex) val finderFactory = CliVirtualFileFinderFactory(rootsIndex, releaseTarget != 0)
project.registerService(MetadataFinderFactory::class.java, finderFactory) project.registerService(MetadataFinderFactory::class.java, finderFactory)
project.registerService(VirtualFileFinderFactory::class.java, finderFactory) project.registerService(VirtualFileFinderFactory::class.java, finderFactory)