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

org.jetbrains.kotlin.analysis.api.resolution.KaCallInfo.kt Maven / Gradle / Ivy

/*
 * Copyright 2010-2024 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.analysis.api.resolution

import org.jetbrains.kotlin.analysis.api.diagnostics.KaDiagnostic
import org.jetbrains.kotlin.analysis.api.lifetime.KaLifetimeOwner
import org.jetbrains.kotlin.analysis.api.symbols.KaConstructorSymbol

/**
 * Call information at call site.
 */
public sealed interface KaCallInfo : KaLifetimeOwner

/**
 * Successfully resolved call.
 */
public interface KaSuccessCallInfo : KaCallInfo {
    public val call: KaCall
}

/**
 * Call that contains errors.
 */
public interface KaErrorCallInfo : KaCallInfo {
    public val candidateCalls: List
    public val diagnostic: KaDiagnostic
}

public val KaCallInfo.calls: List
    get() = when (this) {
        is KaErrorCallInfo -> candidateCalls
        is KaSuccessCallInfo -> listOf(call)
    }

public inline fun  KaCallInfo.singleCallOrNull(): T? {
    return calls.singleOrNull { it is T } as T?
}

public fun KaCallInfo.singleFunctionCallOrNull(): KaFunctionCall<*>? = singleCallOrNull()
public fun KaCallInfo.singleVariableAccessCall(): KaVariableAccessCall? = singleCallOrNull()

@Suppress("UNCHECKED_CAST")
public fun KaCallInfo.singleConstructorCallOrNull(): KaFunctionCall? =
    singleCallOrNull>()?.takeIf { it.symbol is KaConstructorSymbol } as KaFunctionCall?

public inline fun  KaCallInfo.successfulCallOrNull(): T? {
    return (this as? KaSuccessCallInfo)?.call as? T
}

public fun KaCallInfo.successfulFunctionCallOrNull(): KaFunctionCall<*>? = successfulCallOrNull()
public fun KaCallInfo.successfulVariableAccessCall(): KaVariableAccessCall? = successfulCallOrNull()

@Suppress("UNCHECKED_CAST")
public fun KaCallInfo.successfulConstructorCallOrNull(): KaFunctionCall? =
    successfulCallOrNull>()?.takeIf { it.symbol is KaConstructorSymbol } as KaFunctionCall?




© 2015 - 2025 Weber Informatics LLC | Privacy Policy