mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[kotlin] KTIJ-36967 AbstractRangeInspection is also an AbstractKotlinInspection, remove DeprecationCollectingInspection
GitOrigin-RevId: 4b0c5f0f41940ba1880bec7b1c4cb063cacb9f2d
This commit is contained in:
committed by
intellij-monorepo-bot
parent
8a14a9cbb1
commit
1e691cdf63
-51
@@ -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)
|
||||
}
|
||||
}
|
||||
+10
-14
@@ -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) }
|
||||
|
||||
Reference in New Issue
Block a user