mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-153246 diff: clarify notification message in case of equal contents
This commit is contained in:
@@ -385,7 +385,11 @@ public class UnifiedDiffViewer extends ListenerDiffViewerBase {
|
||||
myFoldingModel.updateContext(myRequest, getFoldingModelSettings());
|
||||
|
||||
clearDiffPresentation();
|
||||
if (isContentsEqual) myPanel.addNotification(DiffNotifications.createEqualContents());
|
||||
if (isContentsEqual) {
|
||||
boolean equalCharsets = TextDiffViewerUtil.areEqualCharsets(getContents());
|
||||
boolean equalSeparators = TextDiffViewerUtil.areEqualLineSeparators(getContents());
|
||||
myPanel.addNotification(DiffNotifications.createEqualContents(equalCharsets, equalSeparators));
|
||||
}
|
||||
|
||||
TIntFunction separatorLines = myFoldingModel.getLineNumberConvertor();
|
||||
myEditor.getGutterComponentEx().setLineNumberConvertor(mergeConverters(data.getLineConvertor1(), separatorLines),
|
||||
|
||||
@@ -19,6 +19,7 @@ import com.intellij.diff.DiffContext;
|
||||
import com.intellij.diff.actions.BufferedLineIterator;
|
||||
import com.intellij.diff.actions.NavigationContextChecker;
|
||||
import com.intellij.diff.comparison.DiffTooBigException;
|
||||
import com.intellij.diff.contents.DocumentContent;
|
||||
import com.intellij.diff.fragments.LineFragment;
|
||||
import com.intellij.diff.requests.ContentDiffRequest;
|
||||
import com.intellij.diff.requests.DiffRequest;
|
||||
@@ -52,6 +53,7 @@ import org.jetbrains.annotations.*;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.ArrayList;
|
||||
import java.util.BitSet;
|
||||
import java.util.Iterator;
|
||||
@@ -237,7 +239,11 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer {
|
||||
clearDiffPresentation();
|
||||
|
||||
myIsContentsEqual = data.isContentsEqual();
|
||||
if (data.isContentsEqual()) myPanel.addNotification(DiffNotifications.createEqualContents());
|
||||
if (data.isContentsEqual()) {
|
||||
boolean equalCharsets = TextDiffViewerUtil.areEqualCharsets(getContents());
|
||||
boolean equalSeparators = TextDiffViewerUtil.areEqualLineSeparators(getContents());
|
||||
myPanel.addNotification(DiffNotifications.createEqualContents(equalCharsets, equalSeparators));
|
||||
}
|
||||
|
||||
if (data.getFragments() != null) {
|
||||
for (LineFragment fragment : data.getFragments()) {
|
||||
|
||||
@@ -45,6 +45,20 @@ public class DiffNotifications {
|
||||
|
||||
@NotNull
|
||||
public static JPanel createEqualContents() {
|
||||
return createEqualContents(true, true);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static JPanel createEqualContents(boolean equalCharsets, boolean equalSeparators) {
|
||||
if (!equalCharsets && !equalSeparators) {
|
||||
return createNotification(DiffBundle.message("diff.contents.have.differences.only.in.charset.and.line.separators.message.text"));
|
||||
}
|
||||
if (!equalSeparators) {
|
||||
return createNotification(DiffBundle.message("diff.contents.have.differences.only.in.line.separators.message.text"));
|
||||
}
|
||||
if (!equalCharsets) {
|
||||
return createNotification(DiffBundle.message("diff.contents.have.differences.only.in.charset.message.text"));
|
||||
}
|
||||
return createNotification(DiffBundle.message("diff.contents.are.identical.message.text"));
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.intellij.diff.tools.util.base;
|
||||
import com.intellij.diff.DiffContext;
|
||||
import com.intellij.diff.contents.DiffContent;
|
||||
import com.intellij.diff.contents.DocumentContent;
|
||||
import com.intellij.diff.contents.EmptyContent;
|
||||
import com.intellij.diff.requests.ContentDiffRequest;
|
||||
import com.intellij.diff.tools.util.FoldingModelSupport;
|
||||
import com.intellij.diff.tools.util.base.TextDiffSettingsHolder.TextDiffSettings;
|
||||
@@ -38,6 +39,7 @@ import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.ui.ToggleActionButton;
|
||||
import com.intellij.util.EditorPopupHandler;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -127,6 +129,25 @@ public class TextDiffViewerUtil {
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean areEqualLineSeparators(@NotNull List<? extends DiffContent> contents) {
|
||||
return areEqualDocumentContentProperties(contents, DocumentContent::getLineSeparator);
|
||||
}
|
||||
|
||||
public static boolean areEqualCharsets(@NotNull List<? extends DiffContent> contents) {
|
||||
return areEqualDocumentContentProperties(contents, DocumentContent::getCharset);
|
||||
}
|
||||
|
||||
private static <T> boolean areEqualDocumentContentProperties(@NotNull List<? extends DiffContent> contents,
|
||||
@NotNull Function<DocumentContent, T> propertyGetter) {
|
||||
List<T> properties = ContainerUtil.mapNotNull(contents, (content) -> {
|
||||
if (content instanceof EmptyContent) return null;
|
||||
return propertyGetter.fun((DocumentContent)content);
|
||||
});
|
||||
|
||||
if (properties.size() < 2) return true;
|
||||
return ContainerUtil.newHashSet(properties).size() == 1;
|
||||
}
|
||||
|
||||
//
|
||||
// Actions
|
||||
//
|
||||
|
||||
@@ -36,6 +36,7 @@ import com.intellij.diff.requests.ContentDiffRequest;
|
||||
import com.intellij.diff.requests.DiffRequest;
|
||||
import com.intellij.diff.tools.util.base.HighlightPolicy;
|
||||
import com.intellij.diff.tools.util.base.IgnorePolicy;
|
||||
import com.intellij.diff.tools.util.base.TextDiffViewerUtil;
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.lang.Language;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
@@ -98,6 +99,8 @@ import java.util.BitSet;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static com.intellij.diff.tools.util.base.TextDiffViewerUtil.areEqualLineSeparators;
|
||||
|
||||
public class DiffUtil {
|
||||
private static final Logger LOG = Logger.getInstance(DiffUtil.class);
|
||||
|
||||
@@ -376,23 +379,8 @@ public class DiffUtil {
|
||||
List<DiffContent> contents = request.getContents();
|
||||
List<String> titles = request.getContentTitles();
|
||||
|
||||
List<Charset> charsets = ContainerUtil.map(contents, new Function<DiffContent, Charset>() {
|
||||
@Override
|
||||
public Charset fun(DiffContent content) {
|
||||
if (content instanceof EmptyContent) return null;
|
||||
return ((DocumentContent)content).getCharset();
|
||||
}
|
||||
});
|
||||
List<LineSeparator> separators = ContainerUtil.map(contents, new Function<DiffContent, LineSeparator>() {
|
||||
@Override
|
||||
public LineSeparator fun(DiffContent content) {
|
||||
if (content instanceof EmptyContent) return null;
|
||||
return ((DocumentContent)content).getLineSeparator();
|
||||
}
|
||||
});
|
||||
|
||||
boolean equalCharsets = isEqualElements(charsets);
|
||||
boolean equalSeparators = isEqualElements(separators);
|
||||
boolean equalCharsets = TextDiffViewerUtil.areEqualCharsets(contents);
|
||||
boolean equalSeparators = TextDiffViewerUtil.areEqualLineSeparators(contents);
|
||||
|
||||
List<JComponent> result = new ArrayList<JComponent>(contents.size());
|
||||
|
||||
@@ -421,20 +409,6 @@ public class DiffUtil {
|
||||
return createStackedComponents(components, TITLE_GAP);
|
||||
}
|
||||
|
||||
private static boolean isEqualElements(@NotNull List elements) {
|
||||
for (int i = 0; i < elements.size(); i++) {
|
||||
for (int j = i + 1; j < elements.size(); j++) {
|
||||
if (!isEqualElements(elements.get(i), elements.get(j))) return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private static boolean isEqualElements(@Nullable Object element1, @Nullable Object element2) {
|
||||
if (element1 == null || element2 == null) return true;
|
||||
return element1.equals(element2);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static JComponent createTitle(@NotNull String title,
|
||||
@NotNull DiffContent content,
|
||||
|
||||
@@ -57,6 +57,8 @@ select.external.diff.program.dialog.title=Select External Diff Program
|
||||
select.external.merge.program.dialog.title=Select External Merge Program
|
||||
diff.contents.are.identical.message.text=Contents are identical
|
||||
diff.contents.have.differences.only.in.line.separators.message.text=Contents have differences only in line separators
|
||||
diff.contents.have.differences.only.in.charset.message.text=Contents have differences only in encoding
|
||||
diff.contents.have.differences.only.in.charset.and.line.separators.message.text=Contents have differences only in line separators and encoding
|
||||
diff.contents.have.differences.only.in.line.separators.or.whitespaces=Contents have differences only in line separators or whitespaces
|
||||
show.diff.anyway.dialog.message=Show diff anyway?
|
||||
no.differences.dialog.title=No Differences
|
||||
|
||||
Reference in New Issue
Block a user