因此,我正在寻找为Eclipse 4.2开发一个插件来监视用户对其文件所做的编辑。
这是我的第一个Eclipse插件,为了准备,我浏览了Eclipse插件开发备忘单(HelloWorld),并花了很多时间在help.eclipse.org上查看文档和API。我想我对我需要什么工具有所了解,但我不确定如何将这些工具放在一起做我想做的事。
期望的结果:拥有一个插件,可以随时了解添加到(Java)编辑器的所有新信件以及任何和所有删除信息。这包括Eclipse所做的事情(自动完成变量,大括号)以及用户输入的内容。
可能提供帮助的工具:我认为 IResourceChangeListener 会提供帮助,因为它为我提供了一个 IResourceChangeEvent ,可访问的 IResourceDelta ,表示工作区更改。此外,由于编辑扩展了EditorPart,我认为在相关编辑器中添加 IPropertyChangeListener 也可能很有用。
我认为我有合适的工具,但我不知道如何按照自己的意愿组装它们。
问题:
上面列出的工具是否适用于该工作?
如何获取已打开或将要打开的所有编辑器的列表并向其添加侦听器?
有关学习如何编写Eclipse插件的资源的任何其他技巧?
答案 0 :(得分:2)
是和否。一旦资源(文件)发生变化,IResourceChangedListener
将触发。在大多数编辑器中,这对应于用户保存文件。
要接近实时监控键入,一种方法是使用MonoReconciler
在用户空闲(例如0.5秒)后捕获缓冲区更改。这就是JDT的工作原理。
现在,如果您是EditorPart
的创建者,这一切都很容易。根据您希望监视的编辑器,您需要获取其IDocument
并根据需要添加侦听器。请参阅documentation。为了它的价值,IIRC的Java编辑使用ProjectionDocument
s。
答案 1 :(得分:2)
Krumelur的小贴士给了我一个很好的起点。 DocumentEvent
返回的IDocumentListener
非常精细,可以通过字符分析对所发生的事情进行分析。
IEditorPart editor = ...;
IEditorInput input = editor.getEditorInput();
IDocument document=(((ITextEditor)editor).getDocumentProvider()).getDocument();
document.addDocumentListener(new IDocumentListener() {
@Override
public void documentChanged(DocumentEvent event)
{
System.out.println("Change happened: " + event.toString());
}
@Override
public void documentAboutToBeChanged(DocumentEvent event) {
System.out.println("I predict that the following change will occur: "+event.toString());
}
};
});
就我应该扩展的内容而言,我扩展了org.eclipse.ui.startup
并添加了一系列听众,直到我看到了上面的代码。
我希望这可以帮助那些正在寻找我的人。