From 76f2e349cc4c71b0d14361760e1e35a0fad59f30 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Thu, 1 Apr 2021 14:43:16 +0300 Subject: [PATCH] [FIR] Introduce FirReturnExpressionChecker --- .../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 4e5046a807b..afb74258864 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 @@ -22,6 +22,7 @@ fun main(args: Array) { alias("VariableAssignmentChecker") alias("TryExpressionChecker") alias("WhenExpressionChecker") + alias("ReturnExpressionChecker") } 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 328f46cbf6e..626eb04c0ab 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 @@ -25,6 +25,8 @@ internal class ComposedExpressionCheckers : ExpressionCheckers() { get() = _tryExpressionCheckers override val whenExpressionCheckers: Set get() = _whenExpressionCheckers + override val returnExpressionCheckers: Set + get() = _returnExpressionCheckers private val _basicExpressionCheckers: MutableSet = mutableSetOf() private val _qualifiedAccessCheckers: MutableSet = mutableSetOf() @@ -32,6 +34,7 @@ internal class ComposedExpressionCheckers : ExpressionCheckers() { private val _variableAssignmentCheckers: MutableSet = mutableSetOf() private val _tryExpressionCheckers: MutableSet = mutableSetOf() private val _whenExpressionCheckers: MutableSet = mutableSetOf() + private val _returnExpressionCheckers: MutableSet = mutableSetOf() @CheckersComponentInternal internal fun register(checkers: ExpressionCheckers) { @@ -41,5 +44,6 @@ internal class ComposedExpressionCheckers : ExpressionCheckers() { _variableAssignmentCheckers += checkers.variableAssignmentCheckers _tryExpressionCheckers += checkers.tryExpressionCheckers _whenExpressionCheckers += checkers.whenExpressionCheckers + _returnExpressionCheckers += checkers.returnExpressionCheckers } } 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 d9928258896..907c0bde298 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 @@ -23,6 +23,7 @@ abstract class ExpressionCheckers { open val variableAssignmentCheckers: Set = emptySet() open val tryExpressionCheckers: Set = emptySet() open val whenExpressionCheckers: Set = emptySet() + open val returnExpressionCheckers: Set = emptySet() @CheckersComponentInternal internal val allBasicExpressionCheckers: Set get() = basicExpressionCheckers @CheckersComponentInternal internal val allQualifiedAccessCheckers: Set get() = qualifiedAccessCheckers + basicExpressionCheckers @@ -30,4 +31,5 @@ abstract class ExpressionCheckers { @CheckersComponentInternal internal val allVariableAssignmentCheckers: Set get() = variableAssignmentCheckers + basicExpressionCheckers @CheckersComponentInternal internal val allTryExpressionCheckers: Set get() = tryExpressionCheckers + basicExpressionCheckers @CheckersComponentInternal internal val allWhenExpressionCheckers: Set get() = whenExpressionCheckers + basicExpressionCheckers + @CheckersComponentInternal internal val allReturnExpressionCheckers: Set get() = returnExpressionCheckers + 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 b0c400b7185..741834b9766 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 @@ -12,6 +12,7 @@ package org.jetbrains.kotlin.fir.analysis.checkers.expression import org.jetbrains.kotlin.fir.expressions.FirFunctionCall import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression +import org.jetbrains.kotlin.fir.expressions.FirReturnExpression import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.expressions.FirTryExpression import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment @@ -23,3 +24,4 @@ typealias FirFunctionCallChecker = FirExpressionChecker typealias FirVariableAssignmentChecker = FirExpressionChecker typealias FirTryExpressionChecker = FirExpressionChecker typealias FirWhenExpressionChecker = FirExpressionChecker +typealias FirReturnExpressionChecker = 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 c8e8f4da5b8..bccba9c37de 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 @@ -97,6 +97,10 @@ class ExpressionCheckersDiagnosticComponent( checkers.allVariableAssignmentCheckers.check(variableAssignment, data, reporter) } + override fun visitReturnExpression(returnExpression: FirReturnExpression, data: CheckerContext) { + checkers.returnExpressionCheckers.check(returnExpression, data, reporter) + } + private fun Collection>.check( expression: E, context: CheckerContext,