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