Avoid counting directory parent for file

This commit is contained in:
Nikolay Krasko
2015-07-08 16:26:17 +03:00
parent 77c0a54a79
commit 7386ea0d0b
2 changed files with 9 additions and 1 deletions
@@ -373,8 +373,13 @@ public class JetPsiUtil {
@Nullable @Nullable
@Contract("null, _ -> null") @Contract("null, _ -> null")
public static PsiElement getTopmostParentOfTypes(@Nullable PsiElement element, @NotNull Class<? extends PsiElement>... parentTypes) { public static PsiElement getTopmostParentOfTypes(
@Nullable PsiElement element,
@NotNull Class<? extends PsiElement>... parentTypes) {
if (element instanceof PsiFile) return null;
PsiElement answer = PsiTreeUtil.getParentOfType(element, parentTypes); PsiElement answer = PsiTreeUtil.getParentOfType(element, parentTypes);
if (answer instanceof PsiFile) return answer;
do { do {
PsiElement next = PsiTreeUtil.getParentOfType(answer, parentTypes); PsiElement next = PsiTreeUtil.getParentOfType(answer, parentTypes);
@@ -21,6 +21,7 @@ import com.intellij.openapi.project.DumbService
import com.intellij.openapi.project.IndexNotReadyException import com.intellij.openapi.project.IndexNotReadyException
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.CachedValueProvider
import com.intellij.psi.util.CachedValuesManager import com.intellij.psi.util.CachedValuesManager
import com.intellij.psi.util.PsiModificationTracker import com.intellij.psi.util.PsiModificationTracker
@@ -195,6 +196,8 @@ private object KotlinResolveDataProvider {
) )
fun findAnalyzableParent(element: JetElement): JetElement { fun findAnalyzableParent(element: JetElement): JetElement {
if (element is JetFile) return element
val topmostElement = JetPsiUtil.getTopmostParentOfTypes(element, *topmostElementTypes) as JetElement? 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, // 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) // object expressions inside arguments of super constructors of classes (note that classes themselves are not topmost elements)