From e4588c3decd41909aade33584ebd3f0e8f8898de Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Thu, 19 Mar 2020 15:40:59 +0300 Subject: [PATCH] [FIR] Add diagnostic component for control flow analysis --- .../analysis/cfa/FirControlFlowAnalyzer.kt | 16 ++++++++++++++ .../collectors/AbstractDiagnosticCollector.kt | 6 ++--- .../ControlFlowAnalysisDiagnosticComponent.kt | 22 +++++++++++++++++++ 3 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/cfa/FirControlFlowAnalyzer.kt create mode 100644 compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ControlFlowAnalysisDiagnosticComponent.kt 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 new file mode 100644 index 00000000000..2e64815cb91 --- /dev/null +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/cfa/FirControlFlowAnalyzer.kt @@ -0,0 +1,16 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.fir.analysis.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 + +class FirControlFlowAnalyzer(private val reporter: DiagnosticReporter) { + fun analyze(graph: ControlFlowGraph, context: CheckerContext) { + + } +} \ No newline at end of file diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollector.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollector.kt index bf2caa8b316..11febfc170c 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollector.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollector.kt @@ -8,10 +8,7 @@ package org.jetbrains.kotlin.fir.analysis.collectors import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.analysis.checkers.context.PersistentCheckerContext -import org.jetbrains.kotlin.fir.analysis.collectors.components.AbstractDiagnosticCollectorComponent -import org.jetbrains.kotlin.fir.analysis.collectors.components.DeclarationCheckersDiagnosticComponent -import org.jetbrains.kotlin.fir.analysis.collectors.components.ErrorNodeDiagnosticCollectorComponent -import org.jetbrains.kotlin.fir.analysis.collectors.components.ExpressionCheckersDiagnosticComponent +import org.jetbrains.kotlin.fir.analysis.collectors.components.* import org.jetbrains.kotlin.fir.analysis.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.declarations.* @@ -172,5 +169,6 @@ fun AbstractDiagnosticCollector.registerAllComponents() { DeclarationCheckersDiagnosticComponent(this), ExpressionCheckersDiagnosticComponent(this), ErrorNodeDiagnosticCollectorComponent(this), + ControlFlowAnalysisDiagnosticComponent(this), ) } \ No newline at end of file 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 new file mode 100644 index 00000000000..508d731ed5b --- /dev/null +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ControlFlowAnalysisDiagnosticComponent.kt @@ -0,0 +1,22 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +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.collectors.AbstractDiagnosticCollector +import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.resolve.dfa.controlFlowGraph + +class ControlFlowAnalysisDiagnosticComponent(collector: AbstractDiagnosticCollector) : AbstractDiagnosticCollectorComponent(collector) { + override fun visitControlFlowGraphReference(controlFlowGraphReference: FirControlFlowGraphReference, data: CheckerContext) { + val graph = controlFlowGraphReference.controlFlowGraph ?: return + runCheck { + val controlFlowAnalyzer = FirControlFlowAnalyzer(it) + controlFlowAnalyzer.analyze(graph, data) + } + } +} \ No newline at end of file