From 72436c1738257f18b41770b666f463daa2264eec Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Mon, 27 Mar 2017 15:36:03 +0300 Subject: [PATCH] Light Classes: Fix origin search for KtLightSuperTypeReference Use analyzeFully() when resolving super type references --- .../kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.kt | 2 ++ .../org/jetbrains/kotlin/asJava/LightClassGenerationSupport.kt | 2 ++ .../kotlin/asJava/elements/KtLightPsiReferenceList.kt | 2 +- .../idea/caches/resolve/IDELightClassGenerationSupport.kt | 3 +++ 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.kt index 14b7cf9708f..0ac94641be0 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.kt @@ -153,6 +153,8 @@ class CliLightClassGenerationSupport(project: Project) : LightClassGenerationSup override fun analyze(element: KtElement) = bindingContext + override fun analyzeFully(element: KtElement) = bindingContext + override fun getFacadeClasses(facadeFqName: FqName, scope: GlobalSearchScope): Collection { val filesForFacade = findFilesForFacade(facadeFqName, scope) if (filesForFacade.isEmpty()) return emptyList() diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassGenerationSupport.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassGenerationSupport.kt index 9808b591f14..55d035aa7c5 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassGenerationSupport.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassGenerationSupport.kt @@ -65,6 +65,8 @@ abstract class LightClassGenerationSupport { abstract fun analyze(element: KtElement): BindingContext + abstract fun analyzeFully(element: KtElement): BindingContext + abstract fun getFacadeClasses(facadeFqName: FqName, scope: GlobalSearchScope): Collection abstract fun getMultifilePartClasses(partFqName: FqName, scope: GlobalSearchScope): Collection diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightPsiReferenceList.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightPsiReferenceList.kt index daf2187867e..8b6eb4c7edc 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightPsiReferenceList.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightPsiReferenceList.kt @@ -44,7 +44,7 @@ class KtLightPsiReferenceList ( override val kotlinOrigin by lazyPub { val superTypeList = this@KtLightPsiReferenceList.kotlinOrigin ?: return@lazyPub null val fqNameToFind = clsDelegate.qualifiedName ?: return@lazyPub null - val context = LightClassGenerationSupport.getInstance(project).analyze(superTypeList) + val context = LightClassGenerationSupport.getInstance(project).analyzeFully(superTypeList) superTypeList.entries.firstOrNull { val referencedType = context[BindingContext.TYPE, it.typeReference] referencedType?.constructor?.declarationDescriptor?.fqNameUnsafe?.asString() == fqNameToFind diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt index 836561bf0df..cfd087cf6fa 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt @@ -50,6 +50,7 @@ import org.jetbrains.kotlin.idea.util.ProjectRootsUtil import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.lazy.NoDescriptorForDeclarationException import org.jetbrains.kotlin.resolve.scopes.MemberScope @@ -209,6 +210,8 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG override fun analyze(element: KtElement) = element.analyze(BodyResolveMode.PARTIAL) + override fun analyzeFully(element: KtElement) = element.analyzeFully() + override fun getFacadeNames(packageFqName: FqName, scope: GlobalSearchScope): Collection { val facadeFilesInPackage = KotlinFileFacadeClassByPackageIndex.getInstance().get(packageFqName.asString(), project, scope) return facadeFilesInPackage.map { it.javaFileFacadeFqName.shortName().asString() }