diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetPsiUtil.java b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetPsiUtil.java index d84168d11b3..2d95ad9d0e6 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetPsiUtil.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetPsiUtil.java @@ -373,8 +373,13 @@ public class JetPsiUtil { @Nullable @Contract("null, _ -> null") - public static PsiElement getTopmostParentOfTypes(@Nullable PsiElement element, @NotNull Class... parentTypes) { + public static PsiElement getTopmostParentOfTypes( + @Nullable PsiElement element, + @NotNull Class... parentTypes) { + if (element instanceof PsiFile) return null; + PsiElement answer = PsiTreeUtil.getParentOfType(element, parentTypes); + if (answer instanceof PsiFile) return answer; do { PsiElement next = PsiTreeUtil.getParentOfType(answer, parentTypes); diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinResolveCache.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinResolveCache.kt index 4a5179f8c2d..5e5d613a099 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinResolveCache.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinResolveCache.kt @@ -21,6 +21,7 @@ import com.intellij.openapi.project.DumbService import com.intellij.openapi.project.IndexNotReadyException import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement +import com.intellij.psi.PsiFile import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.CachedValuesManager import com.intellij.psi.util.PsiModificationTracker @@ -195,6 +196,8 @@ private object KotlinResolveDataProvider { ) fun findAnalyzableParent(element: JetElement): JetElement { + if (element is JetFile) return element + val topmostElement = JetPsiUtil.getTopmostParentOfTypes(element, *topmostElementTypes) as JetElement? // parameters and supertype lists are not analyzable by themselves, but if we don't count them as topmost, we'll stop inside, say, // object expressions inside arguments of super constructors of classes (note that classes themselves are not topmost elements)