diff: commander: mirgate to new diff

This commit is contained in:
Aleksey Pivovarov
2015-02-03 19:46:42 +03:00
parent 2ef0581621
commit cfa066806e
3 changed files with 26 additions and 19 deletions
+1
View File
@@ -9,6 +9,7 @@
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="openapi" />
<orderEntry type="module" module-name="java-impl" />
<orderEntry type="module" module-name="diff-impl" />
</component>
<component name="copyright">
<Base>
@@ -29,11 +29,11 @@ import com.intellij.openapi.components.PersistentStateComponent;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.components.State;
import com.intellij.openapi.components.Storage;
import com.intellij.openapi.diff.actions.CompareFiles;
import com.intellij.openapi.keymap.KeymapManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Splitter;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.diff.actions.CompareFilesAction;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileManager;
import com.intellij.openapi.wm.FocusWatcher;
@@ -493,7 +493,7 @@ public class Commander extends JPanel implements PersistentStateComponent<Elemen
final Object element = parentElement.getValue();
return element instanceof PsiElement && ((PsiElement)element).isValid()? element : null;
}
else if (CompareFiles.DIFF_REQUEST.is(dataId)) {
else if (CompareFilesAction.DIFF_REQUEST.is(dataId)) {
PsiElement primary = getActivePanel().getSelectedElement();
PsiElement secondary = getInactivePanel().getSelectedElement();
if (primary != null && secondary != null &&
@@ -16,12 +16,19 @@
package com.intellij.ide.commander;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.diff.*;
import com.intellij.openapi.diff.DiffBundle;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.diff.actions.DocumentFragmentContent;
import com.intellij.openapi.util.diff.contents.DiffContent;
import com.intellij.openapi.util.diff.contents.DocumentContent;
import com.intellij.openapi.util.diff.impl.DiffContentFactory;
import com.intellij.openapi.util.diff.requests.DiffRequest;
import com.intellij.openapi.util.diff.requests.SimpleDiffRequest;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.util.text.ElementPresentation;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
@@ -34,25 +41,26 @@ public class PsiDiffContentFactory {
}
@Nullable
private static DiffContent fromPsiElement(PsiElement psiElement) {
private static DiffContent fromPsiElement(@NotNull PsiElement psiElement) {
if (psiElement instanceof PsiFile) {
return DiffContent.fromFile(psiElement.getProject(), ((PsiFile)psiElement).getVirtualFile());
} else if (psiElement instanceof PsiDirectory) {
return DiffContent.fromFile(psiElement.getProject(), ((PsiDirectory)psiElement).getVirtualFile());
return DiffContentFactory.create(psiElement.getProject(), ((PsiFile)psiElement).getVirtualFile());
}
else if (psiElement instanceof PsiDirectory) {
return DiffContentFactory.create(psiElement.getProject(), ((PsiDirectory)psiElement).getVirtualFile());
}
PsiFile containingFile = psiElement.getContainingFile();
if (containingFile == null) {
String text = psiElement.getText();
return text != null ? new SimpleContent(text) : null;
if (text == null) return null;
return DiffContentFactory.create(text, psiElement.getLanguage().getAssociatedFileType());
}
DiffContent wholeFileContent = DiffContent.fromFile(psiElement.getProject(), containingFile.getVirtualFile());
if (wholeFileContent == null || wholeFileContent.getDocument() == null) return null;
Project project = psiElement.getProject();
return new FragmentContent(wholeFileContent, psiElement.getTextRange(), project);
DocumentContent wholeFileContent = DiffContentFactory.createDocument(psiElement.getProject(), containingFile.getVirtualFile());
if (wholeFileContent == null) return null;
return new DocumentFragmentContent(psiElement.getProject(), wholeFileContent, psiElement.getTextRange());
}
@Nullable
public static SimpleDiffRequest comparePsiElements(PsiElement psiElement1, PsiElement psiElement2) {
public static DiffRequest comparePsiElements(@NotNull PsiElement psiElement1, @NotNull PsiElement psiElement2) {
if (!psiElement1.isValid() || !psiElement2.isValid()) return null;
Project project = psiElement1.getProject();
LOG.assertTrue(project == psiElement2.getProject());
@@ -61,11 +69,9 @@ public class PsiDiffContentFactory {
if (content1 == null || content2 == null) return null;
final ElementPresentation presentation1 = ElementPresentation.forElement(psiElement1);
final ElementPresentation presentation2 = ElementPresentation.forElement(psiElement2);
String title = DiffBundle.message("diff.element.qualified.name.vs.element.qualified.name.dialog.title",
presentation1.getQualifiedName(), presentation2.getQualifiedName());
SimpleDiffRequest diffRequest = new SimpleDiffRequest(project, title);
diffRequest.setContents(content1, content2);
diffRequest.setContentTitles(presentation1.getQualifiedName(), presentation2.getQualifiedName());
return diffRequest;
String title = DiffBundle
.message("diff.element.qualified.name.vs.element.qualified.name.dialog.title",
presentation1.getQualifiedName(), presentation2.getQualifiedName());
return new SimpleDiffRequest(title, content1, content2, presentation1.getQualifiedName(), presentation2.getQualifiedName());
}
}