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() }