From 3b2bc598b5b308fd4762b8cbbec55053b555c038 Mon Sep 17 00:00:00 2001 From: Nikolay Lunyak Date: Thu, 22 Feb 2024 15:24:40 +0200 Subject: [PATCH] [FIR] Reuse `getNonSubsumedNonPhantomOverriddenSymbols` Just a small refactoring to avoid duplicating comments. --- .../kotlin/fir/java/scopes/JavaOverrideChecker.kt | 8 +------- .../jetbrains/kotlin/fir/scopes/impl/FirOverrideUtils.kt | 6 ------ .../kotlin/fir/scopes/impl/FirStandardOverrideChecker.kt | 7 +------ 3 files changed, 2 insertions(+), 19 deletions(-) diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaOverrideChecker.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaOverrideChecker.kt index 2aef507edd1..b551bf0a726 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaOverrideChecker.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaOverrideChecker.kt @@ -29,7 +29,6 @@ import org.jetbrains.kotlin.fir.scopes.MemberWithBaseScope import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.scopes.impl.FirAbstractOverrideChecker import org.jetbrains.kotlin.fir.scopes.impl.chooseIntersectionVisibilityOrNull -import org.jetbrains.kotlin.fir.scopes.impl.filterOutDuplicates import org.jetbrains.kotlin.fir.scopes.impl.isAbstract import org.jetbrains.kotlin.fir.scopes.jvm.computeJvmDescriptorRepresentation import org.jetbrains.kotlin.fir.scopes.processOverriddenFunctions @@ -375,12 +374,7 @@ class JavaOverrideChecker internal constructor( extractedOverrides: Collection>, dispatchClassSymbol: FirRegularClassSymbol?, ): Visibility { - // It's crucial that we only unwrap phantom intersection overrides. - // See comments in the following tests for explanation: - // - intersectionWithMultipleDefaultsInJavaOverriddenByIntersectionInKotlin.kt - // - intersectionOverridesIntersection.kt - val overridesWithoutIntersections = extractedOverrides.flatMap { it.flattenPhantomIntersectionsRecursively() } - val nonSubsumed = overridesWithoutIntersections.nonSubsumed().filterOutDuplicates() + val nonSubsumed = extractedOverrides.getNonSubsumedNonPhantomOverriddenSymbols() // In Java it's OK to inherit multiple implementations of the same function // from the supertypes as long as there's an implementation from a class. diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirOverrideUtils.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirOverrideUtils.kt index fbda9bf6fc7..9f5fed37112 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirOverrideUtils.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirOverrideUtils.kt @@ -15,7 +15,6 @@ import org.jetbrains.kotlin.fir.scopes.* import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol -import org.jetbrains.kotlin.fir.unwrapSubstitutionOverrides import org.jetbrains.kotlin.name.StandardClassIds fun filterOutOverriddenFunctions(extractedOverridden: Collection>): Collection> { @@ -92,11 +91,6 @@ val MemberWithBaseScope>.isAbstract: Boolean return member.rawStatus.modality == Modality.ABSTRACT } -fun > List>.filterOutDuplicates(): List> { - val uniqueSymbols = mutableSetOf>() - return filter { uniqueSymbols.add(it.member.fir.unwrapSubstitutionOverrides().symbol) } -} - fun > findMaxVisibilityOrNull( extractedOverrides: Collection> ): Visibility? { diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirStandardOverrideChecker.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirStandardOverrideChecker.kt index 1e4a375aefc..f214ef0fceb 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirStandardOverrideChecker.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirStandardOverrideChecker.kt @@ -166,12 +166,7 @@ class FirStandardOverrideChecker(private val session: FirSession) : FirAbstractO extractedOverrides: Collection>, dispatchClassSymbol: FirRegularClassSymbol?, ): Visibility { - // It's crucial that we only unwrap phantom intersection overrides. - // See comments in the following tests for explanation: - // - intersectionWithMultipleDefaultsInJavaOverriddenByIntersectionInKotlin.kt - // - intersectionOverridesIntersection.kt - val overridesWithoutIntersections = extractedOverrides.flatMap { it.flattenPhantomIntersectionsRecursively() } - val nonSubsumed = overridesWithoutIntersections.nonSubsumed().filterOutDuplicates() + val nonSubsumed = extractedOverrides.getNonSubsumedNonPhantomOverriddenSymbols() return chooseIntersectionVisibilityOrNull(nonSubsumed) ?: Visibilities.Unknown } }