mirror of
https://github.com/mamoe/mirai.git
synced 2025-01-10 18:40:15 +08:00
Introduce RestrictedScope for further resolution for IDE plugin
This commit is contained in:
parent
c8696b6ac5
commit
ceb689066e
@ -36,19 +36,16 @@ public annotation class ResolveContext(
|
||||
// ConstantKind
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
PLUGIN_ID,
|
||||
PLUGIN_NAME,
|
||||
PLUGIN_VERSION,
|
||||
PLUGIN_ID, // ILLEGAL_PLUGIN_DESCRIPTION
|
||||
PLUGIN_NAME, // ILLEGAL_PLUGIN_DESCRIPTION
|
||||
PLUGIN_VERSION, // ILLEGAL_PLUGIN_DESCRIPTION
|
||||
|
||||
COMMAND_NAME,
|
||||
COMMAND_NAME, // ILLEGAL_COMMAND_NAME
|
||||
|
||||
PERMISSION_NAMESPACE,
|
||||
PERMISSION_NAME,
|
||||
PERMISSION_ID, // for parseFromString
|
||||
PERMISSION_NAMESPACE, // ILLEGAL_COMMAND_NAMESPACE
|
||||
PERMISSION_NAME, // ILLEGAL_COMMAND_NAME
|
||||
PERMISSION_ID, // ILLEGAL_COMMAND_ID
|
||||
|
||||
/**
|
||||
* Custom serializers allowed
|
||||
*/
|
||||
RESTRICTED_NO_ARG_CONSTRUCTOR,
|
||||
RESTRICTED_NO_ARG_CONSTRUCTOR, // NOT_CONSTRUCTABLE_TYPE
|
||||
}
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
package net.mamoe.mirai.console.compiler.common
|
||||
|
||||
import net.mamoe.mirai.console.util.ConsoleExperimentalApi
|
||||
import kotlin.annotation.AnnotationTarget.FUNCTION
|
||||
|
||||
/**
|
||||
* 标记一个函数, 在其函数体内限制特定一些函数的使用.
|
||||
*/
|
||||
@ConsoleExperimentalApi
|
||||
@Target(FUNCTION)
|
||||
@Retention(AnnotationRetention.BINARY)
|
||||
public annotation class RestrictedScope(
|
||||
vararg val kinds: Kind,
|
||||
) {
|
||||
public enum class Kind {
|
||||
PERMISSION_REGISTER, // ILLEGAL_PERMISSION_REGISTER_USE
|
||||
COMMAND_REGISTER, // ILLEGAL_COMMAND_REGISTER_USE
|
||||
}
|
||||
}
|
@ -217,8 +217,8 @@ public inline fun <reified T> PluginData.value(
|
||||
*/
|
||||
@ResolveContext(RESTRICTED_NO_ARG_CONSTRUCTOR)
|
||||
@LowPriorityInOverloadResolution
|
||||
public inline fun <reified T> PluginData.value(apply: T.() -> Unit = {}): SerializerAwareValue<T> =
|
||||
valueImpl<T>(typeOf0<T>(), T::class).also { it.value.apply() }
|
||||
public inline fun <@ResolveContext(RESTRICTED_NO_ARG_CONSTRUCTOR) reified T>
|
||||
PluginData.value(apply: T.() -> Unit = {}): SerializerAwareValue<T> = valueImpl<T>(typeOf0<T>(), T::class).also { it.value.apply() }
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
@PublishedApi
|
||||
|
@ -18,6 +18,9 @@
|
||||
package net.mamoe.mirai.console.plugin.jvm
|
||||
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import net.mamoe.mirai.console.compiler.common.RestrictedScope
|
||||
import net.mamoe.mirai.console.compiler.common.RestrictedScope.Kind.COMMAND_REGISTER
|
||||
import net.mamoe.mirai.console.compiler.common.RestrictedScope.Kind.PERMISSION_REGISTER
|
||||
import net.mamoe.mirai.console.extension.PluginComponentStorage
|
||||
import net.mamoe.mirai.console.permission.PermissionIdNamespace
|
||||
import net.mamoe.mirai.console.plugin.Plugin
|
||||
@ -59,6 +62,7 @@ public interface JvmPlugin : Plugin, CoroutineScope,
|
||||
*
|
||||
* @receiver 组件容器
|
||||
*/
|
||||
@RestrictedScope(COMMAND_REGISTER, PERMISSION_REGISTER)
|
||||
public fun PluginComponentStorage.onLoad() {}
|
||||
|
||||
/**
|
||||
|
@ -14,6 +14,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory1;
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory2;
|
||||
import org.jetbrains.kotlin.diagnostics.Errors;
|
||||
import org.jetbrains.kotlin.psi.KtNamedDeclaration;
|
||||
|
||||
import static org.jetbrains.kotlin.diagnostics.Severity.ERROR;
|
||||
|
||||
@ -25,6 +26,8 @@ public interface MiraiConsoleErrors {
|
||||
DiagnosticFactory2<PsiElement, String, String> ILLEGAL_PERMISSION_NAME = DiagnosticFactory2.create(ERROR);
|
||||
DiagnosticFactory2<PsiElement, String, String> ILLEGAL_PERMISSION_ID = DiagnosticFactory2.create(ERROR);
|
||||
DiagnosticFactory2<PsiElement, String, String> ILLEGAL_PERMISSION_NAMESPACE = DiagnosticFactory2.create(ERROR);
|
||||
DiagnosticFactory2<PsiElement, KtNamedDeclaration, String> ILLEGAL_COMMAND_REGISTER_USE = DiagnosticFactory2.create(ERROR);
|
||||
DiagnosticFactory2<PsiElement, KtNamedDeclaration, String> ILLEGAL_PERMISSION_REGISTER_USE = DiagnosticFactory2.create(ERROR);
|
||||
|
||||
@Deprecated
|
||||
Object _init = new Object() {
|
||||
|
@ -61,6 +61,20 @@ object MiraiConsoleErrorsRendering : DefaultErrorMessages.Extension {
|
||||
Renderers.STRING,
|
||||
Renderers.STRING,
|
||||
)
|
||||
|
||||
put(
|
||||
ILLEGAL_COMMAND_REGISTER_USE,
|
||||
"''{0}'' 无法使用在 ''{1}'' 环境下.",
|
||||
Renderers.DECLARATION_NAME,
|
||||
Renderers.STRING
|
||||
)
|
||||
|
||||
put(
|
||||
ILLEGAL_PERMISSION_REGISTER_USE,
|
||||
"''{0}'' 无法使用在 ''{1}'' 环境下.",
|
||||
Renderers.DECLARATION_NAME,
|
||||
Renderers.STRING
|
||||
)
|
||||
}
|
||||
|
||||
override fun getMap() = MAP
|
||||
|
Loading…
Reference in New Issue
Block a user