Introduce AbstractJvmPlugin

This commit is contained in:
Him188 2020-05-25 17:55:41 +08:00
parent f1b0bf7e68
commit 8af7e0b925

View File

@ -23,6 +23,7 @@ import net.mamoe.mirai.utils.MiraiLogger
import java.io.File import java.io.File
import java.util.* import java.util.*
import java.util.concurrent.locks.ReentrantLock import java.util.concurrent.locks.ReentrantLock
import kotlin.collections.AbstractCollection
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext
import kotlin.coroutines.EmptyCoroutineContext import kotlin.coroutines.EmptyCoroutineContext
import kotlin.reflect.KProperty import kotlin.reflect.KProperty
@ -58,30 +59,16 @@ interface JvmPlugin : Plugin, CoroutineScope {
} }
/** /**
* Java 插件的父类 * [JavaPlugin] [KotlinPlugin] 的父类
*/ */
abstract class JavaPlugin @JvmOverloads constructor( sealed class AbstractJvmPlugin(parentCoroutineContext: CoroutineContext) : JvmPluginImpl(parentCoroutineContext) {
parentCoroutineContext: CoroutineContext = EmptyCoroutineContext
) : JvmPlugin, JvmPluginImpl(parentCoroutineContext) {
/**
* Java API Scheduler
*/
val scheduler: JavaPluginScheduler =
JavaPluginScheduler(this.coroutineContext)
}
abstract class KotlinPlugin @JvmOverloads constructor(
parentCoroutineContext: CoroutineContext = EmptyCoroutineContext
) : JvmPlugin, JvmPluginImpl(parentCoroutineContext) {
abstract inner class PluginSetting : Setting() { abstract inner class PluginSetting : Setting() {
private val track = private val track =
@Suppress("LeakingThis") @Suppress("LeakingThis")
loader.settingStorage.trackOn(this) loader.settingStorage.trackOn(this)
init { init {
this@KotlinPlugin.job.invokeOnCompletion { this@AbstractJvmPlugin.job.invokeOnCompletion {
track.close() track.close()
} }
} }
@ -92,6 +79,27 @@ abstract class KotlinPlugin @JvmOverloads constructor(
} }
} }
/**
* Java 插件的父类
*/
abstract class JavaPlugin @JvmOverloads constructor(
parentCoroutineContext: CoroutineContext = EmptyCoroutineContext
) : JvmPlugin, AbstractJvmPlugin(parentCoroutineContext) {
/**
* Java API Scheduler
*/
val scheduler: JavaPluginScheduler =
JavaPluginScheduler(this.coroutineContext)
}
/**
* Kotlin 插件的父类
*/
abstract class KotlinPlugin @JvmOverloads constructor(
parentCoroutineContext: CoroutineContext = EmptyCoroutineContext
) : JvmPlugin, AbstractJvmPlugin(parentCoroutineContext)
internal val <T> T.job: Job where T : CoroutineScope, T : Plugin get() = this.coroutineContext[Job]!! internal val <T> T.job: Job where T : CoroutineScope, T : Plugin get() = this.coroutineContext[Job]!!
internal sealed class JvmPluginImpl( internal sealed class JvmPluginImpl(