Skip to content

Commit 1ada8d5

Browse files
committed
Prohibit premature usages of PermissionService
1 parent 73d7e21 commit 1ada8d5

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

mirai-console/backend/mirai-console/src/internal/MiraiConsoleImplementationBridge.kt

+5
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,10 @@ internal class MiraiConsoleImplementationBridge(
8686
// used internally
8787
val globalComponentStorage: GlobalComponentStorageImpl by lazy { GlobalComponentStorageImpl() }
8888

89+
// tentative workaround for https://github.com/mamoe/mirai/pull/1889#pullrequestreview-887903183
90+
@Volatile
91+
var permissionSeviceLoaded: Boolean = false
92+
8993
override val mainLogger: MiraiLogger by lazy { createLogger("main") }
9094

9195
init {
@@ -187,6 +191,7 @@ internal class MiraiConsoleImplementationBridge(
187191
phase("load PermissionService") {
188192
mainLogger.verbose { "Loading PermissionService..." }
189193

194+
permissionSeviceLoaded = true
190195
PermissionService.INSTANCE.let { ps ->
191196
if (ps is BuiltInPermissionService) {
192197
consoleDataScope.addAndReloadConfig(ps.config)

mirai-console/backend/mirai-console/src/permission/PermissionService.kt

+7-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
package net.mamoe.mirai.console.permission
1313

14+
import net.mamoe.mirai.console.MiraiConsoleImplementation
1415
import net.mamoe.mirai.console.compiler.common.ResolveContext
1516
import net.mamoe.mirai.console.compiler.common.ResolveContext.Kind.COMMAND_NAME
1617
import net.mamoe.mirai.console.extension.instance
@@ -147,7 +148,12 @@ public interface PermissionService<P : Permission> {
147148
@get:JvmName("getInstance")
148149
@JvmStatic
149150
public val INSTANCE: PermissionService<out Permission>
150-
get() = GlobalComponentStorage.getPreferredExtension(PermissionServiceProvider).instance
151+
get() {
152+
if (!MiraiConsoleImplementation.getBridge().permissionSeviceLoaded) {
153+
error("PermissionService is not yet ready.")
154+
}
155+
return GlobalComponentStorage.getPreferredExtension(PermissionServiceProvider).instance
156+
}
151157

152158
/**
153159
* 获取一个权限, 失败时抛出 [NoSuchElementException]

0 commit comments

Comments
 (0)