Skip to content
This repository was archived by the owner on Nov 10, 2023. It is now read-only.

Commit ae5b505

Browse files
mykola-semkofacebook-github-bot
authored andcommitted
java_binary blocklist pattern refactoring
Summary: ^ Reviewed By: IanChilds fbshipit-source-id: 938ece57420ddf14e94ff278b82c07543fe3bac6
1 parent 92c6901 commit ae5b505

4 files changed

Lines changed: 37 additions & 43 deletions

File tree

src/com/facebook/buck/jvm/java/JavaBinary.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,9 @@ public class JavaBinary extends AbstractBuildRuleWithDeclaredAndExtraDeps
7979

8080
@SuppressWarnings("PMD.UnusedPrivateField")
8181
@AddToRuleKey
82-
private final ImmutableSet<Pattern> blacklist;
82+
private final ImmutableSet<Pattern> blocklist;
8383

84-
private final PatternsMatcher blacklistPatternsMatcher;
84+
private final PatternsMatcher blocklistPatternsMatcher;
8585

8686
private final ImmutableSet<JavaLibrary> transitiveClasspathDeps;
8787
private final ImmutableSet<SourcePath> transitiveClasspaths;
@@ -99,7 +99,7 @@ public JavaBinary(
9999
boolean mergeManifests,
100100
boolean disallowAllDuplicates,
101101
@Nullable Path metaInfDirectory,
102-
ImmutableSet<Pattern> blacklist,
102+
ImmutableSet<Pattern> blocklist,
103103
ImmutableSet<JavaLibrary> transitiveClasspathDeps,
104104
ImmutableSet<SourcePath> transitiveClasspaths,
105105
boolean cache,
@@ -114,8 +114,8 @@ public JavaBinary(
114114
metaInfDirectory != null
115115
? PathSourcePath.of(getProjectFilesystem(), metaInfDirectory)
116116
: null;
117-
this.blacklist = blacklist;
118-
blacklistPatternsMatcher = new PatternsMatcher(blacklist);
117+
this.blocklist = blocklist;
118+
this.blocklistPatternsMatcher = new PatternsMatcher(blocklist);
119119
this.transitiveClasspathDeps = transitiveClasspathDeps;
120120
this.transitiveClasspaths = transitiveClasspaths;
121121
this.cache = cache;
@@ -181,7 +181,7 @@ public ImmutableList<Step> getBuildSteps(
181181
.setDuplicatesLogLevel(duplicatesLogLevel)
182182
.setRemoveEntryPredicate(
183183
entry ->
184-
blacklistPatternsMatcher.substringMatches(((ZipEntry) entry).getName()))
184+
blocklistPatternsMatcher.substringMatches(((ZipEntry) entry).getName()))
185185
.build());
186186
commands.add(jar);
187187

src/com/facebook/buck/util/PatternsMatcher.java

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@
1616

1717
package com.facebook.buck.util;
1818

19+
import com.google.common.collect.ImmutableCollection;
1920
import com.google.common.collect.ImmutableSet;
2021
import com.google.common.collect.Maps;
21-
import java.util.Collection;
2222
import java.util.Map;
23+
import java.util.regex.Matcher;
2324
import java.util.regex.Pattern;
24-
import java.util.stream.Collectors;
2525

2626
/**
2727
* Helper class that keeps a list of compiled patterns and provides a method to check whether a
@@ -34,48 +34,43 @@ public class PatternsMatcher {
3434
/** A pattern which matches no string */
3535
public static final PatternsMatcher NONE = new PatternsMatcher(ImmutableSet.of(), false);
3636

37-
private final Collection<Pattern> patterns;
37+
private final ImmutableSet<Pattern> patterns;
3838
/** True is like having a pattern {@code .*} in the pattern set */
3939
private final boolean matchesAny;
4040

41-
private PatternsMatcher(Collection<Pattern> patterns, boolean matchesAny) {
41+
private PatternsMatcher(ImmutableSet<Pattern> patterns, boolean matchesAny) {
4242
this.patterns = patterns;
4343
this.matchesAny = matchesAny;
4444
}
4545

46-
public PatternsMatcher(Collection<String> rawPatterns) {
47-
patterns = rawPatterns.stream().map(Pattern::compile).collect(Collectors.toList());
48-
matchesAny = false;
46+
public PatternsMatcher(ImmutableCollection<String> rawPatterns) {
47+
this(rawPatterns.stream().map(Pattern::compile).collect(ImmutableSet.toImmutableSet()), false);
4948
}
5049

5150
public PatternsMatcher(ImmutableSet<Pattern> compiledPatterns) {
52-
patterns = compiledPatterns;
53-
matchesAny = false;
51+
this(compiledPatterns, false);
5452
}
5553

5654
/** @return true if the given string matches some of the patterns */
5755
public boolean matches(String string) {
58-
if (matchesAny) {
59-
return true;
60-
}
61-
for (Pattern pattern : patterns) {
62-
if (pattern.matcher(string).matches()) {
63-
return true;
64-
}
65-
}
66-
return false;
56+
return match(string, true);
6757
}
6858

6959
/**
7060
* @return true if a substring of the given string matches some of the patterns or there are no
7161
* patterns
7262
*/
7363
public boolean substringMatches(String string) {
64+
return match(string, false);
65+
}
66+
67+
private boolean match(String string, boolean fullMatch) {
7468
if (matchesAny) {
7569
return true;
7670
}
7771
for (Pattern pattern : patterns) {
78-
if (pattern.matcher(string).find()) {
72+
Matcher matcher = pattern.matcher(string);
73+
if (fullMatch ? matcher.matches() : matcher.find()) {
7974
return true;
8075
}
8176
}

test/com/facebook/buck/jvm/java/JavaBinaryTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public void testGetExecutableCommand() {
9393
/* merge manifests */ true,
9494
false,
9595
null,
96-
/* blacklist */ ImmutableSet.of(),
96+
/* blocklist */ ImmutableSet.of(),
9797
ImmutableSet.of(),
9898
ImmutableSet.of(),
9999
/* cache */ true,

test/com/facebook/buck/util/PatternsMatcherTest.java

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@
2020
import static org.junit.Assert.assertFalse;
2121
import static org.junit.Assert.assertTrue;
2222

23-
import java.util.Arrays;
24-
import java.util.Collections;
23+
import com.google.common.collect.ImmutableList;
2524
import java.util.Map;
2625
import java.util.TreeMap;
2726
import org.junit.Test;
@@ -31,7 +30,7 @@ public class PatternsMatcherTest {
3130
@Test
3231
public void testMatchesPattern() {
3332
PatternsMatcher patternsMatcher =
34-
new PatternsMatcher(Arrays.asList("pattern.*", "test_pattern"));
33+
new PatternsMatcher(ImmutableList.of("pattern.*", "test_pattern"));
3534

3635
assertTrue(patternsMatcher.matches("pattern"));
3736
assertTrue(patternsMatcher.matches("test_pattern"));
@@ -42,72 +41,72 @@ public void testMatchesPattern() {
4241
@Test
4342
public void testMatchesAnyWithExactMatch() {
4443
PatternsMatcher patternsMatcher =
45-
new PatternsMatcher(Arrays.asList("pattern.*", "test_pattern"));
44+
new PatternsMatcher(ImmutableList.of("pattern.*", "test_pattern"));
4645

4746
assertTrue(patternsMatcher.matches("test_pattern"));
4847
}
4948

5049
@Test
5150
public void testMatchesAnyWithWildcard() {
5251
PatternsMatcher patternsMatcher =
53-
new PatternsMatcher(Arrays.asList("pattern.*", "test_pattern"));
52+
new PatternsMatcher(ImmutableList.of("pattern.*", "test_pattern"));
5453

5554
assertTrue(patternsMatcher.matches("pattern"));
5655
}
5756

5857
@Test
5958
public void testDoesNotMatchPrefix() {
60-
PatternsMatcher patternsMatcher = new PatternsMatcher(Collections.singletonList("test"));
59+
PatternsMatcher patternsMatcher = new PatternsMatcher(ImmutableList.of("test"));
6160

6261
assertFalse(patternsMatcher.matches("test_pattern"));
6362
}
6463

6564
@Test
6665
public void testMatchAnyWithNonMatchingPrefixReturnsFalse() {
67-
PatternsMatcher patternsMatcher = new PatternsMatcher(Collections.singletonList("test"));
66+
PatternsMatcher patternsMatcher = new PatternsMatcher(ImmutableList.of("test"));
6867

6968
assertFalse(patternsMatcher.matches("test_pattern"));
7069
}
7170

7271
@Test
7372
public void testSubstringMatchesPrefix() {
74-
PatternsMatcher patternsMatcher = new PatternsMatcher(Collections.singletonList("test"));
73+
PatternsMatcher patternsMatcher = new PatternsMatcher(ImmutableList.of("test"));
7574

7675
assertTrue(patternsMatcher.substringMatches("test_pattern"));
7776
}
7877

7978
@Test
8079
public void testDoesNotMatchSuffix() {
81-
PatternsMatcher patternsMatcher = new PatternsMatcher(Collections.singletonList("pattern"));
80+
PatternsMatcher patternsMatcher = new PatternsMatcher(ImmutableList.of("pattern"));
8281

8382
assertFalse(patternsMatcher.matches("test_pattern"));
8483
}
8584

8685
@Test
8786
public void testSubstringMatchesSuffix() {
88-
PatternsMatcher patternsMatcher = new PatternsMatcher(Collections.singletonList("pattern"));
87+
PatternsMatcher patternsMatcher = new PatternsMatcher(ImmutableList.of("pattern"));
8988

9089
assertTrue(patternsMatcher.substringMatches("test_pattern"));
9190
}
9291

9392
@Test
9493
public void testDoesNotMatchInfix() {
95-
PatternsMatcher patternsMatcher = new PatternsMatcher(Collections.singletonList("_"));
94+
PatternsMatcher patternsMatcher = new PatternsMatcher(ImmutableList.of("_"));
9695

9796
assertFalse(patternsMatcher.matches("test_pattern"));
9897
}
9998

10099
@Test
101100
public void testSubstringMatchesInfix() {
102-
PatternsMatcher patternsMatcher = new PatternsMatcher(Collections.singletonList("_"));
101+
PatternsMatcher patternsMatcher = new PatternsMatcher(ImmutableList.of("_"));
103102

104103
assertTrue(patternsMatcher.substringMatches("test_pattern"));
105104
}
106105

107106
@Test
108107
public void testDoesNotMatchPattern() {
109108
PatternsMatcher patternsMatcher =
110-
new PatternsMatcher(Arrays.asList("pattern.*", "test_pattern"));
109+
new PatternsMatcher(ImmutableList.of("pattern.*", "test_pattern"));
111110

112111
assertFalse(patternsMatcher.matches("wrong_pattern"));
113112
assertFalse(patternsMatcher.substringMatches("wrong_pat"));
@@ -116,7 +115,7 @@ public void testDoesNotMatchPattern() {
116115
@Test
117116
public void testMatchesAnyDoesNotMatchPattern() {
118117
PatternsMatcher patternsMatcher =
119-
new PatternsMatcher(Arrays.asList("pattern.*", "test_pattern"));
118+
new PatternsMatcher(ImmutableList.of("pattern.*", "test_pattern"));
120119

121120
assertFalse(patternsMatcher.matches("wrong_pattern"));
122121
}
@@ -134,15 +133,15 @@ public void testMatchesMatchesEmptyPatterns() {
134133
@Test
135134
public void testHasPatterns() {
136135
PatternsMatcher patternsMatcher =
137-
new PatternsMatcher(Arrays.asList("pattern.*", "test_pattern"));
136+
new PatternsMatcher(ImmutableList.of("pattern.*", "test_pattern"));
138137

139138
assertFalse(patternsMatcher.isMatchesAny());
140139
assertFalse(patternsMatcher.isMatchesNone());
141140
}
142141

143142
@Test
144143
public void testHasNoPatterns() {
145-
PatternsMatcher patternsMatcher = new PatternsMatcher(Collections.emptyList());
144+
PatternsMatcher patternsMatcher = new PatternsMatcher(ImmutableList.of());
146145

147146
assertTrue(patternsMatcher.isMatchesNone());
148147
assertFalse(patternsMatcher.isMatchesAny());
@@ -166,7 +165,7 @@ public void testFilterMatchingMapEntriesWithEmptyPatterns() {
166165

167166
@Test
168167
public void testFilterMatchingMapEntries() {
169-
PatternsMatcher patternsMatcher = new PatternsMatcher(Arrays.asList("e1", "e2"));
168+
PatternsMatcher patternsMatcher = new PatternsMatcher(ImmutableList.of("e1", "e2"));
170169

171170
Map<String, String> entries =
172171
new TreeMap<String, String>() {

0 commit comments

Comments
 (0)