mirror of
https://github.com/mamoe/mirai.git
synced 2025-01-26 16:10:11 +08:00
Introduce ResolveContext for resolve
This commit is contained in:
parent
c1ea2d94ee
commit
7bcef7997a
@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2020 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/master/LICENSE
|
||||||
|
*/
|
||||||
|
|
||||||
|
@file:Suppress("unused")
|
||||||
|
|
||||||
|
package net.mamoe.mirai.console.compiler.common
|
||||||
|
|
||||||
|
import net.mamoe.mirai.console.util.ConsoleExperimentalApi
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标记一个参数的语境类型, 用于帮助编译器和 IntelliJ 插件进行语境推断.
|
||||||
|
*/
|
||||||
|
@ConsoleExperimentalApi
|
||||||
|
@Target(AnnotationTarget.VALUE_PARAMETER,
|
||||||
|
AnnotationTarget.PROPERTY,
|
||||||
|
AnnotationTarget.FIELD,
|
||||||
|
AnnotationTarget.EXPRESSION)
|
||||||
|
@Retention(AnnotationRetention.SOURCE)
|
||||||
|
public annotation class ResolveContext(
|
||||||
|
val kind: Kind,
|
||||||
|
) {
|
||||||
|
/**
|
||||||
|
* 元素数量可能在任意时间被改动
|
||||||
|
*/
|
||||||
|
public enum class Kind {
|
||||||
|
PLUGIN_ID,
|
||||||
|
PLUGIN_NAME,
|
||||||
|
PLUGIN_VERSION,
|
||||||
|
}
|
||||||
|
}
|
@ -12,6 +12,8 @@
|
|||||||
package net.mamoe.mirai.console.plugin.jvm
|
package net.mamoe.mirai.console.plugin.jvm
|
||||||
|
|
||||||
import com.vdurmont.semver4j.Semver
|
import com.vdurmont.semver4j.Semver
|
||||||
|
import net.mamoe.mirai.console.compiler.common.ResolveContext
|
||||||
|
import net.mamoe.mirai.console.compiler.common.ResolveContext.Kind.*
|
||||||
import net.mamoe.mirai.console.plugin.description.PluginDependency
|
import net.mamoe.mirai.console.plugin.description.PluginDependency
|
||||||
import net.mamoe.mirai.console.plugin.description.PluginDescription
|
import net.mamoe.mirai.console.plugin.description.PluginDescription
|
||||||
import net.mamoe.mirai.console.plugin.description.VersionRequirement
|
import net.mamoe.mirai.console.plugin.description.VersionRequirement
|
||||||
@ -37,15 +39,15 @@ public interface JvmPluginDescription : PluginDescription {
|
|||||||
/**
|
/**
|
||||||
* @see [PluginDescription.id]
|
* @see [PluginDescription.id]
|
||||||
*/
|
*/
|
||||||
id: String,
|
@ResolveContext(PLUGIN_ID) id: String,
|
||||||
/**
|
/**
|
||||||
* @see [PluginDescription.version]
|
* @see [PluginDescription.version]
|
||||||
*/
|
*/
|
||||||
version: String,
|
@ResolveContext(PLUGIN_VERSION) version: String,
|
||||||
/**
|
/**
|
||||||
* @see [PluginDescription.name]
|
* @see [PluginDescription.name]
|
||||||
*/
|
*/
|
||||||
name: String = id,
|
@ResolveContext(PLUGIN_NAME) name: String = id,
|
||||||
block: JvmPluginDescriptionBuilder.() -> Unit = {},
|
block: JvmPluginDescriptionBuilder.() -> Unit = {},
|
||||||
): JvmPluginDescription = JvmPluginDescriptionBuilder(id, version).apply { name(name) }.apply(block).build()
|
): JvmPluginDescription = JvmPluginDescriptionBuilder(id, version).apply { name(name) }.apply(block).build()
|
||||||
|
|
||||||
@ -60,15 +62,15 @@ public interface JvmPluginDescription : PluginDescription {
|
|||||||
/**
|
/**
|
||||||
* @see [PluginDescription.id]
|
* @see [PluginDescription.id]
|
||||||
*/
|
*/
|
||||||
id: String,
|
@ResolveContext(PLUGIN_ID) id: String,
|
||||||
/**
|
/**
|
||||||
* @see [PluginDescription.version]
|
* @see [PluginDescription.version]
|
||||||
*/
|
*/
|
||||||
version: Semver,
|
@ResolveContext(PLUGIN_VERSION) version: Semver,
|
||||||
/**
|
/**
|
||||||
* @see [PluginDescription.name]
|
* @see [PluginDescription.name]
|
||||||
*/
|
*/
|
||||||
name: String = id,
|
@ResolveContext(PLUGIN_NAME) name: String = id,
|
||||||
block: JvmPluginDescriptionBuilder.() -> Unit = {},
|
block: JvmPluginDescriptionBuilder.() -> Unit = {},
|
||||||
): JvmPluginDescription = JvmPluginDescriptionBuilder(id, version).apply { name(name) }.apply(block).build()
|
): JvmPluginDescription = JvmPluginDescriptionBuilder(id, version).apply { name(name) }.apply(block).build()
|
||||||
}
|
}
|
||||||
@ -102,7 +104,10 @@ constructor(
|
|||||||
private var version: Semver,
|
private var version: Semver,
|
||||||
) {
|
) {
|
||||||
@Suppress("DEPRECATION_ERROR")
|
@Suppress("DEPRECATION_ERROR")
|
||||||
public constructor(name: String, version: String) : this(name, Semver(version, Semver.SemverType.LOOSE))
|
public constructor(
|
||||||
|
@ResolveContext(PLUGIN_NAME) id: String,
|
||||||
|
@ResolveContext(PLUGIN_VERSION) version: String,
|
||||||
|
) : this(id, Semver(version, Semver.SemverType.LOOSE))
|
||||||
|
|
||||||
private var name: String = id
|
private var name: String = id
|
||||||
private var author: String = ""
|
private var author: String = ""
|
||||||
@ -110,19 +115,22 @@ constructor(
|
|||||||
private var dependencies: MutableSet<PluginDependency> = mutableSetOf()
|
private var dependencies: MutableSet<PluginDependency> = mutableSetOf()
|
||||||
|
|
||||||
@ILoveKuriyamaMiraiForever
|
@ILoveKuriyamaMiraiForever
|
||||||
public fun name(value: String): JvmPluginDescriptionBuilder = apply { this.name = value.trim() }
|
public fun name(@ResolveContext(PLUGIN_NAME) value: String): JvmPluginDescriptionBuilder =
|
||||||
|
apply { this.name = value.trim() }
|
||||||
|
|
||||||
@Deprecated("Semver 将会在 1.0-RC 被替换为 Console 自己实现的版本。请临时使用 String。", level = DeprecationLevel.ERROR)
|
@Deprecated("Semver 将会在 1.0-RC 被替换为 Console 自己实现的版本。请临时使用 String。", level = DeprecationLevel.ERROR)
|
||||||
@ILoveKuriyamaMiraiForever
|
@ILoveKuriyamaMiraiForever
|
||||||
public fun version(value: String): JvmPluginDescriptionBuilder =
|
public fun version(@ResolveContext(PLUGIN_VERSION) value: String): JvmPluginDescriptionBuilder =
|
||||||
apply { this.version = Semver(value, Semver.SemverType.LOOSE) }
|
apply { this.version = Semver(value, Semver.SemverType.LOOSE) }
|
||||||
|
|
||||||
@Deprecated("Semver 将会在 1.0-RC 被替换为 Console 自己实现的版本。请临时使用 String。", level = DeprecationLevel.ERROR)
|
@Deprecated("Semver 将会在 1.0-RC 被替换为 Console 自己实现的版本。请临时使用 String。", level = DeprecationLevel.ERROR)
|
||||||
@ILoveKuriyamaMiraiForever
|
@ILoveKuriyamaMiraiForever
|
||||||
public fun version(value: Semver): JvmPluginDescriptionBuilder = apply { this.version = value }
|
public fun version(@ResolveContext(PLUGIN_VERSION) value: Semver): JvmPluginDescriptionBuilder =
|
||||||
|
apply { this.version = value }
|
||||||
|
|
||||||
@ILoveKuriyamaMiraiForever
|
@ILoveKuriyamaMiraiForever
|
||||||
public fun id(value: String): JvmPluginDescriptionBuilder = apply { this.id = value.trim() }
|
public fun id(@ResolveContext(PLUGIN_ID) value: String): JvmPluginDescriptionBuilder =
|
||||||
|
apply { this.id = value.trim() }
|
||||||
|
|
||||||
@ILoveKuriyamaMiraiForever
|
@ILoveKuriyamaMiraiForever
|
||||||
public fun author(value: String): JvmPluginDescriptionBuilder = apply { this.author = value.trim() }
|
public fun author(value: String): JvmPluginDescriptionBuilder = apply { this.author = value.trim() }
|
||||||
@ -151,7 +159,7 @@ constructor(
|
|||||||
*/
|
*/
|
||||||
@ILoveKuriyamaMiraiForever
|
@ILoveKuriyamaMiraiForever
|
||||||
public fun dependsOn(
|
public fun dependsOn(
|
||||||
pluginId: String,
|
@ResolveContext(PLUGIN_ID) pluginId: String,
|
||||||
isOptional: Boolean = false,
|
isOptional: Boolean = false,
|
||||||
versionRequirement: VersionRequirement,
|
versionRequirement: VersionRequirement,
|
||||||
): JvmPluginDescriptionBuilder = apply {
|
): JvmPluginDescriptionBuilder = apply {
|
||||||
@ -165,7 +173,7 @@ constructor(
|
|||||||
*/
|
*/
|
||||||
@ILoveKuriyamaMiraiForever
|
@ILoveKuriyamaMiraiForever
|
||||||
public fun dependsOn(
|
public fun dependsOn(
|
||||||
pluginId: String,
|
@ResolveContext(PLUGIN_ID) pluginId: String,
|
||||||
versionRequirement: VersionRequirement,
|
versionRequirement: VersionRequirement,
|
||||||
): JvmPluginDescriptionBuilder = apply {
|
): JvmPluginDescriptionBuilder = apply {
|
||||||
this.dependencies.add(PluginDependency(pluginId, versionRequirement, false))
|
this.dependencies.add(PluginDependency(pluginId, versionRequirement, false))
|
||||||
@ -178,7 +186,7 @@ constructor(
|
|||||||
*/
|
*/
|
||||||
@ILoveKuriyamaMiraiForever
|
@ILoveKuriyamaMiraiForever
|
||||||
public fun dependsOn(
|
public fun dependsOn(
|
||||||
pluginId: String,
|
@ResolveContext(PLUGIN_ID) pluginId: String,
|
||||||
isOptional: Boolean = false,
|
isOptional: Boolean = false,
|
||||||
): JvmPluginDescriptionBuilder = apply {
|
): JvmPluginDescriptionBuilder = apply {
|
||||||
this.dependencies.add(PluginDependency(pluginId, null, isOptional))
|
this.dependencies.add(PluginDependency(pluginId, null, isOptional))
|
||||||
@ -199,7 +207,7 @@ constructor(
|
|||||||
*/
|
*/
|
||||||
@ILoveKuriyamaMiraiForever
|
@ILoveKuriyamaMiraiForever
|
||||||
public fun dependsOn(
|
public fun dependsOn(
|
||||||
pluginId: String,
|
@ResolveContext(PLUGIN_ID) pluginId: String,
|
||||||
isOptional: Boolean = false,
|
isOptional: Boolean = false,
|
||||||
versionRequirement: VersionRequirement.Builder.() -> VersionRequirement,
|
versionRequirement: VersionRequirement.Builder.() -> VersionRequirement,
|
||||||
): JvmPluginDescriptionBuilder =
|
): JvmPluginDescriptionBuilder =
|
||||||
@ -214,10 +222,13 @@ constructor(
|
|||||||
public fun build(): JvmPluginDescription =
|
public fun build(): JvmPluginDescription =
|
||||||
SimpleJvmPluginDescription(name, version, id, author, info, dependencies)
|
SimpleJvmPluginDescription(name, version, id, author, info, dependencies)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标注一个 [JvmPluginDescription] DSL
|
||||||
|
*/
|
||||||
@Suppress("SpellCheckingInspection")
|
@Suppress("SpellCheckingInspection")
|
||||||
@Retention(AnnotationRetention.SOURCE)
|
@Retention(AnnotationRetention.SOURCE)
|
||||||
@DslMarker
|
@DslMarker
|
||||||
private annotation class ILoveKuriyamaMiraiForever // https://zh.moegirl.org.cn/zh-cn/%E6%A0%97%E5%B1%B1%E6%9C%AA%E6%9D%A5
|
internal annotation class ILoveKuriyamaMiraiForever // https://zh.moegirl.org.cn/zh-cn/%E6%A0%97%E5%B1%B1%E6%9C%AA%E6%9D%A5
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user