public boolean isResolved(@NotNull ThreeSide side) {
   switch (side) {
     case LEFT:
       return isResolved(Side.LEFT);
     case BASE:
       return isResolved();
     case RIGHT:
       return isResolved(Side.RIGHT);
     default:
       throw new IllegalArgumentException(side.toString());
   }
 }
  private void createHighlighter(@NotNull ThreeSide side) {
    Editor editor = side.select(myViewer.getEditors());

    TextDiffType type = getDiffType();
    boolean resolved = isResolved(side);
    int startLine = getStartLine(side);
    int endLine = getEndLine(side);

    boolean ignored = !resolved && myInnerFragments != null;
    myHighlighters.addAll(
        DiffDrawUtil.createHighlighter(editor, startLine, endLine, type, ignored, resolved));
    myHighlighters.addAll(
        DiffDrawUtil.createLineMarker(editor, startLine, endLine, type, resolved));
  }
    @Nullable
    public GutterIconRenderer createRenderer() {
      if (mySide == ThreeSide.BASE) return null;
      Side versionSide = mySide.select(Side.LEFT, null, Side.RIGHT);
      assert versionSide != null;

      myCtrlPressed = myViewer.getModifierProvider().isCtrlPressed();
      myShiftPressed = myViewer.getModifierProvider().isShiftPressed();

      if (!isChange(versionSide)) return null;

      switch (myType) {
        case APPLY:
          return createApplyRenderer(versionSide, myCtrlPressed);
        case IGNORE:
          return createIgnoreRenderer(versionSide, myCtrlPressed);
        default:
          throw new IllegalArgumentException(myType.name());
      }
    }
 private void addListener(
     @NotNull List<? extends EditorHolder> holders, @NotNull ThreeSide side) {
   side.select(holders).installFocusListener(new MyFocusListener(side));
 }