From c828b924b2f47e61cc5ba97b47733dd2cc48a2a9 Mon Sep 17 00:00:00 2001 From: Alexander Korepanov Date: Mon, 12 Feb 2024 12:07:55 +0100 Subject: [PATCH] [JS FIR] Fix JS_NAME_CLASH false positive report Intersections for interfaces and generic interfaces work differently. `FirIntersectionCallableSymbol.getNonSubsumedOverriddenSymbols()` does not retrieve the original symbol for a symbol inherited from generic interfaces. The patch explicitly obtains original symbols if they exist. ^KT-65216 Fixed --- .../FirJsNameClashClassMembersChecker.kt | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/declaration/FirJsNameClashClassMembersChecker.kt b/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/declaration/FirJsNameClashClassMembersChecker.kt index 6bfff83bf19..feb3c7fdf44 100644 --- a/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/declaration/FirJsNameClashClassMembersChecker.kt +++ b/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/declaration/FirJsNameClashClassMembersChecker.kt @@ -19,10 +19,11 @@ import org.jetbrains.kotlin.fir.analysis.js.checkers.isPresentInGeneratedCode import org.jetbrains.kotlin.fir.declarations.FirClass import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin -import org.jetbrains.kotlin.fir.declarations.constructors -import org.jetbrains.kotlin.fir.declarations.utils.isExpect import org.jetbrains.kotlin.fir.declarations.getNonSubsumedOverriddenSymbols +import org.jetbrains.kotlin.fir.declarations.utils.isExpect import org.jetbrains.kotlin.fir.declarations.utils.isFinal +import org.jetbrains.kotlin.fir.originalForSubstitutionOverride +import org.jetbrains.kotlin.fir.resolve.SessionHolder import org.jetbrains.kotlin.fir.scopes.* import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol @@ -32,7 +33,6 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.unwrapFakeOverridesOrDelegated import org.jetbrains.kotlin.utils.addIfNotNull import org.jetbrains.kotlin.utils.addToStdlib.popLast -import org.jetbrains.kotlin.fir.resolve.SessionHolder sealed class FirJsNameClashClassMembersChecker(mppKind: MppCheckerKind) : FirClassChecker(mppKind) { object Regular : FirJsNameClashClassMembersChecker(MppCheckerKind.Platform) { @@ -123,9 +123,10 @@ sealed class FirJsNameClashClassMembersChecker(mppKind: MppCheckerKind) : FirCla sessionHolder.session, sessionHolder.scopeSession ) - addAllSymbolsFrom(nonSubsumedOverriddenSymbols, sessionHolder) - for (intersectedSymbol in nonSubsumedOverriddenSymbols) { - overrideIntersections.getOrPut(intersectedSymbol) { hashSetOf() }.addAll(nonSubsumedOverriddenSymbols) + val overriddenSymbols = nonSubsumedOverriddenSymbols.map { it.originalForSubstitutionOverride ?: it } + addAllSymbolsFrom(overriddenSymbols, sessionHolder) + for (intersectedSymbol in overriddenSymbols) { + overrideIntersections.getOrPut(intersectedSymbol) { hashSetOf() }.addAll(overriddenSymbols) } } else -> allSymbols.add(symbol)