【问题标题】:Track files changes done by eclipse cleanup programmatically以编程方式跟踪 Eclipse 清理完成的文件更改
【发布时间】:2017-03-02 17:42:58
【问题描述】:

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

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

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

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

【问题讨论】:

  • 嗨,我想为插件中的文件列表调用清理操作。看完你的帖子,你可能会有答案。我想知道您是否可以分享您如何调用清理操作。最好我想再次在文件列表中应用预定义的清理配置文件。谢谢。
  • 嗨蒂姆-是的,现在我可以做到了。但现在我正在与公司合作,编写的代码是他们专有的。我仍然写了一篇博客,解释了实现这一目标的完整逻辑和方法。请参考我的博客@sv-technical.blogspot.com/2015/09/… - 请访问此
  • 感谢您的回复。我再次查看了 Eclipse 源代码并且能够弄清楚它。谢谢。 :-)

标签: java eclipse-plugin osgi eclipse-jdt code-cleanup


【解决方案1】:

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

要查看所有这些,首先从活动中获取顶级IResourceDelta

IResourceChangeEvent event = ... the event

IResourceDelta delta = event.getDelta();

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

delta.accept(visitor);

其中visitor 是实现IResourceDeltaVisitor 的类。

访问者中只有一种方法:

public boolean visit(IResourceDelta delta) throws CoreException

每个资源都有一个增量。

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

【讨论】:

  • 嗨 greg-449,我尝试了你的方法,但遇到了一些问题。当我从IResourceChangeEvent 获得增量时,它总是会为我提供项目中所有具有IResourceDela.ADDED 状态的文件的列表,然后还会触发带有事件IResourceDela.REMOVED 的相同文件。假设我有四个文件,其中只有三个被清理更改,怎么知道?我可以获取实际更改的文件列表吗?我签入了文件系统,甚至修改过的时间戳也没有改变那个未更改的文件。
  • 您将获得工作区已添加、删除或更改的所有内容的列表。还有一些关于 delta getFlags() 调用中发生的事情的附加信息。如果某些内容没有更改,您将不会收到任何通知。我不知道有什么方法可以找出未更改的内容。
  • :( 。即使getFlags() 也没有帮助。现在我使用操作系统时间戳来查找更改的文件。可能是我遗漏了一些东西来获取文件详细信息。但我一定会重新审视它并如果我发现了什么,请在此处更新。
猜你喜欢
  • 1970-01-01
  • 2012-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 2013-11-15
  • 1970-01-01
相关资源
最近更新 更多