How can I properly distinguish, inside an IResourceChangeListener
that is added via ResourcePlugin.getWorkspace().addResourceChangeListener(...)
that a Project was deleted / renamed?
Through trying things out, it would seem that the IResourceChangeEvent.getDelta() -> IResourceDelta
would be the answer.
From Eclipse API:
After-the-fact batch reports of arbitrary creations, deletions and modifications to one or more resources expressed as a hierarchical resource delta. Event type is POST_CHANGE, and getDelta returns the hierarchical delta. The resource delta is rooted at the workspace root. These events are broadcast to interested parties after a set of resource changes and happen whether or not autobuilding is enabled. The workspace is closed for change during notification of these events. The delta reported in this event cycle is identical across all listeners registered for this type of event.
EDIT: adding my findings so far
So, the Event.getType()
is POST_CHANGE
and there needs to be either
a delta that contains a child IResourceDelta
that has the getKind() == REMOVED
for a deletion, and the delta getResource().getType() == PROJECT
so that we know it's a project
( this IResourceDelta
should not have any children )
a getDelta()
that contains two children IResourceDelta
that have getKind() == REMOVED
and getKind() == ADDED
, also the getResource().getType() == PROJECT
, and those IResourceDelta
contain no children Deltas (I've observed that when a file is renamed/deleted, the IProject
the resource belongs to is the one that is on the first row of children of the parent Delta
...)
Can someone confirm this supposition? Is if it really necessary to do a tree depth search for children to realize if the Event is of a project rename/delete or a file/folder?
You need to add a resource change listener via
ResourcePlugin.getWorkspace().addResourceChangeListener(listener,
IResourceChangeEvent.POST_CHANGE)
In your listener, use a IResourceDeltaVisitor
to visit all the changes in the delta via
event.getDelta().accept(...)
The visitor should look into the projects that are REMOVED
If you are expecting the project to be
removed and created with the same name (as happens to files & folders
during build events), then in addition to the REMOVED
, also look for
REPLACED
in the delta
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With