2016-06-22 2 views
0

Похоже, что невозможно определить, был ли проект перемещен из одного места в другое, с помощью 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 

Однако один и та же деталь события отправляется, когда описание проекта было изменено для некоторых другая причина.

JavaDoc из IResourceDelta::getFlags() и forum post дать подсказку, что есть MOVED_FROM флаг и getMovedFromPath() вернется на путь, где ресурс был перенесен с. Но такого события я не видел.

Неужели нет способа сказать, перемещен ли проект или я что-то упускаю? Если есть обходной путь, я тоже буду рад возглавить.

+0

Являются ли эти местоположения вне рабочей области, поэтому логическое расположение в рабочей области не изменяется? –

+0

Да, местоположения могут находиться за пределами рабочей области, но я также вижу, что проект, расположенный внутри рабочей области, перемещается за пределы. –

ответ

0

Я думаю, что нашел обходное решение. Исправление состоит в том, чтобы сохранить снимок текущих описаний проектов (IProjectDescription). Описание проекта также содержит расположение проекта.

Снимки необходимо будет обновить при запуске кода детектора и при создании нового проекта.

Когда происходит событие изменения DESCRIPTION, как описано в вопросе, я могу сравнить project.getLocationURI() с описанием описания проекта из моментального снимка. Если они отличаются, проект был перемещен. В противном случае произошло неинтересное изменение.

Смежные вопросы