以编程方式跟踪eclipse清理所做的文件更改

我编写了一个eclipse osgi插件,它对eclipse项目中存在的java文件运行清理和格式化操作。 就像是:

  • 运行具有eclipse命令的批处理文件
  • 它打开了eclipse编辑器
  • 加载在批处理命令中作为参数传递的eclipse项目
  • 运行清理和格式化操作
  • 关闭日食

现在我的问题是我需要跟踪此操作已更改的文件。 我正在使用cleanUpsAction执行清理更改, cleanUpsAction作为多个文件和进一步分叉的线程运行。 它返回void。

我也尝试过IResourceChangeListener ,但是我无法获得更改的资源名称。 我得到了IResourceChangeEvent对象,但资源的细节并没有出来,它在我打印IResourceChangeEvent.getSource()时总是返回项目名称。

在顶部的IResourceChangeEvent中有多个级别的对象通常是项目或工作空间,下面是文件夹和文件。 这些由IResourceDelta对象表示。

要查看所有这些,请先从事件中获取顶级IResourceDelta

 IResourceChangeEvent event = ... the event IResourceDelta delta = event.getDelta(); 

然后使用IResourceDeltaVisitor访问增量中的每个资源:

 delta.accept(visitor); 

其中visitor是一个实现IResourceDeltaVisitor的类。

访问者只有一种方法:

 public boolean visit(IResourceDelta delta) throws CoreException 

每个资源都有一个delta。

IResourceDelta.getResource为您提供更改的资源。 IResourceDelta.getKind告诉您更改的类型(添加,删除,更改)。