@Override
  public void addEditorMouseListener(@NotNull final EditorMouseListener listener) {
    assert isValid();
    EditorMouseListener wrapper =
        new EditorMouseListener() {
          @Override
          public void mousePressed(EditorMouseEvent e) {
            listener.mousePressed(
                new EditorMouseEvent(EditorWindow.this, e.getMouseEvent(), e.getArea()));
          }

          @Override
          public void mouseClicked(EditorMouseEvent e) {
            listener.mouseClicked(
                new EditorMouseEvent(EditorWindow.this, e.getMouseEvent(), e.getArea()));
          }

          @Override
          public void mouseReleased(EditorMouseEvent e) {
            listener.mouseReleased(
                new EditorMouseEvent(EditorWindow.this, e.getMouseEvent(), e.getArea()));
          }

          @Override
          public void mouseEntered(EditorMouseEvent e) {
            listener.mouseEntered(
                new EditorMouseEvent(EditorWindow.this, e.getMouseEvent(), e.getArea()));
          }

          @Override
          public void mouseExited(EditorMouseEvent e) {
            listener.mouseExited(
                new EditorMouseEvent(EditorWindow.this, e.getMouseEvent(), e.getArea()));
          }
        };
    myEditorMouseListeners.registerWrapper(listener, wrapper);

    myDelegate.addEditorMouseListener(wrapper);
  }