FIR: Refactor ResolvedCallableReferenceAtom
^KT-32725 In Progress
This commit is contained in:
@@ -221,7 +221,7 @@ class FirCallResolver(
|
||||
constraintSystemBuilder: ConstraintSystemBuilder,
|
||||
resolvedCallableReferenceAtom: ResolvedCallableReferenceAtom
|
||||
): Boolean {
|
||||
val callableReferenceAccess = resolvedCallableReferenceAtom.atom
|
||||
val callableReferenceAccess = resolvedCallableReferenceAtom.reference
|
||||
val lhs = resolvedCallableReferenceAtom.lhs
|
||||
val coneSubstitutor = constraintSystemBuilder.buildCurrentSubstitutor() as ConeSubstitutor
|
||||
val expectedType = resolvedCallableReferenceAtom.expectedType?.let(coneSubstitutor::substituteOrSelf)
|
||||
|
||||
+3
-10
@@ -50,7 +50,7 @@ fun Candidate.preprocessCallableReference(
|
||||
expectedType: ConeKotlinType
|
||||
) {
|
||||
val lhs = bodyResolveComponents.doubleColonExpressionResolver.resolveDoubleColonLHS(argument)
|
||||
postponedAtoms += EagerCallableReferenceAtom(argument, expectedType, lhs)
|
||||
postponedAtoms += ResolvedCallableReferenceAtom(argument, expectedType, lhs)
|
||||
}
|
||||
|
||||
val ConeKotlinType.isBuiltinFunctionalType: Boolean
|
||||
@@ -207,8 +207,8 @@ class ResolvedLambdaAtom(
|
||||
override val outputType: ConeKotlinType get() = returnType
|
||||
}
|
||||
|
||||
abstract class ResolvedCallableReferenceAtom(
|
||||
val atom: FirCallableReferenceAccess,
|
||||
class ResolvedCallableReferenceAtom(
|
||||
val reference: FirCallableReferenceAccess,
|
||||
val expectedType: ConeKotlinType?,
|
||||
val lhs: DoubleColonLHS?
|
||||
) : PostponedResolvedAtomMarker {
|
||||
@@ -216,13 +216,6 @@ abstract class ResolvedCallableReferenceAtom(
|
||||
var postponed: Boolean = false
|
||||
|
||||
var resultingCandidate: Pair<Candidate, CandidateApplicability>? = null
|
||||
}
|
||||
|
||||
class EagerCallableReferenceAtom(
|
||||
atom: FirCallableReferenceAccess,
|
||||
expectedType: ConeKotlinType?,
|
||||
lhs: DoubleColonLHS?
|
||||
) : ResolvedCallableReferenceAtom(atom, expectedType, lhs) {
|
||||
|
||||
override val inputTypes: Collection<ConeKotlinType>
|
||||
get() {
|
||||
|
||||
+1
-1
@@ -76,7 +76,7 @@ class PostponedArgumentsAnalyzer(
|
||||
callResolver.resolveCallableReference(candidate.csBuilder, atom)
|
||||
}
|
||||
|
||||
val callableReferenceAccess = atom.atom
|
||||
val callableReferenceAccess = atom.reference
|
||||
atom.analyzed = true
|
||||
val (candidate, applicability) = atom.resultingCandidate ?: Pair(null, CandidateApplicability.INAPPLICABLE)
|
||||
|
||||
|
||||
@@ -164,7 +164,7 @@ internal object CheckArguments : CheckerStage() {
|
||||
|
||||
internal object EagerResolveOfCallableReferences : CheckerStage() {
|
||||
override suspend fun check(candidate: Candidate, sink: CheckerSink, callInfo: CallInfo) {
|
||||
for (atom in candidate.postponedAtoms.filterIsInstance<EagerCallableReferenceAtom>()) {
|
||||
for (atom in candidate.postponedAtoms.filterIsInstance<ResolvedCallableReferenceAtom>()) {
|
||||
if (!candidate.bodyResolveComponents.callResolver.resolveCallableReference(candidate.csBuilder, atom)) {
|
||||
sink.yieldApplicability(CandidateApplicability.INAPPLICABLE)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user