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

util.CoroutineScopeUtils.kt Maven / Gradle / Ivy

There is a newer version: 2.16.0
Show newest version
/*
 * Copyright 2019-2020 Mamoe Technologies and contributors.
 *
 * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
 * Use of this source code is governed by the GNU AFFERO GENERAL PUBLIC LICENSE version 3 license that can be found through the following link.
 *
 * https://github.com/mamoe/mirai/blob/master/LICENSE
 */

@file:JvmName("CoroutineScopeUtils")

package net.mamoe.mirai.console.util

import kotlinx.coroutines.*
import kotlin.coroutines.CoroutineContext
import kotlin.coroutines.EmptyCoroutineContext

@ConsoleExperimentalApi
public object CoroutineScopeUtils {
    @JvmStatic
    @ConsoleExperimentalApi
    public fun CoroutineContext.overrideWithSupervisorJob(name: String? = null): CoroutineContext =
        this + NamedSupervisorJob(name ?: "", this[Job])

    @JvmStatic
    @ConsoleExperimentalApi
    public fun CoroutineScope.childScope(
        name: String? = null,
        context: CoroutineContext = EmptyCoroutineContext
    ): CoroutineScope =
        CoroutineScope(this.childScopeContext(name, context))

    @JvmStatic
    @ConsoleExperimentalApi
    public fun CoroutineScope.childScopeContext(
        name: String? = null,
        context: CoroutineContext = EmptyCoroutineContext
    ): CoroutineContext =
        this.coroutineContext.overrideWithSupervisorJob(name) + context.let {
            if (name != null) it + CoroutineName(name)
            else it
        }
}

@ConsoleExperimentalApi
public class NamedSupervisorJob @JvmOverloads constructor(
    private val name: String,
    parent: Job? = null
) : CompletableJob by SupervisorJob(parent) {
    override fun toString(): String {
        return "NamedSupervisorJob($name)"
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy