FIR: Refactor ResolvedCallableReferenceAtom

^KT-32725 In Progress
This commit is contained in:
Denis Zharkov
2019-10-23 14:12:43 +03:00
parent fe8cd195aa
commit 5e322a2dd9
4 changed files with 6 additions and 13 deletions
@@ -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)
@@ -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() {
@@ -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)
}