FIR: suppress CONFLICTING_OVERLOADS diagnostic properly

This commit is contained in:
Mikhail Glukhikh
2022-04-05 11:26:43 +03:00
committed by teamcity
parent 33fb49f20d
commit 07b5bd72ae
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
import org.jetbrains.kotlin.diagnostics.reportOn 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.*
import org.jetbrains.kotlin.fir.declarations.impl.FirOuterClassTypeParameterRef import org.jetbrains.kotlin.fir.declarations.impl.FirOuterClassTypeParameterRef
import org.jetbrains.kotlin.fir.resolve.getContainingDeclaration import org.jetbrains.kotlin.fir.resolve.getContainingDeclaration
@@ -227,21 +228,23 @@ object FirConflictsChecker : FirBasicDeclarationChecker() {
inspector.declarationConflictingSymbols.forEach { (conflictingDeclaration, symbols) -> inspector.declarationConflictingSymbols.forEach { (conflictingDeclaration, symbols) ->
val source = conflictingDeclaration.source val source = conflictingDeclaration.source
if (source != null && symbols.isNotEmpty()) { if (source != null && symbols.isNotEmpty()) {
when (conflictingDeclaration) { withSuppressedDiagnostics(conflictingDeclaration, context) { ctx ->
is FirSimpleFunction, when (conflictingDeclaration) {
is FirConstructor -> { is FirSimpleFunction,
reporter.reportOn(source, FirErrors.CONFLICTING_OVERLOADS, symbols, context) is FirConstructor -> {
} reporter.reportOn(source, FirErrors.CONFLICTING_OVERLOADS, symbols, ctx)
else -> { }
val factory = if (conflictingDeclaration is FirClassLikeDeclaration && else -> {
conflictingDeclaration.getContainingDeclaration(context.session) == null && val factory = if (conflictingDeclaration is FirClassLikeDeclaration &&
symbols.any { it is FirClassLikeSymbol<*> } conflictingDeclaration.getContainingDeclaration(ctx.session) == null &&
) { symbols.any { it is FirClassLikeSymbol<*> }
FirErrors.PACKAGE_OR_CLASSIFIER_REDECLARATION ) {
} else { FirErrors.PACKAGE_OR_CLASSIFIER_REDECLARATION
FirErrors.REDECLARATION } else {
FirErrors.REDECLARATION
}
reporter.reportOn(source, factory, symbols, ctx)
} }
reporter.reportOn(source, factory, symbols, context)
} }
} }
} }