I have two eclipse plugins(custom text editor plugin and a view plugin as two different projects). There is an action in the text editor that builds index of ‘functions’ of all dependent source files. At the end of this action I would like to show index(list of ‘functions’) in a tableviewer of the view plugin. What would you say the best way to achieve this? The view does not have to listen to the editor. It should be updated only when an action from editor plugin fires.
I exported a package from the editor plugin and exported another package from the view plug because text editor plugin needs to reference view type to populate tableViewer in the view plugin, and the view plugin needs to reference editor type in tableviewer’s contentProvider. But I am getting an build path error:
A cycle was detected in the build path of project
How can I resolve this? Or If this is a bad approach, do I have a better way?
Thanks.
tk.
First of all, circular references between plug-ins are not allowed. So when you need to share information bidirectional between plug-ins, you often have to refactor the problem, to have a listener pattern for one of the directions.
In this case, I would use the same structure for your view as used for the existing Outline view. So your view should sub-class the
PageBookViewwhich have a rather simple protocol for how a participating editor can provide data to the view.Basically I would do the same as done for the Outline view, and let the editor itself provide the content of the view via adaption. The Outline view does this by tracking the current editor, and whenever a new editor is “seen”, the Outline view attempts to adapt the
IEditorParttoIContentOutlinePage. The editor is responsible for the SWT widgets and listeners, etc that will be needed in the view page for this particular editor… Have a close look at the JavaDoc forContentOutline– this is a rather good description of the protocols involved.If you have multiple “open” editors, then the new view will automatically show the relevant information for the active editor and not “just” the editor that was active the last time you executed your action.
With this scheme, your action will simply
IWorkbenchPage.showView(...).