From 4c38899a2acd06e532d9f9a1031fba21cce82766 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Tue, 10 Jul 2018 18:09:45 +0200 Subject: [PATCH] Improve error message on failing to get javaResolutionFacade --- .../caches/resolve/util/JavaResolveExtension.kt | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/util/JavaResolveExtension.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/util/JavaResolveExtension.kt index ecec8e87fe8..cd021f1c76e 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/util/JavaResolveExtension.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/util/JavaResolveExtension.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.caches.resolve.KotlinCacheService import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.idea.caches.lightClasses.KtLightClassForDecompiledDeclaration import org.jetbrains.kotlin.idea.resolve.ResolutionFacade +import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.load.java.sources.JavaSourceElement import org.jetbrains.kotlin.load.java.structure.* @@ -149,4 +150,18 @@ private fun Collection.findByJavaElemen } fun PsiElement.javaResolutionFacade() = - KotlinCacheService.getInstance(project).getResolutionFacadeByFile(this.originalElement.containingFile, JvmPlatform) + KotlinCacheService.getInstance(project).getResolutionFacadeByFile( + this.originalElement.containingFile ?: reportCouldNotCreateJavaFacade(), + JvmPlatform + ) + +private fun PsiElement.reportCouldNotCreateJavaFacade(): Nothing = + runReadAction { + error( + "Could not get javaResolutionFacade for element:\n" + + "same as originalElement = ${this === this.originalElement}" + + "class = ${javaClass.name}, text = $text, containingFile = ${containingFile?.name}\n" + + "originalElement.class = ${originalElement.javaClass.name}, originalElement.text = ${originalElement.text}), " + + "originalElement.containingFile = ${originalElement.containingFile?.name}" + ) + }