All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jetbrains.kotlin.fir.resolve.inference.FirInferenceSession.kt Maven / Gradle / Ivy

There is a newer version: 2.0.0
Show newest version
/*
 * 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.ConeStubType
import org.jetbrains.kotlin.fir.types.ConeTypeVariableTypeConstructor
import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystemBuilder
import org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintSystemCompletionContext
import org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintSystemCompletionMode
import org.jetbrains.kotlin.resolve.calls.inference.model.ConstraintStorage
import org.jetbrains.kotlin.resolve.calls.inference.model.NewConstraintSystemImpl
import org.jetbrains.kotlin.types.model.StubTypeMarker
import org.jetbrains.kotlin.types.model.TypeConstructorMarker
import org.jetbrains.kotlin.types.model.TypeVariableMarker

abstract class FirInferenceSession {
    companion object {
        val DEFAULT: FirInferenceSession = object : FirStubInferenceSession() {}
    }

    abstract fun  shouldRunCompletion(call: T): Boolean where T : FirResolvable, T : FirStatement
    abstract val currentConstraintStorage: ConstraintStorage

    abstract fun  addPartiallyResolvedCall(call: T) where T : FirResolvable, T : FirStatement
    abstract fun  addCompletedCall(call: T, candidate: Candidate) where T : FirResolvable, T : FirStatement

    abstract fun registerStubTypes(map: Map)

    abstract fun hasSyntheticTypeVariables(): Boolean
    abstract fun isSyntheticTypeVariable(typeVariable: TypeVariableMarker): Boolean
    abstract fun fixSyntheticTypeVariableWithNotEnoughInformation(
        typeVariable: TypeVariableMarker,
        completionContext: ConstraintSystemCompletionContext
    )

    abstract fun inferPostponedVariables(
        lambda: ResolvedLambdaAtom,
        constraintSystemBuilder: ConstraintSystemBuilder,
        completionMode: ConstraintSystemCompletionMode,
        // TODO: diagnostic holder
    ): Map?

    abstract fun clear()
    abstract fun createSyntheticStubTypes(system: NewConstraintSystemImpl): Map
}

abstract class FirStubInferenceSession : FirInferenceSession() {
    override fun  shouldRunCompletion(call: T): Boolean where T : FirResolvable, T : FirStatement = true

    override val currentConstraintStorage: ConstraintStorage
        get() = ConstraintStorage.Empty

    override fun  addPartiallyResolvedCall(call: T) where T : FirResolvable, T : FirStatement {}
    override fun  addCompletedCall(call: T, candidate: Candidate) where T : FirResolvable, T : FirStatement {}

    override fun inferPostponedVariables(
        lambda: ResolvedLambdaAtom,
        constraintSystemBuilder: ConstraintSystemBuilder,
        completionMode: ConstraintSystemCompletionMode
    ): Map? = null

    override fun registerStubTypes(map: Map) {}

    override fun hasSyntheticTypeVariables(): Boolean = false
    override fun isSyntheticTypeVariable(typeVariable: TypeVariableMarker): Boolean = false
    override fun fixSyntheticTypeVariableWithNotEnoughInformation(
        typeVariable: TypeVariableMarker,
        completionContext: ConstraintSystemCompletionContext
    ) {}

    override fun createSyntheticStubTypes(system: NewConstraintSystemImpl): Map = emptyMap()

    override fun clear() {
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy