diff --git a/compiler/psi/src/org/jetbrains/kotlin/psi/KtElementImpl.java b/compiler/psi/src/org/jetbrains/kotlin/psi/KtElementImpl.java index 648c44b6a1f..6293eee07d1 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/KtElementImpl.java +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/KtElementImpl.java @@ -60,9 +60,9 @@ public class KtElementImpl extends ASTWrapperPsiElement implements KtElement { public KtFile getContainingKtFile() { PsiFile file = getContainingFile(); if(!(file instanceof KtFile)) { - String fileString = (file != null && file.isValid()) ? file.getText() : ""; + String fileString = (file != null && file.isValid()) ? (" " + file.getText()) : ""; throw new IllegalStateException("KtElement not inside KtFile: " + file + fileString + - "for element " + this + " of type " + this.getClass() + " node = " + getNode()); + " for element " + this + " of type " + this.getClass() + " node = " + getNode()); } return (KtFile) file; } diff --git a/compiler/psi/src/org/jetbrains/kotlin/psi/KtElementImplStub.java b/compiler/psi/src/org/jetbrains/kotlin/psi/KtElementImplStub.java index 14436401c33..f8dd426e95c 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/KtElementImplStub.java +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/KtElementImplStub.java @@ -69,9 +69,9 @@ public class KtElementImplStub> extends StubBasedPsiEle PsiFile file = getContainingFile(); if (!(file instanceof KtFile)) { // KtElementImpl.copy() might be the reason for this exception - String fileString = file.isValid() ? file.getText() : ""; + String fileString = file.isValid() ? (" " + file.getText()) : ""; throw new IllegalStateException("KtElement not inside KtFile: " + file + fileString + - "for element " + this + " of type " + this.getClass() + " node = " + getNode()); + " for element " + this + " of type " + this.getClass() + " node = " + getNode()); } return (KtFile) file; } 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 28875926ccc..47d44ea9de3 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 @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.idea.caches.resolve +import com.intellij.openapi.diagnostic.ControlFlowException import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.project.Project import com.intellij.openapi.projectRoots.Sdk @@ -59,6 +60,7 @@ import org.jetbrains.kotlin.psi.psiUtil.contains import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.diagnostics.KotlinSuppressCache import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode +import org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull import org.jetbrains.kotlin.utils.addToStdlib.sumByLong @@ -120,9 +122,15 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService { private fun getFilesForElements(elements: List): List { return elements.map { - // in theory `containingKtFile` is `@NotNull` but in practice EA-114080 - @Suppress("USELESS_ELVIS") - it.containingKtFile ?: throw IllegalStateException("containingKtFile was null for $it of ${it.javaClass}") + try { + // in theory `containingKtFile` is `@NotNull` but in practice EA-114080 + @Suppress("USELESS_ELVIS") + it.containingKtFile ?: throw IllegalStateException("containingKtFile was null for $it of ${it.javaClass}") + } catch (e: Exception) { + if (e is ControlFlowException) throw e + throw KotlinExceptionWithAttachments("Couldn't get containingKtFile for ktElement") + .withAttachment("element.kt", it.text) + } } }