diff --git a/idea/resources/META-INF/plugin-common.xml b/idea/resources/META-INF/plugin-common.xml
index 74ba5f2ca79..5177fed0af4 100644
--- a/idea/resources/META-INF/plugin-common.xml
+++ b/idea/resources/META-INF/plugin-common.xml
@@ -380,6 +380,7 @@
+
diff --git a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinTypeArgumentInfoHandler.kt b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinTypeArgumentInfoHandler.kt
index 59459bcecdb..f498bac01f1 100644
--- a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinTypeArgumentInfoHandler.kt
+++ b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinTypeArgumentInfoHandler.kt
@@ -18,10 +18,7 @@ package org.jetbrains.kotlin.idea.parameterInfo
import com.intellij.codeInsight.lookup.LookupElement
import com.intellij.lang.parameterInfo.*
-import org.jetbrains.kotlin.descriptors.ClassDescriptor
-import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
-import org.jetbrains.kotlin.descriptors.FunctionDescriptor
-import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
+import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
import org.jetbrains.kotlin.idea.core.resolveCandidates
@@ -40,12 +37,25 @@ import org.jetbrains.kotlin.types.typeUtil.TypeNullability
import org.jetbrains.kotlin.types.typeUtil.isAnyOrNullableAny
import org.jetbrains.kotlin.types.typeUtil.nullability
+class KotlinClassConstructorInfoHandler : KotlinTypeArgumentInfoHandlerBase() {
+ override fun fetchTypeParameters(descriptor: ClassConstructorDescriptor): List = descriptor.typeParameters
+
+ override fun findParameterOwners(argumentList: KtTypeArgumentList): Collection? {
+ val userType = argumentList.parent as? KtUserType ?: return null
+ val descriptors = userType.referenceExpression?.resolveMainReferenceToDescriptors()?.mapNotNull { it as? ClassConstructorDescriptor }
+ return descriptors?.takeIf { it.isNotEmpty() }
+ }
+
+ override fun getArgumentListAllowedParentClasses() = setOf(KtUserType::class.java)
+}
+
class KotlinClassTypeArgumentInfoHandler : KotlinTypeArgumentInfoHandlerBase() {
override fun fetchTypeParameters(descriptor: ClassDescriptor) = descriptor.typeConstructor.parameters
override fun findParameterOwners(argumentList: KtTypeArgumentList): Collection? {
val userType = argumentList.parent as? KtUserType ?: return null
- return userType.referenceExpression?.resolveMainReferenceToDescriptors()?.mapNotNull { it as? ClassDescriptor }
+ val descriptors = userType.referenceExpression?.resolveMainReferenceToDescriptors()?.mapNotNull { it as? ClassDescriptor }
+ return descriptors?.takeIf { it.isNotEmpty() }
}
override fun getArgumentListAllowedParentClasses() = setOf(KtUserType::class.java)
diff --git a/idea/testData/parameterInfo/typeArguments/ParameterizedClassConstructor.kt b/idea/testData/parameterInfo/typeArguments/ParameterizedClassConstructor.kt
new file mode 100644
index 00000000000..9a774f435b0
--- /dev/null
+++ b/idea/testData/parameterInfo/typeArguments/ParameterizedClassConstructor.kt
@@ -0,0 +1,11 @@
+open class Parameterized
+
+class AC
+class CC : Cloneable
+class RC : Runnable {
+ override fun run() {}
+}
+
+class UsageClass : Parameterized, RC>()
+
+//Text: (A, C : Cloneable, R : Runnable), Disabled: false, Strikeout: false, Green: false
\ No newline at end of file
diff --git a/idea/tests/org/jetbrains/kotlin/idea/parameterInfo/ParameterInfoTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/parameterInfo/ParameterInfoTestGenerated.java
index 52a309379a0..6fb932ee3d2 100644
--- a/idea/tests/org/jetbrains/kotlin/idea/parameterInfo/ParameterInfoTestGenerated.java
+++ b/idea/tests/org/jetbrains/kotlin/idea/parameterInfo/ParameterInfoTestGenerated.java
@@ -444,6 +444,11 @@ public class ParameterInfoTestGenerated extends AbstractParameterInfoTest {
runTest("idea/testData/parameterInfo/typeArguments/Overloads.kt");
}
+ @TestMetadata("ParameterizedClassConstructor.kt")
+ public void testParameterizedClassConstructor() throws Exception {
+ runTest("idea/testData/parameterInfo/typeArguments/ParameterizedClassConstructor.kt");
+ }
+
@TestMetadata("Reified.kt")
public void testReified() throws Exception {
runTest("idea/testData/parameterInfo/typeArguments/Reified.kt");