Commit 9ad8dfa7 authored by Him188's avatar Him188

Make crossinline

parent be6cc718
...@@ -33,7 +33,7 @@ import kotlin.reflect.KClass ...@@ -33,7 +33,7 @@ import kotlin.reflect.KClass
@SinceMirai("0.39.0") @SinceMirai("0.39.0")
suspend inline fun <reified E : Event, R : Any> syncFromEvent( suspend inline fun <reified E : Event, R : Any> syncFromEvent(
timeoutMillis: Long = -1, timeoutMillis: Long = -1,
noinline mapper: suspend E.(E) -> R?// 不要 crossinline: crossinline 后 stacktrace 会不正常 crossinline mapper: suspend E.(E) -> R?
): R { ): R {
require(timeoutMillis == -1L || timeoutMillis > 0) { "timeoutMillis must be -1 or > 0" } require(timeoutMillis == -1L || timeoutMillis > 0) { "timeoutMillis must be -1 or > 0" }
...@@ -63,7 +63,7 @@ suspend inline fun <reified E : Event, R : Any> syncFromEvent( ...@@ -63,7 +63,7 @@ suspend inline fun <reified E : Event, R : Any> syncFromEvent(
@SinceMirai("0.39.0") @SinceMirai("0.39.0")
suspend inline fun <reified E : Event, R : Any> syncFromEventOrNull( suspend inline fun <reified E : Event, R : Any> syncFromEventOrNull(
timeoutMillis: Long, timeoutMillis: Long,
noinline mapper: suspend E.(E) -> R? // 不要 crossinline: crossinline 后 stacktrace 会不正常 crossinline mapper: suspend E.(E) -> R?
): R? { ): R? {
require(timeoutMillis > 0) { "timeoutMillis must be > 0" } require(timeoutMillis > 0) { "timeoutMillis must be > 0" }
...@@ -87,7 +87,7 @@ suspend inline fun <reified E : Event, R : Any> syncFromEventOrNull( ...@@ -87,7 +87,7 @@ suspend inline fun <reified E : Event, R : Any> syncFromEventOrNull(
inline fun <reified E : Event, R : Any> CoroutineScope.asyncFromEventOrNull( inline fun <reified E : Event, R : Any> CoroutineScope.asyncFromEventOrNull(
timeoutMillis: Long, timeoutMillis: Long,
coroutineContext: CoroutineContext = EmptyCoroutineContext, coroutineContext: CoroutineContext = EmptyCoroutineContext,
noinline mapper: suspend E.(E) -> R? // 不要 crossinline: crossinline 后 stacktrace 会不正常 crossinline mapper: suspend E.(E) -> R?
): Deferred<R?> { ): Deferred<R?> {
require(timeoutMillis == -1L || timeoutMillis > 0) { "timeoutMillis must be -1 or > 0" } require(timeoutMillis == -1L || timeoutMillis > 0) { "timeoutMillis must be -1 or > 0" }
return this.async(coroutineContext) { return this.async(coroutineContext) {
...@@ -111,7 +111,7 @@ inline fun <reified E : Event, R : Any> CoroutineScope.asyncFromEventOrNull( ...@@ -111,7 +111,7 @@ inline fun <reified E : Event, R : Any> CoroutineScope.asyncFromEventOrNull(
inline fun <reified E : Event, R : Any> CoroutineScope.asyncFromEvent( inline fun <reified E : Event, R : Any> CoroutineScope.asyncFromEvent(
timeoutMillis: Long = -1, timeoutMillis: Long = -1,
coroutineContext: CoroutineContext = EmptyCoroutineContext, coroutineContext: CoroutineContext = EmptyCoroutineContext,
noinline mapper: suspend E.(E) -> R? // 不要 crossinline: crossinline 后 stacktrace 会不正常 crossinline mapper: suspend E.(E) -> R?
): Deferred<R> { ): Deferred<R> {
require(timeoutMillis == -1L || timeoutMillis > 0) { "timeoutMillis must be -1 or > 0" } require(timeoutMillis == -1L || timeoutMillis > 0) { "timeoutMillis must be -1 or > 0" }
return this.async(coroutineContext) { return this.async(coroutineContext) {
...@@ -124,11 +124,12 @@ inline fun <reified E : Event, R : Any> CoroutineScope.asyncFromEvent( ...@@ -124,11 +124,12 @@ inline fun <reified E : Event, R : Any> CoroutineScope.asyncFromEvent(
//// internal //// internal
////////////// //////////////
@JvmSynthetic
@PublishedApi @PublishedApi
internal suspend fun <E : Event, R> syncFromEventImpl( internal suspend inline fun <E : Event, R> syncFromEventImpl(
eventClass: KClass<E>, eventClass: KClass<E>,
coroutineScope: CoroutineScope, coroutineScope: CoroutineScope,
mapper: suspend E.(E) -> R? crossinline mapper: suspend E.(E) -> R?
): R = suspendCancellableCoroutine { cont -> ): R = suspendCancellableCoroutine { cont ->
coroutineScope.subscribe(eventClass) { coroutineScope.subscribe(eventClass) {
cont.resumeWith(kotlin.runCatching { cont.resumeWith(kotlin.runCatching {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment