[FIR] Fix ambiguity between Sequence.forEach and Iterable.forEach (with @HidesMembers) ^KT-50776 Fixed
This commit is contained in:
committed by
TeamCityServer
parent
4a200a2d7e
commit
defb0cf611
+7
-1
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.resolve.calls
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.getAnnotationByClassId
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.modality
|
||||
import org.jetbrains.kotlin.fir.render
|
||||
import org.jetbrains.kotlin.fir.resolve.inference.ConeTypeParameterBasedTypeVariable
|
||||
@@ -15,6 +16,7 @@ import org.jetbrains.kotlin.fir.resolve.inference.InferenceComponents
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
|
||||
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
|
||||
import org.jetbrains.kotlin.fir.types.coneType
|
||||
import org.jetbrains.kotlin.name.StandardClassIds.Annotations.HidesMembers
|
||||
import org.jetbrains.kotlin.resolve.calls.inference.model.NewConstraintSystemImpl
|
||||
import org.jetbrains.kotlin.resolve.calls.inference.model.SimpleConstraintSystemConstraintPosition
|
||||
import org.jetbrains.kotlin.resolve.calls.results.FlatSignature
|
||||
@@ -43,7 +45,11 @@ class ConeOverloadConflictResolver(
|
||||
candidates
|
||||
|
||||
return chooseMaximallySpecificCandidates(
|
||||
fixedCandidates, discriminateGenerics, discriminateAbstracts, discriminateSAMs = true, discriminateSuspendConversions = true
|
||||
fixedCandidates,
|
||||
discriminateGenerics,
|
||||
discriminateAbstracts,
|
||||
discriminateSAMs = true,
|
||||
discriminateSuspendConversions = true
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+12
-10
@@ -78,11 +78,11 @@ internal abstract class FirBaseTowerResolveTask(
|
||||
|
||||
protected fun FirScope.toScopeTowerLevel(
|
||||
extensionReceiver: ReceiverValue? = null,
|
||||
extensionsOnly: Boolean = false,
|
||||
withHideMembersOnly: Boolean = false,
|
||||
includeInnerConstructors: Boolean = extensionReceiver != null,
|
||||
): ScopeTowerLevel = ScopeTowerLevel(
|
||||
session, components, this,
|
||||
extensionReceiver, extensionsOnly, includeInnerConstructors
|
||||
extensionReceiver, withHideMembersOnly, includeInnerConstructors
|
||||
)
|
||||
|
||||
protected fun ReceiverValue.toMemberScopeTowerLevel(
|
||||
@@ -386,12 +386,14 @@ internal open class FirTowerResolveTask(
|
||||
depth: Int?,
|
||||
explicitReceiverKind: ExplicitReceiverKind,
|
||||
parentGroup: TowerGroup
|
||||
) = processLevel(
|
||||
topLevelScope.toScopeTowerLevel(
|
||||
extensionReceiver = receiverValue, extensionsOnly = true
|
||||
),
|
||||
info,
|
||||
parentGroup.TopPrioritized(index).let { if (depth != null) it.Implicit(depth) else it },
|
||||
explicitReceiverKind,
|
||||
)
|
||||
) {
|
||||
processLevel(
|
||||
topLevelScope.toScopeTowerLevel(
|
||||
extensionReceiver = receiverValue, withHideMembersOnly = true
|
||||
),
|
||||
info,
|
||||
parentGroup.TopPrioritized(index).let { if (depth != null) it.Implicit(depth) else it },
|
||||
explicitReceiverKind,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.resolve.calls.tower
|
||||
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||
import org.jetbrains.kotlin.fir.declarations.getAnnotationByClassId
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isInner
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.buildResolvedQualifier
|
||||
import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents
|
||||
@@ -23,6 +24,7 @@ import org.jetbrains.kotlin.fir.scopes.processClassifiersByName
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.name.StandardClassIds.Annotations.HidesMembers
|
||||
import org.jetbrains.kotlin.types.AbstractTypeChecker
|
||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||
import org.jetbrains.kotlin.utils.SmartList
|
||||
@@ -220,7 +222,7 @@ class ScopeTowerLevel(
|
||||
private val bodyResolveComponents: BodyResolveComponents,
|
||||
val scope: FirScope,
|
||||
val extensionReceiver: ReceiverValue?,
|
||||
private val extensionsOnly: Boolean,
|
||||
private val withHideMembersOnly: Boolean,
|
||||
private val includeInnerConstructors: Boolean
|
||||
) : SessionBasedTowerLevel(session) {
|
||||
|
||||
@@ -286,7 +288,10 @@ class ScopeTowerLevel(
|
||||
processor: TowerScopeLevelProcessor<T>
|
||||
) {
|
||||
val candidateReceiverTypeRef = candidate.fir.receiverTypeRef
|
||||
val receiverExpected = extensionsOnly || extensionReceiver != null
|
||||
if (withHideMembersOnly && candidate.getAnnotationByClassId(HidesMembers) == null) {
|
||||
return
|
||||
}
|
||||
val receiverExpected = withHideMembersOnly || extensionReceiver != null
|
||||
if (candidateReceiverTypeRef == null == receiverExpected) return
|
||||
val dispatchReceiverValue = dispatchReceiverValue(candidate)
|
||||
if (dispatchReceiverValue == null && shouldSkipCandidateWithInconsistentExtensionReceiver(candidate)) {
|
||||
|
||||
Reference in New Issue
Block a user