Skip to content

Commit 92f27d6

Browse files
Add mechanism to enable checks on main and test code at the same time (#4770)
1 parent b0515a4 commit 92f27d6

2 files changed

Lines changed: 18 additions & 5 deletions

File tree

sonar-java-plugin/src/main/java/org/sonar/plugins/java/CheckList.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package org.sonar.plugins.java;
2121

2222
import java.util.Arrays;
23+
import java.util.Comparator;
2324
import java.util.List;
2425
import java.util.Set;
2526
import java.util.stream.Collectors;
@@ -1380,8 +1381,12 @@ public final class CheckList {
13801381
TooManyAssertionsCheck.class,
13811382
UnusedTestRuleCheck.class);
13821383

1383-
private static final List<Class<?>> ALL_CHECKS = Stream.of(JAVA_MAIN_CHECKS, JAVA_TEST_CHECKS)
1384-
.flatMap(List::stream).collect(Collectors.toList());
1384+
private static final List<Class<? extends JavaCheck>> JAVA_MAIN_AND_TEST_CHECKS = Arrays.asList();
1385+
1386+
private static final List<Class<?>> ALL_CHECKS = Stream.of(JAVA_MAIN_CHECKS, JAVA_MAIN_AND_TEST_CHECKS, JAVA_TEST_CHECKS)
1387+
.flatMap(List::stream)
1388+
.sorted(Comparator.comparing(Class::getSimpleName))
1389+
.collect(Collectors.toList());
13851390

13861391
private static final Set<Class<? extends JavaCheck>> JAVA_CHECKS_NOT_WORKING_FOR_AUTOSCAN = Set.of(
13871392
// Symbolic executions rules are not in this list because they are dynamically excluded
@@ -1439,15 +1444,22 @@ public static List<Class<?>> getChecks() {
14391444
}
14401445

14411446
public static List<Class<? extends JavaCheck>> getJavaChecks() {
1442-
return JAVA_MAIN_CHECKS;
1447+
return sortedJoin(JAVA_MAIN_CHECKS, JAVA_MAIN_AND_TEST_CHECKS);
14431448
}
14441449

14451450
public static List<Class<? extends JavaCheck>> getJavaTestChecks() {
1446-
return JAVA_TEST_CHECKS;
1451+
return sortedJoin(JAVA_MAIN_AND_TEST_CHECKS, JAVA_TEST_CHECKS);
14471452
}
14481453

14491454
public static Set<Class<? extends JavaCheck>> getJavaChecksNotWorkingForAutoScan() {
14501455
return JAVA_CHECKS_NOT_WORKING_FOR_AUTOSCAN;
14511456
}
14521457

1458+
@SafeVarargs
1459+
private static List<Class<? extends JavaCheck>> sortedJoin(List<Class<? extends JavaCheck>>... lists) {
1460+
return Arrays.stream(lists)
1461+
.flatMap(List::stream)
1462+
.sorted(Comparator.comparing(Class::getSimpleName))
1463+
.toList();
1464+
}
14531465
}

sonar-java-plugin/src/test/java/org/sonar/plugins/java/CheckListTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ void enforce_CheckList_registration() {
194194
@Test
195195
void rules_targeting_tests_should_have_tests_tag() throws Exception {
196196
Set<Class<? extends JavaCheck>> testChecks = new HashSet<>(CheckList.getJavaTestChecks());
197+
Set<Class<? extends JavaCheck>> mainChecks = new HashSet<>(CheckList.getJavaChecks());
197198

198199
for (Class<?> cls : CheckList.getChecks()) {
199200
String key = AnnotationUtils.getAnnotation(cls, Rule.class).key();
@@ -205,7 +206,7 @@ void rules_targeting_tests_should_have_tests_tag() throws Exception {
205206

206207
if (!"deprecated".equals(metadata.status)) {
207208
// deprecated rules usually have no tags
208-
if (testChecks.contains(cls) || "S3414".equals(key)) {
209+
if ((testChecks.contains(cls) && !mainChecks.contains(cls)) || "S3414".equals(key)) {
209210
assertThat(metadata.tags)
210211
.as("Rule " + key + " is targeting tests sources and should contain the 'tests' tag.")
211212
.contains("tests");

0 commit comments

Comments
 (0)