mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[vcs-log] extract VcsLogRegexTextFilter class
This commit is contained in:
@@ -148,7 +148,7 @@ public class VcsLogClassicFilterUi implements VcsLogFilterUi {
|
||||
return Pair.empty();
|
||||
}
|
||||
|
||||
VcsLogTextFilter textFilter = new VcsLogTextFilterImpl(text, isRegexAllowed, matchesCase);
|
||||
VcsLogTextFilter textFilter = VcsLogTextFilterImpl.createTextFilter(text, isRegexAllowed, matchesCase);
|
||||
VcsLogHashFilterImpl hashFilter = createHashFilter(text);
|
||||
return Pair.create(textFilter, hashFilter);
|
||||
}
|
||||
@@ -286,9 +286,9 @@ public class VcsLogClassicFilterUi implements VcsLogFilterUi {
|
||||
@NotNull
|
||||
@Override
|
||||
protected VcsLogTextFilter createFilter(@NotNull List<String> values) {
|
||||
return new VcsLogTextFilterImpl(ObjectUtils.assertNotNull(ContainerUtil.getFirstItem(values)),
|
||||
myUiProperties.get(MainVcsLogUiProperties.TEXT_FILTER_REGEX),
|
||||
myUiProperties.get(MainVcsLogUiProperties.TEXT_FILTER_MATCH_CASE));
|
||||
return VcsLogTextFilterImpl.createTextFilter(ObjectUtils.assertNotNull(ContainerUtil.getFirstItem(values)),
|
||||
myUiProperties.get(MainVcsLogUiProperties.TEXT_FILTER_REGEX),
|
||||
myUiProperties.get(MainVcsLogUiProperties.TEXT_FILTER_MATCH_CASE));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -465,10 +465,9 @@ public class VcsLogClassicFilterUi implements VcsLogFilterUi {
|
||||
}
|
||||
|
||||
protected void applyFilter() {
|
||||
myTextFilterModel.setFilter(new VcsLogTextFilterImpl(getText(),
|
||||
myTextFilterModel.myUiProperties.get(MainVcsLogUiProperties.TEXT_FILTER_REGEX),
|
||||
myTextFilterModel.myUiProperties
|
||||
.get(MainVcsLogUiProperties.TEXT_FILTER_MATCH_CASE)));
|
||||
boolean isRegexpAllowed = myTextFilterModel.myUiProperties.get(MainVcsLogUiProperties.TEXT_FILTER_REGEX);
|
||||
boolean isMatchCase = myTextFilterModel.myUiProperties.get(MainVcsLogUiProperties.TEXT_FILTER_MATCH_CASE);
|
||||
myTextFilterModel.setFilter(VcsLogTextFilterImpl.createTextFilter(getText(), isRegexpAllowed, isMatchCase));
|
||||
addCurrentTextToHistory();
|
||||
}
|
||||
|
||||
|
||||
@@ -21,51 +21,49 @@ import com.intellij.vcs.log.util.VcsLogUtil
|
||||
import java.util.regex.Pattern
|
||||
import java.util.regex.PatternSyntaxException
|
||||
|
||||
class VcsLogTextFilterImpl(private val text: String,
|
||||
isRegexAllowed: Boolean,
|
||||
private val matchCase: Boolean) : VcsLogDetailsFilter, VcsLogTextFilter {
|
||||
private val pattern: Pattern?
|
||||
|
||||
init {
|
||||
pattern = createPattern(text, isRegexAllowed, matchCase)
|
||||
}
|
||||
|
||||
class VcsLogTextFilterImpl internal constructor(private val text: String,
|
||||
private val isMatchCase: Boolean) : VcsLogDetailsFilter, VcsLogTextFilter {
|
||||
@Suppress("unused")
|
||||
// used in upsource
|
||||
constructor(text: String) : this(text, false, false)
|
||||
constructor(text: String) : this(text, false)
|
||||
|
||||
override fun matches(message: String): Boolean {
|
||||
if (pattern != null) return pattern.matcher(message).find()
|
||||
return message.contains(text, !matchCase)
|
||||
}
|
||||
override fun matches(message: String): Boolean = message.contains(text, !isMatchCase)
|
||||
|
||||
override fun getText(): String {
|
||||
return text
|
||||
}
|
||||
override fun getText(): String = text
|
||||
|
||||
override fun isRegex(): Boolean {
|
||||
return pattern != null
|
||||
}
|
||||
override fun isRegex(): Boolean = false
|
||||
|
||||
override fun matchesCase(): Boolean {
|
||||
return matchCase
|
||||
}
|
||||
override fun matchesCase(): Boolean = isMatchCase
|
||||
|
||||
override fun toString(): String {
|
||||
return (if (isRegex) "matching " else "containing ") + text + " (case " + (if (matchCase) "sensitive" else "insensitive") + ")"
|
||||
return "containing $text (case ${if (isMatchCase) "sensitive" else "insensitive"})"
|
||||
}
|
||||
|
||||
companion object {
|
||||
private fun createPattern(text: String, isRegexAllowed: Boolean, matchCase: Boolean): Pattern? {
|
||||
if (isRegexAllowed && VcsLogUtil.maybeRegexp(text)) {
|
||||
@JvmStatic
|
||||
fun createTextFilter(text: String, isRegexpAllowed: Boolean = false, isMatchCase: Boolean = false): VcsLogTextFilter {
|
||||
if (isRegexpAllowed && VcsLogUtil.maybeRegexp(text)) {
|
||||
try {
|
||||
return if (matchCase) Pattern.compile(text) else Pattern.compile(text, Pattern.CASE_INSENSITIVE)
|
||||
return VcsLogRegexTextFilter(Pattern.compile(text, if (isMatchCase) 0 else Pattern.CASE_INSENSITIVE))
|
||||
}
|
||||
catch (ignored: PatternSyntaxException) {
|
||||
}
|
||||
|
||||
}
|
||||
return null
|
||||
return VcsLogTextFilterImpl(text, isMatchCase)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class VcsLogRegexTextFilter internal constructor(private val pattern: Pattern) : VcsLogDetailsFilter, VcsLogTextFilter {
|
||||
override fun matches(message: String): Boolean = pattern.matcher(message).find()
|
||||
|
||||
override fun getText(): String = pattern.pattern()
|
||||
|
||||
override fun isRegex(): Boolean = true
|
||||
|
||||
override fun matchesCase(): Boolean = (pattern.flags() and Pattern.CASE_INSENSITIVE) == 0
|
||||
|
||||
override fun toString(): String {
|
||||
return "matching $text (case ${if (matchesCase()) "sensitive" else "insensitive"})"
|
||||
}
|
||||
}
|
||||
@@ -202,7 +202,7 @@ public class VcsLogFiltererImpl implements VcsLogFilterer {
|
||||
if (commitId != null) hashFilterResult.add(myStorage.getCommitIndex(commitId.getHash(), commitId.getRoot()));
|
||||
}
|
||||
}
|
||||
VcsLogTextFilterImpl textFilter = new VcsLogTextFilterImpl(StringUtil.join(hashes, "|"), true, false);
|
||||
VcsLogTextFilter textFilter = VcsLogTextFilterImpl.createTextFilter(StringUtil.join(hashes, "|"), true, false);
|
||||
FilterByDetailsResult textFilterResult = filterByDetails(dataPack, new VcsLogFilterCollectionBuilder(textFilter).build(),
|
||||
commitCount, dataPack.getLogProviders().keySet(), null);
|
||||
if (hashFilterResult.isEmpty() && matchesNothing(textFilterResult.matchingCommits)) return null;
|
||||
|
||||
@@ -12,7 +12,6 @@ import com.intellij.vcs.log.*;
|
||||
import com.intellij.vcs.log.data.VcsLogBranchFilterImpl;
|
||||
import com.intellij.vcs.log.impl.*;
|
||||
import com.intellij.vcs.log.impl.VcsLogFilterCollectionImpl.VcsLogFilterCollectionBuilder;
|
||||
import com.intellij.vcs.log.ui.filter.VcsLogTextFilterImpl;
|
||||
import git4idea.config.GitVersion;
|
||||
import git4idea.test.GitSingleRepoTest;
|
||||
import git4idea.test.GitTestUtil;
|
||||
@@ -25,6 +24,7 @@ import java.util.Set;
|
||||
|
||||
import static com.intellij.openapi.vcs.Executor.echo;
|
||||
import static com.intellij.openapi.vcs.Executor.touch;
|
||||
import static com.intellij.vcs.log.ui.filter.VcsLogTextFilterImpl.createTextFilter;
|
||||
import static git4idea.test.GitExecutor.*;
|
||||
import static git4idea.test.GitTestUtil.readAllRefs;
|
||||
import static java.util.Collections.singleton;
|
||||
@@ -173,12 +173,12 @@ public class GitLogProviderTest extends GitSingleRepoTest {
|
||||
String bigNoBrackets = addCommit(repo, "GIT " + fileName);
|
||||
|
||||
String text = "[git]";
|
||||
assertEquals(Collections.singletonList(smallBrackets), getFilteredHashes(
|
||||
new VcsLogFilterCollectionBuilder().with(new VcsLogTextFilterImpl(text, false, true)).build()));
|
||||
assertEquals(Collections.singletonList(smallBrackets),
|
||||
getFilteredHashes(new VcsLogFilterCollectionBuilder().with(createTextFilter(text, false, true)).build()));
|
||||
assertEquals(Arrays.asList(bigNoBrackets, smallNoBrackets, bigBrackets, smallBrackets, initial),
|
||||
getFilteredHashes(new VcsLogFilterCollectionBuilder().with(new VcsLogTextFilterImpl(text, true, false)).build()));
|
||||
getFilteredHashes(new VcsLogFilterCollectionBuilder(createTextFilter(text, true, false)).build()));
|
||||
assertEquals(Arrays.asList(smallNoBrackets, smallBrackets, initial),
|
||||
getFilteredHashes(new VcsLogFilterCollectionBuilder().with(new VcsLogTextFilterImpl(text, true, true)).build()));
|
||||
getFilteredHashes(new VcsLogFilterCollectionBuilder(createTextFilter(text, true, true)).build()));
|
||||
}
|
||||
|
||||
public void test_filter_by_text_no_regex() throws Exception {
|
||||
@@ -193,7 +193,7 @@ public class GitLogProviderTest extends GitSingleRepoTest {
|
||||
echo(fileName, "content" + Math.random());
|
||||
|
||||
assertEquals(Arrays.asList(bigBrackets, smallBrackets), getFilteredHashes(
|
||||
new VcsLogFilterCollectionBuilder().with(new VcsLogTextFilterImpl("[git]", false, false)).build()));
|
||||
new VcsLogFilterCollectionBuilder().with(createTextFilter("[git]", false, false)).build()));
|
||||
}
|
||||
|
||||
private void assumeFixedStringsWorks() {
|
||||
@@ -209,7 +209,7 @@ public class GitLogProviderTest extends GitSingleRepoTest {
|
||||
Collections.emptyMap(),
|
||||
singleton(user));
|
||||
assertEquals(hashes, getFilteredHashes(new VcsLogFilterCollectionBuilder().with(userFilter).
|
||||
with(new VcsLogTextFilterImpl(regexp ? ".*" : "", regexp, false)).build()));
|
||||
with(createTextFilter(regexp ? ".*" : "", regexp, false)).build()));
|
||||
}
|
||||
|
||||
public void test_filter_by_text_with_regex_and_user() throws Exception {
|
||||
|
||||
@@ -18,8 +18,8 @@ package hg4idea.test.log;
|
||||
import com.intellij.openapi.vcs.VcsException;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.vcs.log.TimedVcsCommit;
|
||||
import com.intellij.vcs.log.VcsLogTextFilter;
|
||||
import com.intellij.vcs.log.impl.VcsLogFilterCollectionImpl;
|
||||
import com.intellij.vcs.log.ui.filter.VcsLogTextFilterImpl;
|
||||
import hg4idea.test.HgPlatformTest;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.zmlx.hg4idea.command.HgWorkingCopyRevisionsCommand;
|
||||
@@ -32,6 +32,7 @@ import java.util.List;
|
||||
|
||||
import static com.intellij.openapi.vcs.Executor.cd;
|
||||
import static com.intellij.openapi.vcs.Executor.overwrite;
|
||||
import static com.intellij.vcs.log.ui.filter.VcsLogTextFilterImpl.createTextFilter;
|
||||
import static hg4idea.test.HgExecutor.hg;
|
||||
import static hg4idea.test.log.HgUserFilterTest.findLogProvider;
|
||||
|
||||
@@ -52,11 +53,11 @@ public class HgTextFilterTest extends HgPlatformTest {
|
||||
String text = "[hg]";
|
||||
|
||||
assertSameElements(Arrays.asList(bigBrackets, smallBrackets),
|
||||
getFilteredCommits(provider, new VcsLogTextFilterImpl(text, false, false)));
|
||||
getFilteredCommits(provider, createTextFilter(text, false, false)));
|
||||
assertSameElements(Collections.singletonList(smallBrackets),
|
||||
getFilteredCommits(provider, new VcsLogTextFilterImpl(text, false, true)));
|
||||
getFilteredCommits(provider, createTextFilter(text, false, true)));
|
||||
assertSameElements(Arrays.asList(bigNoBrackets, smallNoBrackets, bigBrackets, smallBrackets),
|
||||
getFilteredCommits(provider, new VcsLogTextFilterImpl(text, true, false)));
|
||||
getFilteredCommits(provider, createTextFilter(text, true, false)));
|
||||
}
|
||||
|
||||
public void testRegexp() throws Exception {
|
||||
@@ -69,9 +70,9 @@ public class HgTextFilterTest extends HgPlatformTest {
|
||||
HgLogProvider provider = findLogProvider(myProject);
|
||||
|
||||
assertSameElements(Collections.singletonList(numberedBigBug),
|
||||
getFilteredCommits(provider, new VcsLogTextFilterImpl("Bug \\d+", true, true)));
|
||||
getFilteredCommits(provider, createTextFilter("Bug \\d+", true, true)));
|
||||
assertSameElements(Collections.singletonList(bigBug),
|
||||
getFilteredCommits(provider, new VcsLogTextFilterImpl("BUG.*", true, true)));
|
||||
getFilteredCommits(provider, createTextFilter("BUG.*", true, true)));
|
||||
}
|
||||
|
||||
public void _testRegexpCaseInsensitive() throws Exception {
|
||||
@@ -84,13 +85,13 @@ public class HgTextFilterTest extends HgPlatformTest {
|
||||
HgLogProvider provider = findLogProvider(myProject);
|
||||
|
||||
assertSameElements(Arrays.asList(numberedSmallBug, numberedBigBug),
|
||||
getFilteredCommits(provider, new VcsLogTextFilterImpl("Bug \\d+", true, false)));
|
||||
getFilteredCommits(provider, createTextFilter("Bug \\d+", true, false)));
|
||||
assertSameElements(Arrays.asList(numberedBigBug, numberedSmallBug, smallBug, bigBug),
|
||||
getFilteredCommits(provider, new VcsLogTextFilterImpl("BUG.*", true, false)));
|
||||
getFilteredCommits(provider, createTextFilter("BUG.*", true, false)));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private List<String> getFilteredCommits(@NotNull HgLogProvider provider, @NotNull VcsLogTextFilterImpl filter) throws VcsException {
|
||||
private List<String> getFilteredCommits(@NotNull HgLogProvider provider, @NotNull VcsLogTextFilter filter) throws VcsException {
|
||||
VcsLogFilterCollectionImpl filterCollection = new VcsLogFilterCollectionImpl(null, null, null, null,
|
||||
filter, null, null);
|
||||
List<TimedVcsCommit> commits = provider.getCommitsMatchingFilter(myProject.getBaseDir(), filterCollection, -1);
|
||||
|
||||
Reference in New Issue
Block a user