Intellij插件:无法初始化组件状态异常

问题描述

我正在尝试使用Settings->Tools中的一些配置创建Intellij Idea插件

我有一个applicationservice来保存和保存这些配置,但是调用ServiceManager.getService(MyService.class)时会发生异常,并且该配置在重新打开Intellij Idea时不会持久。

这是异常的堆栈跟踪:

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

我没有找到有关“ configurationSchemaKey”的文档,除了它是applicationservice XML参数外,但我找不到应该输入的值。我

这是我定义服务的方式:

<applicationservice
                serviceImplementation="com.testmycode.config.SettingsService"
                id="com.testmycode.config.SettingsService"/>

我想念什么?

解决方法

configurationSchemaKey属性是ServiceDescriptor的一部分,其描述为:

不能指定为{@link State}的一部分,因为要获取注释,必须加载类,但出于性能原因不能这样做。

但是,创建这种用于处理设置的服务并不常见。

请查看您当前的实现,并遵循IntelliJ Platform SDK DevGuide中的Introduction to Settings指南。