英文:
Intellij Plugin: Cannot init component state exception
问题
我正在尝试创建一个Intellij Idea插件,并在“Settings->Tools”中进行一些配置。
我有一个ApplicationService来保存和保存这些配置,但在调用ServiceManager.getService(MyService.class)时会出现异常,并且在重新打开Intellij Idea时配置不会持续保存。
以下是异常的堆栈跟踪:
com.intellij.diagnostic.PluginException: 无法初始化组件状态 [Plugin: org.mycompany.mycompany-plugin]
at com.intellij.configurationStore.ComponentStoreImpl.initComponent(ComponentStoreImpl.kt:116)
at com.intellij.configurationStore.ComponentStoreWithExtraComponents.initComponent(ComponentStoreWithExtraComponents.kt:50)
at com.intellij.serviceContainer.ComponentManagerImpl.initializeComponent$intellij_platform_serviceContainer(ComponentManagerImpl.kt:358)
at com.intellij.serviceContainer.ServiceComponentAdapter.createAndInitialize(ServiceComponentAdapter.kt:58)
...
Caused by: java.lang.UnsupportedOperationException: 必须为com.mycompany.config.SettingsService指定configurationSchemaKey
at com.intellij.configurationStore.ComponentStoreImpl.initComponent(ComponentStoreImpl.kt:369)
at com.intellij.configurationStore.ComponentStoreImpl.initComponent(ComponentStoreImpl.kt:100)
... 113 more
我找不到关于“configurationSchemaKey”的任何文档,除了它是一个ApplicationService XML参数之外 - 但我无法找出应该放什么值。
以下是我如何定义该服务的方式:
<applicationService
serviceImplementation="com.testmycode.config.SettingsService"
id="com.testmycode.config.SettingsService"/>
我漏掉了什么?
英文:
I am trying to create an Intellij Idea Plugin with some configurations in Settings->Tools.
I have an ApplicationService to hold and save those configurations, but an exception occurs when calling ServiceManager.getService(MyService.class), and the configuration don't persist upon reopening Intellij Idea.
Here is the stack trace for the exception:
com.intellij.diagnostic.PluginException: Cannot init component state [Plugin: org.mycompany.mycompany-plugin]
at com.intellij.configurationStore.ComponentStoreImpl.initComponent(ComponentStoreImpl.kt:116)
at com.intellij.configurationStore.ComponentStoreWithExtraComponents.initComponent(ComponentStoreWithExtraComponents.kt:50)
at com.intellij.serviceContainer.ComponentManagerImpl.initializeComponent$intellij_platform_serviceContainer(ComponentManagerImpl.kt:358)
at com.intellij.serviceContainer.ServiceComponentAdapter.createAndInitialize(ServiceComponentAdapter.kt:58)
at com.intellij.serviceContainer.ServiceComponentAdapter.doCreateInstance(ServiceComponentAdapter.kt:41)
at com.intellij.serviceContainer.BaseComponentAdapter.getInstanceUncached(BaseComponentAdapter.kt:115)
at com.intellij.serviceContainer.BaseComponentAdapter.getInstance(BaseComponentAdapter.kt:69)
at com.intellij.serviceContainer.ComponentManagerImpl.doGetService(ComponentManagerImpl.kt:411)
at com.intellij.serviceContainer.ComponentManagerImpl.getService(ComponentManagerImpl.kt:394)
at com.intellij.openapi.components.ServiceManager.getService(ServiceManager.java:20)
at com.mycompany.config.SettingsService.getInstance(SettingsService.java:14)
at com.mycompany.config.SettingsConfigurable.reset(SettingsConfigurable.java:46)
at com.intellij.openapi.options.ex.ConfigurableWrapper.reset(ConfigurableWrapper.java:177)
at com.intellij.openapi.options.ex.ConfigurableCardPanel.reset(ConfigurableCardPanel.java:166)
at com.intellij.openapi.options.ex.ConfigurableCardPanel.lambda$createConfigurableComponent$4(ConfigurableCardPanel.java:118)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:894)
(a lot more lines here)
Caused by: java.lang.UnsupportedOperationException: configurationSchemaKey must be specified for com.mycompany.config.SettingsService
at com.intellij.configurationStore.ComponentStoreImpl.initComponent(ComponentStoreImpl.kt:369)
at com.intellij.configurationStore.ComponentStoreImpl.initComponent(ComponentStoreImpl.kt:100)
... 113 more
I found no documentation about that "configurationSchemaKey", except for the fact that it's an ApplicationService XML paramter - but I could not find out what value I should put in it. I.
Here's how I defined the service:
<applicationService
serviceImplementation="com.testmycode.config.SettingsService"
id="com.testmycode.config.SettingsService"/>
What am I missing?
答案1
得分: 1
configurationSchemaKey属性是ServiceDescriptor的一部分,并被描述为:
> 由于为了获取注释,必须加载类,但出于性能原因,不能将其作为{@link State}的一部分来指定。
然而,通常不会创建这样的服务来处理设置。
请审查您当前的实现,并遵循IntelliJ Platform SDK开发指南中的设置入门指南。
英文:
configurationSchemaKey property is a part of the ServiceDescriptor and is described as:
> Cannot be specified as part of {@link State} because to get annotation, class must be loaded, but it cannot be done for performance reasons.
However, it's not common to create such a service for handling settings.
Please review your current implementation and follow the Introduction to Settings guide in the IntelliJ Platform SDK DevGuide.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论