From f069a3699bd635feaceb67002010de5fd2bad5da Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Thu, 12 Jul 2018 14:13:56 +0300 Subject: [PATCH] diff: migration from old API - support onOkRunnable --- .../actions/migrate/MigrateDiffTool.java | 33 ++++++++++++++--- .../actions/migrate/MigrateToNewDiffUtil.java | 37 ------------------- 2 files changed, 27 insertions(+), 43 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/vcs/changes/actions/migrate/MigrateDiffTool.java b/platform/platform-impl/src/com/intellij/openapi/vcs/changes/actions/migrate/MigrateDiffTool.java index 23ce547bed1d..f170ecd1b102 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vcs/changes/actions/migrate/MigrateDiffTool.java +++ b/platform/platform-impl/src/com/intellij/openapi/vcs/changes/actions/migrate/MigrateDiffTool.java @@ -17,14 +17,15 @@ package com.intellij.openapi.vcs.changes.actions.migrate; import com.intellij.diff.DiffDialogHints; import com.intellij.diff.DiffManager; +import com.intellij.diff.DiffRequestPanel; import com.intellij.openapi.Disposable; import com.intellij.openapi.diff.DiffRequest; import com.intellij.openapi.diff.DiffTool; import com.intellij.openapi.diff.DiffViewer; import com.intellij.openapi.diff.MergeRequest; -import com.intellij.openapi.diff.impl.external.BinaryDiffTool; -import com.intellij.openapi.diff.impl.external.DiffManagerImpl; import com.intellij.openapi.diff.impl.external.FrameDiffTool; +import com.intellij.openapi.ui.DialogBuilder; +import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.WindowWrapper; import org.jetbrains.annotations.NotNull; @@ -39,16 +40,36 @@ public class MigrateDiffTool implements DiffTool { @Override public void show(DiffRequest request) { com.intellij.diff.requests.DiffRequest newRequest = MigrateToNewDiffUtil.convertRequest(request); - WindowWrapper.Mode mode = FrameDiffTool.shouldOpenDialog(request.getHints()) ? WindowWrapper.Mode.MODAL : WindowWrapper.Mode.FRAME; - DiffManager.getInstance().showDiff(request.getProject(), newRequest, new DiffDialogHints(mode)); + + Runnable onOkRunnable = request.getOnOkRunnable(); + if (onOkRunnable == null) { + WindowWrapper.Mode mode = FrameDiffTool.shouldOpenDialog(request.getHints()) ? WindowWrapper.Mode.MODAL : WindowWrapper.Mode.FRAME; + DiffManager.getInstance().showDiff(request.getProject(), newRequest, new DiffDialogHints(mode)); + } + else { + DialogBuilder builder = new DialogBuilder(request.getProject()); + DiffRequestPanel diffPanel = DiffManager.getInstance().createRequestPanel(request.getProject(), builder, builder.getWindow()); + diffPanel.setRequest(newRequest); + + builder.setCenterPanel(diffPanel.getComponent()); + builder.setPreferredFocusComponent(diffPanel.getPreferredFocusedComponent()); + builder.setTitle(request.getWindowTitle()); + builder.setDimensionServiceKey(request.getGroupKey()); + + builder.setOkOperation(() -> { + builder.getDialogWrapper().close(DialogWrapper.OK_EXIT_CODE); + onOkRunnable.run(); + }); + + boolean useNonModal = request.getHints().contains(DiffTool.HINT_SHOW_NOT_MODAL_DIALOG); + builder.showModal(!useNonModal); + } } @Override public boolean canShow(DiffRequest request) { if (request instanceof MergeRequest) return false; if (request.getContents().length != 2) return false; - if (request.getOnOkRunnable() != null) return false; - if (!DiffManagerImpl.INTERNAL_DIFF.canShow(request) && !BinaryDiffTool.INSTANCE.canShow(request)) return false; return true; } diff --git a/platform/platform-impl/src/com/intellij/openapi/vcs/changes/actions/migrate/MigrateToNewDiffUtil.java b/platform/platform-impl/src/com/intellij/openapi/vcs/changes/actions/migrate/MigrateToNewDiffUtil.java index 06a9e24557dd..2d239f3115fd 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vcs/changes/actions/migrate/MigrateToNewDiffUtil.java +++ b/platform/platform-impl/src/com/intellij/openapi/vcs/changes/actions/migrate/MigrateToNewDiffUtil.java @@ -1,17 +1,12 @@ package com.intellij.openapi.vcs.changes.actions.migrate; import com.intellij.diff.DiffContentFactory; -import com.intellij.diff.chains.DiffRequestProducer; import com.intellij.diff.contents.DiffContent; import com.intellij.diff.requests.DiffRequest; -import com.intellij.diff.requests.ErrorDiffRequest; import com.intellij.diff.requests.SimpleDiffRequest; import com.intellij.openapi.diff.SimpleContent; import com.intellij.openapi.editor.Document; -import com.intellij.openapi.progress.ProcessCanceledException; -import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.UserDataHolder; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -20,22 +15,11 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import static com.intellij.openapi.util.text.StringUtil.notNullize; import static com.intellij.util.ObjectUtils.assertNotNull; public class MigrateToNewDiffUtil { @NotNull public static DiffRequest convertRequest(@NotNull com.intellij.openapi.diff.DiffRequest oldRequest) { - DiffRequest request = convertRequestFair(oldRequest); - if (request != null) return request; - - return new ErrorDiffRequest(new MyDiffRequestProducer(oldRequest), "Can't convert from old-style request"); - } - - @Nullable - private static DiffRequest convertRequestFair(@NotNull com.intellij.openapi.diff.DiffRequest oldRequest) { - if (oldRequest.getOnOkRunnable() != null) return null; - com.intellij.openapi.diff.DiffContent[] contents = oldRequest.getContents(); String[] titles = oldRequest.getContentTitles(); List newContents = new ArrayList<>(contents.length); @@ -65,25 +49,4 @@ public class MigrateToNewDiffUtil { return factory.create(project, document, oldContent.getContentType()); } } - - private static class MyDiffRequestProducer implements DiffRequestProducer { - @NotNull private final com.intellij.openapi.diff.DiffRequest myRequest; - - public MyDiffRequestProducer(@NotNull com.intellij.openapi.diff.DiffRequest request) { - myRequest = request; - } - - @NotNull - @Override - public String getName() { - return notNullize(myRequest.getWindowTitle()); - } - - @NotNull - @Override - public DiffRequest process(@NotNull UserDataHolder context, @NotNull ProgressIndicator indicator) - throws ProcessCanceledException { - return new ErrorDiffRequest(this, "Can't convert from old-style request"); - } - } }