Call Hierarchy: Filter out usages inside of import directives
This commit is contained in:
+8
-2
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
+3
@@ -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/");
|
||||
|
||||
Reference in New Issue
Block a user