mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[kotlin] KTIJ-33946 resolve session extracted
GitOrigin-RevId: af64271b892a01a3eb25f5b673fac3cf4a7c799f
This commit is contained in:
committed by
intellij-monorepo-bot
parent
c32933505a
commit
19878779db
+6
-10
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-5
@@ -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)
|
||||
}
|
||||
|
||||
+22
-11
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user