Minor: refactoring InsertExplicitTypeArgumentIntention
This commit is contained in:
+10
-7
@@ -20,8 +20,8 @@ import com.intellij.codeInsight.intention.LowPriorityAction
|
|||||||
import com.intellij.openapi.editor.Editor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.intellij.openapi.util.TextRange
|
import com.intellij.openapi.util.TextRange
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
|
||||||
import org.jetbrains.kotlin.idea.core.ShortenReferences
|
import org.jetbrains.kotlin.idea.core.ShortenReferences
|
||||||
|
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
||||||
import org.jetbrains.kotlin.psi.KtCallElement
|
import org.jetbrains.kotlin.psi.KtCallElement
|
||||||
import org.jetbrains.kotlin.psi.KtCallExpression
|
import org.jetbrains.kotlin.psi.KtCallExpression
|
||||||
import org.jetbrains.kotlin.psi.KtPsiFactory
|
import org.jetbrains.kotlin.psi.KtPsiFactory
|
||||||
@@ -31,16 +31,17 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
|||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||||
import org.jetbrains.kotlin.types.ErrorUtils
|
import org.jetbrains.kotlin.types.ErrorUtils
|
||||||
|
|
||||||
class InsertExplicitTypeArgumentsIntention : SelfTargetingRangeIntention<KtCallExpression>(KtCallExpression::class.java, "Add explicit type arguments"), LowPriorityAction {
|
class InsertExplicitTypeArgumentsIntention :
|
||||||
|
SelfTargetingRangeIntention<KtCallExpression>(KtCallExpression::class.java, "Add explicit type arguments"), LowPriorityAction {
|
||||||
override fun applicabilityRange(element: KtCallExpression): TextRange? {
|
override fun applicabilityRange(element: KtCallExpression): TextRange? {
|
||||||
return if (isApplicableTo(element, element.analyze())) element.calleeExpression!!.textRange else null
|
return if (isApplicableTo(element, element.analyze())) element.calleeExpression?.textRange else null
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun applyTo(element: KtCallExpression, editor: Editor?) = applyTo(element)
|
override fun applyTo(element: KtCallExpression, editor: Editor?) = applyTo(element)
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun isApplicableTo(element: KtCallElement, bindingContext: BindingContext = element.analyze(BodyResolveMode.PARTIAL)): Boolean {
|
fun isApplicableTo(element: KtCallElement, bindingContext: BindingContext = element.analyze(BodyResolveMode.PARTIAL)): Boolean {
|
||||||
if (!element.typeArguments.isEmpty()) return false
|
if (element.typeArguments.isNotEmpty()) return false
|
||||||
if (element.calleeExpression == null) return false
|
if (element.calleeExpression == null) return false
|
||||||
|
|
||||||
val resolvedCall = element.getResolvedCall(bindingContext) ?: return false
|
val resolvedCall = element.getResolvedCall(bindingContext) ?: return false
|
||||||
@@ -49,9 +50,9 @@ class InsertExplicitTypeArgumentsIntention : SelfTargetingRangeIntention<KtCallE
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun applyTo(element: KtCallElement, shortenReferences: Boolean = true) {
|
fun applyTo(element: KtCallElement, shortenReferences: Boolean = true) {
|
||||||
val argumentList = createTypeArguments(element, element.analyze())!!
|
val argumentList = createTypeArguments(element, element.analyze()) ?: return
|
||||||
|
|
||||||
val callee = element.calleeExpression!!
|
val callee = element.calleeExpression ?: return
|
||||||
val newArgumentList = element.addAfter(argumentList, callee) as KtTypeArgumentList
|
val newArgumentList = element.addAfter(argumentList, callee) as KtTypeArgumentList
|
||||||
|
|
||||||
if (shortenReferences) {
|
if (shortenReferences) {
|
||||||
@@ -65,7 +66,9 @@ class InsertExplicitTypeArgumentsIntention : SelfTargetingRangeIntention<KtCallE
|
|||||||
val args = resolvedCall.typeArguments
|
val args = resolvedCall.typeArguments
|
||||||
val types = resolvedCall.candidateDescriptor.typeParameters
|
val types = resolvedCall.candidateDescriptor.typeParameters
|
||||||
|
|
||||||
val text = types.joinToString(", ", "<", ">") { IdeDescriptorRenderers.SOURCE_CODE.renderType(args[it]!!) }
|
val text = types.joinToString(", ", "<", ">") {
|
||||||
|
IdeDescriptorRenderers.SOURCE_CODE.renderType(args.getValue(it))
|
||||||
|
}
|
||||||
|
|
||||||
return KtPsiFactory(element).createTypeArguments(text)
|
return KtPsiFactory(element).createTypeArguments(text)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user