2017-01-19 8 views
0

Я работаю над плагином Eclipse, который позволяет отслеживать. Я внедряю систему уведомлений, которая сообщает пользователю всякий раз, когда отслеживаемый элемент изменяется (удаляется, переименовывается или редактируется), и для этой цели я реализовал IResourceChangeListener, но это не дает мне всю поддержку, которую я хочу для элементов Java.Есть ли способ получить объект IJavaElementDelta из IResourceDelta?

Например, когда я переименовываю Java-метод внутри .java-файла, он сообщает только, какой файл был отредактирован, но я хотел бы получить информацию об этом методе. Я знаю, что это может быть достигнуто при внедрении IElementChangedListener, но есть ли какие-либо пути вокруг него? Действительно ли мне нужно реализовать два прослушивателя (ResourceListener для других файлов и ElementChangedListener только для элементов Java) или я могу каким-то образом получить IJavaElementDelta (обычно полученный из ElementChangedListener) из IResourceDelta? Благодаря!

ответ

2

Эти две дельта абсолютно не связаны. Вам нужно использовать обоих слушателей.

+0

Я так и думал, но я бы продолжил расследование, если бы не ваш ответ. Большое спасибо! –

+0

Полностью согласен. Попытка сохранить несколько строк реализации второго слушателя потребует повторной реализации почти всех org.eclipse.jdt.internal.core.DeltaProcessor, который получает события изменения ресурса и испускает IJavaElementDeltas в 2kLOC +. –

0

Постарайтесь проверить это link example 5. Существует некоторый метод с этим описанием:

Преобразует IResourceDelta и его детей в соответствующий IJavaElementDelta с. Возвращает, соответствует ли дельта ресурсу в пути к классам. Если он не является ресурсом в пути к классам, он будет отправлен в качестве ресурса non-java отправителем этого метода.

Так что, полагаю, это возможно.

Ссылки приводят here, которые должны хорошо проверить задницу. Метод public void processJavaDelta(IJavaElementDelta delta)

+0

Хотя комментарий в этом примере упоминает «IResourceDelta», код, похоже, не имеет отношения к 'IResourceDelta'. –

+0

Да, точно. Раньше я сталкивался с этим примером, но ссылка на IResourceDelta отсутствует. Документация очень странная, хотя, как говорится, она делает именно то, что мне нужно для этого, но опять же, никаких признаков IResourceDelta нигде. –

+0

@ DusanKalanj Ссылка также на код Eclipse Che - который является другим продуктом от «нормального» Eclipse - я не уверен, сколько у них общего. –