如何正确区分IResourceChangeListener
内部是否通过ResourcePlugin.getWorkspace().addResourceChangeListener(...)
添加了项目已删除/重命名?IResourceChangeEvent - 如何识别项目删除/重命名
通过尝试,似乎IResourceChangeEvent.getDelta() -> IResourceDelta
将是答案。
后 - 事实上任意创建,删除和修改 对一个或多个资源的批次报告表示为分层 资源增量。事件类型是POST_CHANGE,getDelta返回 分层增量。资源增量以根工作区 为根。这些事件在一组 资源发生变化并且无论是否启用自动构建都会发生后向相关方广播。 在通知这些 事件期间,工作区将被关闭以进行更改。在此事件周期中报告的增量在为此类事件注册的所有 听众中是相同的。
编辑:加入我的发现至今
所以,Event.getType()
是POST_CHANGE
并需要有两种
包含一个孩子
IResourceDelta
具有getKind() == REMOVED
的缺失增量,而德尔塔getResource().getType() == PROJECT
,以便我们知道这是一个项目 (这IResourceDelta
应该不会有任何孩子)包含两个孩子
IResourceDelta
有getKind() == REMOVED
和getKind() == ADDED
,也getResource().getType() == PROJECT
,而那些IResourceDelta
一个getDelta()
不包含儿童三角洲(我观察到,当一个文件被重命名/删除,IProject
资源所属的一那就是父母的第一排子女Delta
...)
有人可以证实这个假设吗?是否真的有必要对孩子进行树深度搜索,以了解事件是否是项目重命名/删除或文件/文件夹?
,我将如何识别项目重命名? – 2014-11-11 15:06:44
我和Vlad有同样的问题。如何识别重命名事件? – 2c00L 2015-05-11 13:16:57
找到了答案:http://stackoverflow.com/questions/30170492/how-to-use-an-iresourcechangelistener-to-detect-a-file-rename-and-set-the-editor?lq=1 – chani 2016-05-30 08:10:39