[FIR] Reuse getNonSubsumedNonPhantomOverriddenSymbols
Just a small refactoring to avoid duplicating comments.
This commit is contained in:
committed by
Space Team
parent
22fc90e5a1
commit
3b2bc598b5
@@ -29,7 +29,6 @@ import org.jetbrains.kotlin.fir.scopes.MemberWithBaseScope
|
|||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirAbstractOverrideChecker
|
import org.jetbrains.kotlin.fir.scopes.impl.FirAbstractOverrideChecker
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.chooseIntersectionVisibilityOrNull
|
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.impl.isAbstract
|
||||||
import org.jetbrains.kotlin.fir.scopes.jvm.computeJvmDescriptorRepresentation
|
import org.jetbrains.kotlin.fir.scopes.jvm.computeJvmDescriptorRepresentation
|
||||||
import org.jetbrains.kotlin.fir.scopes.processOverriddenFunctions
|
import org.jetbrains.kotlin.fir.scopes.processOverriddenFunctions
|
||||||
@@ -375,12 +374,7 @@ class JavaOverrideChecker internal constructor(
|
|||||||
extractedOverrides: Collection<MemberWithBaseScope<D>>,
|
extractedOverrides: Collection<MemberWithBaseScope<D>>,
|
||||||
dispatchClassSymbol: FirRegularClassSymbol?,
|
dispatchClassSymbol: FirRegularClassSymbol?,
|
||||||
): Visibility {
|
): Visibility {
|
||||||
// It's crucial that we only unwrap phantom intersection overrides.
|
val nonSubsumed = extractedOverrides.getNonSubsumedNonPhantomOverriddenSymbols()
|
||||||
// See comments in the following tests for explanation:
|
|
||||||
// - intersectionWithMultipleDefaultsInJavaOverriddenByIntersectionInKotlin.kt
|
|
||||||
// - intersectionOverridesIntersection.kt
|
|
||||||
val overridesWithoutIntersections = extractedOverrides.flatMap { it.flattenPhantomIntersectionsRecursively() }
|
|
||||||
val nonSubsumed = overridesWithoutIntersections.nonSubsumed().filterOutDuplicates()
|
|
||||||
|
|
||||||
// In Java it's OK to inherit multiple implementations of the same function
|
// 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.
|
// from the supertypes as long as there's an implementation from a class.
|
||||||
|
|||||||
@@ -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.FirCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||||
import org.jetbrains.kotlin.fir.unwrapSubstitutionOverrides
|
|
||||||
import org.jetbrains.kotlin.name.StandardClassIds
|
import org.jetbrains.kotlin.name.StandardClassIds
|
||||||
|
|
||||||
fun filterOutOverriddenFunctions(extractedOverridden: Collection<MemberWithBaseScope<FirNamedFunctionSymbol>>): Collection<MemberWithBaseScope<FirNamedFunctionSymbol>> {
|
fun filterOutOverriddenFunctions(extractedOverridden: Collection<MemberWithBaseScope<FirNamedFunctionSymbol>>): Collection<MemberWithBaseScope<FirNamedFunctionSymbol>> {
|
||||||
@@ -92,11 +91,6 @@ val MemberWithBaseScope<FirCallableSymbol<*>>.isAbstract: Boolean
|
|||||||
return member.rawStatus.modality == Modality.ABSTRACT
|
return member.rawStatus.modality == Modality.ABSTRACT
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <D : FirCallableSymbol<*>> List<MemberWithBaseScope<D>>.filterOutDuplicates(): List<MemberWithBaseScope<D>> {
|
|
||||||
val uniqueSymbols = mutableSetOf<FirCallableSymbol<*>>()
|
|
||||||
return filter { uniqueSymbols.add(it.member.fir.unwrapSubstitutionOverrides().symbol) }
|
|
||||||
}
|
|
||||||
|
|
||||||
fun <D : FirCallableSymbol<*>> findMaxVisibilityOrNull(
|
fun <D : FirCallableSymbol<*>> findMaxVisibilityOrNull(
|
||||||
extractedOverrides: Collection<MemberWithBaseScope<D>>
|
extractedOverrides: Collection<MemberWithBaseScope<D>>
|
||||||
): Visibility? {
|
): Visibility? {
|
||||||
|
|||||||
+1
-6
@@ -166,12 +166,7 @@ class FirStandardOverrideChecker(private val session: FirSession) : FirAbstractO
|
|||||||
extractedOverrides: Collection<MemberWithBaseScope<D>>,
|
extractedOverrides: Collection<MemberWithBaseScope<D>>,
|
||||||
dispatchClassSymbol: FirRegularClassSymbol?,
|
dispatchClassSymbol: FirRegularClassSymbol?,
|
||||||
): Visibility {
|
): Visibility {
|
||||||
// It's crucial that we only unwrap phantom intersection overrides.
|
val nonSubsumed = extractedOverrides.getNonSubsumedNonPhantomOverriddenSymbols()
|
||||||
// See comments in the following tests for explanation:
|
|
||||||
// - intersectionWithMultipleDefaultsInJavaOverriddenByIntersectionInKotlin.kt
|
|
||||||
// - intersectionOverridesIntersection.kt
|
|
||||||
val overridesWithoutIntersections = extractedOverrides.flatMap { it.flattenPhantomIntersectionsRecursively() }
|
|
||||||
val nonSubsumed = overridesWithoutIntersections.nonSubsumed().filterOutDuplicates()
|
|
||||||
return chooseIntersectionVisibilityOrNull(nonSubsumed) ?: Visibilities.Unknown
|
return chooseIntersectionVisibilityOrNull(nonSubsumed) ?: Visibilities.Unknown
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user