DisabledLocalClosureContainer

Provides LocalClosureContainer that ignores local changes and returns closure.

Constructors

Link copied to clipboard
fun DisabledLocalClosureContainer(closure: DispatchClosure = EmptyDispatchClosure)

Functions

Link copied to clipboard
open override fun applyTo(closure: DispatchClosure): DispatchClosure

Returns closure with local changes applied.

Link copied to clipboard
open override fun <T : DispatchClosure.Element> find(key: DispatchClosure.Key<T>): T?

Returns Element associated with the key or null.

Link copied to clipboard
open operator override fun <T : DispatchClosure.Element> get(key: DispatchClosure.Key<T>): T

Returns Element associated with the key or throws MissingClosureElementException.

Link copied to clipboard
open operator override fun minus(key: DispatchClosure.Key<*>): DispatchClosure

Returns a closure without the element with a given key

Link copied to clipboard
open operator fun plus(closure: DispatchClosure): DispatchClosure

Combines this closure with incoming closure. If both closures contain elements with the same keys, the ones from the incoming closure remain.

Link copied to clipboard

Registers a new frame that creates a new hierarchy of local changes.

Link copied to clipboard

Registers local change of a closure.

Link copied to clipboard
open override fun removeFrame(frame: LocalClosureContainer.Frame)

Removes a frame along with local changes that occurred.

Link copied to clipboard
open override fun removeSlot(slot: LocalClosureContainer.Slot)

Undo local change associated with a slot

Link copied to clipboard

Returns elements form this DispatchClosure as a Map.

Properties

Link copied to clipboard
open override val key: LocalClosureContainer.Key

Key of this element.

Extensions

Link copied to clipboard
Link copied to clipboard
fun DispatchClosure.launchForeground(context: CoroutineContext = EmptyCoroutineContext, start: CoroutineStart = CoroutineStart.DEFAULT, block: suspend CoroutineScope.() -> Unit): Job

Launches a foreground job using this closure. By default, it's launched in a scope provided by DispatchCoroutineScope. This behaviour might be changed by dispatchJobIn or joinDispatchJob. Because this function uses local closure, calling it outside dispatch should not be done, because it might result in unexpected behaviour.

Link copied to clipboard

Returns this closure with local changes.

Link copied to clipboard
inline fun DispatchClosure.registeringJob(closure: DispatchClosure = EmptyDispatchClosure, newFrame: Boolean = false, block: DispatchClosure.() -> Unit): Job

Runs block that must register a foreground job. It adds SingleForegroundJobRegistry to local closure to allow proper job registration. Local closure change creates a new frame if newFrame is true.

Link copied to clipboard
inline fun <T> DispatchClosure.withLocalClosure(closure: DispatchClosure, newFrame: Boolean = false, block: DispatchClosure.() -> T): T

Changes LocalClosureContainer with a given closure for a time of block execution.