mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
diff: migration from old API - support MergeRequest
This commit is contained in:
+6
-1
@@ -136,7 +136,7 @@ public class MergeRequestImpl extends MergeRequest {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private MergeContent getMergeContent() {
|
||||
public MergeContent getMergeContent() {
|
||||
if (myDiffContents[1] instanceof MergeContent) {
|
||||
return (MergeContent)myDiffContents[1];
|
||||
}
|
||||
@@ -266,6 +266,11 @@ public class MergeRequestImpl extends MergeRequest {
|
||||
public void restoreOriginalContent() {
|
||||
myTarget.restoreOriginalContent(myProject);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public MergeVersion getMergeVersion() {
|
||||
return myTarget;
|
||||
}
|
||||
}
|
||||
|
||||
private static class AllResolvedListener implements ChangeCounter.Listener, Runnable {
|
||||
|
||||
@@ -68,6 +68,10 @@ public interface MergeVersion {
|
||||
myOriginalText = originalText;
|
||||
}
|
||||
|
||||
public String getOriginalText() {
|
||||
return myOriginalText;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Document createWorkingDocument(final Project project) {
|
||||
//TODO[ik]: do we really need to create copy here?
|
||||
|
||||
+39
-36
@@ -1,32 +1,21 @@
|
||||
/*
|
||||
* Copyright 2000-2012 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
// Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
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.diff.InvalidDiffRequestException;
|
||||
import com.intellij.diff.merge.MergeRequest;
|
||||
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.FrameDiffTool;
|
||||
import com.intellij.openapi.diff.impl.mergeTool.MergeRequestImpl;
|
||||
import com.intellij.openapi.ui.DialogBuilder;
|
||||
import com.intellij.openapi.ui.DialogWrapper;
|
||||
import com.intellij.openapi.ui.WindowWrapper;
|
||||
import com.intellij.openapi.ui.ex.MessagesEx;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.awt.*;
|
||||
@@ -39,39 +28,53 @@ public class MigrateDiffTool implements DiffTool {
|
||||
|
||||
@Override
|
||||
public void show(DiffRequest request) {
|
||||
com.intellij.diff.requests.DiffRequest newRequest = MigrateToNewDiffUtil.convertRequest(request);
|
||||
|
||||
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));
|
||||
if (isMergeRequest(request)) {
|
||||
try {
|
||||
MergeRequest newRequest = MigrateToNewDiffUtil.convertMergeRequest((MergeRequestImpl)request);
|
||||
DiffManager.getInstance().showMerge(request.getProject(), newRequest);
|
||||
}
|
||||
catch (InvalidDiffRequestException e) {
|
||||
MessagesEx.error(request.getProject(), e.getMessage()).showNow();
|
||||
}
|
||||
}
|
||||
else {
|
||||
DialogBuilder builder = new DialogBuilder(request.getProject());
|
||||
DiffRequestPanel diffPanel = DiffManager.getInstance().createRequestPanel(request.getProject(), builder, builder.getWindow());
|
||||
diffPanel.setRequest(newRequest);
|
||||
com.intellij.diff.requests.DiffRequest newRequest = MigrateToNewDiffUtil.convertRequest(request);
|
||||
|
||||
builder.setCenterPanel(diffPanel.getComponent());
|
||||
builder.setPreferredFocusComponent(diffPanel.getPreferredFocusedComponent());
|
||||
builder.setTitle(request.getWindowTitle());
|
||||
builder.setDimensionServiceKey(request.getGroupKey());
|
||||
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.setOkOperation(() -> {
|
||||
builder.getDialogWrapper().close(DialogWrapper.OK_EXIT_CODE);
|
||||
onOkRunnable.run();
|
||||
});
|
||||
builder.setCenterPanel(diffPanel.getComponent());
|
||||
builder.setPreferredFocusComponent(diffPanel.getPreferredFocusedComponent());
|
||||
builder.setTitle(request.getWindowTitle());
|
||||
builder.setDimensionServiceKey(request.getGroupKey());
|
||||
|
||||
boolean useNonModal = request.getHints().contains(DiffTool.HINT_SHOW_NOT_MODAL_DIALOG);
|
||||
builder.showModal(!useNonModal);
|
||||
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;
|
||||
return request.getContents().length == 2 || request.getContents().length == 3;
|
||||
}
|
||||
|
||||
private static boolean isMergeRequest(com.intellij.openapi.diff.DiffRequest request) {
|
||||
return request instanceof MergeRequestImpl && ((MergeRequestImpl)request).getMergeContent() != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DiffViewer createComponent(String title, DiffRequest request, Window window, @NotNull Disposable parentDisposable) {
|
||||
return null;
|
||||
|
||||
+31
@@ -1,13 +1,22 @@
|
||||
package com.intellij.openapi.vcs.changes.actions.migrate;
|
||||
|
||||
import com.intellij.diff.DiffContentFactory;
|
||||
import com.intellij.diff.DiffRequestFactory;
|
||||
import com.intellij.diff.InvalidDiffRequestException;
|
||||
import com.intellij.diff.contents.DiffContent;
|
||||
import com.intellij.diff.merge.MergeRequest;
|
||||
import com.intellij.diff.merge.MergeResult;
|
||||
import com.intellij.diff.requests.DiffRequest;
|
||||
import com.intellij.diff.requests.SimpleDiffRequest;
|
||||
import com.intellij.openapi.diff.SimpleContent;
|
||||
import com.intellij.openapi.diff.impl.mergeTool.MergeRequestImpl;
|
||||
import com.intellij.openapi.diff.impl.mergeTool.MergeVersion;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.DialogWrapper;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -49,4 +58,26 @@ public class MigrateToNewDiffUtil {
|
||||
return factory.create(project, document, oldContent.getContentType());
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static MergeRequest convertMergeRequest(@NotNull MergeRequestImpl request) throws InvalidDiffRequestException {
|
||||
MergeRequestImpl.MergeContent mergeContent = assertNotNull(request.getMergeContent());
|
||||
MergeVersion.MergeDocumentVersion mergeVersion = (MergeVersion.MergeDocumentVersion)mergeContent.getMergeVersion();
|
||||
|
||||
com.intellij.openapi.diff.SimpleContent leftContent = (SimpleContent)request.getContents()[0];
|
||||
com.intellij.openapi.diff.SimpleContent rightContent = (SimpleContent)request.getContents()[2];
|
||||
List<String> contents = ContainerUtil.list(leftContent.getText(), mergeVersion.getOriginalText(), rightContent.getText());
|
||||
|
||||
Document document = mergeContent.getDocument();
|
||||
|
||||
String windowTitle = request.getWindowTitle();
|
||||
List<String> titles = Arrays.asList(request.getContentTitles());
|
||||
|
||||
Consumer<MergeResult> callback = result -> {
|
||||
request.setResult(result == MergeResult.CANCEL ? DialogWrapper.CANCEL_EXIT_CODE : DialogWrapper.OK_EXIT_CODE);
|
||||
};
|
||||
|
||||
return DiffRequestFactory.getInstance().createMergeRequest(request.getProject(), mergeContent.getContentType(), document, contents,
|
||||
windowTitle, titles, callback);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user