diff --git a/idea/src/org/jetbrains/kotlin/idea/hierarchy/HierarchyUtils.java b/idea/src/org/jetbrains/kotlin/idea/hierarchy/HierarchyUtils.java index 9985517735f..ed8de18334e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/hierarchy/HierarchyUtils.java +++ b/idea/src/org/jetbrains/kotlin/idea/hierarchy/HierarchyUtils.java @@ -26,10 +26,7 @@ import com.intellij.util.ArrayUtil; import kotlin.Function1; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.idea.util.ProjectRootsUtil; -import org.jetbrains.kotlin.psi.JetClassOrObject; -import org.jetbrains.kotlin.psi.JetFile; -import org.jetbrains.kotlin.psi.JetNamedFunction; -import org.jetbrains.kotlin.psi.JetProperty; +import org.jetbrains.kotlin.psi.*; import org.jetbrains.kotlin.psi.psiUtil.PsiUtilPackage; public class HierarchyUtils { @@ -40,6 +37,7 @@ public class HierarchyUtils { input instanceof PsiClass || input instanceof JetFile || input instanceof JetNamedFunction || + input instanceof JetSecondaryConstructor || input instanceof JetClassOrObject || input instanceof JetProperty; } 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 952f11a9a4a..ebf0f9351e7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallHierarchyNodeDescriptor.java +++ b/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallHierarchyNodeDescriptor.java @@ -36,10 +36,7 @@ import com.intellij.ui.LayeredIcon; import com.intellij.util.Function; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.descriptors.ClassDescriptor; -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor; -import org.jetbrains.kotlin.descriptors.FunctionDescriptor; -import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor; +import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.idea.caches.resolve.ResolvePackage; import org.jetbrains.kotlin.psi.*; import org.jetbrains.kotlin.renderer.DescriptorRenderer; @@ -188,7 +185,7 @@ public class KotlinCallHierarchyNodeDescriptor extends HierarchyNodeDescriptor i } } } - else if (element instanceof JetNamedFunction) { + else if (element instanceof JetNamedFunction || element instanceof JetSecondaryConstructor) { elementText = renderNamedFunction((FunctionDescriptor) descriptor); } else if (element instanceof JetProperty) { @@ -213,7 +210,10 @@ public class KotlinCallHierarchyNodeDescriptor extends HierarchyNodeDescriptor i } private static String renderNamedFunction(FunctionDescriptor descriptor) { - String name = descriptor.getName().asString(); + DeclarationDescriptor descriptorForName = descriptor instanceof ConstructorDescriptor + ? descriptor.getContainingDeclaration() + : descriptor; + String name = descriptorForName.getName().asString(); String paramTypes = StringUtil.join( descriptor.getValueParameters(), new Function() { diff --git a/idea/testData/hierarchy/calls/callers/javaConstructor/JavaConstructor_verification.xml b/idea/testData/hierarchy/calls/callers/javaConstructor/JavaConstructor_verification.xml index 03cdfc440b0..cb7b9cda07b 100644 --- a/idea/testData/hierarchy/calls/callers/javaConstructor/JavaConstructor_verification.xml +++ b/idea/testData/hierarchy/calls/callers/javaConstructor/JavaConstructor_verification.xml @@ -1,7 +1,10 @@ - + + + + diff --git a/idea/testData/hierarchy/calls/callers/javaConstructor/main1.kt b/idea/testData/hierarchy/calls/callers/javaConstructor/main1.kt index 9317baf5b79..bd7efb9ad49 100644 --- a/idea/testData/hierarchy/calls/callers/javaConstructor/main1.kt +++ b/idea/testData/hierarchy/calls/callers/javaConstructor/main1.kt @@ -1,7 +1,19 @@ -open class JA() { +open class JA: KA { + constructor() { + + } + + constructor(a: Int): super() { + + } + public var name: String = KA().getName() public open fun newKA(): KA? { return KA() } } + +class JA2: KA() { + +} \ No newline at end of file diff --git a/idea/testData/hierarchy/calls/callers/kotlinSecondaryConstructor/KotlinSecondaryConstructor_verification.xml b/idea/testData/hierarchy/calls/callers/kotlinSecondaryConstructor/KotlinSecondaryConstructor_verification.xml new file mode 100644 index 00000000000..e48304a8333 --- /dev/null +++ b/idea/testData/hierarchy/calls/callers/kotlinSecondaryConstructor/KotlinSecondaryConstructor_verification.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/idea/testData/hierarchy/calls/callers/kotlinSecondaryConstructor/main0.kt b/idea/testData/hierarchy/calls/callers/kotlinSecondaryConstructor/main0.kt new file mode 100644 index 00000000000..6127ec14c37 --- /dev/null +++ b/idea/testData/hierarchy/calls/callers/kotlinSecondaryConstructor/main0.kt @@ -0,0 +1,23 @@ +open class B { + constructor(): this("") { + + } + + constructor(s: String) { + + } +} + +open class A : B { + constructor(a: Int) : super("") { + + } +} + +class C: B("") { + +} + +fun test() { + B("") +} \ No newline at end of file diff --git a/idea/testData/hierarchy/calls/callers/kotlinSecondaryConstructor/main1.java b/idea/testData/hierarchy/calls/callers/kotlinSecondaryConstructor/main1.java new file mode 100644 index 00000000000..deedfb206d3 --- /dev/null +++ b/idea/testData/hierarchy/calls/callers/kotlinSecondaryConstructor/main1.java @@ -0,0 +1,9 @@ +class JJ extends B { + JJ() { + super(""); + } + + static void test() { + new B(""); + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/hierarchy/HierarchyTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/hierarchy/HierarchyTestGenerated.java index b852d256a9d..7bbccb729d8 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/hierarchy/HierarchyTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/hierarchy/HierarchyTestGenerated.java @@ -391,6 +391,12 @@ public class HierarchyTestGenerated extends AbstractHierarchyTest { doCallerHierarchyTest(fileName); } + @TestMetadata("kotlinSecondaryConstructor") + public void testKotlinSecondaryConstructor() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/hierarchy/calls/callers/kotlinSecondaryConstructor/"); + doCallerHierarchyTest(fileName); + } + @TestMetadata("kotlinUnresolvedFunction") public void testKotlinUnresolvedFunction() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/hierarchy/calls/callers/kotlinUnresolvedFunction/");