【问题标题】:Eclipse 4.5.1. (MARS.1) Method not found: setDefaultEditor日食 4.5.1。 (MARS.1) 找不到方法:setDefaultEditor
【发布时间】:2015-10-13 19:47:16
【问题描述】:

我有一个插件,它曾经与 Eclipse Indigo、Kepler、Luna 和 Mars (4.5) 一起使用。它支持 Frege 编程语言 (http://www.frege-lang.org/fregide/)。它基于 IMP 框架,不幸的是,它不再维护(而且我没有源代码)。

今晚我检查了更新,发现 Eclipse 4.5.1。 更新后,eclipse 有了一个漂亮的新启动画面,上面写着“MARS.1”。

但它不能再初始化插件了!

在错误日志中,我收到以下消息:

Plug-in "frege.ide" was unable to instantiate class "frege.imp.builders.FregeBuilder".

堆栈跟踪似乎表明某些方法已从 Eclipse API 中消失:

java.lang.NoSuchMethodError: org.eclipse.ui.internal.registry.FileEditorMapping.setDefaultEditor(Lorg/eclipse/ui/internal/registry/EditorDescriptor;)V
    at org.eclipse.imp.language.LanguageRegistry.addUniversalEditorMappings(LanguageRegistry.java:393)
    at org.eclipse.imp.language.LanguageRegistry.initializeRegistryAsNeeded(LanguageRegistry.java:268)
    at org.eclipse.imp.language.LanguageRegistry.findLanguage(LanguageRegistry.java:206)
    at frege.imp.builders.FregeBuilderBase.<clinit> (FregeBuilderBase.java:53)
    ...

这是我的问题:

  1. 有人知道为什么这种方法消失了吗?
  2. 如何将插件的安装限制为仅限 LUNA、KEPLER 和 INDIGO?
  3. 是否可以提供一个假的 setDefaultEditor 方法来执行现在必须执行的任何操作来为插件注册编辑器?

【问题讨论】:

  • 为什么要直接拨打FileEditorMapping?它是一个 internal 类,因此不是 Eclipse API 的一部分,可以随时更改。
  • @greg-449 我没有。正是 IMP 插件框架执行此操作。

标签: java eclipse eclipse-plugin


【解决方案1】:

setDefaultEditor 方法在 FileEditorMapping 中仍然存在,但它现在需要一个 IEditorDescriptor 参数而不是 EditorDescriptor。这将导致NoSuchMethodError。由于此类是内部类,因此不是 API 的一部分,因此这是一个有效的更改。

根据IMP Wiki,IMP 项目已移至github project,您或许可以从那里获得最新的代码(或至少获得源代码)。

【讨论】:

  • 所以只需要重新编译 IMP 的东西吗?因为,当然,EditorDescription 是一个 IEditorDescription,或者至少我希望如此。
  • 是的,我认为重新编译就可以了。
  • 能够修复它切换到 IMP 的继任者 - 感谢您提供链接,@greg-449
猜你喜欢
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-15
  • 1970-01-01
  • 2020-11-25
  • 1970-01-01
相关资源
最近更新 更多