Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Kt 1.6.0 #1683

Merged
merged 17 commits into from
Dec 23, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/snapshots.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
- uses: actions/setup-java@v2
with:
distribution: 'adopt'
java-version: '11'
java-version: '17'

- run: chmod -R 777 *

Expand Down
18 changes: 15 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,31 @@ mirai 欢迎一切形式的代码贡献。你可以通过以下几种途径向 m

## 主仓库 `mirai-core`

### 构建
### 构建项目

#### 更新 submodules

mirai git 仓库含有 submodule, 请在 clone 时使用 `--recursive` 参数, 或在 clone 后使用如下命令更新 submodule:
```shell script
git submodule init
git submodule update
```

#### 安装 JDK

mirai 2.9.0 在如下环境测试可以编译:
- macOS 12.0.1, AdoptOpenJDK 17 aarch64, Gradle 7.2, Kotlin 1.6.0
- macOS 12.0.1, Amazon Corretto 11 amd64, Gradle 7.2, Kotlin 1.6.0

若在其他环境下无法正常编译, 请尝试选择上述一个环境配置.

#### 运行 Gradle 构建

项目首次初始化和构建可能要花费较长时间。

- 要构建项目, 请运行 `gradlew assemble`
- 要运行测试, 请运行 `gradlew test`
- 要运行测试, 请运行 `gradlew check`
- 要构建项目并运行测试, 请运行 `gradlew build`
- 若要添加一个 suspend 函数, 请务必考虑 Java 兼容性, 使用 [kotlin-jvm-blocking-bridge](https://github.com/mamoe/kotlin-jvm-blocking-bridge/blob/master/README-chs.md)

### 分支

Expand Down Expand Up @@ -80,6 +91,7 @@ git submodule update

- 使用 IntelliJ IDEA 或 Android Studio
- 安装 IDE 插件 [kotlin-jvm-blocking-bridge](https://github.com/Him188/kotlin-jvm-blocking-bridge/blob/master/README-chs.md#%E5%AE%89%E8%A3%85-intellij-idea-%E6%88%96-android-studio-%E6%8F%92%E4%BB%B6)
- 若要添加一个 suspend 函数, 请为它添加 `@JvmBlockingBridge`, 使用 [kotlin-jvm-blocking-bridge](https://github.com/mamoe/kotlin-jvm-blocking-bridge/blob/master/README-chs.md)
- 在 mirai-core 和 mirai-core-api 使用纯 Kotlin 实现
- 尽量不要引用新的库
- 遵守 Kotlin 官方代码规范(提交前使用 IDE 格式化代码 (commit 时勾选 'Reformat code'))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1750,7 +1750,7 @@ public abstract interface annotation class net/mamoe/mirai/event/EventHandler :

public final class net/mamoe/mirai/event/EventKt {
public static final fun broadcast (Lnet/mamoe/mirai/event/Event;)Lnet/mamoe/mirai/event/Event;
public static final synthetic fun broadcast (Lnet/mamoe/mirai/event/Event;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static final fun broadcast (Lnet/mamoe/mirai/event/Event;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static final fun getEventDisabled ()Z
public static final fun setEventDisabled (Z)V
}
Expand Down
2 changes: 1 addition & 1 deletion binary-compatibility-validator/android/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ plugins {
kotlin("plugin.serialization")

id("kotlinx-atomicfu")
id("net.mamoe.kotlin-jvm-blocking-bridge")
id("me.him188.kotlin-jvm-blocking-bridge")
}

description = "Mirai API binary compatibility validator"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1750,7 +1750,7 @@ public abstract interface annotation class net/mamoe/mirai/event/EventHandler :

public final class net/mamoe/mirai/event/EventKt {
public static final fun broadcast (Lnet/mamoe/mirai/event/Event;)Lnet/mamoe/mirai/event/Event;
public static final synthetic fun broadcast (Lnet/mamoe/mirai/event/Event;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static final fun broadcast (Lnet/mamoe/mirai/event/Event;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static final fun getEventDisabled ()Z
public static final fun setEventDisabled (Z)V
}
Expand Down
2 changes: 1 addition & 1 deletion binary-compatibility-validator/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ plugins {
kotlin("plugin.serialization")

id("kotlinx-atomicfu")
id("net.mamoe.kotlin-jvm-blocking-bridge")
id("me.him188.kotlin-jvm-blocking-bridge")
}

description = "Mirai API binary compatibility validator"
Expand Down
4 changes: 2 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ plugins {
kotlin("plugin.serialization") version Versions.kotlinCompiler
id("org.jetbrains.dokka") version Versions.dokka
// id("org.jetbrains.dokka") version Versions.dokka
id("net.mamoe.kotlin-jvm-blocking-bridge") version Versions.blockingBridge
id("me.him188.kotlin-jvm-blocking-bridge") version Versions.blockingBridge
id("com.gradle.plugin-publish") version "0.12.0" apply false
}

Expand Down Expand Up @@ -92,7 +92,7 @@ allprojects {

runCatching {
blockingBridge {
unitCoercion = net.mamoe.kjbb.compiler.UnitCoercion.COMPATIBILITY
unitCoercion = me.him188.kotlin.jvm.blocking.bridge.compiler.UnitCoercion.COMPATIBILITY
}
}

Expand Down
4 changes: 2 additions & 2 deletions buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ dependencies {

api("com.github.jengelman.gradle.plugins", "shadow", version("shadow"))
api("org.jetbrains.kotlin", "kotlin-gradle-plugin", version("kotlinCompiler"))
api("org.jetbrains.kotlin", "kotlin-compiler-embeddable", version("kotlinCompiler"))
api(ktor("client-okhttp", "1.4.3"))
// api("org.jetbrains.kotlin", "kotlin-compiler-embeddable", version("kotlinCompiler"))
// api(ktor("client-okhttp", "1.4.3"))
api("com.android.tools.build", "gradle", version("androidGradlePlugin"))
api(asm("tree"))
api(asm("util"))
Expand Down
2 changes: 1 addition & 1 deletion buildSrc/src/main/kotlin/JvmPublishing.kt
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ fun Project.configureRemoteRepos() {
// sonatype
val keys = SecretKeys.getCache(project)
repositories {
if (System.getenv("MIRAI_IS_SNAPSHOTS_PUBLISHING").toBoolean()) {
if (System.getenv("MIRAI_IS_SNAPSHOTS_PUBLISHING")?.toBoolean() == true) {
maven {
name = "MiraiRepo"
setUrl(System.getenv("SNAPSHOTS_PUBLISHING_URL"))
Expand Down
4 changes: 2 additions & 2 deletions buildSrc/src/main/kotlin/ProjectConfigure.kt
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ fun Project.configureJvmTarget() {
val defaultVer = JavaVersion.VERSION_1_8

tasks.withType(KotlinJvmCompile::class.java) {
kotlinOptions.languageVersion = "1.5"
kotlinOptions.languageVersion = "1.6"
kotlinOptions.jvmTarget = defaultVer.toString()
kotlinOptions.freeCompilerArgs += "-Xjvm-default=all"
}
Expand Down Expand Up @@ -151,7 +151,7 @@ val experimentalAnnotations = arrayOf(
"net.mamoe.mirai.console.util.ConsoleInternalApi",
"net.mamoe.mirai.console.util.ConsoleExperimentalApi",

"kotlinx.io.core.internal.DangerousInternalIoApi",
"kotlinx.io.core.internal.DangerousInternalIoApi"
)

fun Project.configureKotlinExperimentalUsages() {
Expand Down
3 changes: 2 additions & 1 deletion buildSrc/src/main/kotlin/PublishingGpgSign.kt
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ open class GPGSignMavenArtifact(
}

class NameCounter(val name: String) {
var counter = 0
private var counter = 0
val nextName: String
get() = name + if (counter == 0) {
counter = 1; ""
Expand All @@ -44,6 +44,7 @@ class NameCounter(val name: String) {
object PublishingAccess {
fun getMetadataArtifacts(publication: MavenPublication): Collection<MavenArtifact> {
if (publication is DefaultMavenPublication) {
@Suppress("UNCHECKED_CAST")
return DefaultMavenPublication::class.java.getDeclaredField("metadataArtifacts")
.also { it.isAccessible = true }
.get(publication) as Collection<MavenArtifact>
Expand Down
20 changes: 10 additions & 10 deletions buildSrc/src/main/kotlin/Versions.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,27 +14,27 @@ import org.gradle.kotlin.dsl.exclude
import org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler

object Versions {
const val project = "2.9.0"
const val project = "2.10.0-RC"

const val core = project
const val console = project
const val consoleTerminal = project

const val kotlinCompiler = "1.5.30"
const val kotlinStdlib = "1.5.30"
const val kotlinCompiler = "1.6.0"
const val kotlinStdlib = kotlinCompiler
const val dokka = "1.6.0"

const val coroutines = "1.5.1"
const val atomicFU = "0.16.3"
const val coroutines = "1.6.0"
const val atomicFU = "0.17.0"
const val serialization = "1.2.2"
const val ktor = "1.5.4"
const val ktor = "1.6.5"

const val binaryValidator = "0.4.0"

const val io = "0.1.16"
const val coroutinesIo = "0.1.16"

const val blockingBridge = "1.10.6-1530.2"
const val blockingBridge = "2.0.0-160.3"

const val androidGradlePlugin = "4.1.1"
const val android = "4.1.1.4"
Expand All @@ -54,9 +54,9 @@ object Versions {
// 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
const val intellijGradlePlugin = "1.3.0"
// const val kotlinIntellijPlugin = "211-1.5.20-release-284-IJ7442.40" // keep to newest as kotlinCompiler
const val intellij = "2021.3" // don't update easily unless you want your disk space -= 500MB

}

Expand Down
5 changes: 2 additions & 3 deletions buildSrc/src/main/kotlin/analyzes/AndroidApiLevelCheck.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,7 @@
package analyzes

import groovy.util.Node
import groovy.util.XmlParser
import org.gradle.api.Project
import org.objectweb.asm.ClassReader
import org.objectweb.asm.Type
import org.objectweb.asm.tree.ClassNode
import org.objectweb.asm.tree.FieldInsnNode
Expand Down Expand Up @@ -212,7 +210,8 @@ object AndroidApiLevelCheck {
val apiVersionsFile =
project.rootProject.projectDir.resolve("buildSrc/src/main/resources/androidutil/api-versions.xml")
val classesInfos = mutableMapOf<String, ClassInfo>()
XmlParser().parse(apiVersionsFile).children().forEach { classNode ->
@Suppress("DEPRECATION")
groovy.util.XmlParser().parse(apiVersionsFile).children().forEach { classNode ->
classNode as Node
if (classNode.name() == "class") {
val fieldInfos = mutableMapOf<String, ClassInfo.MemberInfo>()
Expand Down
6 changes: 2 additions & 4 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,11 @@
#
# https://github.com/mamoe/mirai/blob/master/LICENSE
#

# style guide
kotlin.code.style=official
# config
kotlin.incremental.multiplatform=true
kotlin.parallel.tasks.in.project=true
org.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8
org.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8 --illegal-access=permit -Dkotlin.daemon.jvm.options=--illegal-access=permit --add-opens java.base/java.util=ALL-UNNAMED
org.gradle.parallel=true
org.gradle.vfs.watch=true
kotlin.mpp.enableGranularSourceSetsMetadata=true
Expand All @@ -22,5 +20,5 @@ systemProp.org.gradle.internal.publish.checksums.insecure=true
gnsp.disableApplyOnlyOnRootProjectEnforcement=true
# We may target 15 with Kotlin 1.5 IR
mirai.android.target.api.level=24

# Enable if you want to use mavenLocal for both Gradle plugin and project dependencies resolutions.
systemProp.use.maven.local=false
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#
# https://github.com/mamoe/mirai/blob/master/LICENSE
#
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.1-all.zip
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ package net.mamoe.console.integrationtest
import net.mamoe.mirai.console.extension.PluginComponentStorage
import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescription
import net.mamoe.mirai.console.plugin.jvm.KotlinPlugin
import net.mamoe.mirai.utils.createInstanceOrNull

/**
* IntegrationTest 测试单元 (Plugin mode)
Expand All @@ -29,7 +30,6 @@ public abstract class AbstractTestPointAsPlugin : AbstractTestPoint() {
protected open fun KotlinPlugin.onDisable0() {}



@Suppress("unused")
@PublishedApi
internal abstract class TestPointPluginImpl(
Expand All @@ -43,7 +43,9 @@ public abstract class AbstractTestPointAsPlugin : AbstractTestPoint() {
@PublishedApi
internal constructor(
impl: Class<out AbstractTestPointAsPlugin>
) : this(impl.kotlin.objectInstance ?: impl.newInstance())
) : this(
impl.kotlin.createInstanceOrNull() ?: impl.getConstructor().newInstance()
)

override fun onDisable() {
try {
Expand Down
2 changes: 1 addition & 1 deletion mirai-console/backend/mirai-console/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ plugins {
kotlin("plugin.serialization")
id("java")
`maven-publish`
id("net.mamoe.kotlin-jvm-blocking-bridge")
id("me.him188.kotlin-jvm-blocking-bridge")
}

version = Versions.console
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

package net.mamoe.mirai.console.command

import net.mamoe.kjbb.JvmBlockingBridge
import me.him188.kotlin.jvm.blocking.bridge.JvmBlockingBridge
import net.mamoe.mirai.console.command.CommandManager.INSTANCE.executeCommand
import net.mamoe.mirai.console.command.descriptor.ExperimentalCommandDescriptors
import net.mamoe.mirai.console.command.parse.CommandCall
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
package net.mamoe.mirai.console.command

import kotlinx.coroutines.CoroutineScope
import net.mamoe.kjbb.JvmBlockingBridge
import me.him188.kotlin.jvm.blocking.bridge.JvmBlockingBridge
import net.mamoe.mirai.Bot
import net.mamoe.mirai.console.MiraiConsole
import net.mamoe.mirai.console.command.CommandSender.Companion.asCommandSender
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ import java.time.format.DateTimeFormatter
import kotlin.contracts.InvocationKind
import kotlin.contracts.contract
import kotlin.coroutines.CoroutineContext
import kotlin.reflect.KProperty
import kotlin.reflect.KProperty0

/**
* [MiraiConsole] 公开 API 与前端实现的连接桥.
Expand All @@ -71,6 +73,10 @@ internal object MiraiConsoleImplementationBridge : CoroutineScope, MiraiConsoleI
override val pluginCenter: PluginCenter get() = throw UnsupportedOperationException("PluginCenter is not supported yet")

private val instance: MiraiConsoleImplementation get() = MiraiConsoleImplementation.getInstance()

// FIXME: 12/12/2021 Workaround for compiler regression, should remove when using Kotlin compiller 1.6.20
private operator fun <V> KProperty0<V>.getValue(thisRef: Any?, property: KProperty<*>): V = this.get()

override val buildDate: Instant by MiraiConsoleBuildConstants::buildDate
override val version: SemVersion by MiraiConsoleBuildConstants::version
override val rootPath: Path by instance::rootPath
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ package net.mamoe.mirai.console.internal.data

import net.mamoe.mirai.console.data.PluginData
import net.mamoe.mirai.console.data.ValueName
import net.mamoe.mirai.utils.createInstanceOrNull
import kotlin.reflect.*
import kotlin.reflect.full.findAnnotation
import kotlin.reflect.full.isSubclassOf
Expand Down Expand Up @@ -63,14 +64,6 @@ internal fun KType.classifierAsKClassOrNull() = when (val t = classifier) {
else -> null
} as KClass<Any>?

@JvmSynthetic
internal fun <T : Any> KClass<T>.createInstanceOrNull(): T? {
val noArgsConstructor = constructors.singleOrNull { it.parameters.all(KParameter::isOptional) }
?: return null

return noArgsConstructor.callBy(emptyMap())
}

@JvmSynthetic
internal fun KClass<*>.findValueName(): String =
findAnnotation<ValueName>()?.value
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import net.mamoe.mirai.console.data.PluginData
import net.mamoe.mirai.console.data.SerializableValue.Companion.serializableValueWith
import net.mamoe.mirai.console.data.SerializerAwareValue
import net.mamoe.mirai.console.data.valueFromKType
import net.mamoe.mirai.utils.createInstanceOrNull
import java.util.concurrent.ConcurrentHashMap
import java.util.concurrent.ConcurrentMap
import kotlin.contracts.contract
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
package net.mamoe.mirai.console.internal.util

import net.mamoe.mirai.console.internal.data.cast
import net.mamoe.mirai.console.internal.data.createInstanceOrNull
import net.mamoe.mirai.console.internal.plugin.BuiltInJvmPluginLoaderImpl
import net.mamoe.mirai.utils.createInstanceOrNull
import java.lang.reflect.Modifier
import java.util.*
import kotlin.reflect.KClass
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

package net.mamoe.mirai.console.util

import net.mamoe.kjbb.JvmBlockingBridge
import me.him188.kotlin.jvm.blocking.bridge.JvmBlockingBridge
import net.mamoe.mirai.console.MiraiConsole
import net.mamoe.mirai.console.internal.util.ConsoleInputImpl

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ package net.mamoe.mirai.console.util
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.flow.fold
import net.mamoe.kjbb.JvmBlockingBridge
import me.him188.kotlin.jvm.blocking.bridge.JvmBlockingBridge
import net.mamoe.mirai.console.command.CommandSender
import net.mamoe.mirai.contact.Contact
import net.mamoe.mirai.contact.User
Expand Down
Loading