From 07b5bd72ae951776ec4ea1366b001ad5f817a94a Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 5 Apr 2022 11:26:43 +0300 Subject: [PATCH] FIR: suppress CONFLICTING_OVERLOADS diagnostic properly --- .../declaration/FirConflictsChecker.kt | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirConflictsChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirConflictsChecker.kt index 2fc399a35a2..22448cfc49c 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirConflictsChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirConflictsChecker.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.diagnostics.reportOn +import org.jetbrains.kotlin.fir.analysis.diagnostics.withSuppressedDiagnostics import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.impl.FirOuterClassTypeParameterRef import org.jetbrains.kotlin.fir.resolve.getContainingDeclaration @@ -227,21 +228,23 @@ object FirConflictsChecker : FirBasicDeclarationChecker() { inspector.declarationConflictingSymbols.forEach { (conflictingDeclaration, symbols) -> val source = conflictingDeclaration.source if (source != null && symbols.isNotEmpty()) { - when (conflictingDeclaration) { - is FirSimpleFunction, - is FirConstructor -> { - reporter.reportOn(source, FirErrors.CONFLICTING_OVERLOADS, symbols, context) - } - else -> { - val factory = if (conflictingDeclaration is FirClassLikeDeclaration && - conflictingDeclaration.getContainingDeclaration(context.session) == null && - symbols.any { it is FirClassLikeSymbol<*> } - ) { - FirErrors.PACKAGE_OR_CLASSIFIER_REDECLARATION - } else { - FirErrors.REDECLARATION + withSuppressedDiagnostics(conflictingDeclaration, context) { ctx -> + when (conflictingDeclaration) { + is FirSimpleFunction, + is FirConstructor -> { + reporter.reportOn(source, FirErrors.CONFLICTING_OVERLOADS, symbols, ctx) + } + else -> { + val factory = if (conflictingDeclaration is FirClassLikeDeclaration && + conflictingDeclaration.getContainingDeclaration(ctx.session) == null && + symbols.any { it is FirClassLikeSymbol<*> } + ) { + FirErrors.PACKAGE_OR_CLASSIFIER_REDECLARATION + } else { + FirErrors.REDECLARATION + } + reporter.reportOn(source, factory, symbols, ctx) } - reporter.reportOn(source, factory, symbols, context) } } }