From 77e2a5c3b48f4bbe54d03b4413a5167b25d9c2be Mon Sep 17 00:00:00 2001 From: Him188 Date: Tue, 22 Feb 2022 19:53:08 +0000 Subject: [PATCH] Prohibit premature usages of PermissionService --- .../src/internal/MiraiConsoleImplementationBridge.kt | 5 +++++ .../mirai-console/src/permission/PermissionService.kt | 8 +++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/mirai-console/backend/mirai-console/src/internal/MiraiConsoleImplementationBridge.kt b/mirai-console/backend/mirai-console/src/internal/MiraiConsoleImplementationBridge.kt index 6dbc4d8baf0..3267a10b8f3 100644 --- a/mirai-console/backend/mirai-console/src/internal/MiraiConsoleImplementationBridge.kt +++ b/mirai-console/backend/mirai-console/src/internal/MiraiConsoleImplementationBridge.kt @@ -86,6 +86,10 @@ internal class MiraiConsoleImplementationBridge( // used internally val globalComponentStorage: GlobalComponentStorageImpl by lazy { GlobalComponentStorageImpl() } + // tentative workaround for https://github.com/mamoe/mirai/pull/1889#pullrequestreview-887903183 + @Volatile + var permissionSeviceLoaded: Boolean = false + override val mainLogger: MiraiLogger by lazy { createLogger("main") } init { @@ -187,6 +191,7 @@ internal class MiraiConsoleImplementationBridge( phase("load PermissionService") { mainLogger.verbose { "Loading PermissionService..." } + permissionSeviceLoaded = true PermissionService.INSTANCE.let { ps -> if (ps is BuiltInPermissionService) { consoleDataScope.addAndReloadConfig(ps.config) diff --git a/mirai-console/backend/mirai-console/src/permission/PermissionService.kt b/mirai-console/backend/mirai-console/src/permission/PermissionService.kt index e91af577af7..3fd66bce105 100644 --- a/mirai-console/backend/mirai-console/src/permission/PermissionService.kt +++ b/mirai-console/backend/mirai-console/src/permission/PermissionService.kt @@ -11,6 +11,7 @@ package net.mamoe.mirai.console.permission +import net.mamoe.mirai.console.MiraiConsoleImplementation import net.mamoe.mirai.console.compiler.common.ResolveContext import net.mamoe.mirai.console.compiler.common.ResolveContext.Kind.COMMAND_NAME import net.mamoe.mirai.console.extension.instance @@ -147,7 +148,12 @@ public interface PermissionService

{ @get:JvmName("getInstance") @JvmStatic public val INSTANCE: PermissionService - get() = GlobalComponentStorage.getPreferredExtension(PermissionServiceProvider).instance + get() { + if (!MiraiConsoleImplementation.getBridge().permissionSeviceLoaded) { + error("PermissionService is not yet ready.") + } + return GlobalComponentStorage.getPreferredExtension(PermissionServiceProvider).instance + } /** * 获取一个权限, 失败时抛出 [NoSuchElementException]