[FIR] Add checkerContext parameter to ControlFlowAnalyserCheckers
This commit is contained in:
+2
-2
@@ -11,12 +11,12 @@ import org.jetbrains.kotlin.contracts.description.EventOccurrencesRange
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.cfa.FirControlFlowChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.fir.contracts.FirContractDescription
|
||||
import org.jetbrains.kotlin.fir.contracts.coneEffects
|
||||
import org.jetbrains.kotlin.fir.contracts.description.ConeCallsEffectDeclaration
|
||||
import org.jetbrains.kotlin.fir.contracts.effects
|
||||
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.FirContractDescriptionOwner
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||
@@ -43,7 +43,7 @@ import kotlin.contracts.contract
|
||||
|
||||
object FirCallsEffectAnalyzer : FirControlFlowChecker() {
|
||||
|
||||
override fun analyze(graph: ControlFlowGraph, reporter: DiagnosticReporter) {
|
||||
override fun analyze(graph: ControlFlowGraph, reporter: DiagnosticReporter, checkerContext: CheckerContext) {
|
||||
val function = (graph.declaration as? FirFunction<*>) ?: return
|
||||
if (function !is FirContractDescriptionOwner) return
|
||||
if (function.contractDescription.coneEffects?.any { it is ConeCallsEffectDeclaration } != true) return
|
||||
|
||||
+4
-4
@@ -21,13 +21,13 @@ class FirControlFlowAnalyzer(session: FirSession) {
|
||||
|
||||
fun analyzeClassInitializer(klass: FirClass<*>, graph: ControlFlowGraph, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
if (graph.owner != null) return
|
||||
cfaCheckers.forEach { it.analyze(graph, reporter) }
|
||||
cfaCheckers.forEach { it.analyze(graph, reporter, context) }
|
||||
}
|
||||
|
||||
fun analyzeFunction(function: FirFunction<*>, graph: ControlFlowGraph, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
if (graph.owner != null) return
|
||||
|
||||
cfaCheckers.forEach { it.analyze(graph, reporter) }
|
||||
cfaCheckers.forEach { it.analyze(graph, reporter, context) }
|
||||
if (context.containingDeclarations.any { it is FirProperty || it is FirFunction<*> }) return
|
||||
runAssignmentCfaCheckers(graph, reporter)
|
||||
}
|
||||
@@ -35,14 +35,14 @@ class FirControlFlowAnalyzer(session: FirSession) {
|
||||
fun analyzePropertyInitializer(property: FirProperty, graph: ControlFlowGraph, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
if (graph.owner != null) return
|
||||
|
||||
cfaCheckers.forEach { it.analyze(graph, reporter) }
|
||||
cfaCheckers.forEach { it.analyze(graph, reporter, context) }
|
||||
runAssignmentCfaCheckers(graph, reporter)
|
||||
}
|
||||
|
||||
fun analyzePropertyAccessor(accessor: FirPropertyAccessor, graph: ControlFlowGraph, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
if (graph.owner != null) return
|
||||
|
||||
cfaCheckers.forEach { it.analyze(graph, reporter) }
|
||||
cfaCheckers.forEach { it.analyze(graph, reporter, context) }
|
||||
runAssignmentCfaCheckers(graph, reporter)
|
||||
}
|
||||
|
||||
|
||||
+6
-2
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.analysis.cfa
|
||||
import org.jetbrains.kotlin.fir.BuiltinTypes
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.cfa.FirControlFlowChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.fir.contracts.FirResolvedContractDescription
|
||||
@@ -23,7 +24,10 @@ import org.jetbrains.kotlin.fir.resolve.dfa.cfg.ControlFlowGraph
|
||||
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.JumpNode
|
||||
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.typeContext
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.fir.types.coneType
|
||||
import org.jetbrains.kotlin.fir.types.intersectTypesOrNull
|
||||
import org.jetbrains.kotlin.fir.types.isNullable
|
||||
import org.jetbrains.kotlin.types.AbstractTypeChecker
|
||||
import org.jetbrains.kotlin.types.model.KotlinTypeMarker
|
||||
import org.jetbrains.kotlin.types.model.TypeCheckerProviderContext
|
||||
@@ -31,7 +35,7 @@ import org.jetbrains.kotlin.utils.addIfNotNull
|
||||
|
||||
object FirReturnsImpliesAnalyzer : FirControlFlowChecker() {
|
||||
|
||||
override fun analyze(graph: ControlFlowGraph, reporter: DiagnosticReporter) {
|
||||
override fun analyze(graph: ControlFlowGraph, reporter: DiagnosticReporter, checkerContext: CheckerContext) {
|
||||
val function = graph.declaration as? FirFunction<*> ?: return
|
||||
val graphRef = function.controlFlowGraphReference as FirControlFlowGraphReferenceImpl
|
||||
val dataFlowInfo = graphRef.dataFlowInfo
|
||||
|
||||
+2
-1
@@ -5,9 +5,10 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.analysis.checkers.cfa
|
||||
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.ControlFlowGraph
|
||||
|
||||
abstract class FirControlFlowChecker {
|
||||
abstract fun analyze(graph: ControlFlowGraph, reporter: DiagnosticReporter)
|
||||
abstract fun analyze(graph: ControlFlowGraph, reporter: DiagnosticReporter, checkerContext: CheckerContext)
|
||||
}
|
||||
+5
-1
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.fir.analysis.checkers.declaration
|
||||
|
||||
import org.jetbrains.kotlin.fir.analysis.cfa.AbstractFirPropertyInitializationChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.cfa.FirControlFlowChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.extended.*
|
||||
|
||||
object ExtendedDeclarationCheckers : DeclarationCheckers() {
|
||||
@@ -21,6 +22,9 @@ object ExtendedDeclarationCheckers : DeclarationCheckers() {
|
||||
)
|
||||
|
||||
override val variableAssignmentCfaBasedCheckers: List<AbstractFirPropertyInitializationChecker> = listOf(
|
||||
VariableAssignmentChecker
|
||||
CanBeValChecker,
|
||||
)
|
||||
override val controlFlowAnalyserCheckers: List<FirControlFlowChecker> = listOf(
|
||||
UnusedChecker
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user