From 19878779db5f1362334d686a4e7eef4bcdd239e4 Mon Sep 17 00:00:00 2001 From: Andrew Kozlov Date: Mon, 23 Jun 2025 19:34:05 +0200 Subject: [PATCH] [kotlin] KTIJ-33946 resolve session extracted GitOrigin-RevId: af64271b892a01a3eb25f5b673fac3cf4a7c799f --- .../ChangeToMutableCollectionFixFactories.kt | 16 ++++----- ...piciousCollectionReassignmentInspection.kt | 6 +--- .../MutableCollectionsConversionUtils.kt | 33 ++++++++++++------- 3 files changed, 29 insertions(+), 26 deletions(-) diff --git a/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/ChangeToMutableCollectionFixFactories.kt b/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/ChangeToMutableCollectionFixFactories.kt index 8ca54556a0ab..c6dcd8c2fd84 100644 --- a/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/ChangeToMutableCollectionFixFactories.kt +++ b/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/ChangeToMutableCollectionFixFactories.kt @@ -7,7 +7,6 @@ import com.intellij.modcommand.ModCommandAction import com.intellij.modcommand.ModPsiUpdater import com.intellij.modcommand.Presentation import org.jetbrains.kotlin.analysis.api.KaSession -import org.jetbrains.kotlin.analysis.api.analyze import org.jetbrains.kotlin.analysis.api.fir.diagnostics.KaFirDiagnostic import org.jetbrains.kotlin.analysis.api.types.KaClassType import org.jetbrains.kotlin.idea.base.resources.KotlinBundle @@ -72,15 +71,12 @@ object ChangeToMutableCollectionFixFactories { elementContext: ElementContext, updater: ModPsiUpdater, ) { - val initializer = element.initializer ?: return - analyze(initializer) { - MutableCollectionsConversionUtils.run { - convertPropertyTypeToMutable( - property = element, - immutableCollectionClassId = elementContext.immutableCollectionClassId, - ) - } - } + element.initializer ?: return + + MutableCollectionsConversionUtils.convertPropertyTypeToMutable( + property = element, + immutableCollectionClassId = elementContext.immutableCollectionClassId, + ) updater.moveCaretTo(element.endOffset) } } diff --git a/plugins/kotlin/code-insight/inspections-shared/src/org/jetbrains/kotlin/idea/codeInsight/inspections/shared/SuspiciousCollectionReassignmentInspection.kt b/plugins/kotlin/code-insight/inspections-shared/src/org/jetbrains/kotlin/idea/codeInsight/inspections/shared/SuspiciousCollectionReassignmentInspection.kt index e95f5b5924dd..33e7ed0fefac 100644 --- a/plugins/kotlin/code-insight/inspections-shared/src/org/jetbrains/kotlin/idea/codeInsight/inspections/shared/SuspiciousCollectionReassignmentInspection.kt +++ b/plugins/kotlin/code-insight/inspections-shared/src/org/jetbrains/kotlin/idea/codeInsight/inspections/shared/SuspiciousCollectionReassignmentInspection.kt @@ -97,11 +97,7 @@ class SuspiciousCollectionReassignmentInspection : AbstractKotlinInspection() { val property = left.mainReference?.resolve() as? KtProperty ?: return val psiFactory = KtPsiFactory(project) - analyze(property) { - MutableCollectionsConversionUtils.run { - convertPropertyTypeToMutable(property, immutableCollectionClassId, psiFactory) - } - } + MutableCollectionsConversionUtils.convertPropertyTypeToMutable(property, immutableCollectionClassId, psiFactory) property.valOrVarKeyword.replace(psiFactory.createValKeyword()) updater.moveCaretTo(property.endOffset) } diff --git a/plugins/kotlin/code-insight/utils/src/org/jetbrains/kotlin/idea/codeinsight/utils/MutableCollectionsConversionUtils.kt b/plugins/kotlin/code-insight/utils/src/org/jetbrains/kotlin/idea/codeinsight/utils/MutableCollectionsConversionUtils.kt index 6df549cf7d7f..9acd6eaedcdc 100644 --- a/plugins/kotlin/code-insight/utils/src/org/jetbrains/kotlin/idea/codeinsight/utils/MutableCollectionsConversionUtils.kt +++ b/plugins/kotlin/code-insight/utils/src/org/jetbrains/kotlin/idea/codeinsight/utils/MutableCollectionsConversionUtils.kt @@ -1,7 +1,7 @@ // 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.analysis.api.KaSession +import org.jetbrains.kotlin.analysis.api.analyze import org.jetbrains.kotlin.analysis.api.resolution.singleFunctionCallOrNull import org.jetbrains.kotlin.analysis.api.resolution.symbol import org.jetbrains.kotlin.idea.base.psi.replaced @@ -27,21 +27,32 @@ object MutableCollectionsConversionUtils { return property.isLocal && property.initializer != null } - fun KaSession.convertPropertyTypeToMutable( + private fun mutableCallableName( + initializer: KtExpression, + ): String? { + val fqName = analyze(initializer) { + initializer.resolveToCall() + ?.singleFunctionCallOrNull() + ?.symbol + ?.callableId + }?.asSingleFqName() + + return mutableConversionMap[fqName?.asString()] + } + + fun convertPropertyTypeToMutable( property: KtDeclarationWithInitializer, immutableCollectionClassId: ClassId, psiFactory: KtPsiFactory = KtPsiFactory(property.project), ) { val initializer = property.initializer ?: return - val fqName = initializer.resolveToCall() - ?.singleFunctionCallOrNull() - ?.symbol - ?.callableId - ?.asSingleFqName() - ?.asString() - val mutableOf = mutableConversionMap[fqName] - if (mutableOf != null) { - (initializer as? KtCallExpression)?.calleeExpression?.replaced(psiFactory.createExpression(mutableOf)) ?: return + + val mutableCallableName = mutableCallableName(initializer) + if (mutableCallableName != null) { + (initializer as? KtCallExpression) + ?.calleeExpression + ?.replaced(psiFactory.createExpression(mutableCallableName)) + ?: return } else { val toMutable = when (immutableCollectionClassId) { StandardClassIds.List -> "toMutableList"