
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