From d7b3b8bc500ca44984491e4dd26bdc706a5a2e2e Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Mon, 16 Feb 2015 21:43:42 +0300 Subject: [PATCH] EA-64837 diff: convert line separators --- .../src/com/intellij/diff/DiffContentFactory.java | 8 +++++++- .../com/intellij/diff/DiffContentFactoryImpl.java | 13 ++++++++++--- .../com/intellij/diff/DiffRequestFactoryImpl.java | 2 +- .../diff/contents/DocumentContentWrapper.java | 5 ++--- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/platform/diff-api/src/com/intellij/diff/DiffContentFactory.java b/platform/diff-api/src/com/intellij/diff/DiffContentFactory.java index c1725fdab36a..cb110ff1190d 100644 --- a/platform/diff-api/src/com/intellij/diff/DiffContentFactory.java +++ b/platform/diff-api/src/com/intellij/diff/DiffContentFactory.java @@ -40,6 +40,9 @@ public abstract class DiffContentFactory { @NotNull public abstract EmptyContent createEmpty(); + @NotNull + public abstract DocumentContent create(@NotNull String text); + @NotNull public abstract DocumentContent create(@NotNull String text, @Nullable FileType type); @@ -58,8 +61,11 @@ public abstract class DiffContentFactory { @NotNull public abstract DiffContent createClipboardContent(); + /** + * @param referenceContent used to detect FileType and proper highlighting for clipboard content + */ @NotNull - public abstract DocumentContent createClipboardContent(@NotNull DocumentContent mainContent); + public abstract DocumentContent createClipboardContent(@NotNull DocumentContent referenceContent); @NotNull public abstract DiffContent createBinary(@Nullable Project project, diff --git a/platform/diff-impl/src/com/intellij/diff/DiffContentFactoryImpl.java b/platform/diff-impl/src/com/intellij/diff/DiffContentFactoryImpl.java index 8c526b016ae8..b302e5b52c14 100644 --- a/platform/diff-impl/src/com/intellij/diff/DiffContentFactoryImpl.java +++ b/platform/diff-impl/src/com/intellij/diff/DiffContentFactoryImpl.java @@ -20,7 +20,6 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.EditorFactory; -import com.intellij.openapi.editor.impl.DocumentImpl; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.ide.CopyPasteManager; @@ -47,6 +46,12 @@ public class DiffContentFactoryImpl extends DiffContentFactory { return new EmptyContent(); } + @Override + @NotNull + public DocumentContent create(@NotNull String text) { + return create(text, null); + } + @Override @NotNull public DocumentContent create(@NotNull String text, @Nullable FileType type) { @@ -97,14 +102,16 @@ public class DiffContentFactoryImpl extends DiffContentFactory { @NotNull public DiffContent createClipboardContent() { String text = CopyPasteManager.getInstance().getContents(DataFlavor.stringFlavor); - return new DocumentContentImpl(new DocumentImpl(StringUtil.notNullize(text))); + Document document = EditorFactory.getInstance().createDocument(StringUtil.convertLineSeparators(StringUtil.notNullize(text))); + return new DocumentContentImpl(document); // TODO: show difference in line separators ? } @Override @NotNull public DocumentContent createClipboardContent(@NotNull DocumentContent mainContent) { String text = CopyPasteManager.getInstance().getContents(DataFlavor.stringFlavor); - return new DocumentContentWrapper(mainContent, StringUtil.notNullize(text)); + Document document = EditorFactory.getInstance().createDocument(StringUtil.convertLineSeparators(StringUtil.notNullize(text))); + return new DocumentContentWrapper(document, mainContent); } @Override diff --git a/platform/diff-impl/src/com/intellij/diff/DiffRequestFactoryImpl.java b/platform/diff-impl/src/com/intellij/diff/DiffRequestFactoryImpl.java index d89180384cbf..ea172e5791ea 100644 --- a/platform/diff-impl/src/com/intellij/diff/DiffRequestFactoryImpl.java +++ b/platform/diff-impl/src/com/intellij/diff/DiffRequestFactoryImpl.java @@ -47,7 +47,7 @@ public class DiffRequestFactoryImpl extends DiffRequestFactory { @NotNull public ContentDiffRequest createClipboardVsValue(@NotNull String value) { DiffContent content1 = myContentFactory.createClipboardContent(); - DiffContent content2 = myContentFactory.create(value, null); + DiffContent content2 = myContentFactory.create(value); String title1 = DiffBundle.message("diff.content.clipboard.content.title"); String title2 = DiffBundle.message("diff.content.selected.value"); diff --git a/platform/diff-impl/src/com/intellij/diff/contents/DocumentContentWrapper.java b/platform/diff-impl/src/com/intellij/diff/contents/DocumentContentWrapper.java index 82f87e06ee40..fd65cf30af44 100644 --- a/platform/diff-impl/src/com/intellij/diff/contents/DocumentContentWrapper.java +++ b/platform/diff-impl/src/com/intellij/diff/contents/DocumentContentWrapper.java @@ -16,7 +16,6 @@ package com.intellij.diff.contents; import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.EditorFactory; import com.intellij.openapi.fileEditor.OpenFileDescriptor; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.vfs.VirtualFile; @@ -30,9 +29,9 @@ public class DocumentContentWrapper implements DocumentContent { @NotNull private final DocumentContent myBase; @NotNull private final Document myDocument; - public DocumentContentWrapper(@NotNull DocumentContent base, @NotNull String text) { + public DocumentContentWrapper(@NotNull Document document, @NotNull DocumentContent base) { + myDocument = document; myBase = base; - myDocument = EditorFactory.getInstance().createDocument(text); } @NotNull