[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:
committed by
Space Team
parent
453b97a2d1
commit
01cff6b5e9
@@ -160,6 +160,12 @@ fun MemberWithBaseScope<FirCallableSymbol<*>>.getNonSubsumedOverriddenSymbols():
|
|||||||
.map { it.member }
|
.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 {
|
fun FirCallableSymbol<*>.dispatchReceiverScope(session: FirSession, scopeSession: ScopeSession): FirTypeScope {
|
||||||
val dispatchReceiverType = requireNotNull(dispatchReceiverType)
|
val dispatchReceiverType = requireNotNull(dispatchReceiverType)
|
||||||
return dispatchReceiverType.scope(
|
return dispatchReceiverType.scope(
|
||||||
|
|||||||
+2
-2
@@ -180,8 +180,8 @@ class FirTypeIntersectionScopeContext(
|
|||||||
overriddenMembers = group,
|
overriddenMembers = group,
|
||||||
containingScope = null,
|
containingScope = null,
|
||||||
containsMultipleNonSubsumed = when {
|
containsMultipleNonSubsumed = when {
|
||||||
forClassUseSiteScope -> group.flatMap { it.flattenPhantomIntersectionsRecursively() }.nonSubsumed().size > 1
|
forClassUseSiteScope -> group.getNonSubsumedNonPhantomOverriddenSymbols().size > 1
|
||||||
else -> mostSpecific.flatMap { it.flattenPhantomIntersectionsRecursively() }.nonSubsumed().size > 1
|
else -> mostSpecific.getNonSubsumedNonPhantomOverriddenSymbols().size > 1
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
-29
@@ -1,29 +0,0 @@
|
|||||||
// FILE: JvmElement.java
|
|
||||||
public interface JvmElement {
|
|
||||||
default void accept() {}
|
|
||||||
}
|
|
||||||
|
|
||||||
// FILE: JvmMember.java
|
|
||||||
public interface JvmMember extends JvmElement {
|
|
||||||
default void accept() {}
|
|
||||||
}
|
|
||||||
|
|
||||||
// FILE: PsiJvmMember.java
|
|
||||||
// Provides a phantom IO
|
|
||||||
public interface PsiJvmMember extends JvmMember, JvmElement {}
|
|
||||||
|
|
||||||
// FILE: PsiTypeParameterListOwner.java
|
|
||||||
// Must also provide a phantom IO
|
|
||||||
public interface PsiTypeParameterListOwner extends PsiJvmMember, JvmMember {}
|
|
||||||
|
|
||||||
// FILE: JvmClass.java
|
|
||||||
public interface JvmClass extends JvmMember, JvmElement {
|
|
||||||
default void accept() {}
|
|
||||||
}
|
|
||||||
|
|
||||||
// FILE: PsiClass.java
|
|
||||||
public interface PsiClass extends PsiTypeParameterListOwner, JvmClass {}
|
|
||||||
|
|
||||||
// FILE: Main.kt
|
|
||||||
|
|
||||||
<!CANNOT_INFER_VISIBILITY!>class K<!> : PsiClass
|
|
||||||
+1
@@ -1,3 +1,4 @@
|
|||||||
|
// FIR_IDENTICAL
|
||||||
// FILE: JvmElement.java
|
// FILE: JvmElement.java
|
||||||
public interface JvmElement {
|
public interface JvmElement {
|
||||||
default void accept() {}
|
default void accept() {}
|
||||||
|
|||||||
Reference in New Issue
Block a user