用途:本资料介绍 IntelliJ Registry API,用于在 JetBrains IDE 插件中声明和读取注册表键(registry keys)与功能开关。
主要能力:声明注册表键时优先在 plugin.xml 中声明,而非 registry.properties,需指定 key、defaultValue、description、restartRequired 等属性;依赖插件可通过 overrides="true" 覆盖父插件的键。读取时,挂起代码用 RegistryManager.getInstanceAsync().get("my.key"),阻塞代码用 RegistryManager.getInstance().get("my.key")。资料指出 Registry.get() 或 Registry.is() 已实质废弃,可能引发早期启动问题,应优先使用 RegistryManager。
早期启动:当代码可能在 COMPONENTS_LOADED 状态前运行(如 EULA 对话框、启动画面)时,必须使用 Registry.is(key, defaultValue) 并显式给出默认值,默认值需与 registry.properties 一致;可通过搜索 community/platform/util/resources/misc/registry.properties 或查看 plugin.xml 中的 <registryKey> 声明来确定默认值。不带默认值的 Registry.is(key) 在 LoadingState.COMPONENTS_LOADED 之前调用会抛异常。
命令行覆盖:测试或运行配置中可用 -Dmy.registry.key=value。
测试:应使用 @RegistryKey 注解,而非 Registry.get().setValue(),例如 @RegistryKey(key = "my.registry.key", value = "true")。
相关资料:Registry.md、Cloud Registry and Notifications.md(JetBrains IDE 的远程注册表更新)、writing-tests.md。
限制:注册表键声明优先 plugin.xml;JSON 资料未提供具体插件版本、兼容范围、账号或收费信息;云注册表细节需参见其专属文档。