From 83e422fc3bab98d5b29afd28398179af4d66180e Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 31 Jul 2019 19:58:47 +0300 Subject: [PATCH] Workaround copied kotlin element happened to be outside the KtFile Can be reproduced after revert with IdeLightClassTestGenerated$Local.testDollarsInNameLocal test. --- .../asJava/classes/KtLightClassForLocalDeclaration.kt | 9 ++++++--- .../src/org/jetbrains/kotlin/psi/KtElementImplStub.java | 3 ++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForLocalDeclaration.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForLocalDeclaration.kt index 5ecf4dcee06..77b238bd9f1 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForLocalDeclaration.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForLocalDeclaration.kt @@ -35,9 +35,12 @@ open class KtLightClassForLocalDeclaration( KotlinClassInnerStuffCache( this, with(KotlinModificationTrackerService.getInstance(classOrObject.project)) { - listOf( - outOfBlockModificationTracker, fileModificationTracker(classOrObject.containingKtFile) - ) + val file = classOrObject.containingFile + if (file is KtFile) { + listOf(outOfBlockModificationTracker, fileModificationTracker(file)) + } else { + listOf(outOfBlockModificationTracker) + } } ) diff --git a/compiler/psi/src/org/jetbrains/kotlin/psi/KtElementImplStub.java b/compiler/psi/src/org/jetbrains/kotlin/psi/KtElementImplStub.java index 0b4e3ffcf45..14436401c33 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/KtElementImplStub.java +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/KtElementImplStub.java @@ -67,7 +67,8 @@ public class KtElementImplStub> extends StubBasedPsiEle @Override public KtFile getContainingKtFile() { PsiFile file = getContainingFile(); - if(!(file instanceof KtFile)) { + if (!(file instanceof KtFile)) { + // KtElementImpl.copy() might be the reason for this exception String fileString = file.isValid() ? file.getText() : ""; throw new IllegalStateException("KtElement not inside KtFile: " + file + fileString + "for element " + this + " of type " + this.getClass() + " node = " + getNode());