diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/declarationUtils.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/declarationUtils.kt index 2cfbe3d9f74..222a5afe9f4 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/declarationUtils.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/declarationUtils.kt @@ -160,6 +160,12 @@ fun MemberWithBaseScope>.getNonSubsumedOverriddenSymbols(): .map { it.member } } +fun List>>.getNonSubsumedNonPhantomOverriddenSymbols(): List>> { + return flatMap { it.flattenPhantomIntersectionsRecursively() } + .nonSubsumed() + .distinctBy { it.member.unwrapSubstitutionOverrides>() } +} + fun FirCallableSymbol<*>.dispatchReceiverScope(session: FirSession, scopeSession: ScopeSession): FirTypeScope { val dispatchReceiverType = requireNotNull(dispatchReceiverType) return dispatchReceiverType.scope( diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScopeContext.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScopeContext.kt index 9ae7e36723a..808d18d5063 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScopeContext.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScopeContext.kt @@ -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 { diff --git a/compiler/testData/diagnostics/tests/intersectionWithMultipleDefaultsInJavaWithAdditionalSymbolsAfterNonSubsumed.fir.kt b/compiler/testData/diagnostics/tests/intersectionWithMultipleDefaultsInJavaWithAdditionalSymbolsAfterNonSubsumed.fir.kt deleted file mode 100644 index e88efca6f18..00000000000 --- a/compiler/testData/diagnostics/tests/intersectionWithMultipleDefaultsInJavaWithAdditionalSymbolsAfterNonSubsumed.fir.kt +++ /dev/null @@ -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 - -class K : PsiClass diff --git a/compiler/testData/diagnostics/tests/intersectionWithMultipleDefaultsInJavaWithAdditionalSymbolsAfterNonSubsumed.kt b/compiler/testData/diagnostics/tests/intersectionWithMultipleDefaultsInJavaWithAdditionalSymbolsAfterNonSubsumed.kt index 85bd199a52d..a601c1db04b 100644 --- a/compiler/testData/diagnostics/tests/intersectionWithMultipleDefaultsInJavaWithAdditionalSymbolsAfterNonSubsumed.kt +++ b/compiler/testData/diagnostics/tests/intersectionWithMultipleDefaultsInJavaWithAdditionalSymbolsAfterNonSubsumed.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // FILE: JvmElement.java public interface JvmElement { default void accept() {}