Skip to content

Commit dbd3ce4

Browse files
SONARTEXT-1 Fix source encoding WARN by converting BinaryFilePredicate as a org.sonar.api.batch.fs.FilePredicate (#72)
1 parent b9ea722 commit dbd3ce4

File tree

4 files changed

+104
-92
lines changed

4 files changed

+104
-92
lines changed

sonar-text-plugin/src/main/java/org/sonar/plugins/common/BinaryFilePredicate.java renamed to sonar-text-plugin/src/main/java/org/sonar/plugins/common/NotBinaryFilePredicate.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,11 @@
2828
import java.util.regex.Pattern;
2929
import java.util.stream.Collectors;
3030
import javax.annotation.Nullable;
31+
import org.sonar.api.batch.fs.FilePredicate;
32+
import org.sonar.api.batch.fs.InputFile;
3133
import org.sonar.plugins.secrets.api.EntropyChecker;
3234

33-
public class BinaryFilePredicate {
35+
public class NotBinaryFilePredicate implements FilePredicate {
3436

3537
private static final Set<String> DEFAULT_BINARY_EXTENSIONS = new HashSet<>(Arrays.asList(
3638
"3dm",
@@ -406,7 +408,7 @@ public class BinaryFilePredicate {
406408
private final Set<String> binaryFileExtensions;
407409
private final List<String> binaryFileSuffixes;
408410

409-
public BinaryFilePredicate(String... additionalBinarySuffixes) {
411+
public NotBinaryFilePredicate(String... additionalBinarySuffixes) {
410412
binaryFileExtensions = new HashSet<>(DEFAULT_BINARY_EXTENSIONS);
411413
binaryFileSuffixes = new ArrayList<>(DEFAULT_BINARY_SUFFIXES);
412414
List<String> cleanedSuffixes = Arrays.stream(additionalBinarySuffixes)
@@ -424,11 +426,14 @@ public BinaryFilePredicate(String... additionalBinarySuffixes) {
424426
}
425427
}
426428

427-
public boolean hasBinaryFileName(String filename) {
429+
@Override
430+
public boolean apply(InputFile inputFile) {
431+
String filename = inputFile.filename();
428432
String extension = extension(filename);
429-
return (extension != null && binaryFileExtensions.contains(extension)) ||
430-
binaryFileSuffixes.stream().anyMatch(filename::endsWith) ||
431-
isMd5OrSha1(filename);
433+
boolean hasBinaryExtension = extension != null && binaryFileExtensions.contains(extension);
434+
return !hasBinaryExtension &&
435+
binaryFileSuffixes.stream().noneMatch(filename::endsWith) &&
436+
!isMd5OrSha1(filename);
432437
}
433438

434439
public boolean isMd5OrSha1(String filename) {

sonar-text-plugin/src/main/java/org/sonar/plugins/common/TextAndSecretsSensor.java

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ public void execute(SensorContext sensorContext) {
6767
return;
6868
}
6969

70-
BinaryFilePredicate binaryFilePredicate = binaryFilePredicate(sensorContext);
71-
List<InputFile> allInputFiles = getAllInputFiles(sensorContext, binaryFilePredicate);
70+
NotBinaryFilePredicate notBinaryFilePredicate = binaryFilePredicate(sensorContext);
71+
List<InputFile> allInputFiles = getAllInputFiles(sensorContext, notBinaryFilePredicate);
7272
if (allInputFiles.isEmpty()) {
7373
return;
7474
}
@@ -83,7 +83,7 @@ public void execute(SensorContext sensorContext) {
8383
cancelled = true;
8484
break;
8585
}
86-
analyze(sensorContext, activeChecks, inputFile, binaryFilePredicate);
86+
analyze(sensorContext, activeChecks, inputFile, notBinaryFilePredicate);
8787
progressReport.nextFile();
8888
}
8989
} finally {
@@ -96,27 +96,25 @@ public void execute(SensorContext sensorContext) {
9696

9797
}
9898

99-
private static BinaryFilePredicate binaryFilePredicate(SensorContext sensorContext) {
100-
return new BinaryFilePredicate(sensorContext.config().getStringArray(TextAndSecretsSensor.EXCLUDED_FILE_SUFFIXES_KEY));
99+
private static NotBinaryFilePredicate binaryFilePredicate(SensorContext sensorContext) {
100+
return new NotBinaryFilePredicate(sensorContext.config().getStringArray(TextAndSecretsSensor.EXCLUDED_FILE_SUFFIXES_KEY));
101101
}
102102

103-
private static List<InputFile> getAllInputFiles(SensorContext sensorContext, BinaryFilePredicate binaryFilePredicate) {
103+
private static List<InputFile> getAllInputFiles(SensorContext sensorContext, NotBinaryFilePredicate notBinaryFilePredicate) {
104104
List<InputFile> allInputFiles = new ArrayList<>();
105105
FileSystem fileSystem = sensorContext.fileSystem();
106-
for (InputFile inputFile : fileSystem.inputFiles(fileSystem.predicates().all())) {
107-
if (!binaryFilePredicate.hasBinaryFileName(inputFile.filename())) {
108-
allInputFiles.add(inputFile);
109-
}
106+
for (InputFile inputFile : fileSystem.inputFiles(notBinaryFilePredicate)) {
107+
allInputFiles.add(inputFile);
110108
}
111109
return allInputFiles;
112110
}
113111

114-
private void analyze(SensorContext sensorContext, List<Check> activeChecks, InputFile inputFile, BinaryFilePredicate binaryFilePredicate) {
115-
if (!binaryFilePredicate.hasBinaryFileName(inputFile.filename())) {
112+
private void analyze(SensorContext sensorContext, List<Check> activeChecks, InputFile inputFile, NotBinaryFilePredicate notBinaryFilePredicate) {
113+
if (notBinaryFilePredicate.apply(inputFile)) {
116114
try {
117115
InputFileContext inputFileContext = new InputFileContext(sensorContext, inputFile);
118116
if (inputFileContext.hasNonTextCharacters()) {
119-
excludeBinaryFileExtension(binaryFilePredicate, inputFile);
117+
excludeBinaryFileExtension(notBinaryFilePredicate, inputFile);
120118
} else {
121119
for (Check check : activeChecks) {
122120
check.analyze(inputFileContext);
@@ -128,10 +126,10 @@ private void analyze(SensorContext sensorContext, List<Check> activeChecks, Inpu
128126
}
129127
}
130128

131-
private void excludeBinaryFileExtension(BinaryFilePredicate binaryFilePredicate, InputFile inputFile) {
132-
String extension = BinaryFilePredicate.extension(inputFile.filename());
129+
private void excludeBinaryFileExtension(NotBinaryFilePredicate notBinaryFilePredicate, InputFile inputFile) {
130+
String extension = NotBinaryFilePredicate.extension(inputFile.filename());
133131
if (extension != null) {
134-
binaryFilePredicate.addBinaryFileExtension(extension);
132+
notBinaryFilePredicate.addBinaryFileExtension(extension);
135133
LOG.warn("'{}' was added to the binary file filter because the file '{}' is a binary file.", extension, inputFile);
136134
if (displayHelpAboutExcludingBinaryFile) {
137135
displayHelpAboutExcludingBinaryFile = false;

sonar-text-plugin/src/test/java/org/sonar/plugins/common/BinaryFilePredicateTest.java

Lines changed: 0 additions & 70 deletions
This file was deleted.
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
/*
2+
* SonarQube Text Plugin
3+
* Copyright (C) 2021-2023 SonarSource SA
4+
* mailto:info AT sonarsource DOT com
5+
*
6+
* This program is free software; you can redistribute it and/or
7+
* modify it under the terms of the GNU Lesser General Public
8+
* License as published by the Free Software Foundation; either
9+
* version 3 of the License, or (at your option) any later version.
10+
*
11+
* This program is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14+
* Lesser General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU Lesser General Public License
17+
* along with this program; if not, write to the Free Software Foundation,
18+
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19+
*/
20+
package org.sonar.plugins.common;
21+
22+
import java.nio.file.Path;
23+
import org.junit.jupiter.api.Test;
24+
import org.sonar.api.batch.fs.InputFile;
25+
26+
import static org.assertj.core.api.Assertions.assertThat;
27+
28+
class NotBinaryFilePredicateTest {
29+
30+
@Test
31+
void all_values() {
32+
NotBinaryFilePredicate predicate = new NotBinaryFilePredicate(".foo", ".foo.bar", "_my_suffix", "", "oo.");
33+
assertThat(predicate.apply(inputFile("foo.foo"))).isFalse();
34+
assertThat(predicate.apply(inputFile("foo.exe"))).isFalse();
35+
assertThat(predicate.apply(inputFile("foo.EXE"))).isFalse();
36+
assertThat(predicate.apply(inputFile("foo.UNKNOWN"))).isTrue();
37+
assertThat(predicate.apply(inputFile("foo.txt"))).isTrue();
38+
assertThat(predicate.apply(inputFile("boom.foo.bar"))).isFalse();
39+
assertThat(predicate.apply(inputFile("boom.foo.other"))).isTrue();
40+
assertThat(predicate.apply(inputFile("boom_suffix"))).isTrue();
41+
assertThat(predicate.apply(inputFile("boom_my_suffix"))).isFalse();
42+
assertThat(predicate.apply(inputFile("_"))).isTrue();
43+
assertThat(predicate.apply(inputFile("foo."))).isFalse();
44+
assertThat(predicate.apply(inputFile("bar."))).isTrue();
45+
assertThat(predicate.apply(inputFile(""))).isTrue();
46+
assertThat(predicate.apply(inputFile("cacerts"))).isFalse();
47+
assertThat(predicate.apply(inputFile("ec54a0d82c5938c"))).isTrue();
48+
assertThat(predicate.apply(inputFile("EC54A0D82C5938C"))).isTrue();
49+
assertThat(predicate.apply(inputFile("9f17e505386ec54a0d82c5938ca15805"))).isFalse();
50+
assertThat(predicate.apply(inputFile("9F17E505386EC54A0D82C5938CA15805"))).isFalse();
51+
assertThat(predicate.apply(inputFile("abac0000111122222233333444455555"))).isTrue();
52+
assertThat(predicate.apply(inputFile("Boum123Boum456Boum789Boum123Boum"))).isTrue();
53+
assertThat(predicate.apply(inputFile("9f17e505386ec54a0d82c5938ca15805.txt"))).isTrue();
54+
assertThat(predicate.apply(inputFile("71c686d48275f9b552946aedf50d67e218064cbd"))).isFalse();
55+
assertThat(predicate.apply(inputFile("9dc59c1853a762fb0fe420b0e18b7861b0045f291f8dd75ab9e9d578a31e729a"))).isFalse();
56+
assertThat(predicate.apply(inputFile("faccb33a9627c7269e7ce4e4a37beb2809410a90612977b61944b1680411f39eb2b773adf539d320c3b48c1a0ddfc9b01fc0673a1d893cdb30878b7432f0ebc6")))
57+
.isFalse();
58+
predicate.addBinaryFileExtension("txt");
59+
assertThat(predicate.apply(inputFile("foo.txt"))).isFalse();
60+
}
61+
62+
private static InputFile inputFile(String filename) {
63+
return TestUtils.inputFile(Path.of(filename), "// empty content");
64+
}
65+
66+
@Test
67+
void extensions() {
68+
assertThat(NotBinaryFilePredicate.extension("")).isNull();
69+
assertThat(NotBinaryFilePredicate.extension("foo.txt")).isEqualTo("txt");
70+
assertThat(NotBinaryFilePredicate.extension("foo")).isNull();
71+
assertThat(NotBinaryFilePredicate.extension(".txt")).isEqualTo("txt");
72+
assertThat(NotBinaryFilePredicate.extension("foo.bar.c")).isEqualTo("c");
73+
assertThat(NotBinaryFilePredicate.extension("...c")).isEqualTo("c");
74+
assertThat(NotBinaryFilePredicate.extension("foo.")).isNull();
75+
assertThat(NotBinaryFilePredicate.extension("foo.bar.")).isNull();
76+
;
77+
}
78+
79+
}

0 commit comments

Comments
 (0)