我有两个eclipse插件(自定义文本编辑器插件和一个视图插件作为两个不同的项目)。文本编辑器中有一个操作,用于构建所有相关源文件的“函数”索引。在这个动作结束时,我想在view插件的tableviewer中显示索引('functions'列表)。你会说最好的方法是什么?视图不必听编辑器。只有当编辑器插件中的操作触发时才应该更新。
我从编辑器插件导出了一个包,并从视图插件中导出了另一个包,因为文本编辑器插件需要引用视图类型来在视图插件中填充tableViewer,而视图插件需要在tableviewer的contentProvider中引用编辑器类型。但是我收到了构建路径错误:
在项目的构建路径中检测到一个循环
我该如何解决这个问题?或者如果这是一个糟糕的方法,我有更好的方法吗?
感谢。
TK。
答案 0 :(得分:1)
首先,不允许插件之间的循环引用。因此,当您需要在插件之间双向共享信息时,通常需要重构问题,为其中一个方向设置一个侦听器模式。
在这种情况下,我将使用与现有Outline视图相同的视图结构。因此,您的视图应该对PageBookView
进行子类化,IEditorPart
具有相当简单的协议,用于参与编辑器如何向视图提供数据。
基本上我会像在Outline视图中那样做,并让编辑器本身通过自适应提供视图的内容。 “大纲”视图通过跟踪当前编辑器来执行此操作,每当“看到”新编辑器时,“大纲”视图都会尝试将IContentOutlinePage
调整为ContentOutline
。编辑器负责此特定编辑器的视图页面中需要的SWT小部件和监听器等...仔细查看IWorkbenchPage.showView(...)
的JavaDoc - 这是对协议的一个相当好的描述参与。
如果您有多个“开放”编辑器,则新视图将自动显示活动编辑器的相关信息,而不是“仅”上次执行操作时处于活动状态的编辑器。
使用此方案,您的操作将只是