如何在 Eclipse 中扩展 IDocumentListener 以创建插件?
How to extend IDocumentListener in eclipse for creating plugin?
我正在尝试创建一个插件来监视文档中的更改。
我有兴趣在文档更改时在文本编辑器中添加标记。
我观察到对于 class - IDocumentListener 方法 documentChanged 每当有变化时都会被调用。
但是,我无法将其实现为插件,因为该接口没有扩展点。
你能帮我扩展 IDocumentListener 吗?
查看现有的开源插件以了解它如何执行类似任务很有启发意义。我们以Bracketeer为例。
起点是实现 org.eclipse.core.runtime.Plugin
的 class。对于具有 UI 的插件,实现提供附加功能的 org.eclipse.ui.plugin.AbstractUIPlugin
很有用。这个 class 通常称为 "activator",实际上在 Bracketeer 中它被称为 Activator
. It's registered as the plugin's activator class in the MANIFEST.MF
文件,使用如下一行:
Bundle-Activator: com.chookapp.org.bracketeer.Activator
Activator
class 覆盖 Plugin.start()
,插件加载时将由运行时调用。覆盖的 start()
方法设置了一个 部分监听器 .
部分侦听器是实现 IPartListener2
接口的 class。在 Bracketeer 中,它被称为 PartListener
。在设置时,它调用 PlatformUI.getWorkbench()
来获取 IWorkbench
,并调用 IWorkbench.getWorkbenchWindows()
来获取当前打开的列表 windows(在插件启动时)。然后它通过 IWorkbenchWindow.getPartService().addPartListener()
.
向每个 window 注册自己
此外,为了处理插件加载后新打开的windows,PartListener
还实现了IWindowListener
,并通过[将自己注册为window监听器=26=]。这允许 PartListener
通过覆盖 IWindowListener.windowOpened()
来处理新的 windows 打开,并将自己注册为新 windows.
的部分侦听器
作为部分监听器,PartListener
覆盖 IPartListener2.partActivated()
和 partOpened()
以处理 workbench 部分(包括 编辑器 )正在打开或激活。在这些方法中,它检查该部分是否是 IEditorPart
;如果是这样,它将获取编辑器部分的 document(参见 PartListener.getPartDocument()
),这是一个 IDocument
.
最后,有了 IDocument
,它可以通过 IDocument.addDocumentListener(IDocumentListener)
.
注册它想要的任何 IDocumentListener
(我忽略了一些细节,例如为插件启动时已经打开的每个 workbench 部分手动调用 partActivated()
。请参阅 Bracketeer 代码完整的细节。)
所有这些都是 public API,其中 none 需要实现任何扩展点。
我正在尝试创建一个插件来监视文档中的更改。
我有兴趣在文档更改时在文本编辑器中添加标记。
我观察到对于 class - IDocumentListener 方法 documentChanged 每当有变化时都会被调用。
但是,我无法将其实现为插件,因为该接口没有扩展点。
你能帮我扩展 IDocumentListener 吗?
查看现有的开源插件以了解它如何执行类似任务很有启发意义。我们以Bracketeer为例。
起点是实现 org.eclipse.core.runtime.Plugin
的 class。对于具有 UI 的插件,实现提供附加功能的 org.eclipse.ui.plugin.AbstractUIPlugin
很有用。这个 class 通常称为 "activator",实际上在 Bracketeer 中它被称为 Activator
. It's registered as the plugin's activator class in the MANIFEST.MF
文件,使用如下一行:
Bundle-Activator: com.chookapp.org.bracketeer.Activator
Activator
class 覆盖 Plugin.start()
,插件加载时将由运行时调用。覆盖的 start()
方法设置了一个 部分监听器 .
部分侦听器是实现 IPartListener2
接口的 class。在 Bracketeer 中,它被称为 PartListener
。在设置时,它调用 PlatformUI.getWorkbench()
来获取 IWorkbench
,并调用 IWorkbench.getWorkbenchWindows()
来获取当前打开的列表 windows(在插件启动时)。然后它通过 IWorkbenchWindow.getPartService().addPartListener()
.
此外,为了处理插件加载后新打开的windows,PartListener
还实现了IWindowListener
,并通过[将自己注册为window监听器=26=]。这允许 PartListener
通过覆盖 IWindowListener.windowOpened()
来处理新的 windows 打开,并将自己注册为新 windows.
作为部分监听器,PartListener
覆盖 IPartListener2.partActivated()
和 partOpened()
以处理 workbench 部分(包括 编辑器 )正在打开或激活。在这些方法中,它检查该部分是否是 IEditorPart
;如果是这样,它将获取编辑器部分的 document(参见 PartListener.getPartDocument()
),这是一个 IDocument
.
最后,有了 IDocument
,它可以通过 IDocument.addDocumentListener(IDocumentListener)
.
IDocumentListener
(我忽略了一些细节,例如为插件启动时已经打开的每个 workbench 部分手动调用 partActivated()
。请参阅 Bracketeer 代码完整的细节。)
所有这些都是 public API,其中 none 需要实现任何扩展点。