@Nullable
    public ViewerAnnotator createAnnotator(@NotNull T viewer, @NotNull ThreeSide side) {
      ThreesideViewerAnnotatorFactory<T> factory = this;
      Project project = viewer.getProject();
      assert project != null;

      BackgroundableActionLock actionLock = BackgroundableActionLock.getLock(project, VcsBackgroundableActions.ANNOTATE, viewer, side);

      return new ViewerAnnotator() {
        @NotNull
        @Override
        public T getViewer() {
          return viewer;
        }

        @Override
        public boolean isAnnotationShown() {
          return factory.isAnnotationShown(viewer, side);
        }

        @Override
        public void showAnnotation(@NotNull AnnotationData data) {
          factory.showAnnotation(viewer, side, data);
        }

        @Override
        public void hideAnnotation() {
          factory.hideAnnotation(viewer, side);
        }

        @Nullable
        @Override
        public FileAnnotationLoader createAnnotationsLoader() {
          return createThreesideAnnotationsLoader(project, viewer.getRequest(), side);
        }

        @Override
        @NotNull
        public BackgroundableActionLock getBackgroundableLock() {
          return actionLock;
        }
      };
    }
@Nullable
    public ViewerAnnotator createAnnotator(@NotNull T viewer, @NotNull ThreeSide side)