[kotlin] Introduce ConvertLambdaToReferenceUtils

to share functions that don't require analysis between K1 and K2 implementations of ConvertLambdaToReferenceIntention.

^KTIJ-27702

GitOrigin-RevId: 2fb69984b9e79766e1a9ce1513291515586da60f
This commit is contained in:
Andrey Cherkasov
2024-03-01 11:42:10 +04:00
committed by intellij-monorepo-bot
parent e291b8e056
commit 4c8ffda004
2 changed files with 24 additions and 11 deletions

View File

@@ -0,0 +1,20 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.kotlin.idea.codeinsight.utils
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
import org.jetbrains.kotlin.renderer.render
object ConvertLambdaToReferenceUtils {
fun KtCallExpression.getCallReferencedName(): String? =
(calleeExpression as? KtNameReferenceExpression)?.getSafeReferencedName()
fun KtNameReferenceExpression.getSafeReferencedName(): String = getReferencedNameAsName().render()
fun KtLambdaExpression.singleStatementOrNull(): KtExpression? = bodyExpression?.statements?.singleOrNull()
fun KtLambdaExpression.isArgument(): Boolean {
return this === getStrictParentOfType<KtValueArgument>()?.getArgumentExpression()?.let(KtPsiUtil::safeDeparenthesize)
}
}

View File

@@ -16,6 +16,10 @@ import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall
import org.jetbrains.kotlin.idea.caches.resolve.safeAnalyzeNonSourceRootCode
import org.jetbrains.kotlin.idea.codeinsight.api.classic.inspections.IntentionBasedInspection
import org.jetbrains.kotlin.idea.codeinsight.api.classic.intentions.SelfTargetingOffsetIndependentIntention
import org.jetbrains.kotlin.idea.codeinsight.utils.ConvertLambdaToReferenceUtils.getCallReferencedName
import org.jetbrains.kotlin.idea.codeinsight.utils.ConvertLambdaToReferenceUtils.getSafeReferencedName
import org.jetbrains.kotlin.idea.codeinsight.utils.ConvertLambdaToReferenceUtils.isArgument
import org.jetbrains.kotlin.idea.codeinsight.utils.ConvertLambdaToReferenceUtils.singleStatementOrNull
import org.jetbrains.kotlin.idea.core.ShortenReferences
import org.jetbrains.kotlin.idea.core.setType
import org.jetbrains.kotlin.idea.imports.importableFqName
@@ -33,7 +37,6 @@ import org.jetbrains.kotlin.psi.psiUtil.getPossiblyQualifiedCallExpression
import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelectorOrThis
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
import org.jetbrains.kotlin.psi2ir.deparenthesize
import org.jetbrains.kotlin.renderer.render
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.BindingContext.FUNCTION
import org.jetbrains.kotlin.resolve.BindingContext.REFERENCE_TARGET
@@ -450,16 +453,6 @@ private fun KtLambdaExpression.parentValueArgument(): KtValueArgument? {
} as? KtValueArgument
}
private fun KtCallExpression.getCallReferencedName(): String? =
(calleeExpression as? KtNameReferenceExpression)?.getSafeReferencedName()
private fun KtNameReferenceExpression.getSafeReferencedName(): String = getReferencedNameAsName().render()
private fun KtLambdaExpression.singleStatementOrNull(): KtExpression? = bodyExpression?.statements?.singleOrNull()
private fun KtLambdaExpression.isArgument(): Boolean =
this === getStrictParentOfType<KtValueArgument>()?.getArgumentExpression()?.deparenthesize()
private fun KtNameReferenceExpression.renderTargetReceiverType(
context: BindingContext,
resolvedCall: ResolvedCall<out CallableDescriptor>? = null