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 01/13] 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 00000000000..c0be3fcf550 --- /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 00000000000..33df8514723 --- /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 a9bd6d7ec8b..18243cbc2bd 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 33036f91e98..f23022f312d 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 5c9bbebfec3fdf8fefc1f14e18ab7a7b56190e72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9mie=20B=C3=A9nard?= Date: Fri, 17 Apr 2026 08:51:00 +0200 Subject: [PATCH 02/13] fix incorrect test --- .../default/src/main/java/checks/FileHeaderCheck/Class4.java | 2 +- .../default/src/main/java/checks/FileHeaderCheck/Regex5.java | 4 ++++ .../default/src/main/java/checks/FileHeaderCheck/Regex6.java | 4 ++++ 3 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Regex5.java create mode 100644 java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Regex6.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 index c0be3fcf550..ccc88d466cc 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-test-sources/default/src/main/java/checks/FileHeaderCheck/Regex5.java b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Regex5.java new file mode 100644 index 00000000000..ef1f89c8c91 --- /dev/null +++ b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Regex5.java @@ -0,0 +1,4 @@ +package checks.FileHeaderCheck; + +public class Regex5 { +} diff --git a/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Regex6.java b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Regex6.java new file mode 100644 index 00000000000..4b65833236f --- /dev/null +++ b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Regex6.java @@ -0,0 +1,4 @@ +package checks.FileHeaderCheck; + +public class Regex6 { +} From c0f685877588dda346e8bbec1b2e57cc193f3462 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9mie=20B=C3=A9nard?= Date: Fri, 17 Apr 2026 08:51:53 +0200 Subject: [PATCH 03/13] add tests for regex --- .../default/src/main/java/checks/FileHeaderCheck/Regex5.java | 2 ++ .../default/src/main/java/checks/FileHeaderCheck/Regex6.java | 1 + 2 files changed, 3 insertions(+) diff --git a/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Regex5.java b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Regex5.java index ef1f89c8c91..470b095a858 100644 --- a/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Regex5.java +++ b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Regex5.java @@ -1,4 +1,6 @@ + package checks.FileHeaderCheck; public class Regex5 { } +// Compliant diff --git a/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Regex6.java b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Regex6.java index 4b65833236f..e61c9a45031 100644 --- a/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Regex6.java +++ b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Regex6.java @@ -2,3 +2,4 @@ public class Regex6 { } +// Compliant From 0874843fc8b17154bb871d80fdd94ae3cbca9d86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9mie=20B=C3=A9nard?= Date: Fri, 17 Apr 2026 08:53:09 +0200 Subject: [PATCH 04/13] modify check so that it accepts an empty header in both cases (regex or not) --- .../sonar/java/checks/FileHeaderCheck.java | 25 +++++++++++-------- .../java/checks/FileHeaderCheckTest.java | 14 +++++++++++ 2 files changed, 28 insertions(+), 11 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 18243cbc2bd..f85434a3009 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 @@ -16,6 +16,7 @@ */ package org.sonar.java.checks; +import java.util.Arrays; import org.sonar.check.Rule; import org.sonar.check.RuleProperty; import org.sonar.plugins.java.api.IssuableSubscriptionVisitor; @@ -58,18 +59,21 @@ public List nodesToVisit() { @Override public void setContext(JavaFileScannerContext context) { super.context = context; - if (isRegularExpression) { - if (searchPattern == null) { - try { - searchPattern = Pattern.compile(getHeaderFormat(), Pattern.DOTALL); - } catch (IllegalArgumentException e) { - throw new IllegalArgumentException("[" + getClass().getSimpleName() + "] Unable to compile the regular expression: " + headerFormat, e); + if (headerFormat.isEmpty()) { + expectedLines = new String[]{}; + isRegularExpression = false; + } else { + if (isRegularExpression) { + if (searchPattern == null) { + try { + searchPattern = Pattern.compile(getHeaderFormat(), Pattern.DOTALL); + } catch (IllegalArgumentException e) { + throw new IllegalArgumentException("[" + getClass().getSimpleName() + "] Unable to compile the regular expression: " + headerFormat, e); + } } + } else { + expectedLines = headerFormat.split("(?:\r)?\n|\r"); } - } else { - if (headerFormat.isEmpty()) { - expectedLines = new String[]{}; - } else {expectedLines = headerFormat.split("(?:\r)?\n|\r");} } visitFile(); } @@ -116,7 +120,6 @@ private static boolean matches(String[] expectedLines, List lines) { } else { result = false; } - return result; } 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 f23022f312d..ea34652c6fd 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 @@ -151,6 +151,20 @@ void regex() { .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/Regex4.java")) .withCheck(check) .verifyIssues(); + + check = new FileHeaderCheck(); + check.isRegularExpression = true; + CheckVerifier.newVerifier() + .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/Regex5.java")) + .withCheck(check) + .verifyNoIssues(); + + check = new FileHeaderCheck(); + check.isRegularExpression = true; + CheckVerifier.newVerifier() + .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/Regex6.java")) + .withCheck(check) + .verifyNoIssues(); } @Test From ce696137967d6c49a8f97defa8f4caf0b7939099 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9mie=20B=C3=A9nard?= Date: Fri, 17 Apr 2026 08:55:35 +0200 Subject: [PATCH 05/13] remove unused import --- .../src/main/java/org/sonar/java/checks/FileHeaderCheck.java | 1 - 1 file changed, 1 deletion(-) 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 f85434a3009..49d6062803a 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 @@ -16,7 +16,6 @@ */ package org.sonar.java.checks; -import java.util.Arrays; import org.sonar.check.Rule; import org.sonar.check.RuleProperty; import org.sonar.plugins.java.api.IssuableSubscriptionVisitor; From 73c9fc9343f43571f15cb204ccde5528141e44f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9mie=20B=C3=A9nard?= Date: Fri, 17 Apr 2026 10:09:49 +0200 Subject: [PATCH 06/13] add default header template --- .../java/org/sonar/java/checks/FileHeaderCheck.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 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 49d6062803a..465c14cd972 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 @@ -31,7 +31,14 @@ @Rule(key = "S1451") public class FileHeaderCheck extends IssuableSubscriptionVisitor { - private static final String DEFAULT_HEADER_FORMAT = ""; + private static final String DEFAULT_HEADER_FORMAT = """ + /* + * + * Copyright (c) - + * + * Please configure this header in your SonarCloud/SonarQube quality profile. + */ + """; private static final String MESSAGE = "Add or update the header of this file."; @RuleProperty( @@ -59,7 +66,7 @@ public List nodesToVisit() { public void setContext(JavaFileScannerContext context) { super.context = context; if (headerFormat.isEmpty()) { - expectedLines = new String[]{}; + expectedLines = new String[] {}; isRegularExpression = false; } else { if (isRegularExpression) { @@ -79,7 +86,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 dfabda9fc543d28a9950a6070efad2e7c64a5882 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9mie=20B=C3=A9nard?= Date: Fri, 17 Apr 2026 10:47:46 +0200 Subject: [PATCH 07/13] update tests accordingly to default header --- .../src/main/java/checks/FileHeaderCheck/Class6.java | 11 +++++++++++ .../org/sonar/java/checks/FileHeaderCheckTest.java | 10 ++++++++++ 2 files changed, 21 insertions(+) create mode 100644 java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Class6.java diff --git a/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Class6.java b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Class6.java new file mode 100644 index 00000000000..a6df19f738b --- /dev/null +++ b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Class6.java @@ -0,0 +1,11 @@ +/* + * + * Copyright (c) - + * + * Please configure this header in your SonarCloud/SonarQube quality profile. + */ +package checks.FileHeaderCheck; + +public class Class6 { +} +// Compliant (default header) 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 ea34652c6fd..2321be5a5b6 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 @@ -100,16 +100,24 @@ void test() { .verifyNoIssues(); check = new FileHeaderCheck(); + check.headerFormat = ""; CheckVerifier.newVerifier() .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/Class4.java")) .withCheck(check) .verifyNoIssues(); check = new FileHeaderCheck(); + check.headerFormat = ""; CheckVerifier.newVerifier() .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/Class5.java")) .withCheck(check) .verifyNoIssues(); + + check = new FileHeaderCheck(); + CheckVerifier.newVerifier() + .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/Class6.java")) + .withCheck(check) + .verifyNoIssues(); } @Test @@ -153,6 +161,7 @@ void regex() { .verifyIssues(); check = new FileHeaderCheck(); + check.headerFormat = ""; check.isRegularExpression = true; CheckVerifier.newVerifier() .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/Regex5.java")) @@ -160,6 +169,7 @@ void regex() { .verifyNoIssues(); check = new FileHeaderCheck(); + check.headerFormat = ""; check.isRegularExpression = true; CheckVerifier.newVerifier() .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/Regex6.java")) From 58d4bbf94614e556b14d25176e2d789d374cc3cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9mie=20B=C3=A9nard?= Date: Mon, 20 Apr 2026 15:46:21 +0200 Subject: [PATCH 08/13] refactor FileHeaderCheck to handle empty headerFormat correctly --- .../sonar/java/checks/FileHeaderCheck.java | 58 ++++++++----------- 1 file changed, 25 insertions(+), 33 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 465c14cd972..fd150b96c1e 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 @@ -31,14 +31,7 @@ @Rule(key = "S1451") public class FileHeaderCheck extends IssuableSubscriptionVisitor { - private static final String DEFAULT_HEADER_FORMAT = """ - /* - * - * Copyright (c) - - * - * Please configure this header in your SonarCloud/SonarQube quality profile. - */ - """; + private static final String DEFAULT_HEADER_FORMAT = ""; private static final String MESSAGE = "Add or update the header of this file."; @RuleProperty( @@ -54,7 +47,6 @@ public class FileHeaderCheck extends IssuableSubscriptionVisitor { defaultValue = "false") public boolean isRegularExpression = false; - private String[] expectedLines; private Pattern searchPattern = null; @Override @@ -65,40 +57,39 @@ public List nodesToVisit() { @Override public void setContext(JavaFileScannerContext context) { super.context = context; + if (headerFormat.isEmpty()) { - expectedLines = new String[] {}; - isRegularExpression = false; - } else { - if (isRegularExpression) { - if (searchPattern == null) { - try { - searchPattern = Pattern.compile(getHeaderFormat(), Pattern.DOTALL); - } catch (IllegalArgumentException e) { - throw new IllegalArgumentException("[" + getClass().getSimpleName() + "] Unable to compile the regular expression: " + headerFormat, e); - } - } - } else { - expectedLines = headerFormat.split("(?:\r)?\n|\r"); + checkExpectedLines(new String[] {}); + return; + } + + if (!isRegularExpression) { + String[] expectedLines = headerFormat.split("(?:\r)?\n|\r"); + checkExpectedLines(expectedLines); + return; + } + + if (searchPattern == null) { + try { + searchPattern = Pattern.compile(getHeaderFormat(), Pattern.DOTALL); + } catch (IllegalArgumentException e) { + throw new IllegalArgumentException("[" + getClass().getSimpleName() + "] Unable to compile the regular expression: " + headerFormat, e); } } - visitFile(); + checkRegularExpression(context.getFileContent()); } private String getHeaderFormat() { String format = headerFormat; - if (format.charAt(0) != '^') { + if(format.charAt(0) != '^') { format = "^" + format; } return format; } - private void visitFile() { - if (isRegularExpression) { - checkRegularExpression(context.getFileContent()); - } else { - if (!matches(expectedLines, context.getFileLines())) { - addIssueOnFile(MESSAGE); - } + private void checkExpectedLines(String[] expectedLines) { + if (!matches(expectedLines, context.getFileLines())) { + addIssueOnFile(MESSAGE); } } @@ -116,9 +107,9 @@ private static boolean matches(String[] expectedLines, List lines) { result = true; Iterator it = lines.iterator(); - for (int i = 0; i < expectedLines.length; i++) { + for (String expectedLine : expectedLines) { String line = it.next(); - if (!line.equals(expectedLines[i])) { + if (!line.equals(expectedLine)) { result = false; break; } @@ -126,6 +117,7 @@ private static boolean matches(String[] expectedLines, List lines) { } else { result = false; } + return result; } From 4ef68506ccf58faaa7a55845de08d9a5d3d70c07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9mie=20B=C3=A9nard?= Date: Mon, 20 Apr 2026 16:01:36 +0200 Subject: [PATCH 09/13] update test files names --- .../FileHeaderCheck/{Class4.java => ClassBlankLine.java} | 2 +- .../{Class5.java => ClassNoBlankLine.java} | 2 +- .../FileHeaderCheck/{Regex5.java => RegexBlankLine.java} | 2 +- .../{Regex6.java => RegexNoBlankLine.java} | 2 +- .../java/org/sonar/java/checks/FileHeaderCheckTest.java | 8 ++++---- 5 files changed, 8 insertions(+), 8 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%) rename java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/{Regex5.java => RegexBlankLine.java} (62%) rename java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/{Regex6.java => RegexNoBlankLine.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 ccc88d466cc..a1585fe069c 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 33df8514723..006c957bfc8 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-test-sources/default/src/main/java/checks/FileHeaderCheck/Regex5.java b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/RegexBlankLine.java similarity index 62% rename from java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Regex5.java rename to java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/RegexBlankLine.java index 470b095a858..0bfd9af84a5 100644 --- a/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Regex5.java +++ b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/RegexBlankLine.java @@ -1,6 +1,6 @@ package checks.FileHeaderCheck; -public class Regex5 { +public class RegexBlankLine { } // Compliant diff --git a/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Regex6.java b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/RegexNoBlankLine.java similarity index 60% rename from java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Regex6.java rename to java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/RegexNoBlankLine.java index e61c9a45031..8fd144ee9be 100644 --- a/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Regex6.java +++ b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/RegexNoBlankLine.java @@ -1,5 +1,5 @@ package checks.FileHeaderCheck; -public class Regex6 { +public class RegexNoBlankLine { } // 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 2321be5a5b6..301aafa4761 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 @@ -102,14 +102,14 @@ void test() { check = new FileHeaderCheck(); check.headerFormat = ""; CheckVerifier.newVerifier() - .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/Class4.java")) + .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/ClassBlankLine.java")) .withCheck(check) .verifyNoIssues(); check = new FileHeaderCheck(); check.headerFormat = ""; CheckVerifier.newVerifier() - .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/Class5.java")) + .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/ClassNoBlankLine.java")) .withCheck(check) .verifyNoIssues(); @@ -164,7 +164,7 @@ void regex() { check.headerFormat = ""; check.isRegularExpression = true; CheckVerifier.newVerifier() - .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/Regex5.java")) + .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/RegexBlankLine.java")) .withCheck(check) .verifyNoIssues(); @@ -172,7 +172,7 @@ void regex() { check.headerFormat = ""; check.isRegularExpression = true; CheckVerifier.newVerifier() - .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/Regex6.java")) + .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/RegexNoBlankLine.java")) .withCheck(check) .verifyNoIssues(); } From 07834dfb5eeb58ce32e5c1c9383ad18d8d477b22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9mie=20B=C3=A9nard?= Date: Mon, 20 Apr 2026 16:38:56 +0200 Subject: [PATCH 10/13] Reuse same tests files for regex and normal case --- .../main/java/checks/FileHeaderCheck/RegexBlankLine.java | 6 ------ .../main/java/checks/FileHeaderCheck/RegexNoBlankLine.java | 5 ----- .../java/org/sonar/java/checks/FileHeaderCheckTest.java | 6 +++--- 3 files changed, 3 insertions(+), 14 deletions(-) delete mode 100644 java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/RegexBlankLine.java delete mode 100644 java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/RegexNoBlankLine.java diff --git a/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/RegexBlankLine.java b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/RegexBlankLine.java deleted file mode 100644 index 0bfd9af84a5..00000000000 --- a/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/RegexBlankLine.java +++ /dev/null @@ -1,6 +0,0 @@ - -package checks.FileHeaderCheck; - -public class RegexBlankLine { -} -// Compliant diff --git a/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/RegexNoBlankLine.java b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/RegexNoBlankLine.java deleted file mode 100644 index 8fd144ee9be..00000000000 --- a/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/RegexNoBlankLine.java +++ /dev/null @@ -1,5 +0,0 @@ -package checks.FileHeaderCheck; - -public class RegexNoBlankLine { -} -// 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 301aafa4761..ce63e249b4a 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 @@ -115,7 +115,7 @@ void test() { check = new FileHeaderCheck(); CheckVerifier.newVerifier() - .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/Class6.java")) + .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/ClassDefaultHeader.java")) .withCheck(check) .verifyNoIssues(); } @@ -164,7 +164,7 @@ void regex() { check.headerFormat = ""; check.isRegularExpression = true; CheckVerifier.newVerifier() - .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/RegexBlankLine.java")) + .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/ClassBlankLine.java")) .withCheck(check) .verifyNoIssues(); @@ -172,7 +172,7 @@ void regex() { check.headerFormat = ""; check.isRegularExpression = true; CheckVerifier.newVerifier() - .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/RegexNoBlankLine.java")) + .onFile(mainCodeSourcesPath("checks/FileHeaderCheck/ClassNoBlankLine.java")) .withCheck(check) .verifyNoIssues(); } From 5ab2f12449eeb705f48b3fc9938b5369163ee29a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9mie=20B=C3=A9nard?= Date: Mon, 20 Apr 2026 16:39:30 +0200 Subject: [PATCH 11/13] Rename Class6 into ClassDefaultHeader --- .../FileHeaderCheck/{Class6.java => ClassDefaultHeader.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/{Class6.java => ClassDefaultHeader.java} (87%) diff --git a/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Class6.java b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/ClassDefaultHeader.java similarity index 87% rename from java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Class6.java rename to java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/ClassDefaultHeader.java index a6df19f738b..0765af43edc 100644 --- a/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/Class6.java +++ b/java-checks-test-sources/default/src/main/java/checks/FileHeaderCheck/ClassDefaultHeader.java @@ -6,6 +6,6 @@ */ package checks.FileHeaderCheck; -public class Class6 { +public class ClassDefaultHeader { } // Compliant (default header) From 689e1ad713beae8f1e331438dcf946772535727e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9mie=20B=C3=A9nard?= Date: Tue, 21 Apr 2026 09:56:42 +0200 Subject: [PATCH 12/13] remove S1451 from the list of issues since it no longer produces an issue after the empty header fix --- .../src/test/java/org/sonar/plugins/java/JavaSensorTest.java | 2 -- 1 file changed, 2 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 04695b3f062..29dda1e91a8 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 @@ -429,8 +429,6 @@ 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) From ba3fca54e96c556280c7bbb59748014b0e2ef696 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9mie=20B=C3=A9nard?= Date: Tue, 21 Apr 2026 14:20:35 +0200 Subject: [PATCH 13/13] replace S1451 by S1166 in JavaSensorTest --- .../src/test/java/org/sonar/plugins/java/JavaSensorTest.java | 2 ++ 1 file changed, 2 insertions(+) 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 29dda1e91a8..76b3573c242 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 @@ -429,6 +429,8 @@ void do_not_filter_checks_when_no_autoscan() throws IOException { "CustomRepository:CustomMainCheck", "CustomRepository:CustomJspCheck", "CustomRepository:CustomTestCheck", + // not in SonarWay (CatchUsesExceptionWithContextCheck) + "java:S1166", // main check in SonarWay (DefaultPackageCheck) "java:S1220", // main check in SonarWay, not supported by autoscan (CombineCatchCheck)