From e8b0d47765f07199cc332549e85b7b8bd1856a40 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 14 Jun 2017 12:34:04 +0300 Subject: [PATCH] PlainTextPasteImportResolver: use relevant facade for Java classes Fixes EA-75803 for this particular case --- .../caches/resolve/KotlinCacheServiceImpl.kt | 2 +- .../copy/PlainTextPasteImportResolver.kt | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt index a448af7f259..cd399e43838 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt @@ -369,7 +369,7 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService { override fun getResolutionFacadeByFile(file: PsiFile, platform: TargetPlatform): ResolutionFacade { assert(file !is PsiCodeFragment) - assert(ProjectRootsUtil.isInProjectSource(file)) + assert(ProjectRootsUtil.isInProjectOrLibraryContent(file)) val moduleInfo = file.getModuleInfo() return getResolutionFacadeByModuleInfo(moduleInfo, platform) } diff --git a/idea/src/org/jetbrains/kotlin/idea/conversion/copy/PlainTextPasteImportResolver.kt b/idea/src/org/jetbrains/kotlin/idea/conversion/copy/PlainTextPasteImportResolver.kt index e5247b434be..59e7d519377 100644 --- a/idea/src/org/jetbrains/kotlin/idea/conversion/copy/PlainTextPasteImportResolver.kt +++ b/idea/src/org/jetbrains/kotlin/idea/conversion/copy/PlainTextPasteImportResolver.kt @@ -19,17 +19,20 @@ 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.DeclarationDescriptorWithVisibility import org.jetbrains.kotlin.idea.caches.resolve.* import org.jetbrains.kotlin.idea.core.isVisible import org.jetbrains.kotlin.idea.imports.canBeReferencedViaImport import org.jetbrains.kotlin.idea.references.mainReference +import org.jetbrains.kotlin.idea.util.ProjectRootsUtil import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.platform.JavaToKotlinClassMap 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.* @@ -119,7 +122,18 @@ class PlainTextPasteImportResolver(val dataForConversion: DataForConversion, val val referenceName = reference.referenceName!! if (referenceName in failedToResolveReferenceNames) return false val classes = shortNameCache.getClassesByName(referenceName, scope) - .map { it to it.resolveToDescriptor(resolutionFacade) } + .mapNotNull { psiClass -> + val containingFile = psiClass.containingFile + if (ProjectRootsUtil.isInProjectOrLibraryContent(containingFile)) { + val resolutionFacade = KotlinCacheService.getInstance(project).getResolutionFacadeByFile( + containingFile, JvmPlatform + ) + psiClass to psiClass.resolveToDescriptor(resolutionFacade) + } + else { + null + } + } .filter { canBeImported(it.second) } classes.find { (_, descriptor) -> JavaToKotlinClassMap.mapPlatformClass(descriptor!!).isNotEmpty() }