Eclipse插件可精确监控编辑器更改

时间:2012-07-14 15:41:23

标签: java eclipse plugins eclipse-plugin

因此,我正在寻找为Eclipse 4.2开发一个插件来监视用户对其文件所做的编辑。

这是我的第一个Eclipse插件,为了准备,我浏览了Eclipse插件开发备忘单(HelloWorld),并花了很多时间在help.eclipse.org上查看文档和API。我想我对我需要什么工具有所了解,但我不确定如何将这些工具放在一起做我想做的事。

期望的结果:拥有一个插件,可以随时了解添加到(Java)编辑器的所有新信件以及任何和所有删除信息。这包括Eclipse所做的事情(自动完成变量,大括号)以及用户输入的内容。

可能提供帮助的工具:我认为 IResourceChangeListener 会提供帮助,因为它为我提供了一个 IResourceChangeEvent ,可访问的 IResourceDelta ,表示工作区更改。此外,由于编辑扩展了EditorPart,我认为在相关编辑器中添加 IPropertyChangeListener 也可能很有用。

我认为我有合适的工具,但我不知道如何按照自己的意愿组装它们。

问题
上面列出的工具是否适用于该工作?
如何获取已打开或将要打开的所有编辑器的列表并向其添加侦听器? 有关学习如何编写Eclipse插件的资源的任何其他技巧?

2 个答案:

答案 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并添加了一系列听众,直到我看到了上面的代码。

我希望这可以帮助那些正在寻找我的人。