diff --git a/mirai-console/tools/intellij-plugin/src/wizard/KotlinStdlibVersion.kt b/mirai-console/tools/intellij-plugin/src/wizard/KotlinStdlibVersion.kt
new file mode 100644
index 000000000..bfd472daa
--- /dev/null
+++ b/mirai-console/tools/intellij-plugin/src/wizard/KotlinStdlibVersion.kt
@@ -0,0 +1,118 @@
+/*
+ * Copyright 2019-2022 Mamoe Technologies and contributors.
+ *
+ * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
+ * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
+ *
+ * https://github.com/mamoe/mirai/blob/dev/LICENSE
+ */
+
+
+package net.mamoe.mirai.console.intellij.wizard
+
+import org.jetbrains.kotlin.tools.projectWizard.Versions
+import org.jsoup.Jsoup
+import org.jsoup.nodes.Document
+import java.io.IOException
+
+typealias KotlinStdlibVersion = String
+
+object KotlinStdlibVersionFetcher {
+ @Throws(IOException::class)
+ fun getKotlinStdlibVersion(miraiVersion: MiraiVersion): KotlinStdlibVersion {
+ fun download(url: String): Document {
+ return Jsoup.connect(url)
+ .followRedirects(true)
+ .ignoreContentType(true)
+ .ignoreHttpErrors(true)
+ .get()
+ }
+
+ val path = "net/mamoe/mirai-core/$miraiVersion/mirai-core-$miraiVersion.pom"
+ return kotlin.runCatching {
+ download("https://maven.aliyun.com/repository/central/$path")
+ }.recoverCatching {
+ download("https://repo.maven.apache.org/maven2/$path")
+ }.map { document ->
+ val xml = document.toString()
+
+ Regex("""\s*kotlin-stdlib-[A-Za-z0-9-]+\s*\s*\s*(.*?)\s*""")
+ .findAll(xml)
+ .mapNotNull {
+ it.groupValues.getOrNull(1)
+ }
+ .firstOrNull() ?: Versions.KOTLIN.text
+ }.getOrThrow()
+ }
+}
+
+/*
+
+
+
+
+
+
+
+
+ 4.0.0
+ net.mamoe
+ mirai-core
+ 2.12.2
+ pom
+
+
+ GNU AGPLv3
+ https://github.com/mamoe/mirai/blob/master/LICENSE
+
+
+
+
+ mamoe
+ Mamoe Technologies
+ support@mamoe.net
+
+
+
+ scm:https://github.com/mamoe/mirai.git
+ scm:git://github.com/mamoe/mirai.git
+ https://github.com/mamoe/mirai
+
+
+
+ net.mamoe
+ mirai-core-api
+ 2.12.2
+ runtime
+
+
+ org.jetbrains.kotlinx
+ kotlinx-serialization-core-jvm
+ 1.3.2
+ runtime
+
+
+ org.jetbrains.kotlinx
+ kotlinx-serialization-json-jvm
+ 1.3.2
+ runtime
+
+
+ org.jetbrains.kotlinx
+ kotlinx-coroutines-core-jvm
+ 1.6.1
+ runtime
+
+
+ org.jetbrains.kotlin
+ kotlin-stdlib-jdk8
+ 1.6.21
+ runtime
+
+
+ Mirai Protocol implementation for QQ Android
+ mirai-core
+ https://github.com/mamoe/mirai
+
+
+ */
diff --git a/mirai-console/tools/intellij-plugin/src/wizard/MiraiModuleBuilder.kt b/mirai-console/tools/intellij-plugin/src/wizard/MiraiModuleBuilder.kt
index dd0aaef5d..562e4a62a 100644
--- a/mirai-console/tools/intellij-plugin/src/wizard/MiraiModuleBuilder.kt
+++ b/mirai-console/tools/intellij-plugin/src/wizard/MiraiModuleBuilder.kt
@@ -77,7 +77,7 @@ class MiraiModuleBuilder : StarterModuleBuilder() {
val projectCoordinates = projectCoordinates
val pluginCoordinates = pluginCoordinates
return mapOf(
- "KOTLIN_VERSION" to KotlinVersion.CURRENT.toString(),
+ "KOTLIN_VERSION" to kotlinVersion,
"MIRAI_VERSION" to miraiVersion,
"GROUP_ID" to projectCoordinates.groupId,
"VERSION" to projectCoordinates.version,
diff --git a/mirai-console/tools/intellij-plugin/src/wizard/MiraiProjectModel.kt b/mirai-console/tools/intellij-plugin/src/wizard/MiraiProjectModel.kt
index efe2762bd..a147a6423 100644
--- a/mirai-console/tools/intellij-plugin/src/wizard/MiraiProjectModel.kt
+++ b/mirai-console/tools/intellij-plugin/src/wizard/MiraiProjectModel.kt
@@ -34,6 +34,7 @@ class MiraiProjectModel(
val projectCoordinates: ProjectCoordinates,
val pluginCoordinates: PluginCoordinates,
val miraiVersion: String,
+ val kotlinVersion: String,
val buildSystemType: BuildSystemType,
val languageType: LanguageType,
diff --git a/mirai-console/tools/intellij-plugin/src/wizard/MiraiProjectWizardInitialStep.kt b/mirai-console/tools/intellij-plugin/src/wizard/MiraiProjectWizardInitialStep.kt
index be9994c5e..4d83f7d16 100644
--- a/mirai-console/tools/intellij-plugin/src/wizard/MiraiProjectWizardInitialStep.kt
+++ b/mirai-console/tools/intellij-plugin/src/wizard/MiraiProjectWizardInitialStep.kt
@@ -26,6 +26,7 @@ import com.intellij.ui.dsl.builder.*
import net.mamoe.mirai.console.intellij.wizard.MiraiProjectWizardBundle.message
import org.jetbrains.concurrency.Promise
import org.jetbrains.concurrency.runAsync
+import org.jetbrains.kotlin.tools.projectWizard.Versions
private val log = logger()
@@ -49,6 +50,8 @@ class MiraiProjectWizardInitialStep(contextProvider: StarterContextProvider) : S
var miraiVersionKind by miraiVersionKindProperty
var miraiVersion by miraiVersionProperty
+ var kotlinStdlibVersion = Versions.KOTLIN.text
+
private lateinit var miraiVersionCell: Cell>
override fun addFieldsAfter(layout: Panel) {
@@ -117,6 +120,18 @@ class MiraiProjectWizardInitialStep(contextProvider: StarterContextProvider) : S
.enabled(false)
.bindItem(miraiVersionProperty)
+ miraiVersionProperty.afterChange {
+ kotlinStdlibVersion = "Loading"
+ runAsync {
+ KotlinStdlibVersionFetcher.getKotlinStdlibVersion(miraiVersion)
+ }.onError {
+ log.error(it)
+ kotlinStdlibVersion = Versions.KOTLIN.text
+ }.onProcessed {
+ kotlinStdlibVersion = it
+ }
+ }
+
miraiVersionKindProperty.afterChange {
if (!miraiVersionCell.component.isEnabled) return@afterChange
@@ -156,6 +171,7 @@ class MiraiProjectWizardInitialStep(contextProvider: StarterContextProvider) : S
dependsOn = pluginDependencies.trim()
),
miraiVersion = miraiVersion,
+ kotlinVersion = kotlinStdlibVersion,
buildSystemType = when (val projectType = projectTypeProperty.get()) {
MiraiModuleBuilder.GRADLE_KTS_PROJECT -> BuildSystemType.GradleKt
MiraiModuleBuilder.GRADLE_GROOVY_PROJECT -> BuildSystemType.GradleGroovy
@@ -171,7 +187,7 @@ class MiraiProjectWizardInitialStep(contextProvider: StarterContextProvider) : S
}
override fun validate(): Boolean {
- if (miraiVersion == message("label.mirai.version.loading")) {
+ if (miraiVersion == message("label.mirai.version.loading") || kotlinStdlibVersion == "Loading") {
JBPopupFactory.getInstance()
.createHtmlTextBalloonBuilder(
message("error.please.wait.for.mirai.version"),
@@ -186,7 +202,6 @@ class MiraiProjectWizardInitialStep(contextProvider: StarterContextProvider) : S
)
return false
}
-
return super.validate()
}