英文:
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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论