[FIR] Remove workaround for #KT-43129
Revert changes from4612f26banda936386e
This commit is contained in:
+1
-3
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.fir.NoMutableState
|
||||
import org.jetbrains.kotlin.fir.resolve.calls.ConeCallConflictResolverFactory
|
||||
import org.jetbrains.kotlin.fir.resolve.calls.ConeCompositeConflictResolver
|
||||
import org.jetbrains.kotlin.fir.resolve.calls.ConeOverloadConflictResolver
|
||||
import org.jetbrains.kotlin.fir.resolve.calls.ConeOverloadResolutionByLambdaConflictResolve
|
||||
import org.jetbrains.kotlin.fir.resolve.inference.InferenceComponents
|
||||
import org.jetbrains.kotlin.resolve.calls.results.TypeSpecificityComparator
|
||||
import org.jetbrains.kotlin.resolve.jvm.JvmTypeSpecificityComparator
|
||||
@@ -23,8 +22,7 @@ object JvmCallConflictResolverFactory : ConeCallConflictResolverFactory() {
|
||||
val specificityComparator = JvmTypeSpecificityComparator(components.ctx)
|
||||
return ConeCompositeConflictResolver(
|
||||
ConeOverloadConflictResolver(specificityComparator, components),
|
||||
ConeEquivalentCallConflictResolver(specificityComparator, components),
|
||||
ConeOverloadResolutionByLambdaConflictResolve(components.session),
|
||||
ConeEquivalentCallConflictResolver(specificityComparator, components)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
-46
@@ -1,46 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.resolve.calls
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||
import org.jetbrains.kotlin.fir.resolve.fqName
|
||||
import org.jetbrains.kotlin.fir.resolve.inference.isBuiltinFunctionalType
|
||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.fir.types.ConeTypeParameterType
|
||||
import org.jetbrains.kotlin.fir.types.coneTypeSafe
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.OVERLOAD_RESOLUTION_BY_LAMBDA_ANNOTATION
|
||||
|
||||
class ConeOverloadResolutionByLambdaConflictResolve(private val session: FirSession) : ConeCallConflictResolver() {
|
||||
override fun chooseMaximallySpecificCandidates(
|
||||
candidates: Set<Candidate>,
|
||||
discriminateGenerics: Boolean,
|
||||
discriminateAbstracts: Boolean
|
||||
): Set<Candidate> {
|
||||
if (candidates.size == 1) return candidates
|
||||
|
||||
val (candidatesWithAnnotation, candidatesWithoutAnnotation) = candidates.partition { candidate ->
|
||||
(candidate.symbol.fir as? FirCallableDeclaration<*>)?.annotations?.any { annotation ->
|
||||
annotation.fqName(session) == OVERLOAD_RESOLUTION_BY_LAMBDA_ANNOTATION
|
||||
} == true
|
||||
}
|
||||
|
||||
if (candidatesWithoutAnnotation.size == 1) return setOf(candidatesWithoutAnnotation.single())
|
||||
|
||||
candidatesWithAnnotation.singleOrNull { candidate ->
|
||||
(candidate.symbol.fir as? FirFunction<*>)
|
||||
?.valueParameters?.singleOrNull()?.returnTypeRef?.coneTypeSafe<ConeKotlinType>()
|
||||
.let { type ->
|
||||
type != null && type.isBuiltinFunctionalType(session) && type.typeArguments.last() is ConeTypeParameterType
|
||||
}
|
||||
}?.let {
|
||||
return setOf(it)
|
||||
}
|
||||
|
||||
return candidates
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user