Improve search for facade light class by kotlin file
LightClassUtil#getWrappingClass works for clashing facade fq names #KT-17855 Fixed
This commit is contained in:
@@ -153,9 +153,7 @@ object LightClassUtil {
|
||||
|
||||
if (parent is KtFile) {
|
||||
// top-level declaration
|
||||
val fqName = parent.javaFileFacadeFqName
|
||||
val project = declaration.project
|
||||
return JavaElementFinder.getInstance(project).findClass(fqName.asString(), GlobalSearchScope.allScope(project))
|
||||
return findFileFacade(parent)
|
||||
}
|
||||
else if (parent is KtClassBody) {
|
||||
assert(parent.parent is KtClassOrObject)
|
||||
@@ -165,6 +163,17 @@ object LightClassUtil {
|
||||
return null
|
||||
}
|
||||
|
||||
private fun findFileFacade(ktFile: KtFile): PsiClass? {
|
||||
val fqName = ktFile.javaFileFacadeFqName
|
||||
val project = ktFile.project
|
||||
val classesWithMatchingFqName = JavaElementFinder.getInstance(project).findClasses(fqName.asString(), GlobalSearchScope.allScope(project))
|
||||
return classesWithMatchingFqName.singleOrNull() ?:
|
||||
classesWithMatchingFqName.find {
|
||||
// NOTE: for multipart facades this works via FakeLightClassForFileOfPackage
|
||||
it.containingFile?.virtualFile == ktFile.virtualFile
|
||||
}
|
||||
}
|
||||
|
||||
private fun getWrappingClasses(declaration: KtDeclaration): Sequence<PsiClass> {
|
||||
val wrapperClass = getWrappingClass(declaration) ?: return emptySequence()
|
||||
val wrapperClassOrigin = (wrapperClass as KtLightClass).kotlinOrigin
|
||||
|
||||
Reference in New Issue
Block a user