[FIR] Don't report TAILREC_ON_VIRTUAL_MEMBER_ERROR on private declarations

This commit is contained in:
Dmitriy Novozhilov
2022-05-13 16:24:18 +03:00
committed by teamcity
parent 399aaeca9d
commit 67589b1b09
5 changed files with 18 additions and 2 deletions
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.fir.analysis.checkers.declaration
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.analysis.cfa.util.TraverseDirection
import org.jetbrains.kotlin.fir.analysis.cfa.util.traverse
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
@@ -14,6 +15,7 @@ import org.jetbrains.kotlin.diagnostics.reportOn
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
import org.jetbrains.kotlin.fir.declarations.utils.isOverride
import org.jetbrains.kotlin.fir.declarations.utils.isTailRec
import org.jetbrains.kotlin.fir.declarations.utils.visibility
import org.jetbrains.kotlin.fir.expressions.FirThisReceiverExpression
import org.jetbrains.kotlin.fir.expressions.arguments
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
@@ -27,7 +29,7 @@ import org.jetbrains.kotlin.fir.types.toSymbol
object FirTailrecFunctionChecker : FirSimpleFunctionChecker() {
override fun check(declaration: FirSimpleFunction, context: CheckerContext, reporter: DiagnosticReporter) {
if (!declaration.isTailRec) return
if (!declaration.isEffectivelyFinal(context)) {
if (!(declaration.isEffectivelyFinal(context) || declaration.visibility == Visibilities.Private)) {
reporter.reportOn(declaration.source, FirErrors.TAILREC_ON_VIRTUAL_MEMBER_ERROR, context)
}
val graph = declaration.controlFlowGraphReference?.controlFlowGraph ?: return