如何在Eclipse插件中弃用视图

时间:2012-05-16 23:16:28

标签: eclipse plugins rcp

我有一个用于提供视图的Eclipse插件。但是,在我的插件的下一个版本中,我不再想要提供此视图,因为功能是以不同的方式完成的。那么我该如何去除视图?

如果我只是从plugin.xml中删除视图声明,那么在升级“无法创建视图com.foobar.view.id”后它将显示为错误 - 这是因为视图仍然列出在他们的workspace.xml中,Eclipse尝试在重新启动时创建它。

如果我针对我创建的虚拟视图注册了该视图ID,那么我必须在plugin.xml中注册它,因此它将出现在Windows,Show View,Other list ...

当我不想在另一个视图中重复使用该ID时,我知道如何以一种很好的方式摆脱这个旧视图?

3 个答案:

答案 0 :(得分:1)

我认为在Eclipse中弃用视图并不容易。正如您在问题中所述,您可以删除它。

也许在下一个版本中,您可以包含一个虚拟视图,其中包含一些文档,可以在下次查找该功能,将plugin.xml中的restorable属性设置为false,以防止Eclipse下次重新打开此虚拟视图。

然后在一个版本之后你可以完全删除视图。

答案 1 :(得分:1)

最后,我将旧的活动技巧从包中取出,并提供了可接受的解决方案。在这里为后人记录,但是如果有人想出更好的方法,我很乐意听到。

首先调用,创建一个空白的ViewPage,它不做什么,只是说“此视图故意留空”或用户的一些其他有用信息,因此他们知道升级成功,只是视图可以关闭。在我们的例子中,我们解释了现在在哪里找到等效的功能,并有一个他们可以点击的链接,将它们带到应用程序的那一部分。

其次,将此视图类注册为旧视图ID的实现,并将其标记为不可恢复,即

<view
  allowMultiple="false"
  category="com.foobar.category"
  class="com.foobar.ui.views.DeprecatedView"
  id="com.foobar.ui.views.OldView"
  name="My Old View"
  restorable="false"/>

最后,我们需要将活动技巧从包中拉出来。创建一个新活动并将您的视图放入其中。这将从“显示视图”,“其他...”对话框中过滤旧视图,以便新用户不会再次看到它。例如:

<extension 
  point="org.eclipse.ui.activities">

  <activity
    name="Deprecated"
    description="Supress old views that are no longer used."
    id="com.foobar.hidden">
  </activity>

  <activityPatternBinding
    activityId="com.foobar.hidden"
    pattern="com.foorbar.plugin/com.foobar.ui.views.OldView"
    isEqualityPattern="true">
  </activityPatternBinding>

</extension>

用户体验是,升级后,如果旧视图可见,则用户会收到一条很好的消息,解释原因并告诉他们该做什么(即关闭旧视图并继续前进)。无论哪种方式,当他们关闭Eclipse并重新启动时,该视图不再显示在透视图中。新用户永远不会在Show View对话框中看到它的视图或任何提示,所以在我确信每个人都已升级后的几个版本中我可以从plugin.xml等删除已弃用的视图注册。

这是我能想到的最佳体验 - 但很高兴听到人们是否会想到更好的体验。如果您想了解有关Eclipse activity filtering的更多信息,请查看here - 这是我在浏览ViewRegistry和ShowViewDialog代码时过滤注册视图的唯一方法。

答案 2 :(得分:-1)

如果您使用相同的ID注册新视图会怎样?此外,错误只会在第一次出现,而不会在随后的重新启动时出现。