Call Hierarchy: Filter out usages inside of import directives

This commit is contained in:
Alexey Sedunov
2014-12-08 16:33:40 +03:00
parent 15d7932491
commit 7d1ed507a7
5 changed files with 29 additions and 2 deletions
@@ -35,8 +35,11 @@ import com.intellij.util.containers.HashMap;
import gnu.trove.TObjectHashingStrategy;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.asJava.LightClassUtil;
import org.jetbrains.jet.lang.descriptors.CallableDescriptor;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.calls.callUtil.CallUtilPackage;
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall;
import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage;
import org.jetbrains.jet.plugin.hierarchy.HierarchyUtils;
import org.jetbrains.jet.plugin.references.JetReference;
@@ -205,14 +208,17 @@ public class KotlinCallerMethodsTreeStructure extends KotlinCallTreeStructure {
}
}
PsiElement element = HierarchyUtils.getCallHierarchyElement(ref.getElement());
PsiElement refElement = ref.getElement();
if (PsiTreeUtil.getParentOfType(refElement, JetImportDirective.class, true) != null) return true;
PsiElement element = HierarchyUtils.getCallHierarchyElement(refElement);
if (kotlinOnly && !(element instanceof JetNamedDeclaration)) return true;
// If reference belongs to property initializer, show enclosing declaration instead
if (element instanceof JetProperty) {
JetProperty property = (JetProperty) element;
if (PsiTreeUtil.isAncestor(property.getInitializer(), ref.getElement(), false)) {
if (PsiTreeUtil.isAncestor(property.getInitializer(), refElement, false)) {
element = HierarchyUtils.getCallHierarchyElement(element.getParent());
}
}
@@ -0,0 +1,3 @@
<node text="p.foo() (p)" base="true">
<node text="q.bar() (q)"/>
</node>
@@ -0,0 +1,5 @@
package p
fun <caret>foo() {
}
@@ -0,0 +1,7 @@
package q
import p.foo
fun bar() {
foo()
}
@@ -312,6 +312,12 @@ public class HierarchyTestGenerated extends AbstractHierarchyTest {
doCallerHierarchyTest(fileName);
}
@TestMetadata("kotlinFunctionNonCallUsages")
public void testKotlinFunctionNonCallUsages() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/hierarchy/calls/callers/kotlinFunctionNonCallUsages/");
doCallerHierarchyTest(fileName);
}
@TestMetadata("kotlinLocalClass")
public void testKotlinLocalClass() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/hierarchy/calls/callers/kotlinLocalClass/");