diff --git a/idea/src/org/jetbrains/kotlin/idea/hierarchy/KotlinTypeHierarchyProvider.kt b/idea/src/org/jetbrains/kotlin/idea/hierarchy/KotlinTypeHierarchyProvider.kt
index 72735f115af..27d6a09a7a8 100644
--- a/idea/src/org/jetbrains/kotlin/idea/hierarchy/KotlinTypeHierarchyProvider.kt
+++ b/idea/src/org/jetbrains/kotlin/idea/hierarchy/KotlinTypeHierarchyProvider.kt
@@ -37,6 +37,7 @@ import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
import org.jetbrains.kotlin.idea.util.module
import org.jetbrains.kotlin.platform.JavaToKotlinClassMap
import org.jetbrains.kotlin.psi.KtClassOrObject
+import org.jetbrains.kotlin.psi.KtConstructor
import org.jetbrains.kotlin.psi.KtNamedFunction
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
import org.jetbrains.kotlin.renderer.DescriptorRenderer
@@ -66,6 +67,7 @@ class KotlinTypeHierarchyProvider : JavaTypeHierarchyProvider() {
return when (target) {
is PsiClass -> target
+ is KtConstructor<*> -> getOriginalPsiClassOrCreateLightClass(target.getContainingClassOrObject(), module)
is KtClassOrObject -> getOriginalPsiClassOrCreateLightClass(target, module)
is KtNamedFunction -> { // Factory methods
val functionName = target.name
diff --git a/idea/testData/hierarchy/class/sub/ConstructorCallCaretAfter/ConstructorCallCaretAfter_verification.xml b/idea/testData/hierarchy/class/sub/ConstructorCallCaretAfter/ConstructorCallCaretAfter_verification.xml
new file mode 100644
index 00000000000..10f8965bcd8
--- /dev/null
+++ b/idea/testData/hierarchy/class/sub/ConstructorCallCaretAfter/ConstructorCallCaretAfter_verification.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/idea/testData/hierarchy/class/sub/ConstructorCallCaretAfter/main.kt b/idea/testData/hierarchy/class/sub/ConstructorCallCaretAfter/main.kt
new file mode 100644
index 00000000000..9d8af7a4e16
--- /dev/null
+++ b/idea/testData/hierarchy/class/sub/ConstructorCallCaretAfter/main.kt
@@ -0,0 +1,4 @@
+open class A constructor(a: Int)
+
+class B: A(1)
+class C: A(1)
\ No newline at end of file
diff --git a/idea/testData/hierarchy/class/sub/ConstructorCallCaretBefore/ConstructorCallCaretBefore_verification.xml b/idea/testData/hierarchy/class/sub/ConstructorCallCaretBefore/ConstructorCallCaretBefore_verification.xml
new file mode 100644
index 00000000000..10f8965bcd8
--- /dev/null
+++ b/idea/testData/hierarchy/class/sub/ConstructorCallCaretBefore/ConstructorCallCaretBefore_verification.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/idea/testData/hierarchy/class/sub/ConstructorCallCaretBefore/main.kt b/idea/testData/hierarchy/class/sub/ConstructorCallCaretBefore/main.kt
new file mode 100644
index 00000000000..d23598adcf0
--- /dev/null
+++ b/idea/testData/hierarchy/class/sub/ConstructorCallCaretBefore/main.kt
@@ -0,0 +1,4 @@
+open class A constructor(a: Int)
+
+class B: A(1)
+class C: A(1)
\ No newline at end of file
diff --git a/idea/testData/hierarchy/class/sub/SecondaryConstructorCallCaretAfter/SecondaryConstructorCallCaretAfter_verification.xml b/idea/testData/hierarchy/class/sub/SecondaryConstructorCallCaretAfter/SecondaryConstructorCallCaretAfter_verification.xml
new file mode 100644
index 00000000000..10f8965bcd8
--- /dev/null
+++ b/idea/testData/hierarchy/class/sub/SecondaryConstructorCallCaretAfter/SecondaryConstructorCallCaretAfter_verification.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/idea/testData/hierarchy/class/sub/SecondaryConstructorCallCaretAfter/main.kt b/idea/testData/hierarchy/class/sub/SecondaryConstructorCallCaretAfter/main.kt
new file mode 100644
index 00000000000..c8fdd8d0a5b
--- /dev/null
+++ b/idea/testData/hierarchy/class/sub/SecondaryConstructorCallCaretAfter/main.kt
@@ -0,0 +1,6 @@
+open class A {
+ constructor(a: Int)
+}
+
+class B: A(1)
+class C: A(1)
\ No newline at end of file
diff --git a/idea/testData/hierarchy/class/sub/SecondaryConstructorCallCaretBefore/SecondaryConstructorCallCaretBefore_verification.xml b/idea/testData/hierarchy/class/sub/SecondaryConstructorCallCaretBefore/SecondaryConstructorCallCaretBefore_verification.xml
new file mode 100644
index 00000000000..10f8965bcd8
--- /dev/null
+++ b/idea/testData/hierarchy/class/sub/SecondaryConstructorCallCaretBefore/SecondaryConstructorCallCaretBefore_verification.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/idea/testData/hierarchy/class/sub/SecondaryConstructorCallCaretBefore/main.kt b/idea/testData/hierarchy/class/sub/SecondaryConstructorCallCaretBefore/main.kt
new file mode 100644
index 00000000000..07a2c5b73c2
--- /dev/null
+++ b/idea/testData/hierarchy/class/sub/SecondaryConstructorCallCaretBefore/main.kt
@@ -0,0 +1,6 @@
+open class A {
+ constructor(a: Int)
+}
+
+class B: A(1)
+class C: A(1)
\ 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 6fd63e8fcd1..4462e406a62 100644
--- a/idea/tests/org/jetbrains/kotlin/idea/hierarchy/HierarchyTestGenerated.java
+++ b/idea/tests/org/jetbrains/kotlin/idea/hierarchy/HierarchyTestGenerated.java
@@ -267,6 +267,18 @@ public class HierarchyTestGenerated extends AbstractHierarchyTest {
doSubClassHierarchyTest(fileName);
}
+ @TestMetadata("ConstructorCallCaretAfter")
+ public void testConstructorCallCaretAfter() throws Exception {
+ String fileName = KotlinTestUtils.navigationMetadata("idea/testData/hierarchy/class/sub/ConstructorCallCaretAfter/");
+ doSubClassHierarchyTest(fileName);
+ }
+
+ @TestMetadata("ConstructorCallCaretBefore")
+ public void testConstructorCallCaretBefore() throws Exception {
+ String fileName = KotlinTestUtils.navigationMetadata("idea/testData/hierarchy/class/sub/ConstructorCallCaretBefore/");
+ doSubClassHierarchyTest(fileName);
+ }
+
@TestMetadata("MultiTypeAlias")
public void testMultiTypeAlias() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/hierarchy/class/sub/MultiTypeAlias/");
@@ -285,6 +297,18 @@ public class HierarchyTestGenerated extends AbstractHierarchyTest {
doSubClassHierarchyTest(fileName);
}
+ @TestMetadata("SecondaryConstructorCallCaretAfter")
+ public void testSecondaryConstructorCallCaretAfter() throws Exception {
+ String fileName = KotlinTestUtils.navigationMetadata("idea/testData/hierarchy/class/sub/SecondaryConstructorCallCaretAfter/");
+ doSubClassHierarchyTest(fileName);
+ }
+
+ @TestMetadata("SecondaryConstructorCallCaretBefore")
+ public void testSecondaryConstructorCallCaretBefore() throws Exception {
+ String fileName = KotlinTestUtils.navigationMetadata("idea/testData/hierarchy/class/sub/SecondaryConstructorCallCaretBefore/");
+ doSubClassHierarchyTest(fileName);
+ }
+
@TestMetadata("TraitFromClass")
public void testTraitFromClass() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/hierarchy/class/sub/TraitFromClass/");