Always take java source before class files.

Also when searching for inner classes.

^Fixes KT-51025
This commit is contained in:
Mads Ager
2022-05-04 15:00:10 +02:00
committed by Alexander Udalov
parent 84b0e0b934
commit c6d7c23940
2 changed files with 46 additions and 6 deletions
@@ -174,6 +174,15 @@ class KotlinCliJavaFileManagerImpl(private val myPsiManager: PsiManager) : CoreJ
val result = ArrayList<PsiClass>(1)
forEachClassId(qName) { classId ->
val relativeClassName = classId.relativeClassName.asString()
// Search java sources first. For build tools, it makes sense to build new files passing all the
// class files for the previous build on the class path.
result.addIfNotNull(
singleJavaFileRootsIndex.findJavaSourceClass(classId)
?.takeIf { it in scope }
?.findPsiClassInVirtualFile(relativeClassName)
)
index.traverseDirectoriesInPackage(classId.packageFqName) { dir, rootType ->
val psiClass =
findVirtualFileGivenPackage(dir, relativeClassName, rootType)
@@ -186,12 +195,6 @@ class KotlinCliJavaFileManagerImpl(private val myPsiManager: PsiManager) : CoreJ
true
}
result.addIfNotNull(
singleJavaFileRootsIndex.findJavaSourceClass(classId)
?.takeIf { it in scope }
?.findPsiClassInVirtualFile(relativeClassName)
)
if (result.isNotEmpty()) {
return@time result.toTypedArray()
}