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 gnu.trove.TObjectHashingStrategy;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.asJava.LightClassUtil;
|
import org.jetbrains.jet.asJava.LightClassUtil;
|
||||||
|
import org.jetbrains.jet.lang.descriptors.CallableDescriptor;
|
||||||
import org.jetbrains.jet.lang.psi.*;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
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.caches.resolve.ResolvePackage;
|
||||||
import org.jetbrains.jet.plugin.hierarchy.HierarchyUtils;
|
import org.jetbrains.jet.plugin.hierarchy.HierarchyUtils;
|
||||||
import org.jetbrains.jet.plugin.references.JetReference;
|
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 (kotlinOnly && !(element instanceof JetNamedDeclaration)) return true;
|
||||||
|
|
||||||
// If reference belongs to property initializer, show enclosing declaration instead
|
// If reference belongs to property initializer, show enclosing declaration instead
|
||||||
if (element instanceof JetProperty) {
|
if (element instanceof JetProperty) {
|
||||||
JetProperty property = (JetProperty) element;
|
JetProperty property = (JetProperty) element;
|
||||||
if (PsiTreeUtil.isAncestor(property.getInitializer(), ref.getElement(), false)) {
|
if (PsiTreeUtil.isAncestor(property.getInitializer(), refElement, false)) {
|
||||||
element = HierarchyUtils.getCallHierarchyElement(element.getParent());
|
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);
|
doCallerHierarchyTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kotlinFunctionNonCallUsages")
|
||||||
|
public void testKotlinFunctionNonCallUsages() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/hierarchy/calls/callers/kotlinFunctionNonCallUsages/");
|
||||||
|
doCallerHierarchyTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("kotlinLocalClass")
|
@TestMetadata("kotlinLocalClass")
|
||||||
public void testKotlinLocalClass() throws Exception {
|
public void testKotlinLocalClass() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/hierarchy/calls/callers/kotlinLocalClass/");
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/hierarchy/calls/callers/kotlinLocalClass/");
|
||||||
|
|||||||
Reference in New Issue
Block a user