4

如何覆盖FrameTitleBuilder我的 intellij 插件中的默认服务实现?

我正在使用 IntelliJ 12.1.4,我已经为构建插件正确设置了环境。

现在我尝试在一个新的插件项目中将其添加到我的 plugin.xml 中:

<extensions defaultExtensionNs="com.intellij">
    <applicationService serviceInterface="com.intellij.openapi.wm.impl.FrameTitleBuilder"
         serviceImplementation="com.my.package.MyFrameTitleBuilder"
         overrides="com.intellij.openapi.wm.impl.FrameTitleBuilder"
     />
</extensions>

但是它像这样失败:

org.picocontainer.defaults.DuplicateComponentKeyRegistrationException: Key com.intellij.openapi.wm.impl.FrameTitleBuilder duplicated

任何人都可以提供一些提示吗?

非常感谢您提前!!

4

2 回答 2

6

“覆盖”属性是一个布尔值(无论如何在 IntelliJ 13 中),将其设置为 true 并且旧的实现将首先被删除

<extensions defaultExtensionNs="com.intellij">
    <applicationService 
         serviceInterface="com.intellij.openapi.wm.impl.FrameTitleBuilder"
         serviceImplementation="com.my.package.MyFrameTitleBuilder"
         overrides="true" />
 </extensions>
于 2014-02-24T10:11:24.247 回答
0

由于我无法在 plugin.xml 中找到让我的插件覆盖服务实现的方法,我不得不通过 PicoContainer 手动“替换”它。

ApplicationManager.getApplication().getPicoContainer()其转换为MutablePicoContainer,然后您就可以取消注册/重新注册组件。

plugin.xml如果可能的话,我仍然想知道通过 执行此操作的正确格式。

于 2013-09-24T10:19:43.043 回答