From 5f47ccc0d657495c4da0c8e0be43193b0d051e7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9mie=20B=C3=A9nard?= Date: Thu, 16 Apr 2026 16:10:49 +0200 Subject: [PATCH 1/6] modify S1451 to accept empty headerFormat --- .../src/main/java/checks/FileHeaderCheck/Class4.java | 7 +++++++ .../src/main/java/checks/FileHeaderCheck/Class5.java | 5 +++++ .../java/org/sonar/java/checks/FileHeaderCheck.java | 4 +++- .../org/sonar/java/checks/FileHeaderCheckTest.java | 12 ++++++++++++ 4 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Class4.java create mode 100644 java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Class5.java diff --git a/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Class4.java b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Class4.java new file mode 100644 index 0000000000..c0be3fcf55 --- /dev/null +++ b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Class4.java @@ -0,0 +1,7 @@ + +package checks.FileHeaderCheck; + +public class Class4 { +} +// Noncompliant {{Add or update the header of this file.}} + diff --git a/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Class5.java b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Class5.java new file mode 100644 index 0000000000..33df851472 --- /dev/null +++ b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Class5.java @@ -0,0 +1,5 @@ +package checks.FileHeaderCheck; + +public class Class5 { +} +// Compliant diff --git a/java-checks/src/main/java/org/sonar/java/checks/FileHeaderCheck.java b/java-checks/src/main/java/org/sonar/java/checks/FileHeaderCheck.java index a9bd6d7ec8..18243cbc2b 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/FileHeaderCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/FileHeaderCheck.java @@ -67,7 +67,9 @@ public void setContext(JavaFileScannerContext context) { } } } else { - expectedLines = headerFormat.split("(?:\r)?\n|\r"); + if (headerFormat.isEmpty()) { + expectedLines = new String[]{}; + } else {expectedLines = headerFormat.split("(?:\r)?\n|\r");} } visitFile(); } diff --git a/java-checks/src/test/java/org/sonar/java/checks/FileHeaderCheckTest.java b/java-checks/src/test/java/org/sonar/java/checks/FileHeaderCheckTest.java index 33036f91e9..f23022f312 100644 --- a/java-checks/src/test/java/org/sonar/java/checks/FileHeaderCheckTest.java +++ b/java-checks/src/test/java/org/sonar/java/checks/FileHeaderCheckTest.java @@ -98,6 +98,18 @@ void test() { .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/Class3.java")) .withCheck(check) .verifyNoIssues(); + + check = new FileHeaderCheck(); + CheckVerifier.newVerifier() + .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/Class4.java")) + .withCheck(check) + .verifyNoIssues(); + + check = new FileHeaderCheck(); + CheckVerifier.newVerifier() + .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/Class5.java")) + .withCheck(check) + .verifyNoIssues(); } @Test From a3f72fd450e1cebbb7c1858b6167ff9aecbca288 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9mie=20B=C3=A9nard?= Date: Fri, 17 Apr 2026 09:13:49 +0200 Subject: [PATCH 2/6] fix incorrect test --- .../default/src/main/java/checks/FileHeaderCheck/Class4.java | 2 +- .../src/main/java/org/sonar/java/checks/FileHeaderCheck.java | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Class4.java b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Class4.java index c0be3fcf55..ccc88d466c 100644 --- a/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Class4.java +++ b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Class4.java @@ -3,5 +3,5 @@ public class Class4 { } -// Noncompliant {{Add or update the header of this file.}} +// Compliant diff --git a/java-checks/src/main/java/org/sonar/java/checks/FileHeaderCheck.java b/java-checks/src/main/java/org/sonar/java/checks/FileHeaderCheck.java index 18243cbc2b..ecc2c10a57 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/FileHeaderCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/FileHeaderCheck.java @@ -69,7 +69,9 @@ public void setContext(JavaFileScannerContext context) { } else { if (headerFormat.isEmpty()) { expectedLines = new String[]{}; - } else {expectedLines = headerFormat.split("(?:\r)?\n|\r");} + } else { + expectedLines = headerFormat.split("(?:\r)?\n|\r"); + } } visitFile(); } From 4eb12547645991b4c2280f62eeee5d739619bba5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9mie=20B=C3=A9nard?= Date: Fri, 17 Apr 2026 09:15:49 +0200 Subject: [PATCH 3/6] fix formatting --- .../src/main/java/org/sonar/java/checks/FileHeaderCheck.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java-checks/src/main/java/org/sonar/java/checks/FileHeaderCheck.java b/java-checks/src/main/java/org/sonar/java/checks/FileHeaderCheck.java index ecc2c10a57..9212668213 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/FileHeaderCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/FileHeaderCheck.java @@ -68,7 +68,7 @@ public void setContext(JavaFileScannerContext context) { } } else { if (headerFormat.isEmpty()) { - expectedLines = new String[]{}; + expectedLines = new String[] {}; } else { expectedLines = headerFormat.split("(?:\r)?\n|\r"); } @@ -78,7 +78,7 @@ public void setContext(JavaFileScannerContext context) { private String getHeaderFormat() { String format = headerFormat; - if(format.charAt(0) != '^') { + if (format.charAt(0) != '^') { format = "^" + format; } return format; From f0a102453c105d45b0c4915df7767685883cc6e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9mie=20B=C3=A9nard?= Date: Mon, 20 Apr 2026 10:25:48 +0200 Subject: [PATCH 4/6] remove S1451 from the list of expected issues in do_not_filter_checks_when_no_autoscan() --- .../sonar/plugins/java/JavaSensorTest.java | 56 +++++++++---------- 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/sonar-java-plugin/src/test/java/org/sonar/plugins/java/JavaSensorTest.java b/sonar-java-plugin/src/test/java/org/sonar/plugins/java/JavaSensorTest.java index 04695b3f06..c618ac184c 100644 --- a/sonar-java-plugin/src/test/java/org/sonar/plugins/java/JavaSensorTest.java +++ b/sonar-java-plugin/src/test/java/org/sonar/plugins/java/JavaSensorTest.java @@ -374,18 +374,20 @@ void custom_performance_measure_file_path_can_be_empty() throws IOException { assertThat(new String(Files.readAllBytes(defaultPerformanceFile), UTF_8)).contains("\"JavaSensor\""); } - /*@Test - void test_java_version_automatically_accepts_enablePreview_flag_when_maximum_version() throws IOException { - MapSettings settings = new MapSettings(); - settings.setProperty("sonar.java.source", JavaVersionImpl.MAX_SUPPORTED); - settings.setProperty("sonar.java.enablePreview", "True"); - Path workDir = tmp.newFolder().toPath(); - executeJavaSensorForPerformanceMeasure(settings, workDir); - assertThat(logTester.logs(Level.WARN)).isEmpty(); - List infoLogs = logTester.logs(Level.INFO); - assertThat(infoLogs).contains("Configured Java source version (sonar.java.source): " + JavaVersionImpl.MAX_SUPPORTED + - ", preview features enabled (sonar.java.enablePreview): true"); - }*/ + /* + * @Test + * void test_java_version_automatically_accepts_enablePreview_flag_when_maximum_version() throws IOException { + * MapSettings settings = new MapSettings(); + * settings.setProperty("sonar.java.source", JavaVersionImpl.MAX_SUPPORTED); + * settings.setProperty("sonar.java.enablePreview", "True"); + * Path workDir = tmp.newFolder().toPath(); + * executeJavaSensorForPerformanceMeasure(settings, workDir); + * assertThat(logTester.logs(Level.WARN)).isEmpty(); + * List infoLogs = logTester.logs(Level.INFO); + * assertThat(infoLogs).contains("Configured Java source version (sonar.java.source): " + JavaVersionImpl.MAX_SUPPORTED + + * ", preview features enabled (sonar.java.enablePreview): true"); + * } + */ @Test void test_java_version_automatically_disables_enablePreview_flag_when_version_is_less_than_maximum_version() throws IOException { @@ -397,8 +399,7 @@ void test_java_version_automatically_disables_enablePreview_flag_when_version_is executeJavaSensorForPerformanceMeasure(settings, workDir); assertThat(logTester.logs(Level.WARN)).contains( "sonar.java.enablePreview is set but will be discarded as the Java version is less than the max supported version (" + - version + " < " + JavaVersionImpl.MAX_SUPPORTED + ")" - ); + version + " < " + JavaVersionImpl.MAX_SUPPORTED + ")"); List infoLogs = logTester.logs(Level.INFO); assertThat(infoLogs).contains("Configured Java source version (sonar.java.source): " + version + ", preview features enabled (sonar.java.enablePreview): false"); @@ -412,8 +413,7 @@ void getJavaVersion_does_not_try_to_check_consistency_when_sonar_java_source_is_ Path workDir = tmp.newFolder().toPath(); executeJavaSensorForPerformanceMeasure(settings, workDir); assertThat(logTester.logs(Level.WARN)).noneMatch( - log -> log.startsWith("sonar.java.enablePreview is set but will be discarded as the Java version is less than the max supported version") - ); + log -> log.startsWith("sonar.java.enablePreview is set but will be discarded as the Java version is less than the max supported version")); List infoLogs = logTester.logs(Level.INFO); assertThat(infoLogs).noneMatch(log -> log.startsWith("Configured Java source version (sonar.java.source):")); } @@ -429,15 +429,12 @@ void do_not_filter_checks_when_no_autoscan() throws IOException { "CustomRepository:CustomMainCheck", "CustomRepository:CustomJspCheck", "CustomRepository:CustomTestCheck", - // not in SonarWay (FileHeaderCheck) - "java:S1451", // main check in SonarWay (DefaultPackageCheck) "java:S1220", // main check in SonarWay, not supported by autoscan (CombineCatchCheck) "java:S2147", // test check in SonarWay (NoTestInTestClassCheck) - "java:S2187" - ); + "java:S2187"); } @Test @@ -451,16 +448,15 @@ void filter_checks_when_autoscan_true() throws IOException { // main check in SonarWay "java:S1220", // test check in SonarWay - "java:S2187" - ).doesNotContain( - "CustomRepository:CustomMainCheck", - "CustomRepository:CustomJspCheck", - "CustomRepository:CustomTestCheck", - // main check in SonarWay, not supported by autoscan (CombineCatchCheck) - "java:S2147", - // not in SonarWay (FileHeaderCheck) - "java:S1451" - ); + "java:S2187") + .doesNotContain( + "CustomRepository:CustomMainCheck", + "CustomRepository:CustomJspCheck", + "CustomRepository:CustomTestCheck", + // main check in SonarWay, not supported by autoscan (CombineCatchCheck) + "java:S2147", + // not in SonarWay (FileHeaderCheck) + "java:S1451"); } @Test From a7d266ff6a78e9c129c5c94e8ed9ea34d1c0469e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9mie=20B=C3=A9nard?= Date: Mon, 20 Apr 2026 10:28:25 +0200 Subject: [PATCH 5/6] remove commented test --- .../org/sonar/plugins/java/JavaSensorTest.java | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/sonar-java-plugin/src/test/java/org/sonar/plugins/java/JavaSensorTest.java b/sonar-java-plugin/src/test/java/org/sonar/plugins/java/JavaSensorTest.java index c618ac184c..839e6f8c39 100644 --- a/sonar-java-plugin/src/test/java/org/sonar/plugins/java/JavaSensorTest.java +++ b/sonar-java-plugin/src/test/java/org/sonar/plugins/java/JavaSensorTest.java @@ -374,21 +374,6 @@ void custom_performance_measure_file_path_can_be_empty() throws IOException { assertThat(new String(Files.readAllBytes(defaultPerformanceFile), UTF_8)).contains("\"JavaSensor\""); } - /* - * @Test - * void test_java_version_automatically_accepts_enablePreview_flag_when_maximum_version() throws IOException { - * MapSettings settings = new MapSettings(); - * settings.setProperty("sonar.java.source", JavaVersionImpl.MAX_SUPPORTED); - * settings.setProperty("sonar.java.enablePreview", "True"); - * Path workDir = tmp.newFolder().toPath(); - * executeJavaSensorForPerformanceMeasure(settings, workDir); - * assertThat(logTester.logs(Level.WARN)).isEmpty(); - * List infoLogs = logTester.logs(Level.INFO); - * assertThat(infoLogs).contains("Configured Java source version (sonar.java.source): " + JavaVersionImpl.MAX_SUPPORTED + - * ", preview features enabled (sonar.java.enablePreview): true"); - * } - */ - @Test void test_java_version_automatically_disables_enablePreview_flag_when_version_is_less_than_maximum_version() throws IOException { MapSettings settings = new MapSettings(); From fb81953a059d3ffc9618fdd065e5edb6a4998a58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9mie=20B=C3=A9nard?= Date: Mon, 20 Apr 2026 13:45:50 +0200 Subject: [PATCH 6/6] rename tests with more explicit names --- .../FileHeaderCheck/{Class4.java => ClassBlankLine.java} | 2 +- .../FileHeaderCheck/{Class5.java => ClassNoBlankLine.java} | 2 +- .../test/java/org/sonar/java/checks/FileHeaderCheckTest.java | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) rename java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/{Class4.java => ClassBlankLine.java} (62%) rename java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/{Class5.java => ClassNoBlankLine.java} (60%) diff --git a/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Class4.java b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/ClassBlankLine.java similarity index 62% rename from java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Class4.java rename to java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/ClassBlankLine.java index ccc88d466c..a1585fe069 100644 --- a/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Class4.java +++ b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/ClassBlankLine.java @@ -1,7 +1,7 @@ package checks.FileHeaderCheck; -public class Class4 { +public class ClassBlankLine { } // Compliant diff --git a/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Class5.java b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/ClassNoBlankLine.java similarity index 60% rename from java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Class5.java rename to java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/ClassNoBlankLine.java index 33df851472..006c957bfc 100644 --- a/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Class5.java +++ b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/ClassNoBlankLine.java @@ -1,5 +1,5 @@ package checks.FileHeaderCheck; -public class Class5 { +public class ClassNoBlankLine { } // Compliant diff --git a/java-checks/src/test/java/org/sonar/java/checks/FileHeaderCheckTest.java b/java-checks/src/test/java/org/sonar/java/checks/FileHeaderCheckTest.java index f23022f312..fef5df2fa4 100644 --- a/java-checks/src/test/java/org/sonar/java/checks/FileHeaderCheckTest.java +++ b/java-checks/src/test/java/org/sonar/java/checks/FileHeaderCheckTest.java @@ -101,13 +101,13 @@ void test() { check = new FileHeaderCheck(); CheckVerifier.newVerifier() - .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/Class4.java")) + .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/ClassBlankLine.java")) .withCheck(check) .verifyNoIssues(); check = new FileHeaderCheck(); CheckVerifier.newVerifier() - .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/Class5.java")) + .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/ClassNoBlankLine.java")) .withCheck(check) .verifyNoIssues(); }