如何在通过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()
,其中包含IResourceDelta
和getKind() == REMOVED
,getKind() == ADDED
以及getResource().getType() == PROJECT
的两个子IResourceDelta
不包含任何子项Deltas(我观察到,当重命名/删除文件时,资源所属的IProject
是父Delta
的第一行子节点上的{{1}} ... )
有人可以证实这个假设吗?是否真的有必要对子项进行树深度搜索,以实现事件是否为项目重命名/删除或文件/文件夹?
答案 0 :(得分:1)
您需要通过添加资源更改侦听器
ResourcePlugin.getWorkspace().addResourceChangeListener(listener,
IResourceChangeEvent.POST_CHANGE)
在您的监听器中,使用IResourceDeltaVisitor
访问delta中的所有更改
event.getDelta().accept(...)
访问者应该查看REMOVED
如果您期待该项目
删除并使用相同的名称创建(与文件和文件夹相同)
在构建事件期间),然后除了REMOVED
之外,还要寻找
delta中的REPLACED