@Nullable public GutterIconRenderer createRenderer() { myCtrlPressed = myViewer.getModifierProvider().isCtrlPressed(); boolean isEditable = DiffUtil.isEditable(myViewer.getEditor(mySide)); boolean isOtherEditable = DiffUtil.isEditable(myViewer.getEditor(mySide.other())); boolean isAppendable = myFragment.getStartLine1() != myFragment.getEndLine1() && myFragment.getStartLine2() != myFragment.getEndLine2(); if (isOtherEditable && isEditable) { if (myCtrlPressed && isAppendable) { return createAppendRenderer(mySide); } else { return createApplyRenderer(mySide); } } else if (isEditable) { return createRevertRenderer(mySide); } else if (isOtherEditable) { if (isAppendable) { return createAppendRenderer(mySide); } } return null; }
@Nullable private GutterIconRenderer createIconRenderer( @NotNull final Side sourceSide, @NotNull final String tooltipText, @NotNull final Icon icon, @NotNull final Runnable perform) { if (!DiffUtil.isEditable(myViewer.getEditor(sourceSide.other()))) return null; return new DiffGutterRenderer(icon, tooltipText) { @Override protected void performAction(AnActionEvent e) { if (!myIsValid) return; final Project project = e.getProject(); final Document document = myViewer.getEditor(sourceSide.other()).getDocument(); DiffUtil.executeWriteCommand( document, project, "Replace change", new Runnable() { @Override public void run() { perform.run(); } }); } }; }