diff --git a/plugins/kotlin/code-insight/intentions-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/ConvertToStringTemplateInspection.kt b/plugins/kotlin/code-insight/inspections-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/ConvertToStringTemplateInspection.kt similarity index 89% rename from plugins/kotlin/code-insight/intentions-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/ConvertToStringTemplateInspection.kt rename to plugins/kotlin/code-insight/inspections-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/ConvertToStringTemplateInspection.kt index 900347bd8b39..1a33ef972639 100644 --- a/plugins/kotlin/code-insight/intentions-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/ConvertToStringTemplateInspection.kt +++ b/plugins/kotlin/code-insight/inspections-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/ConvertToStringTemplateInspection.kt @@ -21,11 +21,11 @@ import org.jetbrains.kotlin.psi.KtStringTemplateExpression import org.jetbrains.kotlin.psi.KtVisitorVoid internal class ConvertToStringTemplateInspection : - KotlinApplicableInspectionBase.Simple() { + KotlinApplicableInspectionBase.Simple() { override fun buildVisitor( - holder: ProblemsHolder, - isOnTheFly: Boolean, + holder: ProblemsHolder, + isOnTheFly: Boolean, ) = object : KtVisitorVoid() { override fun visitBinaryExpression(expression: KtBinaryExpression) { @@ -36,17 +36,17 @@ internal class ConvertToStringTemplateInspection : data class Context(val replacement: SmartPsiElementPointer) override fun createQuickFix( - element: KtBinaryExpression, - context: Context, + element: KtBinaryExpression, + context: Context, ): KotlinModCommandQuickFix = object : KotlinModCommandQuickFix() { override fun getFamilyName(): String = KotlinBundle.message("convert.concatenation.to.template") override fun applyFix( - project: Project, - element: KtBinaryExpression, - updater: ModPsiUpdater, + project: Project, + element: KtBinaryExpression, + updater: ModPsiUpdater, ) { context.replacement.element?.let { element.replaced(it) } } diff --git a/plugins/kotlin/code-insight/intentions-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/IntroduceWhenSubjectInspection.kt b/plugins/kotlin/code-insight/inspections-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/IntroduceWhenSubjectInspection.kt similarity index 86% rename from plugins/kotlin/code-insight/intentions-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/IntroduceWhenSubjectInspection.kt rename to plugins/kotlin/code-insight/inspections-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/IntroduceWhenSubjectInspection.kt index 7587b91c5e60..792b053908cd 100644 --- a/plugins/kotlin/code-insight/intentions-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/IntroduceWhenSubjectInspection.kt +++ b/plugins/kotlin/code-insight/inspections-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/IntroduceWhenSubjectInspection.kt @@ -19,29 +19,29 @@ import org.jetbrains.kotlin.psi.KtVisitorVoid import org.jetbrains.kotlin.psi.KtWhenExpression internal class IntroduceWhenSubjectInspection : - KotlinApplicableInspectionBase.Simple() { + KotlinApplicableInspectionBase.Simple() { override fun getProblemDescription( - element: KtWhenExpression, - context: String, + element: KtWhenExpression, + context: String, ): String = KotlinBundle.message("introduce.0.as.subject.0.when", context) override fun createQuickFix( - element: KtWhenExpression, - context: String, + element: KtWhenExpression, + context: String, ): KotlinModCommandQuickFix = object : KotlinModCommandQuickFix() { override fun applyFix( - project: Project, - element: KtWhenExpression, - updater: ModPsiUpdater, + project: Project, + element: KtWhenExpression, + updater: ModPsiUpdater, ) { val commentSaver = CommentSaver(element, true) // If we use the subject from 'prepareContext' phase we can't restore comments on the result element val subjectedExpression = analyze(element) { - val subject = element.getSubjectToIntroduce() ?: return - element.introduceSubjectIfPossible(subject) + val subject = element.getSubjectToIntroduce() ?: return + element.introduceSubjectIfPossible(subject) } val result = element.replace(subjectedExpression) @@ -53,8 +53,8 @@ internal class IntroduceWhenSubjectInspection : } override fun buildVisitor( - holder: ProblemsHolder, - isOnTheFly: Boolean, + holder: ProblemsHolder, + isOnTheFly: Boolean, ) = object : KtVisitorVoid() { override fun visitWhenExpression(expression: KtWhenExpression) { @@ -76,4 +76,4 @@ internal class IntroduceWhenSubjectInspection : val regularEntries = element.entries.filter { !it.isElse } return if (regularEntries.size < 2) ProblemHighlightType.INFORMATION else super.getProblemHighlightType(element, context) } -} +} \ No newline at end of file diff --git a/plugins/kotlin/code-insight/intentions-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/SimplifiableCallChainInspection.kt similarity index 78% rename from plugins/kotlin/code-insight/intentions-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/SimplifiableCallChainInspection.kt index dc501e278fb9..9b352e6aca95 100644 --- a/plugins/kotlin/code-insight/intentions-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/SimplifiableCallChainInspection.kt @@ -1,5 +1,4 @@ // Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. - package org.jetbrains.kotlin.idea.k2.codeinsight.inspections import com.intellij.codeInspection.ProblemsHolder @@ -23,30 +22,26 @@ 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.utils.getFqNameIfPackageOrNonLocal -import org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.* -import org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.CallChainConversions.ASSOCIATE -import org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.CallChainConversions.ASSOCIATE_TO -import org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.CallChainConversions.JOIN_TO -import org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.CallChainConversions.MAP -import org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.CallChainConversions.MAX -import org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.CallChainConversions.MAX_BY -import org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.CallChainConversions.MAX_BY_OR_NULL -import org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.CallChainConversions.MAX_OR_NULL -import org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.CallChainConversions.MIN -import org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.CallChainConversions.MIN_BY -import org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.CallChainConversions.MIN_BY_OR_NULL -import org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.CallChainConversions.MIN_OR_NULL -import org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.CallChainConversions.SUM -import org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.CallChainConversions.SUM_OF -import org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.CallChainConversions.TO_MAP +import org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.CallChainConversion +import org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.CallChainConversions +import org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.CallChainExpressions import org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.CallChainExpressions.Companion.isLiteralValue +import org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ConversionId +import org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.SimplifyCallChainFix import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.KtCallExpression +import org.jetbrains.kotlin.psi.KtExpression +import org.jetbrains.kotlin.psi.KtLambdaExpression +import org.jetbrains.kotlin.psi.KtPostfixExpression +import org.jetbrains.kotlin.psi.KtQualifiedExpression +import org.jetbrains.kotlin.psi.KtReturnExpression +import org.jetbrains.kotlin.psi.KtVisitor import org.jetbrains.kotlin.psi.psiUtil.anyDescendantOfType import org.jetbrains.kotlin.psi.psiUtil.lastBlockStatementOrThis +import org.jetbrains.kotlin.psi.qualifiedExpressionVisitor class SimplifiableCallChainInspection : KotlinApplicableInspectionBase.Simple() { override fun getProblemDescription(element: KtQualifiedExpression, context: CallChainConversion): String { @@ -54,29 +49,29 @@ class SimplifiableCallChainInspection : KotlinApplicableInspectionBase.Simple = SimplifyCallChainFix( - context, - modifyArguments = { callExpression -> - if (context.replacement.startsWith(JOIN_TO)) { - val lastArgument = callExpression.valueArgumentList?.arguments?.singleOrNull() - val argumentExpression = lastArgument?.getArgumentExpression() - if (argumentExpression != null) { - lastArgument.replace(createArgument(argumentExpression, Name.identifier("transform"))) - } - } + context, + modifyArguments = { callExpression -> + if (context.replacement.startsWith(CallChainConversions.JOIN_TO)) { + val lastArgument = callExpression.valueArgumentList?.arguments?.singleOrNull() + val argumentExpression = lastArgument?.getArgumentExpression() + if (argumentExpression != null) { + lastArgument.replace(createArgument(argumentExpression, Name.identifier("transform"))) + } } + } ) override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): KtVisitor<*, *> { return qualifiedExpressionVisitor { qualifiedExpression -> - visitTargetElement(qualifiedExpression, holder, isOnTheFly) + visitTargetElement(qualifiedExpression, holder, isOnTheFly) } } override fun isApplicableByPsi(element: KtQualifiedExpression): Boolean { - val callChainExpressions = CallChainExpressions.from(element) + val callChainExpressions = CallChainExpressions.Companion.from(element) if (callChainExpressions == null) return false // Do not apply for lambdas with return inside if (callChainExpressions.firstCallExpression.lambdaArguments.singleOrNull()?.anyDescendantOfType() == true) @@ -86,7 +81,7 @@ class SimplifiableCallChainInspection : KotlinApplicableInspectionBase.Simple type is KaClassType && type.classId == wantedType } + this is KaClassType && classId == wantedType || + allSupertypes.any { type -> type is KaClassType && type.classId == wantedType } context(KaSession) private fun KaCallInfo.isCalling(fqName: FqName): Boolean = @@ -249,7 +248,7 @@ class SimplifiableCallChainInspection : KotlinApplicableInspectionBase.Simple