From 74a963bd122528d688ccf51b87ea67da1322b5d6 Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Mon, 24 Dec 2018 18:04:22 +0300 Subject: [PATCH] [vcs-log] ensure that text and hash filter are consistent --- .../log/ui/filter/VcsLogClassicFilterUi.java | 25 +++++++++++++++++++ .../visible/filters/VcsLogHashFilterImpl.java | 15 ++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsLogClassicFilterUi.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsLogClassicFilterUi.java index fd32104ad0f8..9b78c8b6fe4a 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsLogClassicFilterUi.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsLogClassicFilterUi.java @@ -213,6 +213,31 @@ public class VcsLogClassicFilterUi implements VcsLogFilterUi { super(VcsLogFilterCollection.TEXT_FILTER, VcsLogFilterCollection.HASH_FILTER, dataPackProvider, properties, filters); } + @Nullable + @Override + protected FilterPair getFilterFromProperties() { + FilterPair filterPair = super.getFilterFromProperties(); + if (filterPair == null) return null; + // check filters correctness + if (filterPair.getFilter1() != null && !StringUtil.isEmptyOrSpaces(filterPair.getFilter1().getText())) { + VcsLogHashFilter hashFilterFromText = VcsLogFilterObject.fromHash(filterPair.getFilter1().getText()); + if (!Objects.equals(filterPair.getFilter2(), hashFilterFromText)) { + LOG.warn("Set hash filter " + filterPair.getFilter2() + " is inconsistent with text filter." + + " Replacing with " + hashFilterFromText); + return new FilterPair<>(filterPair.getFilter1(), hashFilterFromText); + } + } + else if (filterPair.getFilter2() != null && !filterPair.getFilter2().getHashes().isEmpty()) { + VcsLogTextFilter textFilterFromHashes = createTextFilter(StringUtil.join(filterPair.getFilter2().getHashes(), " ")); + LOG.warn("Set hash filter " + + filterPair.getFilter2() + + " is inconsistent with empty text filter. Using text filter " + + textFilterFromHashes); + return new FilterPair<>(textFilterFromHashes, filterPair.getFilter2()); + } + return filterPair; + } + @NotNull String getText() { if (myText != null) { diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/visible/filters/VcsLogHashFilterImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/visible/filters/VcsLogHashFilterImpl.java index fd4d52f1f47b..a12683ef07a4 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/visible/filters/VcsLogHashFilterImpl.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/visible/filters/VcsLogHashFilterImpl.java @@ -7,9 +7,9 @@ import com.intellij.vcs.log.util.VcsLogUtil; import org.jetbrains.annotations.NotNull; import java.util.Collection; +import java.util.Objects; class VcsLogHashFilterImpl implements VcsLogHashFilter { - @NotNull private final Collection myHashes; VcsLogHashFilterImpl(@NotNull Collection hashes) { @@ -32,4 +32,17 @@ class VcsLogHashFilterImpl implements VcsLogHashFilter { public String toString() { return "hashes:" + myHashes; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + VcsLogHashFilterImpl filter = (VcsLogHashFilterImpl)o; + return myHashes.equals(filter.myHashes); + } + + @Override + public int hashCode() { + return Objects.hash(myHashes); + } }