K2: Get rid of redundant parameter of ConeCallConflictResolver methods
discriminateGenerics was only set to false in recursive calls of ConeOverloadConflictResolver
This commit is contained in:
committed by
Space Team
parent
61e9f98b9f
commit
427b221eaf
-1
@@ -28,7 +28,6 @@ class ConeEquivalentCallConflictResolver(
|
||||
) : AbstractConeCallConflictResolver(specificityComparator, inferenceComponents, transformerComponents) {
|
||||
override fun chooseMaximallySpecificCandidates(
|
||||
candidates: Set<Candidate>,
|
||||
discriminateGenerics: Boolean,
|
||||
discriminateAbstracts: Boolean
|
||||
): Set<Candidate> {
|
||||
return filterOutEquivalentCalls(candidates)
|
||||
|
||||
-1
@@ -27,7 +27,6 @@ class JvmPlatformOverloadsConflictResolver(
|
||||
) : AbstractConeCallConflictResolver(specificityComparator, inferenceComponents, transformerComponents) {
|
||||
override fun chooseMaximallySpecificCandidates(
|
||||
candidates: Set<Candidate>,
|
||||
discriminateGenerics: Boolean,
|
||||
discriminateAbstracts: Boolean
|
||||
): Set<Candidate> {
|
||||
if (!inferenceComponents.session.languageVersionSettings.supportsFeature(LanguageFeature.PreferJavaFieldOverload)) {
|
||||
|
||||
@@ -168,7 +168,7 @@ class FirCallResolver(
|
||||
fun chooseMostSpecific(): Set<Candidate> {
|
||||
val onSuperReference = (explicitReceiver as? FirQualifiedAccessExpression)?.calleeReference is FirSuperReference
|
||||
return conflictResolver.chooseMaximallySpecificCandidates(
|
||||
bestCandidates, discriminateGenerics = true, discriminateAbstracts = onSuperReference
|
||||
bestCandidates, discriminateAbstracts = onSuperReference
|
||||
)
|
||||
}
|
||||
|
||||
@@ -367,7 +367,7 @@ class FirCallResolver(
|
||||
val reducedCandidates = if (noSuccessfulCandidates) {
|
||||
bestCandidates.toSet()
|
||||
} else {
|
||||
conflictResolver.chooseMaximallySpecificCandidates(bestCandidates, discriminateGenerics = true)
|
||||
conflictResolver.chooseMaximallySpecificCandidates(bestCandidates)
|
||||
}
|
||||
|
||||
(callableReferenceAccess.explicitReceiver as? FirResolvedQualifier)?.replaceResolvedToCompanionObject(
|
||||
@@ -586,7 +586,7 @@ class FirCallResolver(
|
||||
val reducedCandidates = if (!result.currentApplicability.isSuccess) {
|
||||
bestCandidates.toSet()
|
||||
} else {
|
||||
conflictResolver.chooseMaximallySpecificCandidates(bestCandidates, discriminateGenerics = true)
|
||||
conflictResolver.chooseMaximallySpecificCandidates(bestCandidates)
|
||||
}
|
||||
|
||||
val nameReference = createResolvedNamedReference(
|
||||
|
||||
+4
-6
@@ -78,12 +78,10 @@ class FirOverloadByLambdaReturnTypeResolver(
|
||||
}
|
||||
if (candidatesWithAnnotation.isEmpty()) return null
|
||||
val candidatesWithoutAnnotation = reducedCandidates - candidatesWithAnnotation
|
||||
val newCandidates = analyzeLambdaAndReduceNumberOfCandidatesRegardingOverloadResolutionByLambdaReturnType(call, reducedCandidates) ?: return null
|
||||
var maximallySpecificCandidates = components.callResolver.conflictResolver.chooseMaximallySpecificCandidates(
|
||||
newCandidates,
|
||||
discriminateGenerics = true,
|
||||
discriminateAbstracts = false
|
||||
)
|
||||
val newCandidates =
|
||||
analyzeLambdaAndReduceNumberOfCandidatesRegardingOverloadResolutionByLambdaReturnType(call, reducedCandidates) ?: return null
|
||||
|
||||
var maximallySpecificCandidates = components.callResolver.conflictResolver.chooseMaximallySpecificCandidates(newCandidates)
|
||||
if (maximallySpecificCandidates.size > 1 && candidatesWithoutAnnotation.any { it in maximallySpecificCandidates }) {
|
||||
maximallySpecificCandidates = maximallySpecificCandidates.toMutableSet().apply { removeAll(candidatesWithAnnotation) }
|
||||
maximallySpecificCandidates.singleOrNull()?.addDiagnostic(CandidateChosenUsingOverloadResolutionByLambdaAnnotation)
|
||||
|
||||
+3
-4
@@ -14,13 +14,12 @@ import org.jetbrains.kotlin.resolve.calls.results.TypeSpecificityComparator
|
||||
abstract class ConeCallConflictResolver {
|
||||
fun chooseMaximallySpecificCandidates(
|
||||
candidates: Collection<Candidate>,
|
||||
discriminateGenerics: Boolean,
|
||||
// It's set to 'true' only for `super.foo()`-like calls and used only at ConeOverloadConflictResolver
|
||||
discriminateAbstracts: Boolean = false
|
||||
): Set<Candidate> = chooseMaximallySpecificCandidates(candidates.toSet(), discriminateGenerics, discriminateAbstracts)
|
||||
): Set<Candidate> = chooseMaximallySpecificCandidates(candidates.toSet(), discriminateAbstracts)
|
||||
|
||||
abstract fun chooseMaximallySpecificCandidates(
|
||||
candidates: Set<Candidate>,
|
||||
discriminateGenerics: Boolean,
|
||||
discriminateAbstracts: Boolean
|
||||
): Set<Candidate>
|
||||
}
|
||||
@@ -33,4 +32,4 @@ abstract class ConeCallConflictResolverFactory : FirSessionComponent {
|
||||
): ConeCallConflictResolver
|
||||
}
|
||||
|
||||
val FirSession.callConflictResolverFactory: ConeCallConflictResolverFactory by FirSession.sessionComponentAccessor()
|
||||
val FirSession.callConflictResolverFactory: ConeCallConflictResolverFactory by FirSession.sessionComponentAccessor()
|
||||
|
||||
+1
-2
@@ -10,7 +10,6 @@ class ConeCompositeConflictResolver(
|
||||
) : ConeCallConflictResolver() {
|
||||
override fun chooseMaximallySpecificCandidates(
|
||||
candidates: Set<Candidate>,
|
||||
discriminateGenerics: Boolean,
|
||||
discriminateAbstracts: Boolean
|
||||
): Set<Candidate> {
|
||||
if (candidates.size <= 1) return candidates
|
||||
@@ -18,7 +17,7 @@ class ConeCompositeConflictResolver(
|
||||
var index = 0
|
||||
while (currentCandidates.size > 1 && index < conflictResolvers.size) {
|
||||
val conflictResolver = conflictResolvers[index++]
|
||||
currentCandidates = conflictResolver.chooseMaximallySpecificCandidates(candidates, discriminateGenerics, discriminateAbstracts)
|
||||
currentCandidates = conflictResolver.chooseMaximallySpecificCandidates(candidates, discriminateAbstracts)
|
||||
}
|
||||
return currentCandidates
|
||||
}
|
||||
|
||||
-1
@@ -17,7 +17,6 @@ class ConeIntegerOperatorConflictResolver(
|
||||
) : AbstractConeCallConflictResolver(specificityComparator, inferenceComponents, transformerComponents) {
|
||||
override fun chooseMaximallySpecificCandidates(
|
||||
candidates: Set<Candidate>,
|
||||
discriminateGenerics: Boolean,
|
||||
discriminateAbstracts: Boolean
|
||||
): Set<Candidate> {
|
||||
if (candidates.size <= 1) {
|
||||
|
||||
+8
-2
@@ -36,8 +36,14 @@ class ConeOverloadConflictResolver(
|
||||
|
||||
override fun chooseMaximallySpecificCandidates(
|
||||
candidates: Set<Candidate>,
|
||||
discriminateGenerics: Boolean,
|
||||
discriminateAbstracts: Boolean
|
||||
): Set<Candidate> = chooseMaximallySpecificCandidates(candidates, discriminateAbstracts, discriminateGenerics = true)
|
||||
|
||||
private fun chooseMaximallySpecificCandidates(
|
||||
candidates: Set<Candidate>,
|
||||
discriminateAbstracts: Boolean,
|
||||
// Set to 'false' only for property-for-invoke case
|
||||
discriminateGenerics: Boolean,
|
||||
): Set<Candidate> {
|
||||
if (candidates.size == 1) return candidates
|
||||
val fixedCandidates =
|
||||
@@ -62,7 +68,7 @@ class ConeOverloadConflictResolver(
|
||||
}
|
||||
|
||||
val bestInvokeReceiver =
|
||||
chooseMaximallySpecificCandidates(propertyReceiverCandidates, discriminateGenerics = false)
|
||||
chooseMaximallySpecificCandidates(propertyReceiverCandidates, discriminateGenerics = false, discriminateAbstracts = false)
|
||||
.singleOrNull() ?: return candidates
|
||||
|
||||
return candidates.filterTo(mutableSetOf()) { it.callInfo.candidateForCommonInvokeReceiver == bestInvokeReceiver }
|
||||
|
||||
Reference in New Issue
Block a user