From 4ddc0ed3fe73c23d11f53d979041904c990727ae Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 15 Apr 2021 17:54:36 +0300 Subject: [PATCH] FIR: introduce block checkers --- .../src/org/jetbrains/kotlin/fir/checkers/generator/Main.kt | 1 + .../checkers/expression/ComposedExpressionCheckers.kt | 4 ++++ .../fir/analysis/checkers/expression/ExpressionCheckers.kt | 2 ++ .../checkers/expression/FirExpressionCheckerAliases.kt | 2 ++ .../components/ExpressionCheckersDiagnosticComponent.kt | 4 ++++ 5 files changed, 13 insertions(+) diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/Main.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/Main.kt index afb74258864..a55b5c8fefd 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/Main.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/Main.kt @@ -23,6 +23,7 @@ fun main(args: Array) { alias("TryExpressionChecker") alias("WhenExpressionChecker") alias("ReturnExpressionChecker") + alias("BlockChecker") } val declarationPackage = "org.jetbrains.kotlin.fir.analysis.checkers.declaration" diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/ComposedExpressionCheckers.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/ComposedExpressionCheckers.kt index 626eb04c0ab..c061aa57044 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/ComposedExpressionCheckers.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/ComposedExpressionCheckers.kt @@ -27,6 +27,8 @@ internal class ComposedExpressionCheckers : ExpressionCheckers() { get() = _whenExpressionCheckers override val returnExpressionCheckers: Set get() = _returnExpressionCheckers + override val blockCheckers: Set + get() = _blockCheckers private val _basicExpressionCheckers: MutableSet = mutableSetOf() private val _qualifiedAccessCheckers: MutableSet = mutableSetOf() @@ -35,6 +37,7 @@ internal class ComposedExpressionCheckers : ExpressionCheckers() { private val _tryExpressionCheckers: MutableSet = mutableSetOf() private val _whenExpressionCheckers: MutableSet = mutableSetOf() private val _returnExpressionCheckers: MutableSet = mutableSetOf() + private val _blockCheckers: MutableSet = mutableSetOf() @CheckersComponentInternal internal fun register(checkers: ExpressionCheckers) { @@ -45,5 +48,6 @@ internal class ComposedExpressionCheckers : ExpressionCheckers() { _tryExpressionCheckers += checkers.tryExpressionCheckers _whenExpressionCheckers += checkers.whenExpressionCheckers _returnExpressionCheckers += checkers.returnExpressionCheckers + _blockCheckers += checkers.blockCheckers } } diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/ExpressionCheckers.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/ExpressionCheckers.kt index 907c0bde298..74fea13924b 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/ExpressionCheckers.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/ExpressionCheckers.kt @@ -24,6 +24,7 @@ abstract class ExpressionCheckers { open val tryExpressionCheckers: Set = emptySet() open val whenExpressionCheckers: Set = emptySet() open val returnExpressionCheckers: Set = emptySet() + open val blockCheckers: Set = emptySet() @CheckersComponentInternal internal val allBasicExpressionCheckers: Set get() = basicExpressionCheckers @CheckersComponentInternal internal val allQualifiedAccessCheckers: Set get() = qualifiedAccessCheckers + basicExpressionCheckers @@ -32,4 +33,5 @@ abstract class ExpressionCheckers { @CheckersComponentInternal internal val allTryExpressionCheckers: Set get() = tryExpressionCheckers + basicExpressionCheckers @CheckersComponentInternal internal val allWhenExpressionCheckers: Set get() = whenExpressionCheckers + basicExpressionCheckers @CheckersComponentInternal internal val allReturnExpressionCheckers: Set get() = returnExpressionCheckers + basicExpressionCheckers + @CheckersComponentInternal internal val allBlockCheckers: Set get() = blockCheckers + basicExpressionCheckers } diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirExpressionCheckerAliases.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirExpressionCheckerAliases.kt index 741834b9766..b7ce96f83d5 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirExpressionCheckerAliases.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirExpressionCheckerAliases.kt @@ -10,6 +10,7 @@ package org.jetbrains.kotlin.fir.analysis.checkers.expression * DO NOT MODIFY IT MANUALLY */ +import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirFunctionCall import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression import org.jetbrains.kotlin.fir.expressions.FirReturnExpression @@ -25,3 +26,4 @@ typealias FirVariableAssignmentChecker = FirExpressionChecker typealias FirWhenExpressionChecker = FirExpressionChecker typealias FirReturnExpressionChecker = FirExpressionChecker +typealias FirBlockChecker = FirExpressionChecker 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 abb0101571a..111c777b0e4 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 @@ -105,6 +105,10 @@ class ExpressionCheckersDiagnosticComponent( checkers.allReturnExpressionCheckers.check(returnExpression, data, reporter) } + override fun visitBlock(block: FirBlock, data: CheckerContext) { + checkers.allBlockCheckers.check(block, data, reporter) + } + private fun Collection>.check( expression: E, context: CheckerContext,