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