Migrate to Kotlin 1.5.30

This commit is contained in:
Him188 2021-08-10 04:20:08 +08:00
parent 37545dad5f
commit 03ebfd2278
10 changed files with 134 additions and 57 deletions

View File

@ -16,13 +16,13 @@ plugins {
kotlin {
sourceSets {
all {
languageSettings.useExperimentalAnnotation("kotlin.Experimental")
languageSettings.useExperimentalAnnotation("kotlin.RequiresOptIn")
languageSettings.optIn("kotlin.Experimental")
languageSettings.optIn("kotlin.RequiresOptIn")
languageSettings.progressiveMode = true
languageSettings.useExperimentalAnnotation("net.mamoe.mirai.utils.MiraiInternalAPI")
languageSettings.useExperimentalAnnotation("kotlin.ExperimentalUnsignedTypes")
languageSettings.useExperimentalAnnotation("kotlin.experimental.ExperimentalTypeInference")
languageSettings.useExperimentalAnnotation("kotlin.contracts.ExperimentalContracts")
languageSettings.optIn("net.mamoe.mirai.utils.MiraiInternalAPI")
languageSettings.optIn("kotlin.ExperimentalUnsignedTypes")
languageSettings.optIn("kotlin.experimental.ExperimentalTypeInference")
languageSettings.optIn("kotlin.contracts.ExperimentalContracts")
}
}
}

View File

@ -32,15 +32,15 @@ dependencies {
compileAndTestRuntime(`mirai-core-utils`)
compileAndTestRuntime(`kotlin-stdlib-jdk8`)
compileAndTestRuntime(`kotlinx-atomicfu`)
compileAndTestRuntime(`kotlinx-coroutines-core`)
compileAndTestRuntime(`kotlinx-serialization-core`)
compileAndTestRuntime(`kotlinx-serialization-json`)
compileAndTestRuntime(`kotlinx-atomicfu-jvm`)
compileAndTestRuntime(`kotlinx-coroutines-core-jvm`)
compileAndTestRuntime(`kotlinx-serialization-core-jvm`)
compileAndTestRuntime(`kotlinx-serialization-json-jvm`)
compileAndTestRuntime(`kotlin-reflect`)
implementation(project(":mirai-console-compiler-annotations"))
smartImplementation(yamlkt)
smartImplementation(`yamlkt-jvm`)
smartImplementation(`jetbrains-annotations`)
smartImplementation(`caller-finder`)
smartApi(`kotlinx-coroutines-jdk8`)

View File

@ -17,9 +17,8 @@ import kotlin.annotation.AnnotationTarget.*
/**
* 表明这个 API 是为了让 Java 使用者调用更方便. Kotlin 使用者不应该使用这些 API.
*/
@Retention(AnnotationRetention.SOURCE)
@RequiresOptIn(level = RequiresOptIn.Level.ERROR)
@Target(PROPERTY, FUNCTION, TYPE, CLASS)
@Target(PROPERTY, FUNCTION, CLASS)
internal annotation class JavaFriendlyApi
/**

View File

@ -16,12 +16,14 @@ import net.mamoe.mirai.console.data.MemoryPluginDataStorage
import net.mamoe.mirai.console.data.PluginDataStorage
import net.mamoe.mirai.console.plugin.jvm.JvmPluginLoader
import net.mamoe.mirai.console.plugin.loader.PluginLoader
import net.mamoe.mirai.console.util.ConsoleExperimentalApi
import net.mamoe.mirai.console.util.ConsoleInput
import net.mamoe.mirai.console.util.ConsoleInternalApi
import net.mamoe.mirai.console.util.SemVersion
import net.mamoe.mirai.message.data.Message
import net.mamoe.mirai.utils.*
import net.mamoe.mirai.utils.BotConfiguration
import net.mamoe.mirai.utils.LoginSolver
import net.mamoe.mirai.utils.MiraiLogger
import net.mamoe.mirai.utils.PlatformLogger
import java.nio.file.Path
import kotlin.coroutines.Continuation
import kotlin.coroutines.CoroutineContext
@ -34,7 +36,6 @@ fun initTestEnvironment() {
object : MiraiConsoleImplementation {
override val rootPath: Path = createTempDirectory()
@ConsoleExperimentalApi
override val frontEndDescription: MiraiConsoleFrontEndDescription
get() = object : MiraiConsoleFrontEndDescription {
override val name: String

View File

@ -162,10 +162,9 @@ fun Project.configureKotlinExperimentalUsages() {
val sourceSets = kotlinSourceSets ?: return
for (target in sourceSets) target.languageSettings.run {
enableLanguageFeature("InlineClasses")
progressiveMode = true
experimentalAnnotations.forEach { a ->
useExperimentalAnnotation(a)
optIn(a)
}
}
}

View File

@ -7,64 +7,137 @@
* https://github.com/mamoe/mirai/blob/master/LICENSE
*/
@file:Suppress("MemberVisibilityCanBePrivate", "ObjectPropertyName", "unused")
@file:Suppress("ObjectPropertyName", "ObjectPropertyName", "unused", "MemberVisibilityCanBePrivate")
import org.gradle.api.attributes.Attribute
import org.gradle.kotlin.dsl.*
import org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler
object Versions {
const val core = "2.6.4-dev-kt15" // WARNING: This might not be up-to-date since included in mirai build.
const val console = "2.6.4-dev-kt15"
const val consoleGraphical = "0.0.7"
const val consoleTerminal = console
const val project = "2.8.0-M1"
const val kotlinCompiler = "1.5.10"
const val kotlinStdlib = "1.5.10"
const val core = "2.7.0"
const val console = project
const val consoleTerminal = project
const val kotlinIntellijPlugin = "211-1.5.20-release-284-IJ7442.40" // keep to newest as kotlinCompiler
const val intellij = "2021.1.1" // don't update easily unless you want your disk space -= 500MB
const val kotlinCompiler = "1.5.30"
const val kotlinStdlib = "1.5.30"
const val dokka = "1.4.32"
const val coroutines = "1.5.0"
const val atomicFU = "0.16.1"
const val serialization = "1.2.1"
const val coroutines = "1.5.1"
const val atomicFU = "0.16.3"
const val serialization = "1.2.2"
const val ktor = "1.5.4"
const val androidGradle = "3.6.2"
const val binaryValidator = "0.4.0"
const val blockingBridge = "1.10.3"
const val io = "0.1.16"
const val coroutinesIo = "0.1.16"
const val junit = "5.4.2"
const val blockingBridge = "1.10.6-1530.2"
@Suppress("SpellCheckingInspection")
const val yamlkt = "0.10.0"
const val androidGradlePlugin = "4.1.1"
const val android = "4.1.1.4"
const val shadow = "6.1.0"
const val logback = "1.2.5"
const val slf4j = "1.7.32"
const val log4j = "2.14.1"
const val asm = "9.1"
const val difflib = "1.3.0"
const val netty = "4.1.63.Final"
const val bouncycastle = "1.64"
const val junit = "5.7.2"
// If you the versions below, you need to sync changes to mirai-console/buildSrc/src/main/kotlin/Versions.kt
const val yamlkt = "0.10.2"
const val intellijGradlePlugin = "1.1"
const val kotlinIntellijPlugin = "211-1.5.20-release-284-IJ7442.40" // keep to newest as kotlinCompiler
const val intellij = "2021.1.3" // don't update easily unless you want your disk space -= 500MB
}
@Suppress("unused")
fun kotlinx(id: String, version: String) = "org.jetbrains.kotlinx:kotlinx-$id:$version"
@Suppress("unused")
fun ktor(id: String, version: String = Versions.ktor) = "io.ktor:ktor-$id:$version"
// Why using `-jvm`?
// All target platforms are JVM. Root modules like 'coroutines-core' will be resolved to 'coroutines-common' for commonMain,
// which make IDE code analysis not working.
val `kotlinx-coroutines-core-jvm` = kotlinx("coroutines-core-jvm", Versions.coroutines)
val `kotlinx-coroutines-jdk8` = kotlinx("coroutines-jdk8", Versions.coroutines)
val `kotlinx-coroutines-swing` = kotlinx("coroutines-swing", Versions.coroutines)
val `kotlinx-coroutines-debug` = kotlinx("coroutines-debug", Versions.coroutines)
val `kotlinx-serialization-core-jvm` = kotlinx("serialization-core-jvm", Versions.serialization)
val `kotlinx-serialization-json-jvm` = kotlinx("serialization-json-jvm", Versions.serialization)
val `kotlinx-serialization-protobuf-jvm` = kotlinx("serialization-protobuf-jvm", Versions.serialization)
const val `kotlinx-atomicfu-jvm` = "org.jetbrains.kotlinx:atomicfu-jvm:${Versions.atomicFU}"
val `kotlinx-io-jvm` = kotlinx("io-jvm", Versions.io)
fun KotlinDependencyHandler.implementationKotlinxIoJvm() {
implementation(`kotlinx-io-jvm`) {
/*
| +--- org.jetbrains.kotlinx:kotlinx-io-jvm:0.1.16
| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.3.60 -> 1.5.30 (*)
| | +--- org.jetbrains.kotlinx:atomicfu:0.14.1
| | +--- org.jetbrains.kotlinx:atomicfu-common:0.14.1
| | \--- org.jetbrains.kotlinx:kotlinx-io:0.1.16
| | \--- org.jetbrains.kotlinx:atomicfu-common:0.14.1
*/
exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-common")
exclude("org.jetbrains.kotlinx", "atomicfu")
exclude("org.jetbrains.kotlinx", "atomicfu-common")
}
}
val `kotlinx-coroutines-io-jvm` = kotlinx("coroutines-io-jvm", Versions.coroutinesIo)
val `ktor-serialization` = ktor("serialization", Versions.ktor)
val `ktor-client-core-jvm` = ktor("client-core-jvm", Versions.ktor)
val `ktor-client-cio-jvm` = ktor("client-cio-jvm", Versions.ktor)
val `ktor-client-okhttp` = ktor("client-okhttp", Versions.ktor)
val `ktor-client-android` = ktor("client-android", Versions.ktor)
val `ktor-client-logging-jvm` = ktor("client-logging-jvm", Versions.ktor)
val `ktor-network-jvm` = ktor("network-jvm", Versions.ktor)
val `ktor-client-serialization-jvm` = ktor("client-serialization-jvm", Versions.ktor)
const val `logback-classic` = "ch.qos.logback:logback-classic:" + Versions.logback
const val `slf4j-api` = "org.slf4j:slf4j-api:" + Versions.slf4j
const val `slf4j-simple` = "org.slf4j:slf4j-simple:" + Versions.slf4j
const val `log4j-api` = "org.apache.logging.log4j:log4j-api:" + Versions.log4j
const val `log4j-core` = "org.apache.logging.log4j:log4j-core:" + Versions.log4j
const val `log4j-slf4j-impl` = "org.apache.logging.log4j:log4j-slf4j-impl:" + Versions.log4j
const val `log4j-to-slf4j` = "org.apache.logging.log4j:log4j-to-slf4j:" + Versions.log4j
val ATTRIBUTE_MIRAI_TARGET_PLATFORM: Attribute<String> = Attribute.of("mirai.target.platform", String::class.java)
const val `kotlin-compiler` = "org.jetbrains.kotlin:kotlin-compiler:${Versions.kotlinCompiler}"
const val `kotlin-stdlib` = "org.jetbrains.kotlin:kotlin-stdlib:${Versions.kotlinStdlib}"
const val `kotlin-stdlib-jdk8` = "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${Versions.kotlinStdlib}"
const val `kotlin-reflect` = "org.jetbrains.kotlin:kotlin-reflect:${Versions.kotlinStdlib}"
const val `kotlin-test` = "org.jetbrains.kotlin:kotlin-test:${Versions.kotlinStdlib}"
const val `kotlin-test-junit5` = "org.jetbrains.kotlin:kotlin-test-junit5:${Versions.kotlinStdlib}"
const val `kotlinx-coroutines-core` = "org.jetbrains.kotlinx:kotlinx-coroutines-core:${Versions.coroutines}"
const val `kotlinx-coroutines-jdk8` = "org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:${Versions.coroutines}"
const val `kotlinx-coroutines-swing` = "org.jetbrains.kotlinx:kotlinx-coroutines-swing:${Versions.coroutines}"
const val `kotlinx-serialization-core` = "org.jetbrains.kotlinx:kotlinx-serialization-core:${Versions.serialization}"
const val `kotlinx-serialization-json` = "org.jetbrains.kotlinx:kotlinx-serialization-json:${Versions.serialization}"
const val `kotlinx-serialization-protobuf` = "org.jetbrains.kotlinx:kotlinx-serialization-protobuf:${Versions.serialization}"
const val `kotlinx-atomicfu` = "org.jetbrains.kotlinx:atomicfu:${Versions.atomicFU}"
const val yamlkt = "net.mamoe.yamlkt:yamlkt:${Versions.yamlkt}"
const val `yamlkt-jvm` = "net.mamoe.yamlkt:yamlkt:${Versions.yamlkt}"
const val `jetbrains-annotations` = "org.jetbrains:annotations:19.0.0"
const val `caller-finder` = "io.github.karlatemp:caller:1.1.1"
val ATTRIBUTE_MIRAI_TARGET_PLATFORM: Attribute<String> = Attribute.of("mirai.target.platform", String::class.java)
const val `android-runtime` = "com.google.android:android:${Versions.android}"
const val `netty-all` = "io.netty:netty-all:${Versions.netty}"
const val `bouncycastle` = "org.bouncycastle:bcprov-jdk15on:${Versions.bouncycastle}"

View File

@ -11,7 +11,7 @@ Mirai Console 前端开发文档。
`build.gradle``build.gradle.kts` 添加:
```kotlin
kotlin.sourceSets.all {
languageSettings.useExperimentalAnnotation("net.mamoe.mirai.console.ConsoleFrontEndImplementation")
languageSettings.optIn("net.mamoe.mirai.console.ConsoleFrontEndImplementation")
}
```

View File

@ -31,7 +31,12 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
public class MiraiConsoleGradlePlugin : Plugin<Project> {
private fun KotlinSourceSet.configureSourceSet(project: Project, target: KotlinTarget) {
languageSettings.useExperimentalAnnotation("kotlin.RequiresOptIn")
try {
@Suppress("DEPRECATION") // user may use 1.4
languageSettings.useExperimentalAnnotation("kotlin.RequiresOptIn")
} catch (e: NoSuchMethodError) {
languageSettings.optIn("kotlin.RequiresOptIn")
}
dependencies { configureDependencies(project, this@configureSourceSet, target) }
}
@ -81,6 +86,8 @@ public class MiraiConsoleGradlePlugin : Plugin<Project> {
if (isJvm) {
when (miraiExtension.useTestConsoleFrontEnd) {
MiraiConsoleFrontEndKind.TERMINAL -> api("net.mamoe:mirai-console-terminal:${miraiExtension.consoleVersion}")
null -> {
}
}
}
}

View File

@ -10,6 +10,6 @@
package net.mamoe.mirai.console.gradle
internal object VersionConstants {
const val CONSOLE_VERSION = "2.7.0" // value is written here automatically during build
const val CORE_VERSION = "2.7.0" // value is written here automatically during build
const val CONSOLE_VERSION = "2.8.0-M1" // value is written here automatically during build
const val CORE_VERSION = "2.8.0-M1" // value is written here automatically during build
}

View File

@ -11,10 +11,7 @@
package net.mamoe.mirai.console.intellij.creator.steps
import com.intellij.ide.util.projectWizard.ModuleWizardStep
import kotlinx.coroutines.CoroutineName
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.*
import net.mamoe.mirai.console.compiler.common.CheckerConstants.PLUGIN_ID_PATTERN
import net.mamoe.mirai.console.intellij.creator.MiraiProjectModel
import net.mamoe.mirai.console.intellij.creator.MiraiVersionKind
@ -90,6 +87,7 @@ class PluginCoordinatesStep(
}
}
@OptIn(DelicateCoroutinesApi::class)
private fun updateVersionItems() {
GlobalScope.launch(Dispatchers.Main + CoroutineName("updateVersionItems")) {
if (!model.availableMiraiVersionsOrFail.isCompleted) return@launch