| /* |
| * Copyright 2016-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. |
| */ |
| |
| package kotlinx.coroutines.experimental |
| |
| import kotlinx.coroutines.experimental.NonCancellable.isActive |
| import kotlinx.coroutines.experimental.selects.* |
| import kotlin.coroutines.experimental.* |
| |
| /** |
| * A non-cancelable job that is always [active][isActive]. It is designed for [withContext] function |
| * to prevent cancellation of code blocks that need to be executed without cancellation. |
| * |
| * Use it like this: |
| * ``` |
| * withContext(NonCancellable) { |
| * // this code will not be cancelled |
| * } |
| * ``` |
| */ |
| public object NonCancellable : AbstractCoroutineContextElement(Job), Job { |
| /** Always returns `true`. */ |
| override val isActive: Boolean get() = true |
| |
| /** Always returns `false`. */ |
| override val isCompleted: Boolean get() = false |
| |
| /** Always returns `false`. */ |
| override val isCancelled: Boolean get() = false |
| |
| /** Always returns `false`. */ |
| override fun start(): Boolean = false |
| |
| /** Always throws [UnsupportedOperationException]. */ |
| override suspend fun join() { |
| throw UnsupportedOperationException("This job is always active") |
| } |
| |
| override val onJoin: SelectClause0 |
| get() = throw UnsupportedOperationException("This job is always active") |
| |
| /** Always throws [IllegalStateException]. */ |
| override fun getCancellationException(): CancellationException = throw IllegalStateException("This job is always active") |
| |
| /** Always returns [NonDisposableHandle]. */ |
| @Suppress("OverridingDeprecatedMember") |
| override fun invokeOnCompletion(handler: CompletionHandler): DisposableHandle = |
| NonDisposableHandle |
| |
| /** Always returns [NonDisposableHandle]. */ |
| @Suppress("OverridingDeprecatedMember") |
| override fun invokeOnCompletion(handler: CompletionHandler, onCancelling: Boolean): DisposableHandle = |
| NonDisposableHandle |
| |
| /** Always returns [NonDisposableHandle]. */ |
| @Suppress("OverridingDeprecatedMember") |
| override fun invokeOnCompletion(onCancelling_: Boolean, handler: CompletionHandler): DisposableHandle = |
| NonDisposableHandle |
| |
| /** Always returns [NonDisposableHandle]. */ |
| override fun invokeOnCompletion(onCancelling: Boolean, invokeImmediately: Boolean, handler: CompletionHandler): DisposableHandle = |
| NonDisposableHandle |
| |
| /** Always returns `false`. */ |
| override fun cancel(cause: Throwable?): Boolean = false |
| |
| /** Always returns [emptySequence]. */ |
| override val children: Sequence<Job> |
| get() = emptySequence() |
| |
| /** Always returns [NonDisposableHandle] and does not do anything. */ |
| @Suppress("OverridingDeprecatedMember") |
| override fun attachChild(child: Job): DisposableHandle = NonDisposableHandle |
| |
| /** Does not do anything. */ |
| @Suppress("OverridingDeprecatedMember") |
| override fun cancelChildren(cause: Throwable?) {} |
| } |