[vcs-log] introduce VcsLogTextFilter.matches(String) method

This commit is contained in:
Julia Beliaeva
2018-08-20 18:17:13 +03:00
parent ff1ad763d5
commit 9e4483b547
4 changed files with 24 additions and 24 deletions
@@ -44,9 +44,22 @@ public interface VcsLogTextFilter extends VcsLogDetailsFilter {
*/
boolean matchesCase();
/**
* Checks whether a specified commit message matches this filter.
*
* @param message a commit message to check
* @return true if commit message matches this filter
*/
boolean matches(@NotNull String message);
@NotNull
@Override
default VcsLogFilterCollection.FilterKey<VcsLogTextFilter> getKey() {
return TEXT_FILTER;
}
@Override
default boolean matches(@NotNull VcsCommitMetadata details) {
return matches(details.getFullMessage());
}
}
@@ -29,7 +29,6 @@ import com.intellij.vcs.log.*;
import com.intellij.vcs.log.data.VcsLogStorage;
import com.intellij.vcs.log.history.FileNamesData;
import com.intellij.vcs.log.impl.FatalErrorHandler;
import com.intellij.vcs.log.ui.filter.VcsLogTextFilterImpl;
import com.intellij.vcs.log.util.TroveUtil;
import com.intellij.vcsUtil.VcsUtil;
import gnu.trove.TIntHashSet;
@@ -205,7 +204,7 @@ public class IndexDataGetter {
try {
String value = myIndexStorage.messages.get(commit);
if (value != null) {
if (VcsLogTextFilterImpl.matches(filter, value)) {
if (filter.matches(value)) {
result.add(commit);
}
}
@@ -224,7 +223,7 @@ public class IndexDataGetter {
if (resultByTrigrams != null) return resultByTrigrams;
}
return filter(myIndexStorage.messages, message -> VcsLogTextFilterImpl.matches(filter, message));
return filter(myIndexStorage.messages, filter::matches);
}
@NotNull
@@ -15,12 +15,9 @@
*/
package com.intellij.vcs.log.ui.filter
import com.intellij.openapi.util.text.StringUtil
import com.intellij.vcs.log.VcsCommitMetadata
import com.intellij.vcs.log.VcsLogDetailsFilter
import com.intellij.vcs.log.VcsLogTextFilter
import com.intellij.vcs.log.util.VcsLogUtil
import java.util.regex.Pattern
import java.util.regex.PatternSyntaxException
@@ -37,8 +34,9 @@ class VcsLogTextFilterImpl(private val text: String,
// used in upsource
constructor(text: String) : this(text, false, false)
override fun matches(details: VcsCommitMetadata): Boolean {
return matches(this, details.fullMessage)
override fun matches(message: String): Boolean {
if (pattern != null) return pattern.matcher(message).find()
return message.contains(text, !matchCase)
}
override fun getText(): String {
@@ -69,18 +67,5 @@ class VcsLogTextFilterImpl(private val text: String,
}
return null
}
@JvmStatic
fun matches(filter: VcsLogTextFilter, message: String): Boolean {
val pattern = if (filter is VcsLogTextFilterImpl) {
filter.pattern
}
else {
createPattern(filter.text, filter.isRegex, filter.matchesCase())
}
if (pattern != null) return pattern.matcher(message).find()
return if (filter.matchesCase()) message.contains(filter.text) else StringUtil.containsIgnoreCase(message, filter.text)
}
}
}
@@ -18,7 +18,10 @@ package git4idea.log;
import com.intellij.openapi.vcs.VcsException;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.vcs.log.*;
import com.intellij.vcs.log.Hash;
import com.intellij.vcs.log.TimedVcsCommit;
import com.intellij.vcs.log.VcsLogFilterCollection;
import com.intellij.vcs.log.VcsLogTextFilter;
import com.intellij.vcs.log.impl.VcsLogFilterCollectionImpl.VcsLogFilterCollectionBuilder;
import com.intellij.vcs.log.util.BekUtil;
import org.jetbrains.annotations.NotNull;
@@ -100,8 +103,8 @@ class GitBekParentFixer {
}
@Override
public boolean matches(@NotNull VcsCommitMetadata details) {
return details.getFullMessage().contains(MAGIC_TEXT);
public boolean matches(@NotNull String message) {
return message.contains(MAGIC_TEXT);
}
};