From ef66a1399ed92a73a64a2d1e07b0ece0b71e95c3 Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Fri, 7 Nov 2025 15:56:01 +0100 Subject: [PATCH] [kotlin] KTIJ-36371 Extract `AbstractSimplifiableCallChainInspection` base class so it can be extended to support `Flow` operations The rename is done on the original file for the git history preservation GitOrigin-RevId: d82eda61001910063ccd4527f7c65f435e219ab5 --- ...bstractSimplifiableCallChainInspection.kt} | 23 +++++-------------- 1 file changed, 6 insertions(+), 17 deletions(-) rename plugins/kotlin/code-insight/inspections-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/{SimplifiableCallChainInspection.kt => AbstractSimplifiableCallChainInspection.kt} (91%) diff --git a/plugins/kotlin/code-insight/inspections-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/SimplifiableCallChainInspection.kt b/plugins/kotlin/code-insight/inspections-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/AbstractSimplifiableCallChainInspection.kt similarity index 91% rename from plugins/kotlin/code-insight/inspections-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/SimplifiableCallChainInspection.kt rename to plugins/kotlin/code-insight/inspections-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/AbstractSimplifiableCallChainInspection.kt index c8cfa8215ae6..df0ed2e8ce9b 100644 --- a/plugins/kotlin/code-insight/inspections-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/SimplifiableCallChainInspection.kt +++ b/plugins/kotlin/code-insight/inspections-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/AbstractSimplifiableCallChainInspection.kt @@ -5,17 +5,7 @@ import com.intellij.codeInspection.ProblemsHolder import com.intellij.openapi.util.TextRange import org.jetbrains.kotlin.analysis.api.KaExperimentalApi import org.jetbrains.kotlin.analysis.api.KaSession -import org.jetbrains.kotlin.analysis.api.components.expressionType -import org.jetbrains.kotlin.analysis.api.components.functionTypeKind -import org.jetbrains.kotlin.analysis.api.components.isArrayOrPrimitiveArray -import org.jetbrains.kotlin.analysis.api.components.isDoubleType -import org.jetbrains.kotlin.analysis.api.components.isIntType -import org.jetbrains.kotlin.analysis.api.components.isLongType -import org.jetbrains.kotlin.analysis.api.components.isMarkedNullable -import org.jetbrains.kotlin.analysis.api.components.isSubtypeOf -import org.jetbrains.kotlin.analysis.api.components.isUIntType -import org.jetbrains.kotlin.analysis.api.components.isULongType -import org.jetbrains.kotlin.analysis.api.components.resolveToCall +import org.jetbrains.kotlin.analysis.api.components.* import org.jetbrains.kotlin.analysis.api.resolution.KaCallInfo import org.jetbrains.kotlin.analysis.api.resolution.successfulFunctionCallOrNull import org.jetbrains.kotlin.analysis.api.resolution.symbol @@ -29,7 +19,6 @@ import org.jetbrains.kotlin.analysis.api.types.KaType import org.jetbrains.kotlin.analysis.api.types.symbol import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.idea.base.projectStructure.languageVersionSettings -import org.jetbrains.kotlin.idea.base.resources.KotlinBundle import org.jetbrains.kotlin.idea.codeinsight.api.applicable.inspections.KotlinApplicableInspectionBase import org.jetbrains.kotlin.idea.codeinsight.api.applicable.inspections.KotlinModCommandQuickFix import org.jetbrains.kotlin.idea.codeinsight.api.applicators.ApplicabilityRange @@ -45,10 +34,10 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.anyDescendantOfType import org.jetbrains.kotlin.psi.psiUtil.lastBlockStatementOrThis -class SimplifiableCallChainInspection : KotlinApplicableInspectionBase.Simple() { - override fun getProblemDescription(element: KtQualifiedExpression, context: CallChainConversion): String { - return KotlinBundle.message("call.chain.on.collection.type.may.be.simplified") - } +internal abstract class AbstractSimplifiableCallChainInspection : KotlinApplicableInspectionBase.Simple() { + abstract override fun getProblemDescription(element: KtQualifiedExpression, context: CallChainConversion): String + + protected abstract val potentialConversions: Map> override fun createQuickFix( element: KtQualifiedExpression, @@ -108,7 +97,7 @@ class SimplifiableCallChainInspection : KotlinApplicableInspectionBase.Simple { val apiVersion by lazy { expression.languageVersionSettings.apiVersion } - return CallChainConversions.conversionGroups[conversionId]?.filter { conversion -> + return potentialConversions[conversionId]?.filter { conversion -> val replaceableApiVersion = conversion.replaceableApiVersion replaceableApiVersion == null || apiVersion >= replaceableApiVersion }?.sortedByDescending { it.removeNotNullAssertion }.orEmpty()