[kotlin] KTIJ-36967 change inspections type from DeprecationCollectingInspection to AbstractKotlinInspection

GitOrigin-RevId: 0714e44dc458ff576dd56d5252c250912816c5e6
This commit is contained in:
Anna Antonova
2026-01-28 16:36:28 +00:00
committed by intellij-monorepo-bot
parent 935d6f046e
commit 8a14a9cbb1
3 changed files with 17 additions and 39 deletions
@@ -22,9 +22,8 @@ import org.jetbrains.kotlin.analysis.api.symbols.*
import org.jetbrains.kotlin.idea.base.codeInsight.*
import org.jetbrains.kotlin.idea.base.projectStructure.languageVersionSettings
import org.jetbrains.kotlin.idea.base.resources.KotlinBundle
import org.jetbrains.kotlin.idea.codeinsight.api.classic.inspections.DeprecationCollectingInspection
import org.jetbrains.kotlin.idea.codeinsight.api.classic.inspections.AbstractKotlinInspection
import org.jetbrains.kotlin.idea.codeinsights.impl.base.isOptInRequired
import org.jetbrains.kotlin.idea.statistics.DeprecatedFeaturesInspectionData
import org.jetbrains.kotlin.idea.statistics.KotlinLanguageFeaturesFUSCollector
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.psi.*
@@ -35,10 +34,7 @@ import org.jetbrains.kotlin.psi.*
*
* See [KTIJ-22298](https://youtrack.jetbrains.com/issue/KTIJ-22298/Soft-deprecate-Enumvalues-for-Kotlin-callers).
*/
abstract class EnumValuesSoftDeprecateInspectionBase : DeprecationCollectingInspection<DeprecatedFeaturesInspectionData>(
collector = KotlinLanguageFeaturesFUSCollector.enumEntriesCollector,
defaultDeprecationData = DeprecatedFeaturesInspectionData()
) {
abstract class EnumValuesSoftDeprecateInspectionBase : AbstractKotlinInspection() {
protected open fun isEnumValuesSoftDeprecateEnabled(file: KtFile): Boolean = file.isEnumValuesSoftDeprecateEnabled()
@@ -59,7 +55,6 @@ abstract class EnumValuesSoftDeprecateInspectionBase : DeprecationCollectingInsp
return
}
val quickFix = createQuickFix(callExpression, resolvedCallSymbol) ?: return
session.updateDeprecationData { it.withDeprecatedFeature() }
holder.registerProblem(
callExpression,
displayName,
@@ -1,7 +1,6 @@
// 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.codeInsight.inspections.shared
import com.intellij.codeInspection.LocalInspectionToolSession
import com.intellij.codeInspection.LocalQuickFix
import com.intellij.codeInspection.ProblemDescriptor
import com.intellij.codeInspection.ProblemsHolder
@@ -10,32 +9,30 @@ 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.resources.KotlinBundle
import org.jetbrains.kotlin.idea.codeinsight.utils.RangeKtExpressionType
import org.jetbrains.kotlin.idea.codeInsight.inspections.shared.AbstractRangeInspection.Companion.rangeExpressionByPsi
import org.jetbrains.kotlin.idea.codeInsight.inspections.shared.utils.canUseRangeUntil
import org.jetbrains.kotlin.idea.codeinsight.api.classic.inspections.DeprecationCollectingInspection
import org.jetbrains.kotlin.idea.codeinsight.api.classic.inspections.AbstractKotlinInspection
import org.jetbrains.kotlin.idea.codeinsight.utils.RangeKtExpressionType
import org.jetbrains.kotlin.idea.statistics.KotlinLanguageFeaturesFUSCollector
import org.jetbrains.kotlin.idea.statistics.NewAndDeprecatedFeaturesInspectionData
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.*
class ReplaceUntilWithRangeUntilInspection : DeprecationCollectingInspection<NewAndDeprecatedFeaturesInspectionData>(
collector = KotlinLanguageFeaturesFUSCollector.rangeUntilCollector,
defaultDeprecationData = NewAndDeprecatedFeaturesInspectionData()
) {
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean, session: LocalInspectionToolSession): KtVisitorVoid =
class ReplaceUntilWithRangeUntilInspection : AbstractKotlinInspection() {
override fun buildVisitor(
holder: ProblemsHolder,
isOnTheFly: Boolean
): KtVisitorVoid =
object : KtVisitorVoid() {
override fun visitBinaryExpression(binaryExpression: KtBinaryExpression) {
visitRange(binaryExpression, holder, session)
visitRange(binaryExpression, holder)
}
override fun visitDotQualifiedExpression(expression: KtDotQualifiedExpression) {
visitRange(expression, holder, session)
visitRange(expression, holder)
}
}
private fun visitRange(expression: KtExpression, holder: ProblemsHolder, session: LocalInspectionToolSession) {
private fun visitRange(expression: KtExpression, holder: ProblemsHolder) {
val rangeExpression = rangeExpressionByPsi(expression) ?: return
analyze(expression) {
@@ -46,13 +43,6 @@ class ReplaceUntilWithRangeUntilInspection : DeprecationCollectingInspection<New
}
val rangeKtExpressionType = rangeExpression.type
session.updateDeprecationData {
when (rangeKtExpressionType) {
RangeKtExpressionType.UNTIL -> it.withDeprecatedFeature()
RangeKtExpressionType.RANGE_UNTIL -> it.withNewFeature()
else -> it
}
}
if (rangeKtExpressionType != RangeKtExpressionType.UNTIL) return
holder.registerProblem(
@@ -1,7 +1,6 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.kotlin.idea.inspections
import com.intellij.codeInspection.LocalInspectionToolSession
import com.intellij.codeInspection.LocalQuickFix
import com.intellij.codeInspection.ProblemDescriptor
import com.intellij.codeInspection.ProblemsHolder
@@ -21,7 +20,7 @@ import org.jetbrains.kotlin.idea.base.psi.singleExpressionBody
import org.jetbrains.kotlin.idea.base.resources.KotlinBundle
import org.jetbrains.kotlin.idea.base.utils.fqname.fqName
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.codeinsight.api.classic.inspections.DeprecationCollectingInspection
import org.jetbrains.kotlin.idea.codeinsight.api.classic.inspections.AbstractKotlinInspection
import org.jetbrains.kotlin.idea.core.resolveType
import org.jetbrains.kotlin.idea.inspections.CanSealedSubClassBeObjectInspection.Util.asKtClass
import org.jetbrains.kotlin.idea.inspections.VirtualFunction.*
@@ -29,7 +28,6 @@ import org.jetbrains.kotlin.idea.inspections.VirtualFunction.Function
import org.jetbrains.kotlin.idea.intentions.conventionNameCalls.*
import org.jetbrains.kotlin.idea.search.usagesSearch.descriptor
import org.jetbrains.kotlin.idea.statistics.KotlinLanguageFeaturesFUSCollector
import org.jetbrains.kotlin.idea.statistics.NewAndDeprecatedFeaturesInspectionData
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
@@ -48,18 +46,14 @@ private typealias CallChain = List<CallChainElement>
* Tests:
* [org.jetbrains.kotlin.idea.inspections.LocalInspectionTestGenerated.ConvertObjectToDataObject]
*/
class ConvertObjectToDataObjectInspection : DeprecationCollectingInspection<NewAndDeprecatedFeaturesInspectionData>(
collector = KotlinLanguageFeaturesFUSCollector.dataObjectCollector,
defaultDeprecationData = NewAndDeprecatedFeaturesInspectionData()
) {
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean, session: LocalInspectionToolSession): PsiElementVisitor =
if (holder.file.languageVersionSettings.supportsFeature(LanguageFeature.DataObjects)) ObjectVisitor(holder, session)
class ConvertObjectToDataObjectInspection : AbstractKotlinInspection() {
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor =
if (holder.file.languageVersionSettings.supportsFeature(LanguageFeature.DataObjects)) ObjectVisitor(holder)
else PsiElementVisitor.EMPTY_VISITOR
private inner class ObjectVisitor(private val holder: ProblemsHolder, private val session: LocalInspectionToolSession) : KtVisitorVoid() {
private class ObjectVisitor(private val holder: ProblemsHolder) : KtVisitorVoid() {
override fun visitObjectDeclaration(ktObject: KtObjectDeclaration) {
if (ktObject.isData()) {
session.updateDeprecationData { it.withNewFeature() }
return
}
if (ktObject.isCompanion() || ktObject.isObjectLiteral()) return
@@ -68,7 +62,6 @@ class ConvertObjectToDataObjectInspection : DeprecationCollectingInspection<NewA
val isSealedSubClassCase by lazy { toString == TrivialSuper && ktObject.isSubclassOfSealed() }
val isToStringCase by lazy { toString is Function && isCompatibleToString(ktObject, fqName, toString.function) }
if ((isSealedSubClassCase || isToStringCase) && isCompatibleHashCode(ktObject, fqName) && isCompatibleEquals(ktObject, fqName)) {
session.updateDeprecationData { it.withDeprecatedFeature() }
holder.registerProblem(
ktObject.getObjectKeyword() ?: return,
KotlinBundle.message(