static void installListeners(@NotNull EditorGutterComponentImpl gutter) {
    if (!actionHandlerInstalled) {
      // [tav] todo: when the API is stable and open move it to ShowGutterIconTooltipAction
      actionHandlerInstalled = true;
      EditorActionManager.getInstance().setActionHandler("EditorShowGutterIconTooltip", new EditorActionHandler() {
        @Override
        protected void doExecute(@NotNull Editor editor, @Nullable Caret caret, DataContext dataContext) {
          AccessibleGutterLine line = ((EditorGutterComponentImpl)editor.getGutter()).getCurrentAccessibleLine();
          if (line != null) line.showTooltipIfPresent();
        }
      });
    }
    gutter.addFocusListener(new FocusAdapter() {
      @Override
      public void focusGained(FocusEvent e) {
        gutter.setCurrentAccessibleLine(createAndActivate(gutter));
      }
    });
    gutter.addComponentListener(new ComponentAdapter() {
      @Override
      public void componentResized(ComponentEvent e) {
        gutter.escapeCurrentAccessibleLine();
      }
    });
    gutter.getEditor().getCaretModel().addCaretListener(new CaretListener() {
      @Override
      public void caretPositionChanged(@NotNull CaretEvent event) {
        AccessibleGutterLine line = gutter.getCurrentAccessibleLine();
        if (line != null) line.maybeLineChanged();
      }
    });
  }
static void installListeners(@NotNull EditorGutterComponentImpl gutter)