From 89784db637489f3eecc945a6bf8ec4dc6028cf82 Mon Sep 17 00:00:00 2001 From: Him188 Date: Wed, 19 Aug 2020 22:25:42 +0800 Subject: [PATCH] Update to Kotlin 1.4.0, kotlinx.serialization 1.0.0-RC, yamlkt 0.4.0 --- backend/codegen/README.MD | 87 ------------------- backend/mirai-console/README.MD | 87 ------------------- backend/mirai-console/build.gradle.kts | 3 +- .../internal/plugin/JarPluginLoaderImpl.kt | 2 +- .../setting/SettingStorage internal.kt | 4 +- .../internal/setting/collectionUtil.kt | 6 +- .../internal/setting/serializerHelper.kt | 6 +- .../mamoe/mirai/console/plugin/description.kt | 8 +- 8 files changed, 16 insertions(+), 187 deletions(-) delete mode 100644 backend/codegen/README.MD delete mode 100644 backend/mirai-console/README.MD diff --git a/backend/codegen/README.MD b/backend/codegen/README.MD deleted file mode 100644 index 6d5db89bc..000000000 --- a/backend/codegen/README.MD +++ /dev/null @@ -1,87 +0,0 @@ -# Mirai Console -你可以在全平台运行Mirai高效率机器人框架 -### Mirai Console提供了6个版本以满足各种需要 -#### 所有版本的Mirai Console API相同 插件系统相同 - -| 名字 | 介绍 | -|:------------------------|:------------------------------| -| Mirai-Console-Pure | 最纯净版, CLI环境, 通过标准输入与标准输出 交互 | -| Mirai-Console-Terminal | (UNIX)Terminal环境 提供简洁的富文本控制台 | -| Mirai-Console-Android | 安卓APP (TODO) | -| Mirai-Console-Graphical | JavaFX的图形化界面 (.jar/.exe/.dmg) | -| Mirai-Console-WebPanel | Web Panel操作(TODO) | -| Mirai-Console-Ios | IOS APP (TODO) | - - -### 如何选择版本 -1: Mirai-Console-Pure 兼容性最高, 在其他都表现不佳的时候请使用
-2: 以系统区分 -```kotlin - return when(operatingSystem){ - WINDOWS -> listOf("Graphical","WebPanel","Pure") - MAC_OS -> listOf("Graphical","Terminal","WebPanel","Pure") - LINUX -> listOf("Terminal","Pure") - ANDROID -> listOf("Android","Pure","WebPanel") - IOS -> listOf("Ios") - else -> listOf("Pure") - } -``` -3: 以策略区分 -```kotlin - return when(task){ - 体验 -> listOf("Graphical","Terminal","WebPanel","Android","Pure") - 测试插件 -> listOf("Pure") - 调试插件 -> byOperatingSystem() - 稳定挂机 -> listOf("Terminal","Pure") - else -> listOf("Pure") - } -``` - - -#### More Importantly, Mirai Console support Plugins, tells the bot what to do -#### Mirai Console 支持插件系统, 你可以自己开发或使用公开的插件来逻辑化机器人, 如群管 -
- -#### download 下载 -#### how to get/write plugins 如何获取/写插件 -
-
- -### how to use(如何使用) -#### how to run Mirai Console - - - - -#### how to add plugins - - - - - diff --git a/backend/mirai-console/README.MD b/backend/mirai-console/README.MD deleted file mode 100644 index 6d5db89bc..000000000 --- a/backend/mirai-console/README.MD +++ /dev/null @@ -1,87 +0,0 @@ -# Mirai Console -你可以在全平台运行Mirai高效率机器人框架 -### Mirai Console提供了6个版本以满足各种需要 -#### 所有版本的Mirai Console API相同 插件系统相同 - -| 名字 | 介绍 | -|:------------------------|:------------------------------| -| Mirai-Console-Pure | 最纯净版, CLI环境, 通过标准输入与标准输出 交互 | -| Mirai-Console-Terminal | (UNIX)Terminal环境 提供简洁的富文本控制台 | -| Mirai-Console-Android | 安卓APP (TODO) | -| Mirai-Console-Graphical | JavaFX的图形化界面 (.jar/.exe/.dmg) | -| Mirai-Console-WebPanel | Web Panel操作(TODO) | -| Mirai-Console-Ios | IOS APP (TODO) | - - -### 如何选择版本 -1: Mirai-Console-Pure 兼容性最高, 在其他都表现不佳的时候请使用
-2: 以系统区分 -```kotlin - return when(operatingSystem){ - WINDOWS -> listOf("Graphical","WebPanel","Pure") - MAC_OS -> listOf("Graphical","Terminal","WebPanel","Pure") - LINUX -> listOf("Terminal","Pure") - ANDROID -> listOf("Android","Pure","WebPanel") - IOS -> listOf("Ios") - else -> listOf("Pure") - } -``` -3: 以策略区分 -```kotlin - return when(task){ - 体验 -> listOf("Graphical","Terminal","WebPanel","Android","Pure") - 测试插件 -> listOf("Pure") - 调试插件 -> byOperatingSystem() - 稳定挂机 -> listOf("Terminal","Pure") - else -> listOf("Pure") - } -``` - - -#### More Importantly, Mirai Console support Plugins, tells the bot what to do -#### Mirai Console 支持插件系统, 你可以自己开发或使用公开的插件来逻辑化机器人, 如群管 -
- -#### download 下载 -#### how to get/write plugins 如何获取/写插件 -
-
- -### how to use(如何使用) -#### how to run Mirai Console - - - - -#### how to add plugins - - - - - diff --git a/backend/mirai-console/build.gradle.kts b/backend/mirai-console/build.gradle.kts index 556a66ab5..80c2a2fec 100644 --- a/backend/mirai-console/build.gradle.kts +++ b/backend/mirai-console/build.gradle.kts @@ -51,6 +51,7 @@ kotlin { useExperimentalAnnotation("kotlin.ExperimentalUnsignedTypes") useExperimentalAnnotation("kotlin.experimental.ExperimentalTypeInference") useExperimentalAnnotation("kotlin.contracts.ExperimentalContracts") + useExperimentalAnnotation("kotlinx.serialization.ExperimentalSerializationApi") } } } @@ -62,7 +63,7 @@ dependencies { implementation(kotlinx("serialization-core", Versions.serialization)) implementation(kotlin("reflect")) - implementation("net.mamoe.yamlkt:yamlkt:0.3.3") + implementation("net.mamoe.yamlkt:yamlkt:0.4.0") implementation("org.jetbrains.kotlinx:atomicfu:${Versions.atomicFU}") api("org.jetbrains:annotations:19.0.0") api(kotlinx("coroutines-jdk8", Versions.coroutines)) diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/plugin/JarPluginLoaderImpl.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/plugin/JarPluginLoaderImpl.kt index 3f9bd34c2..1902510e6 100644 --- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/plugin/JarPluginLoaderImpl.kt +++ b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/plugin/JarPluginLoaderImpl.kt @@ -63,7 +63,7 @@ internal object JarPluginLoaderImpl : url.readText() }.fold( onSuccess = { yaml -> - Yaml.nonStrict.parse(JvmPluginDescription.serializer(), yaml) + Yaml.nonStrict.decodeFromString(JvmPluginDescription.serializer(), yaml) }, onFailure = { logger.error("Cannot load plugin file ${file.name}", it) diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/setting/SettingStorage internal.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/setting/SettingStorage internal.kt index 1eab01dd7..4e73755a0 100644 --- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/setting/SettingStorage internal.kt +++ b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/setting/SettingStorage internal.kt @@ -145,7 +145,7 @@ internal open class MultiFileSettingStorageImpl( "or 'setting' is an object or has a constructor which either has no parameters or all parameters of which are optional" ) if (file.exists() && file.isFile && file.canRead()) { - Yaml.default.parse(instance.updaterSerializer, file.readText()) + Yaml.default.decodeFromString(instance.updaterSerializer, file.readText()) } instance } @@ -170,7 +170,7 @@ internal open class MultiFileSettingStorageImpl( val file = getSettingFile(holder, this) if (file.exists() && file.isFile && file.canRead()) { - file.writeText(Yaml.default.stringify(setting.updaterSerializer, Unit)) + file.writeText(Yaml.default.encodeToString(setting.updaterSerializer, Unit)) } } } diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/setting/collectionUtil.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/setting/collectionUtil.kt index e9bb8e0bd..528293c23 100644 --- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/setting/collectionUtil.kt +++ b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/setting/collectionUtil.kt @@ -11,7 +11,7 @@ package net.mamoe.mirai.console.internal.setting -import kotlinx.serialization.UnsafeSerializationApi +import kotlinx.serialization.InternalSerializationApi import kotlinx.serialization.serializer import net.mamoe.yamlkt.Yaml import kotlin.reflect.KClass @@ -452,10 +452,10 @@ internal inline fun MutableSet.observable(crossinline onChanged: () -> Un } -@OptIn(UnsafeSerializationApi::class) +@OptIn(InternalSerializationApi::class) internal fun Any.smartCastPrimitive(clazz: KClass): R { kotlin.runCatching { - return Yaml.default.parse(clazz.serializer(), this.toString()) + return Yaml.default.decodeFromString(clazz.serializer(), this.toString()) }.getOrElse { throw IllegalArgumentException("Cannot cast '$this' to ${clazz.qualifiedName}", it) } diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/setting/serializerHelper.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/setting/serializerHelper.kt index ff5c17e9c..c74954ab7 100644 --- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/setting/serializerHelper.kt +++ b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/setting/serializerHelper.kt @@ -9,8 +9,9 @@ package net.mamoe.mirai.console.internal.setting +import kotlinx.serialization.ExperimentalSerializationApi +import kotlinx.serialization.InternalSerializationApi import kotlinx.serialization.KSerializer -import kotlinx.serialization.UnsafeSerializationApi import kotlinx.serialization.builtins.* import kotlinx.serialization.serializer import net.mamoe.yamlkt.YamlDynamicSerializer @@ -24,7 +25,7 @@ import kotlin.reflect.KType * Copied from kotlinx.serialization, modifications are marked with "/* mamoe modify */" * Copyright 2017-2020 JetBrains s.r.o. */ -@OptIn(UnsafeSerializationApi::class) +@OptIn(InternalSerializationApi::class, ExperimentalSerializationApi::class) @Suppress( "UNCHECKED_CAST", "NO_REFLECTION_IN_CLASS_PATH", @@ -81,7 +82,6 @@ internal fun serializerMirai(type: KType): KSerializer { * Copied from kotlinx.serialization, modifications are marked with "/* mamoe modify */" * Copyright 2017-2020 JetBrains s.r.o. */ -@OptIn(UnsafeSerializationApi::class) @Suppress( "UNCHECKED_CAST", "NO_REFLECTION_IN_CLASS_PATH", diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/plugin/description.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/plugin/description.kt index efc3013a9..ae7cfe85a 100644 --- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/plugin/description.kt +++ b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/plugin/description.kt @@ -13,6 +13,7 @@ import com.vdurmont.semver4j.Semver import kotlinx.serialization.KSerializer import kotlinx.serialization.Serializable import kotlinx.serialization.builtins.serializer +import kotlinx.serialization.encodeToString import net.mamoe.mirai.console.internal.setting.SemverAsStringSerializerIvy import net.mamoe.mirai.console.internal.setting.map import net.mamoe.yamlkt.Yaml @@ -65,8 +66,6 @@ public data class PluginDependency( * 版本遵循 [语义化版本 2.0 规范](https://semver.org/lang/zh-CN/), * * 允许 [Apache Ivy 格式版本号](http://ant.apache.org/ivy/history/latest-milestone/ivyfile/dependency.html) - * - * @see versionKind 版本号类型 */ public val version: @Serializable(SemverAsStringSerializerIvy::class) Semver? = null, /** @@ -86,7 +85,10 @@ public data class PluginDependency( serializer = { it }, deserializer = { any -> when (any) { - is Map<*, *> -> Yaml.nonStrict.parse(serializer(), Yaml.nonStrict.stringify(any)) + is Map<*, *> -> Yaml.nonStrict.decodeFromString( + serializer(), + Yaml.nonStrict.encodeToString>(any) + ) else -> PluginDependency(any.toString()) } }