似乎无法使用IResourceChangeListener
检测项目是否从一个位置移动到另一个位置。
例如,在使用/old/path/to/project
将项目的位置从/new/path/to/project
更改为MoveProjectOperation
时,事件详细信息如下所示:
name = project-name
kind = CHANGE
flags = DESCRIPTION
movedFromPath = null
movedToPath = null
location = /new/path/to/project
但是,当项目描述由于其他原因而被更改时,会发送相同的事件详细信息。
IResourceDelta::getFlags()
和forum post的JavaDoc提示有一个MOVED_FROM
标记,getMovedFromPath()
将返回资源移动的路径。但我没有看到任何此类事件。
真的没有办法判断一个项目是否被移动,或者我是否遗漏了某些东西?如果有解决方法,我也很乐意去处理。
答案 0 :(得分:0)
我想我找到了一个解决方法。修复是维护当前项目描述的快照(IProjectDescription
)。项目描述还包含项目位置。
当移动检测代码启动时以及每当创建新项目时,都需要更新快照。
每当问题中描述的DESCRIPTION
更改事件发生时,我都可以将project.getLocationURI()
与快照中项目描述的位置进行比较。如果他们不同,项目就会被移动。否则,发生了无趣的变化。