Is there any way to have a kind of transaction demarcation for any user
action -> beforeActionStarts(), afterActionFinished(). This could be used to
store different listeners information until afterActionFinished is called
where the custom operation would be performed with the guaranty that all
listeners have been called.
a) I want to listen to caret movement
b) Change in the document
c) Change in the psi tree
d) Change in the selected document
For typing in the editor for example I might get 1xa, 1xb 1xc. If now the
user performed a method rename I might get 1xa, nxb, nxc since it would
impact multiple files, multiple call sites,...! Now I don't know how to
identify the "boundary", the last event, of the current user action for me
to kick my processing. This is something very similar to the transaction
support in the VCS API. You have startTransaction and commitTransaction that
surrounds every other callbacks.
Very handy especially in such environment rich in listeners.