MemberInfoUtils: when no facade is available, use resolutionApi methods

This commit is contained in:
Mikhail Glukhikh
2018-02-07 14:07:14 +03:00
parent 8b8cb0abba
commit 8edf8b9e4d
@@ -24,20 +24,19 @@ import org.jetbrains.kotlin.asJava.classes.KtLightClass
import org.jetbrains.kotlin.asJava.namedUnwrappedElement
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.getJavaClassDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
import org.jetbrains.kotlin.idea.caches.resolve.javaResolutionFacade
import org.jetbrains.kotlin.idea.caches.resolve.*
import org.jetbrains.kotlin.idea.resolve.ResolutionFacade
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.allChildren
import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
fun PsiNamedElement.getClassDescriptorIfAny(resolutionFacade: ResolutionFacade? = null): ClassDescriptor? {
return when (this) {
is KtClassOrObject -> (resolutionFacade ?: getResolutionFacade()).resolveToDescriptor(this) as ClassDescriptor
is KtClassOrObject -> resolutionFacade?.resolveToDescriptor(this) ?: resolveToDescriptorIfAny(BodyResolveMode.FULL)
is PsiClass -> getJavaClassDescriptor()
else -> null
}
} as? ClassDescriptor
}
// Applies to JetClassOrObject and PsiClass
@@ -68,7 +67,7 @@ fun KotlinMemberInfo.getChildrenToAnalyze(): List<PsiElement> {
internal fun KtNamedDeclaration.resolveToDescriptorWrapperAware(resolutionFacade: ResolutionFacade? = null): DeclarationDescriptor {
if (this is KtPsiClassWrapper) return psiClass.getJavaClassDescriptor(resolutionFacade ?: psiClass.javaResolutionFacade())!!
return (resolutionFacade ?: getResolutionFacade()).resolveToDescriptor(this)
return resolutionFacade?.resolveToDescriptor(this) ?: unsafeResolveToDescriptor()
}
internal fun PsiMember.toKtDeclarationWrapperAware(): KtNamedDeclaration? {