[FIR] Call distinctBy for containsMultipleNonSubsumed

Otherwise, when analyzing
`PsiTypeParameterListOwner` in the
related test, we (after flattening and
`nonSubsumed()`) get 2 `JvmMember.accept`
from the same very java enhancement
scope `JvmMember`.

^KT-65972
This commit is contained in:
Nikolay Lunyak
2024-02-21 16:47:42 +02:00
committed by Space Team
parent 453b97a2d1
commit 01cff6b5e9
4 changed files with 9 additions and 31 deletions
@@ -160,6 +160,12 @@ fun MemberWithBaseScope<FirCallableSymbol<*>>.getNonSubsumedOverriddenSymbols():
.map { it.member }
}
fun List<MemberWithBaseScope<FirCallableSymbol<*>>>.getNonSubsumedNonPhantomOverriddenSymbols(): List<MemberWithBaseScope<FirCallableSymbol<*>>> {
return flatMap { it.flattenPhantomIntersectionsRecursively() }
.nonSubsumed()
.distinctBy { it.member.unwrapSubstitutionOverrides<FirCallableSymbol<*>>() }
}
fun FirCallableSymbol<*>.dispatchReceiverScope(session: FirSession, scopeSession: ScopeSession): FirTypeScope {
val dispatchReceiverType = requireNotNull(dispatchReceiverType)
return dispatchReceiverType.scope(
@@ -180,8 +180,8 @@ class FirTypeIntersectionScopeContext(
overriddenMembers = group,
containingScope = null,
containsMultipleNonSubsumed = when {
forClassUseSiteScope -> group.flatMap { it.flattenPhantomIntersectionsRecursively() }.nonSubsumed().size > 1
else -> mostSpecific.flatMap { it.flattenPhantomIntersectionsRecursively() }.nonSubsumed().size > 1
forClassUseSiteScope -> group.getNonSubsumedNonPhantomOverriddenSymbols().size > 1
else -> mostSpecific.getNonSubsumedNonPhantomOverriddenSymbols().size > 1
},
)
} else {