boolean hasAnythingHappened() {
    boolean hasDocumentOrCaretChanged = myStartDocStamp != docStamp() ||
                !myCaretOffsets.equals(caretOffsets());
    return myActionsHappened || myIsDumb != DumbService.getInstance(myProject).isDumb() ||
           myEditor.isDisposed() ||
           (myEditor instanceof EditorWindow && !((EditorWindow)myEditor).isValid()) ||
           (hasDocumentOrCaretChanged && !isOnGuest()); //do not track speculative changes on thin client
  }
boolean hasAnythingHappened()