diff --git a/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallHierarchyNodeDescriptor.java b/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallHierarchyNodeDescriptor.java
index f0bf6121ed6..3bd8bc70358 100644
--- a/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallHierarchyNodeDescriptor.java
+++ b/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallHierarchyNodeDescriptor.java
@@ -31,14 +31,11 @@ import com.intellij.psi.PsiReference;
import com.intellij.ui.LayeredIcon;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import org.jetbrains.kotlin.descriptors.ClassDescriptor;
-import org.jetbrains.kotlin.descriptors.ConstructorDescriptor;
-import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
-import org.jetbrains.kotlin.descriptors.FunctionDescriptor;
+import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils;
+import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.psi.*;
import org.jetbrains.kotlin.renderer.DescriptorRenderer;
-import org.jetbrains.kotlin.resolve.BindingContext;
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode;
import javax.swing.*;
@@ -141,62 +138,68 @@ public class KotlinCallHierarchyNodeDescriptor extends HierarchyNodeDescriptor i
@Nullable
private static String renderElement(@Nullable PsiElement element) {
- String elementText;
- String containerText = null;
-
if (element instanceof KtFile) {
- elementText = ((KtFile) element).getName();
+ return ((KtFile) element).getName();
}
- else if (element instanceof KtNamedDeclaration) {
- BindingContext bindingContext = ResolutionUtils.analyze((KtElement) element, BodyResolveMode.FULL);
- DeclarationDescriptor descriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, element);
- if (descriptor == null) return null;
+ if (!(element instanceof KtNamedDeclaration)) {
+ return null;
+ }
- if (element instanceof KtClassOrObject) {
- if (element instanceof KtObjectDeclaration && ((KtObjectDeclaration) element).isCompanion()) {
- descriptor = descriptor.getContainingDeclaration();
- if (!(descriptor instanceof ClassDescriptor)) return null;
+ DeclarationDescriptor descriptor = ResolutionUtils.resolveToDescriptorIfAny((KtNamedDeclaration) element, BodyResolveMode.PARTIAL);
+ if (descriptor == null) return null;
+ String elementText;
+ if (element instanceof KtClassOrObject) {
+ if (element instanceof KtObjectDeclaration && ((KtObjectDeclaration) element).isCompanion()) {
+ descriptor = descriptor.getContainingDeclaration();
+ if (!(descriptor instanceof ClassDescriptor)) return null;
+
+ elementText = renderClassOrObject((ClassDescriptor) descriptor);
+ }
+ else if (element instanceof KtEnumEntry) {
+ elementText = ((KtEnumEntry) element).getName();
+ }
+ else {
+ if (((KtClassOrObject) element).getName() != null) {
elementText = renderClassOrObject((ClassDescriptor) descriptor);
}
- else if (element instanceof KtEnumEntry) {
- elementText = ((KtEnumEntry) element).getName();
- }
else {
- if (((KtClassOrObject) element).getName() != null) {
- elementText = renderClassOrObject((ClassDescriptor) descriptor);
- }
- else {
- elementText = "[anonymous]";
- }
+ elementText = "[anonymous]";
}
}
- else if (element instanceof KtNamedFunction || element instanceof KtConstructor) {
- elementText = renderNamedFunction((FunctionDescriptor) descriptor);
- }
- else if (element instanceof KtProperty) {
- elementText = ((KtProperty) element).getName();
- }
- else return null;
-
- DeclarationDescriptor containerDescriptor = descriptor.getContainingDeclaration();
- while (containerDescriptor != null) {
- String name = containerDescriptor.getName().asString();
- if (!name.startsWith("<")) {
- containerText = name;
- break;
- }
- containerDescriptor = containerDescriptor.getContainingDeclaration();
- }
+ }
+ else if ((element instanceof KtNamedFunction || element instanceof KtConstructor)) {
+ if (!(descriptor instanceof FunctionDescriptor)) return null;
+ elementText = renderNamedFunction((FunctionDescriptor) descriptor);
+ }
+ else if (element instanceof KtProperty) {
+ elementText = ((KtProperty) element).getName();
}
else return null;
if (elementText == null) return null;
- return containerText != null ? containerText + "." + elementText : elementText;
- }
- public static String renderNamedFunction(FunctionDescriptor descriptor) {
+ String containerText = null;
+ DeclarationDescriptor containerDescriptor = descriptor.getContainingDeclaration();
+ while (containerDescriptor != null) {
+ if (containerDescriptor instanceof PackageFragmentDescriptor || containerDescriptor instanceof ModuleDescriptor) {
+ break;
+ }
+
+ Name name = containerDescriptor.getName();
+ if (!name.isSpecial()) {
+ String identifier = name.getIdentifier();
+ containerText = containerText != null ? identifier + "." + containerText : identifier;
+ }
+
+ containerDescriptor = containerDescriptor.getContainingDeclaration();
+ }
+
+ return containerText != null ? containerText + "." + elementText : elementText;
+}
+
+ public static String renderNamedFunction(@NotNull FunctionDescriptor descriptor) {
DeclarationDescriptor descriptorForName = descriptor instanceof ConstructorDescriptor
? descriptor.getContainingDeclaration()
: descriptor;
diff --git a/idea/testData/hierarchy/calls/callees/kotlinAnonymousObject/KotlinAnonymousObject_verification.xml b/idea/testData/hierarchy/calls/callees/kotlinAnonymousObject/KotlinAnonymousObject_verification.xml
index 841f9011f96..dc67e81bfdc 100644
--- a/idea/testData/hierarchy/calls/callees/kotlinAnonymousObject/KotlinAnonymousObject_verification.xml
+++ b/idea/testData/hierarchy/calls/callees/kotlinAnonymousObject/KotlinAnonymousObject_verification.xml
@@ -1,10 +1,10 @@
+
+
+
+
-
-
-
-
diff --git a/idea/testData/hierarchy/calls/callees/kotlinFunction/KotlinFunction_verification.xml b/idea/testData/hierarchy/calls/callees/kotlinFunction/KotlinFunction_verification.xml
index c89544e03b0..f2ca0f4f543 100644
--- a/idea/testData/hierarchy/calls/callees/kotlinFunction/KotlinFunction_verification.xml
+++ b/idea/testData/hierarchy/calls/callees/kotlinFunction/KotlinFunction_verification.xml
@@ -1,14 +1,14 @@
-
-
-
+
-
-
+
+
+
+
-
-
+
+
diff --git a/idea/testData/hierarchy/calls/callees/kotlinLocalFunction/KotlinLocalFunction_verification.xml b/idea/testData/hierarchy/calls/callees/kotlinLocalFunction/KotlinLocalFunction_verification.xml
index 7b3c459a72e..39fecde44c2 100644
--- a/idea/testData/hierarchy/calls/callees/kotlinLocalFunction/KotlinLocalFunction_verification.xml
+++ b/idea/testData/hierarchy/calls/callees/kotlinLocalFunction/KotlinLocalFunction_verification.xml
@@ -6,14 +6,14 @@
-
+
+
+
+
-
-
-
diff --git a/idea/testData/hierarchy/calls/callers/kotlinClass/KotlinClass_verification.xml b/idea/testData/hierarchy/calls/callers/kotlinClass/KotlinClass_verification.xml
index a040ef387e8..4bb58ee5816 100644
--- a/idea/testData/hierarchy/calls/callers/kotlinClass/KotlinClass_verification.xml
+++ b/idea/testData/hierarchy/calls/callers/kotlinClass/KotlinClass_verification.xml
@@ -1,12 +1,12 @@
-
-
-
-
-
+
+
+
+
+
diff --git a/idea/testData/hierarchy/calls/callers/kotlinFunction/KotlinFunction_verification.xml b/idea/testData/hierarchy/calls/callers/kotlinFunction/KotlinFunction_verification.xml
index 6f0dd05218f..a217f227f31 100644
--- a/idea/testData/hierarchy/calls/callers/kotlinFunction/KotlinFunction_verification.xml
+++ b/idea/testData/hierarchy/calls/callers/kotlinFunction/KotlinFunction_verification.xml
@@ -5,8 +5,8 @@
+
-
diff --git a/idea/testData/hierarchy/calls/callers/kotlinFunctionNonCallUsages/KotlinFunctionNonCallUsages_verification.xml b/idea/testData/hierarchy/calls/callers/kotlinFunctionNonCallUsages/KotlinFunctionNonCallUsages_verification.xml
index a5143dd7a9d..e37845f103a 100644
--- a/idea/testData/hierarchy/calls/callers/kotlinFunctionNonCallUsages/KotlinFunctionNonCallUsages_verification.xml
+++ b/idea/testData/hierarchy/calls/callers/kotlinFunctionNonCallUsages/KotlinFunctionNonCallUsages_verification.xml
@@ -1,3 +1,3 @@
-
-
+
+
diff --git a/idea/testData/hierarchy/calls/callers/kotlinLocalClass/KotlinLocalClass_verification.xml b/idea/testData/hierarchy/calls/callers/kotlinLocalClass/KotlinLocalClass_verification.xml
index 514eb1c87de..1a16c6c1d58 100644
--- a/idea/testData/hierarchy/calls/callers/kotlinLocalClass/KotlinLocalClass_verification.xml
+++ b/idea/testData/hierarchy/calls/callers/kotlinLocalClass/KotlinLocalClass_verification.xml
@@ -1,6 +1,6 @@
-
-
-
-
+
+
+
+
diff --git a/idea/testData/hierarchy/calls/callers/kotlinLocalFunction/KotlinLocalFunction_verification.xml b/idea/testData/hierarchy/calls/callers/kotlinLocalFunction/KotlinLocalFunction_verification.xml
index affb0ea8dad..181309683f3 100644
--- a/idea/testData/hierarchy/calls/callers/kotlinLocalFunction/KotlinLocalFunction_verification.xml
+++ b/idea/testData/hierarchy/calls/callers/kotlinLocalFunction/KotlinLocalFunction_verification.xml
@@ -1,6 +1,6 @@
-
-
-
-
+
+
+
+
diff --git a/idea/testData/hierarchy/calls/callers/kotlinNestedClass/KotlinNestedClass_verification.xml b/idea/testData/hierarchy/calls/callers/kotlinNestedClass/KotlinNestedClass_verification.xml
index 4658419a1cb..2fd5633ea81 100644
--- a/idea/testData/hierarchy/calls/callers/kotlinNestedClass/KotlinNestedClass_verification.xml
+++ b/idea/testData/hierarchy/calls/callers/kotlinNestedClass/KotlinNestedClass_verification.xml
@@ -1,12 +1,12 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/idea/testData/hierarchy/calls/callers/kotlinNestedInnerClass/KotlinNestedInnerClass_verification.xml b/idea/testData/hierarchy/calls/callers/kotlinNestedInnerClass/KotlinNestedInnerClass_verification.xml
index 39c1dcbcab6..2fd5633ea81 100644
--- a/idea/testData/hierarchy/calls/callers/kotlinNestedInnerClass/KotlinNestedInnerClass_verification.xml
+++ b/idea/testData/hierarchy/calls/callers/kotlinNestedInnerClass/KotlinNestedInnerClass_verification.xml
@@ -1,12 +1,12 @@
-
-
-
+
-
+
+
-
-
+
+
+
diff --git a/idea/testData/hierarchy/calls/callers/kotlinPackageFunction/KotlinPackageFunction_verification.xml b/idea/testData/hierarchy/calls/callers/kotlinPackageFunction/KotlinPackageFunction_verification.xml
index 750da2bacb7..bc5d565ec44 100644
--- a/idea/testData/hierarchy/calls/callers/kotlinPackageFunction/KotlinPackageFunction_verification.xml
+++ b/idea/testData/hierarchy/calls/callers/kotlinPackageFunction/KotlinPackageFunction_verification.xml
@@ -1,11 +1,11 @@
-
-
+
-
-
+
+
+
diff --git a/idea/testData/hierarchy/calls/callers/kotlinPackageProperty/KotlinPackageProperty_verification.xml b/idea/testData/hierarchy/calls/callers/kotlinPackageProperty/KotlinPackageProperty_verification.xml
index 629adb569a3..cc5f0550703 100644
--- a/idea/testData/hierarchy/calls/callers/kotlinPackageProperty/KotlinPackageProperty_verification.xml
+++ b/idea/testData/hierarchy/calls/callers/kotlinPackageProperty/KotlinPackageProperty_verification.xml
@@ -5,7 +5,7 @@
+
-
diff --git a/idea/testData/hierarchy/calls/callers/kotlinProperty/KotlinProperty_verification.xml b/idea/testData/hierarchy/calls/callers/kotlinProperty/KotlinProperty_verification.xml
index 79eab2ec097..5c043b80d32 100644
--- a/idea/testData/hierarchy/calls/callers/kotlinProperty/KotlinProperty_verification.xml
+++ b/idea/testData/hierarchy/calls/callers/kotlinProperty/KotlinProperty_verification.xml
@@ -5,8 +5,8 @@
+
-