IResourceChangeEvent - 如何识别项目删除/重命名

时间:2014-10-07 09:46:49

标签: java eclipse eclipse-rcp eclipse-plugin

如何在通过IResourceChangeListener添加项目被删除/重命名的ResourcePlugin.getWorkspace().addResourceChangeListener(...)内进行正确区分?

通过尝试,似乎IResourceChangeEvent.getDelta() -> IResourceDelta就是答案。

来自Eclipse API

  

事后批量报告任意创作,删除和删除   对表示为分层的一个或多个资源的修改   资源增量。事件类型是POST_CHANGE,getDelta返回   等级三角洲。资源增量根植于工作空间   根。这些事件在一组之后被广播给感兴趣的各方   无论是否启用自动布设,都会发生资源更改。   在通知这些工作区时,工作区将关闭以进行更改   事件。在此事件周期中报告的增量是相同的   为此类事件注册的听众。

编辑:到目前为止添加我的发现

因此,Event.getType()POST_CHANGE,并且需要

  • 包含已删除IResourceDelta的子getKind() == REMOVED的delta,以及delta getResource().getType() == PROJECT,以便我们知道它是一个项目 (此IResourceDelta不应该有任何子女)

  • 一个getDelta(),其中包含IResourceDeltagetKind() == REMOVEDgetKind() == ADDED以及getResource().getType() == PROJECT的两个子IResourceDelta不包含任何子项Deltas(我观察到,当重命名/删除文件时,资源所属的IProject是父Delta的第一行子节点上的{{1}} ... )

有人可以证实这个假设吗?是否真的有必要对子项进行树深度搜索,以实现事件是否为项目重命名/删除或文件/文件夹?

1 个答案:

答案 0 :(得分:1)

  • 您需要通过添加资源更改侦听器 ResourcePlugin.getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.POST_CHANGE)

  • 在您的监听器中,使用IResourceDeltaVisitor访问delta中的所有更改 event.getDelta().accept(...)

  • 访问者应该查看REMOVED

  • 项目
  • 如果您期待该项目 删除并使用相同的名称创建(与文件和文件夹相同) 在构建事件期间),然后除了REMOVED之外,还要寻找 delta中的REPLACED