Do not throw when trying to resolve java outside project model

#KT-23444 Fixed
 #KT-22825 Fixed
This commit is contained in:
Pavel V. Talanov
2018-04-04 16:45:48 +02:00
parent 4af8833f08
commit 33a312c26d
9 changed files with 46 additions and 35 deletions
@@ -19,12 +19,12 @@ package org.jetbrains.kotlin.idea.conversion.copy
import com.intellij.psi.*
import com.intellij.psi.search.PsiShortNamesCache
import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.kotlin.caches.resolve.KotlinCacheService
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility
import org.jetbrains.kotlin.idea.caches.project.getNullableModuleInfo
import org.jetbrains.kotlin.idea.caches.resolve.*
import org.jetbrains.kotlin.idea.caches.resolve.analyzeWithContent
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
import org.jetbrains.kotlin.idea.caches.resolve.util.getJavaMemberDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.util.resolveToDescriptor
import org.jetbrains.kotlin.idea.core.isVisible
import org.jetbrains.kotlin.idea.imports.canBeReferencedViaImport
import org.jetbrains.kotlin.idea.references.mainReference
@@ -35,7 +35,6 @@ import org.jetbrains.kotlin.psi.KtDotQualifiedExpression
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtImportDirective
import org.jetbrains.kotlin.psi.psiUtil.referenceExpression
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
import java.util.*
@@ -128,10 +127,7 @@ class PlainTextPasteImportResolver(val dataForConversion: DataForConversion, val
.mapNotNull { psiClass ->
val containingFile = psiClass.containingFile
if (ProjectRootsUtil.isInProjectOrLibraryContent(containingFile)) {
val resolutionFacade = KotlinCacheService.getInstance(project).getResolutionFacadeByFile(
containingFile, JvmPlatform
)
psiClass to psiClass.resolveToDescriptor(resolutionFacade)
psiClass to psiClass.getJavaMemberDescriptor() as? ClassDescriptor
}
else {
null
@@ -529,7 +529,7 @@ fun KotlinChangeInfo.getAffectedCallables(): Collection<UsageInfo> = methodDescr
fun ChangeInfo.toJetChangeInfo(
originalChangeSignatureDescriptor: KotlinMethodDescriptor,
resolutionFacade: ResolutionFacade = method.javaResolutionFacade()
resolutionFacade: ResolutionFacade
): KotlinChangeInfo {
val method = method as PsiMethod
@@ -46,6 +46,7 @@ import org.jetbrains.kotlin.idea.caches.project.moduleInfo
import org.jetbrains.kotlin.idea.caches.resolve.*
import org.jetbrains.kotlin.idea.caches.resolve.util.getJavaMethodDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.util.getJavaOrKotlinMemberDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.util.javaResolutionFacade
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.core.compareDescriptors
import org.jetbrains.kotlin.idea.refactoring.*
@@ -909,7 +910,8 @@ class KotlinChangeSignatureUsageProcessor : ChangeSignatureUsageProcessor {
val descriptorWrapper = usages.firstIsInstanceOrNull<OriginalJavaMethodDescriptorWrapper>()
val methodDescriptor = (descriptorWrapper?.originalJavaMethodDescriptor) ?: return true
val javaMethodChangeInfo = changeInfo.toJetChangeInfo(methodDescriptor)
val resolutionFacade = (methodDescriptor.method as? PsiMethod)?.javaResolutionFacade() ?: return false
val javaMethodChangeInfo = changeInfo.toJetChangeInfo(methodDescriptor, resolutionFacade)
for (info in usages) {
(info as? JavaMethodKotlinUsageWithDelegate<*>)?.javaMethodChangeInfo = javaMethodChangeInfo
}
@@ -68,7 +68,11 @@ fun KotlinMemberInfo.getChildrenToAnalyze(): List<PsiElement> {
}
internal fun KtNamedDeclaration.resolveToDescriptorWrapperAware(resolutionFacade: ResolutionFacade? = null): DeclarationDescriptor {
if (this is KtPsiClassWrapper) return psiClass.getJavaClassDescriptor(resolutionFacade ?: psiClass.javaResolutionFacade())!!
if (this is KtPsiClassWrapper) {
(resolutionFacade ?: psiClass.javaResolutionFacade())
?.let { psiClass.getJavaClassDescriptor(it) }
?.let { return it }
}
return resolutionFacade?.resolveToDescriptor(this) ?: unsafeResolveToDescriptor()
}