org.jetbrains.kotlin.fir.resolve.inference.FirInferenceSession.kt Maven / Gradle / Ivy
/*
* 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.inference
import org.jetbrains.kotlin.fir.expressions.FirResolvable
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.resolve.calls.Candidate
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.ConeTypeVariableTypeConstructor
import org.jetbrains.kotlin.resolve.calls.inference.model.ConstraintStorage
abstract class FirInferenceSession {
companion object {
val DEFAULT: FirInferenceSession = object : FirStubInferenceSession() {}
}
abstract fun shouldRunCompletion(call: T): Boolean where T : FirResolvable, T : FirStatement
abstract val currentConstraintSystem: ConstraintStorage
abstract fun addPartiallyResolvedCall(call: T) where T : FirResolvable, T : FirStatement
abstract fun addErrorCall(call: T) where T : FirResolvable, T : FirStatement
abstract fun addCompetedCall(call: T, candidate: Candidate) where T : FirResolvable, T : FirStatement
abstract fun inferPostponedVariables(
lambda: ResolvedLambdaAtom,
initialStorage: ConstraintStorage,
// TODO: diagnostic holder
): Map?
abstract fun writeOnlyStubs(call: T): Boolean where T : FirResolvable, T : FirStatement
abstract fun callCompleted(call: T): Boolean where T : FirResolvable, T : FirStatement
abstract fun shouldCompleteResolvedSubAtomsOf(call: T): Boolean where T : FirResolvable, T : FirStatement
}
abstract class FirStubInferenceSession : FirInferenceSession() {
override fun shouldRunCompletion(call: T): Boolean where T : FirResolvable, T : FirStatement = true
override val currentConstraintSystem: ConstraintStorage
get() = ConstraintStorage.Empty
override fun addPartiallyResolvedCall(call: T) where T : FirResolvable, T : FirStatement {}
override fun addErrorCall(call: T) where T : FirResolvable, T : FirStatement {}
override fun addCompetedCall(call: T, candidate: Candidate) where T : FirResolvable, T : FirStatement {}
override fun inferPostponedVariables(
lambda: ResolvedLambdaAtom,
initialStorage: ConstraintStorage
): Map? = null
override fun writeOnlyStubs(call: T): Boolean where T : FirResolvable, T : FirStatement = false
override fun callCompleted(call: T): Boolean where T : FirResolvable, T : FirStatement = false
override fun shouldCompleteResolvedSubAtomsOf(call: T): Boolean where T : FirResolvable, T : FirStatement = true
}