Remove senseless contracts

This commit is contained in:
Him188 2020-04-21 14:31:28 +08:00
parent d94b1d3279
commit 069a88e803

View File

@ -20,9 +20,6 @@ import net.mamoe.mirai.event.internal.Handler
import net.mamoe.mirai.event.internal.subscribeInternal import net.mamoe.mirai.event.internal.subscribeInternal
import net.mamoe.mirai.utils.MiraiInternalAPI import net.mamoe.mirai.utils.MiraiInternalAPI
import net.mamoe.mirai.utils.SinceMirai import net.mamoe.mirai.utils.SinceMirai
import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.InvocationKind
import kotlin.contracts.contract
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext
import kotlin.coroutines.EmptyCoroutineContext import kotlin.coroutines.EmptyCoroutineContext
import kotlin.jvm.JvmName import kotlin.jvm.JvmName
@ -125,7 +122,7 @@ interface Listener<in E : Event> : CompletableJob {
* @param concurrency 并发类型. 查看 [Listener.ConcurrencyKind] * @param concurrency 并发类型. 查看 [Listener.ConcurrencyKind]
* *
* @see syncFromEvent 监听一个事件, 并尝试从这个事件中获取一个值. * @see syncFromEvent 监听一个事件, 并尝试从这个事件中获取一个值.
* @see syncFromEventAsync 异步监听一个事件, 并尝试从这个事件中获取一个值. * @see asyncFromEvent 异步监听一个事件, 并尝试从这个事件中获取一个值.
* *
* @see selectMessages `when` 的语法 '选择' 即将到来的一条消息. * @see selectMessages `when` 的语法 '选择' 即将到来的一条消息.
* @see whileSelectMessages `when` 的语法 '选择' 即将到来的所有消息, 直到不满足筛选结果. * @see whileSelectMessages `when` 的语法 '选择' 即将到来的所有消息, 直到不满足筛选结果.
@ -137,17 +134,11 @@ interface Listener<in E : Event> : CompletableJob {
* @see subscribeGroupMessages 监听群消息 DSL * @see subscribeGroupMessages 监听群消息 DSL
* @see subscribeFriendMessages 监听好友消息 DSL * @see subscribeFriendMessages 监听好友消息 DSL
*/ */
@OptIn(ExperimentalContracts::class)
inline fun <reified E : Event> CoroutineScope.subscribe( inline fun <reified E : Event> CoroutineScope.subscribe(
coroutineContext: CoroutineContext = EmptyCoroutineContext, coroutineContext: CoroutineContext = EmptyCoroutineContext,
concurrency: Listener.ConcurrencyKind = Listener.ConcurrencyKind.LOCKED, concurrency: Listener.ConcurrencyKind = Listener.ConcurrencyKind.LOCKED,
noinline handler: suspend E.(E) -> ListeningStatus noinline handler: suspend E.(E) -> ListeningStatus
): Listener<E> { ): Listener<E> = subscribe(E::class, coroutineContext, concurrency, handler)
contract {
callsInPlace(handler, InvocationKind.UNKNOWN)
}
return subscribe(E::class, coroutineContext, concurrency, handler)
}
/** /**
* @see CoroutineScope.subscribe * @see CoroutineScope.subscribe
@ -158,8 +149,7 @@ fun <E : Event> CoroutineScope.subscribe(
coroutineContext: CoroutineContext = EmptyCoroutineContext, coroutineContext: CoroutineContext = EmptyCoroutineContext,
concurrency: Listener.ConcurrencyKind = Listener.ConcurrencyKind.LOCKED, concurrency: Listener.ConcurrencyKind = Listener.ConcurrencyKind.LOCKED,
handler: suspend E.(E) -> ListeningStatus handler: suspend E.(E) -> ListeningStatus
): Listener<E> = ): Listener<E> = eventClass.subscribeInternal(Handler(coroutineContext, concurrency) { it.handler(it); })
eventClass.subscribeInternal(Handler(coroutineContext, concurrency) { it.handler(it); })
/** /**
* 在指定的 [CoroutineScope] 下订阅所有 [E] 及其子类事件. * 在指定的 [CoroutineScope] 下订阅所有 [E] 及其子类事件.
@ -172,36 +162,24 @@ fun <E : Event> CoroutineScope.subscribe(
* *
* @see CoroutineScope.subscribe 获取更多说明 * @see CoroutineScope.subscribe 获取更多说明
*/ */
@OptIn(ExperimentalContracts::class)
inline fun <reified E : Event> CoroutineScope.subscribeAlways( inline fun <reified E : Event> CoroutineScope.subscribeAlways(
coroutineContext: CoroutineContext = EmptyCoroutineContext, coroutineContext: CoroutineContext = EmptyCoroutineContext,
concurrency: Listener.ConcurrencyKind = Listener.ConcurrencyKind.LOCKED, concurrency: Listener.ConcurrencyKind = Listener.ConcurrencyKind.LOCKED,
noinline listener: suspend E.(E) -> Unit noinline listener: suspend E.(E) -> Unit
): Listener<E> { ): Listener<E> = subscribeAlways(E::class, coroutineContext, concurrency, listener)
contract {
callsInPlace(listener, InvocationKind.UNKNOWN)
}
return subscribeAlways(E::class, coroutineContext, concurrency, listener)
}
/** /**
* @see CoroutineScope.subscribeAlways * @see CoroutineScope.subscribeAlways
*/ */
@SinceMirai("0.38.0") @SinceMirai("0.38.0")
@OptIn(ExperimentalContracts::class)
fun <E : Event> CoroutineScope.subscribeAlways( fun <E : Event> CoroutineScope.subscribeAlways(
eventClass: KClass<E>, eventClass: KClass<E>,
coroutineContext: CoroutineContext = EmptyCoroutineContext, coroutineContext: CoroutineContext = EmptyCoroutineContext,
concurrency: Listener.ConcurrencyKind = Listener.ConcurrencyKind.LOCKED, concurrency: Listener.ConcurrencyKind = Listener.ConcurrencyKind.LOCKED,
listener: suspend E.(E) -> Unit listener: suspend E.(E) -> Unit
): Listener<E> { ): Listener<E> = eventClass.subscribeInternal(
contract {
callsInPlace(listener, InvocationKind.UNKNOWN)
}
return eventClass.subscribeInternal(
Handler(coroutineContext, concurrency) { it.listener(it); ListeningStatus.LISTENING } Handler(coroutineContext, concurrency) { it.listener(it); ListeningStatus.LISTENING }
) )
}
/** /**
* 在指定的 [CoroutineScope] 下订阅所有 [E] 及其子类事件. * 在指定的 [CoroutineScope] 下订阅所有 [E] 及其子类事件.
@ -228,10 +206,9 @@ fun <E : Event> CoroutineScope.subscribeOnce(
eventClass: KClass<E>, eventClass: KClass<E>,
coroutineContext: CoroutineContext = EmptyCoroutineContext, coroutineContext: CoroutineContext = EmptyCoroutineContext,
listener: suspend E.(E) -> Unit listener: suspend E.(E) -> Unit
): Listener<E> = ): Listener<E> = eventClass.subscribeInternal(
eventClass.subscribeInternal(
Handler(coroutineContext, Listener.ConcurrencyKind.LOCKED) { it.listener(it); ListeningStatus.STOPPED } Handler(coroutineContext, Listener.ConcurrencyKind.LOCKED) { it.listener(it); ListeningStatus.STOPPED }
) )
// //
// 以下为带筛选 Bot 的监听 // 以下为带筛选 Bot 的监听
@ -268,10 +245,9 @@ fun <E : BotEvent> Bot.subscribe(
coroutineContext: CoroutineContext = EmptyCoroutineContext, coroutineContext: CoroutineContext = EmptyCoroutineContext,
concurrency: Listener.ConcurrencyKind = Listener.ConcurrencyKind.LOCKED, concurrency: Listener.ConcurrencyKind = Listener.ConcurrencyKind.LOCKED,
handler: suspend E.(E) -> ListeningStatus handler: suspend E.(E) -> ListeningStatus
): Listener<E> = ): Listener<E> = eventClass.subscribeInternal(
eventClass.subscribeInternal(
Handler(coroutineContext, concurrency) { if (it.bot === this) it.handler(it) else ListeningStatus.LISTENING } Handler(coroutineContext, concurrency) { if (it.bot === this) it.handler(it) else ListeningStatus.LISTENING }
) )
/** /**
@ -303,11 +279,9 @@ fun <E : BotEvent> Bot.subscribeAlways(
coroutineContext: CoroutineContext = EmptyCoroutineContext, coroutineContext: CoroutineContext = EmptyCoroutineContext,
concurrency: Listener.ConcurrencyKind = Listener.ConcurrencyKind.CONCURRENT, concurrency: Listener.ConcurrencyKind = Listener.ConcurrencyKind.CONCURRENT,
listener: suspend E.(E) -> Unit listener: suspend E.(E) -> Unit
): Listener<E> { ): Listener<E> = eventClass.subscribeInternal(
return eventClass.subscribeInternal(
Handler(coroutineContext, concurrency) { if (it.bot === this) it.listener(it); ListeningStatus.LISTENING } Handler(coroutineContext, concurrency) { if (it.bot === this) it.listener(it); ListeningStatus.LISTENING }
) )
}
/** /**
* [Bot] [CoroutineScope] 下订阅所有 [E] 及其子类事件. * [Bot] [CoroutineScope] 下订阅所有 [E] 及其子类事件.