3

因此,我希望为 Eclipse 4.2 开发一个插件,用于监控用户对其文件所做的编辑。

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

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

可能有帮助的工具:我认为IResourceChangeListener会有所帮助,因为它给了我一个IResourceChangeEvent,以及一个可访问的IResourceDelta,它代表工作空间的变化。此外,由于编辑器扩展了 EditorPart,我认为将IPropertyChangeListener添加到相关编辑器可能也很有用。

我想我有合适的工具,但我不知道如何组装它们来做我想做的事。

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

4

2 回答 2

2

是和不是。IResourceChangedListener一旦资源(文件)更改,就会触发。在大多数编辑器中,这对应于用户保存文件。

为了接近实时地监控输入,一种方法是MonoReconciler在用户空闲 0.5 秒后使用 a 来捕获缓冲区更改。这就是 JDT 的工作方式。

现在,如果您是EditorPart. 根据您希望监控的编辑器,您需要掌握它IDocument并根据需要添加侦听器。请参阅文档。对于它的价值,Java 编辑器使用 IIRC ProjectionDocument

于 2012-07-14T15:52:52.347 回答
2

Krumelur 的提示给了我一个很好的起点。返回的DocumentEventsIDocumentListener足够细化,可以让我逐个字符地分析所发生的事情。

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并添加了一系列监听器,直到我得到看起来像上面的代码。

我希望这可以帮助其他正在寻找我的人。

于 2012-07-17T16:37:50.570 回答