如何在通过
通过尝试,似乎
从Eclipse API得知:
批量报告任意创建、删除和修改资源以及表达为分层资源增量的事后事件。事件类型为POST_CHANGE,getDelta返回分层增量。资源增量以工作区根为根。这些事件在一组资源更改之后向感兴趣的各方广播,并且无论是否启用自动构建都会发生。在通知这些事件期间,工作区对于更改是关闭的。此事件周期中报告的增量在注册了此类事件的所有侦听器中均相同。
编辑:迄今为止我的发现
因此,
ResourcePlugin.getWorkspace().addResourceChangeListener(...)
添加的IResourceChangeListener
中正确区分已删除/重命名的项目?通过尝试,似乎
IResourceChangeEvent.getDelta() -> IResourceDelta
会是答案。从Eclipse API得知:
批量报告任意创建、删除和修改资源以及表达为分层资源增量的事后事件。事件类型为POST_CHANGE,getDelta返回分层增量。资源增量以工作区根为根。这些事件在一组资源更改之后向感兴趣的各方广播,并且无论是否启用自动构建都会发生。在通知这些事件期间,工作区对于更改是关闭的。此事件周期中报告的增量在注册了此类事件的所有侦听器中均相同。
编辑:迄今为止我的发现
因此,
Event.getType()
是 POST_CHANGE
,需要满足以下条件之一:
包含一个子
IResourceDelta
,其getKind() == REMOVED
表示删除,并且 delta 的getResource().getType() == PROJECT
以便我们知道它是一个项目(此IResourceDelta
不应该有任何子项)包含两个子项
IResourceDelta
,其getKind() == REMOVED
和getKind() == ADDED
,并且getResource().getType() == PROJECT
,这些IResourceDelta
不包含子 Delta(我观察到当文件被重命名/删除时,资源所属的IProject
是父Delta
的第一行子项...)
能否有人确认这个假设?是否真的需要对子项进行树深度搜索,才能确定事件是项目重命名/删除还是文件/文件夹?