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 c810e1e1d67..2434493dd3b 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 @@ -232,48 +232,43 @@ object FirConflictsChecker : FirBasicDeclarationChecker() { } } - context.addDeclaration(declaration) - try { - 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 - } - reporter.reportOn(source, factory, symbols, context) - } - } - } - } - - if (declaration.source?.kind !is KtFakeSourceElementKind) { - when (declaration) { - is FirMemberDeclaration -> { - if (declaration is FirFunction) { - checkConflictingParameters(declaration.valueParameters, context, reporter) - } - checkConflictingParameters(declaration.typeParameters, context, reporter) - } - is FirTypeParametersOwner -> { - checkConflictingParameters(declaration.typeParameters, context, reporter) + 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 + } + reporter.reportOn(source, factory, symbols, context) } } } - } finally { - context.dropDeclaration() + } + + if (declaration.source?.kind !is KtFakeSourceElementKind) { + when (declaration) { + is FirMemberDeclaration -> { + if (declaration is FirFunction) { + checkConflictingParameters(declaration.valueParameters, context, reporter) + } + checkConflictingParameters(declaration.typeParameters, context, reporter) + } + is FirTypeParametersOwner -> { + checkConflictingParameters(declaration.typeParameters, context, reporter) + } + else -> { + } + } } } @@ -381,5 +376,3 @@ private fun FirRegularClass.onConstructors(action: (ctor: FirConstructor) -> Uni acceptChildren(ClassConstructorVisitor()) } } - -