@Override
  @RequiresEdt
  public final void dispose() {
    if (myDisposed) return;
    ThreadingAssertions.assertEventDispatchThread();

    UIUtil.invokeLaterIfNeeded(() -> {
      if (myDisposed) return;
      myDisposed = true;

      abortRediff();
      updateContextHints();

      fireEvent(EventType.DISPOSE);

      onDispose();
    });
  }
@Override
  @RequiresEdt
  public final void dispose()