Do not throw when trying to resolve java outside project model
#KT-23444 Fixed #KT-22825 Fixed
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
+3
-1
@@ -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()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user