[kotlin] KTIJ-36967 AbstractRangeInspection is also an AbstractKotlinInspection, remove DeprecationCollectingInspection

GitOrigin-RevId: 4b0c5f0f41940ba1880bec7b1c4cb063cacb9f2d
This commit is contained in:
Anna Antonova
2026-01-28 16:36:28 +00:00
committed by intellij-monorepo-bot
parent 8a14a9cbb1
commit 1e691cdf63
2 changed files with 10 additions and 65 deletions
@@ -1,51 +0,0 @@
// Copyright 2000-2023 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.api.classic.inspections
import com.intellij.codeInspection.LocalInspectionToolSession
import com.intellij.codeInspection.ProblemsHolder
import com.intellij.openapi.util.Key
import com.intellij.psi.PsiFile
import org.jetbrains.kotlin.idea.base.projectStructure.languageVersionSettings
import org.jetbrains.kotlin.idea.statistics.InspectionData
import org.jetbrains.kotlin.idea.statistics.LanguageFeatureDeprecationCollector
/**
* An inspection that can produce deprecation data about the code it is operating on.
* The [defaultDeprecationData] needs to be provided for the functionality to function,
* but it can be left null to disable any statistics from being gathered or collected.
*/
abstract class DeprecationCollectingInspection<T : InspectionData>(
private val collector: LanguageFeatureDeprecationCollector<T>? = null,
private val defaultDeprecationData: T? = null
) : AbstractKotlinInspection() {
private val deprecationDataKey = Key.create<T>("deprecation_data")
private val LocalInspectionToolSession.deprecationData
get() = getUserData(deprecationDataKey)
private fun LocalInspectionToolSession.isFullInspection(): Boolean {
return priorityRange == file.textRange && restrictRange == file.textRange
}
protected fun LocalInspectionToolSession.updateDeprecationData(f: (T) -> T) {
val existingData = deprecationData ?: return
putUserData(deprecationDataKey, f(existingData))
}
override fun inspectionStarted(session: LocalInspectionToolSession, isOnTheFly: Boolean) {
if (!session.isFullInspection()) return
defaultDeprecationData?.let {
session.putUserData(deprecationDataKey, it)
}
}
override fun inspectionFinished(session: LocalInspectionToolSession, problemsHolder: ProblemsHolder) {
if (!session.isFullInspection()) return
val data = session.deprecationData ?: defaultDeprecationData ?: return
reportDeprecationData(data, problemsHolder.file)
}
open fun reportDeprecationData(inspectionData: T, file: PsiFile) {
collector?.logInspectionUpdated(file, inspectionData, file.languageVersionSettings.languageVersion)
}
}
@@ -5,10 +5,8 @@ package org.jetbrains.kotlin.idea.inspections
import com.intellij.codeInspection.LocalInspectionToolSession
import com.intellij.codeInspection.ProblemsHolder
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.codeinsight.api.classic.inspections.AbstractKotlinInspection
import org.jetbrains.kotlin.idea.codeinsight.utils.RangeKtExpressionType
import org.jetbrains.kotlin.idea.codeinsight.api.classic.inspections.DeprecationCollectingInspection
import org.jetbrains.kotlin.idea.statistics.LanguageFeatureDeprecationCollector
import org.jetbrains.kotlin.idea.statistics.NewAndDeprecatedFeaturesInspectionData
import org.jetbrains.kotlin.idea.util.getRangeBinaryExpressionType
import org.jetbrains.kotlin.psi.KtBinaryExpression
import org.jetbrains.kotlin.psi.KtDotQualifiedExpression
@@ -20,19 +18,17 @@ import org.jetbrains.kotlin.resolve.constants.ConstantValue
import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
abstract class AbstractRangeInspection(
collector: LanguageFeatureDeprecationCollector<NewAndDeprecatedFeaturesInspectionData>? = null,
defaultDeprecationData: NewAndDeprecatedFeaturesInspectionData? = null
) : DeprecationCollectingInspection<NewAndDeprecatedFeaturesInspectionData>(collector, defaultDeprecationData) {
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean, session: LocalInspectionToolSession) = object : KtVisitorVoid() {
override fun visitBinaryExpression(binaryExpression: KtBinaryExpression) {
visitRange(binaryExpression, holder, session)
}
abstract class AbstractRangeInspection : AbstractKotlinInspection() {
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean, session: LocalInspectionToolSession): KtVisitorVoid =
object : KtVisitorVoid() {
override fun visitBinaryExpression(binaryExpression: KtBinaryExpression) {
visitRange(binaryExpression, holder, session)
}
override fun visitDotQualifiedExpression(expression: KtDotQualifiedExpression) {
visitRange(expression, holder, session)
override fun visitDotQualifiedExpression(expression: KtDotQualifiedExpression) {
visitRange(expression, holder, session)
}
}
}
private fun visitRange(expression: KtExpression, holder: ProblemsHolder, session: LocalInspectionToolSession) {
val context = lazy { expression.analyze(BodyResolveMode.PARTIAL) }