From c13889c2ea28b38675a5477a17f33f7ed9e1b4af Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Thu, 11 Feb 2021 16:35:19 +0100 Subject: [PATCH] FIR: add ability to specify checkers list for checker components --- .../kotlin/fir/analysis/cfa/FirControlFlowAnalyzer.kt | 10 +++++++--- .../ControlFlowAnalysisDiagnosticComponent.kt | 9 +++++++-- .../DeclarationCheckersDiagnosticComponent.kt | 5 +++-- .../ExpressionCheckersDiagnosticComponent.kt | 7 +++++-- 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/cfa/FirControlFlowAnalyzer.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/cfa/FirControlFlowAnalyzer.kt index 3ec3775b576..9c2fb40cf1b 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/cfa/FirControlFlowAnalyzer.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/cfa/FirControlFlowAnalyzer.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.analysis.cfa import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext +import org.jetbrains.kotlin.fir.analysis.checkers.declaration.DeclarationCheckers import org.jetbrains.kotlin.fir.analysis.checkersComponent import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.declarations.FirClass @@ -15,9 +16,12 @@ import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor import org.jetbrains.kotlin.fir.resolve.dfa.cfg.ControlFlowGraph -class FirControlFlowAnalyzer(session: FirSession) { - private val cfaCheckers = session.checkersComponent.declarationCheckers.controlFlowAnalyserCheckers - private val variableAssignmentCheckers = session.checkersComponent.declarationCheckers.variableAssignmentCfaBasedCheckers +class FirControlFlowAnalyzer( + session: FirSession, + declarationCheckers: DeclarationCheckers = session.checkersComponent.declarationCheckers +) { + private val cfaCheckers = declarationCheckers.controlFlowAnalyserCheckers + private val variableAssignmentCheckers = declarationCheckers.variableAssignmentCfaBasedCheckers // Currently declaration in analyzeXXX is not used, but it may be useful in future @Suppress("UNUSED_PARAMETER") diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ControlFlowAnalysisDiagnosticComponent.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ControlFlowAnalysisDiagnosticComponent.kt index c98d9a403ca..9cbe152f45b 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ControlFlowAnalysisDiagnosticComponent.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ControlFlowAnalysisDiagnosticComponent.kt @@ -7,13 +7,18 @@ package org.jetbrains.kotlin.fir.analysis.collectors.components import org.jetbrains.kotlin.fir.analysis.cfa.FirControlFlowAnalyzer import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext +import org.jetbrains.kotlin.fir.analysis.checkers.declaration.DeclarationCheckers +import org.jetbrains.kotlin.fir.analysis.checkersComponent import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.resolve.dfa.controlFlowGraph -class ControlFlowAnalysisDiagnosticComponent(collector: AbstractDiagnosticCollector) : AbstractDiagnosticCollectorComponent(collector) { - private val controlFlowAnalyzer = FirControlFlowAnalyzer(session) +class ControlFlowAnalysisDiagnosticComponent( + collector: AbstractDiagnosticCollector, + declarationCheckers: DeclarationCheckers = collector.session.checkersComponent.declarationCheckers, +) : AbstractDiagnosticCollectorComponent(collector) { + private val controlFlowAnalyzer = FirControlFlowAnalyzer(session, declarationCheckers) // ------------------------------- Class initializer ------------------------------- diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/DeclarationCheckersDiagnosticComponent.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/DeclarationCheckersDiagnosticComponent.kt index 68d8ef88dee..0f81cec82c0 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/DeclarationCheckersDiagnosticComponent.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/DeclarationCheckersDiagnosticComponent.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.analysis.collectors.components import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext +import org.jetbrains.kotlin.fir.analysis.checkers.declaration.DeclarationCheckers import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirDeclarationChecker import org.jetbrains.kotlin.fir.analysis.checkersComponent import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector @@ -13,9 +14,9 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.declarations.* class DeclarationCheckersDiagnosticComponent( - collector: AbstractDiagnosticCollector + collector: AbstractDiagnosticCollector, + private val checkers: DeclarationCheckers = collector.session.checkersComponent.declarationCheckers, ) : AbstractDiagnosticCollectorComponent(collector) { - private val checkers = session.checkersComponent.declarationCheckers override fun visitFile(file: FirFile, data: CheckerContext) { checkers.fileCheckers.check(file, data, reporter) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ExpressionCheckersDiagnosticComponent.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ExpressionCheckersDiagnosticComponent.kt index ba53b856b84..c8138ca5bbc 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ExpressionCheckersDiagnosticComponent.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ExpressionCheckersDiagnosticComponent.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.analysis.collectors.components import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext +import org.jetbrains.kotlin.fir.analysis.checkers.expression.ExpressionCheckers import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirExpressionChecker import org.jetbrains.kotlin.fir.analysis.checkersComponent import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector @@ -13,8 +14,10 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction import org.jetbrains.kotlin.fir.expressions.* -class ExpressionCheckersDiagnosticComponent(collector: AbstractDiagnosticCollector) : AbstractDiagnosticCollectorComponent(collector) { - private val checkers = session.checkersComponent.expressionCheckers +class ExpressionCheckersDiagnosticComponent( + collector: AbstractDiagnosticCollector, + private val checkers: ExpressionCheckers = collector.session.checkersComponent.expressionCheckers, +) : AbstractDiagnosticCollectorComponent(collector) { override fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: CheckerContext) { checkers.basicExpressionCheckers.check(anonymousFunction, data, reporter)