From 7d1ed507a7cb0d5bdb89ccb2348f675eff13ea0b Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Mon, 8 Dec 2014 16:33:40 +0300 Subject: [PATCH] Call Hierarchy: Filter out usages inside of import directives --- .../calls/KotlinCallerMethodsTreeStructure.java | 10 ++++++++-- .../KotlinFunctionNonCallUsages_verification.xml | 3 +++ .../calls/callers/kotlinFunctionNonCallUsages/main0.kt | 5 +++++ .../calls/callers/kotlinFunctionNonCallUsages/main1.kt | 7 +++++++ .../jet/plugin/hierarchy/HierarchyTestGenerated.java | 6 ++++++ 5 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 idea/testData/hierarchy/calls/callers/kotlinFunctionNonCallUsages/KotlinFunctionNonCallUsages_verification.xml create mode 100644 idea/testData/hierarchy/calls/callers/kotlinFunctionNonCallUsages/main0.kt create mode 100644 idea/testData/hierarchy/calls/callers/kotlinFunctionNonCallUsages/main1.kt diff --git a/idea/src/org/jetbrains/jet/plugin/hierarchy/calls/KotlinCallerMethodsTreeStructure.java b/idea/src/org/jetbrains/jet/plugin/hierarchy/calls/KotlinCallerMethodsTreeStructure.java index a775d261346..729e7c9eecd 100644 --- a/idea/src/org/jetbrains/jet/plugin/hierarchy/calls/KotlinCallerMethodsTreeStructure.java +++ b/idea/src/org/jetbrains/jet/plugin/hierarchy/calls/KotlinCallerMethodsTreeStructure.java @@ -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()); } } diff --git a/idea/testData/hierarchy/calls/callers/kotlinFunctionNonCallUsages/KotlinFunctionNonCallUsages_verification.xml b/idea/testData/hierarchy/calls/callers/kotlinFunctionNonCallUsages/KotlinFunctionNonCallUsages_verification.xml new file mode 100644 index 00000000000..a5143dd7a9d --- /dev/null +++ b/idea/testData/hierarchy/calls/callers/kotlinFunctionNonCallUsages/KotlinFunctionNonCallUsages_verification.xml @@ -0,0 +1,3 @@ + + + diff --git a/idea/testData/hierarchy/calls/callers/kotlinFunctionNonCallUsages/main0.kt b/idea/testData/hierarchy/calls/callers/kotlinFunctionNonCallUsages/main0.kt new file mode 100644 index 00000000000..948d3e32136 --- /dev/null +++ b/idea/testData/hierarchy/calls/callers/kotlinFunctionNonCallUsages/main0.kt @@ -0,0 +1,5 @@ +package p + +fun foo() { + +} \ No newline at end of file diff --git a/idea/testData/hierarchy/calls/callers/kotlinFunctionNonCallUsages/main1.kt b/idea/testData/hierarchy/calls/callers/kotlinFunctionNonCallUsages/main1.kt new file mode 100644 index 00000000000..0396b8271b8 --- /dev/null +++ b/idea/testData/hierarchy/calls/callers/kotlinFunctionNonCallUsages/main1.kt @@ -0,0 +1,7 @@ +package q + +import p.foo + +fun bar() { + foo() +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/hierarchy/HierarchyTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/hierarchy/HierarchyTestGenerated.java index 2be08e86ace..076d011b858 100644 --- a/idea/tests/org/jetbrains/jet/plugin/hierarchy/HierarchyTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/hierarchy/HierarchyTestGenerated.java @@ -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/");