Add KotlinClassConstructorInfoHandler for showing parameter info of parameterized super class constructor.
^KT-41617 Fixed
This commit is contained in:
committed by
Vladimir Dolzhenko
parent
d674f519fd
commit
01143f24a4
@@ -380,6 +380,7 @@
|
||||
<codeInsight.parameterInfo language="kotlin" implementationClass="org.jetbrains.kotlin.idea.parameterInfo.KotlinArrayAccessParameterInfoHandler"/>
|
||||
<codeInsight.parameterInfo language="kotlin" implementationClass="org.jetbrains.kotlin.idea.parameterInfo.KotlinClassTypeArgumentInfoHandler"/>
|
||||
<codeInsight.parameterInfo language="kotlin" implementationClass="org.jetbrains.kotlin.idea.parameterInfo.KotlinFunctionTypeArgumentInfoHandler"/>
|
||||
<codeInsight.parameterInfo language="kotlin" implementationClass="org.jetbrains.kotlin.idea.parameterInfo.KotlinClassConstructorInfoHandler"/>
|
||||
<codeInsight.parameterNameHints language="kotlin" implementationClass="org.jetbrains.kotlin.idea.codeInsight.hints.KotlinInlayParameterHintsProvider"/>
|
||||
|
||||
<codeInsight.inlayProvider language="kotlin" implementationClass="org.jetbrains.kotlin.idea.codeInsight.hints.KotlinReferencesTypeHintsProvider"/>
|
||||
|
||||
@@ -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<ClassConstructorDescriptor>() {
|
||||
override fun fetchTypeParameters(descriptor: ClassConstructorDescriptor): List<TypeParameterDescriptor> = descriptor.typeParameters
|
||||
|
||||
override fun findParameterOwners(argumentList: KtTypeArgumentList): Collection<ClassConstructorDescriptor>? {
|
||||
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<ClassDescriptor>() {
|
||||
override fun fetchTypeParameters(descriptor: ClassDescriptor) = descriptor.typeConstructor.parameters
|
||||
|
||||
override fun findParameterOwners(argumentList: KtTypeArgumentList): Collection<ClassDescriptor>? {
|
||||
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)
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
open class Parameterized<A, C: Cloneable, R: Runnable>
|
||||
|
||||
class AC
|
||||
class CC : Cloneable
|
||||
class RC : Runnable {
|
||||
override fun run() {}
|
||||
}
|
||||
|
||||
class UsageClass : Parameterized<AC, CC<caret>, RC>()
|
||||
|
||||
//Text: (A, <highlight>C : Cloneable</highlight>, R : Runnable), Disabled: false, Strikeout: false, Green: false
|
||||
+5
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user