From cd10eed597c9ad53f709d23b6f65e83efa85a783 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 14 Aug 2024 16:29:31 +0000 Subject: [PATCH 01/32] Bump junit-jupiter.version from 5.10.3 to 5.11.0 Bumps `junit-jupiter.version` from 5.10.3 to 5.11.0. Updates `org.junit.jupiter:junit-jupiter-engine` from 5.10.3 to 5.11.0 - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.10.3...r5.11.0) Updates `org.junit.jupiter:junit-jupiter-api` from 5.10.3 to 5.11.0 - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.10.3...r5.11.0) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2fc02b74e..c80674044 100644 --- a/pom.xml +++ b/pom.xml @@ -280,7 +280,7 @@ 2.0.0 2.0.6.1 3.0.2 - 5.10.3 + 5.11.0 1.10.19 5.12.0 5.1 From 4101ef03ac46663014cc7771fa86f493751d3c4d Mon Sep 17 00:00:00 2001 From: guwirth Date: Fri, 16 Aug 2024 17:43:48 +0200 Subject: [PATCH 02/32] Prepare for next development iteration --- cxx-checks/pom.xml | 2 +- cxx-sensors/pom.xml | 2 +- cxx-squid-bridge/pom.xml | 2 +- cxx-squid/pom.xml | 2 +- cxx-sslr-toolkit/pom.xml | 2 +- cxx-sslr/pom.xml | 2 +- cxx-sslr/sslr-core/pom.xml | 2 +- cxx-sslr/sslr-testing-harness/pom.xml | 2 +- cxx-sslr/sslr-tests/pom.xml | 2 +- cxx-sslr/sslr-toolkit/pom.xml | 2 +- cxx-sslr/sslr-xpath/pom.xml | 2 +- integration-tests/pom.xml | 2 +- pom.xml | 2 +- sonar-cxx-plugin/pom.xml | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/cxx-checks/pom.xml b/cxx-checks/pom.xml index 3e2bf84c3..dc6608418 100644 --- a/cxx-checks/pom.xml +++ b/cxx-checks/pom.xml @@ -7,7 +7,7 @@ org.sonarsource.sonarqube-plugins.cxx cxx - 2.1.2-SNAPSHOT + 2.1.3-SNAPSHOT cxx-checks diff --git a/cxx-sensors/pom.xml b/cxx-sensors/pom.xml index 7aeb308b8..5586c6e0a 100644 --- a/cxx-sensors/pom.xml +++ b/cxx-sensors/pom.xml @@ -7,7 +7,7 @@ org.sonarsource.sonarqube-plugins.cxx cxx - 2.1.2-SNAPSHOT + 2.1.3-SNAPSHOT cxx-sensors diff --git a/cxx-squid-bridge/pom.xml b/cxx-squid-bridge/pom.xml index 5e7ca9103..215932763 100644 --- a/cxx-squid-bridge/pom.xml +++ b/cxx-squid-bridge/pom.xml @@ -7,7 +7,7 @@ org.sonarsource.sonarqube-plugins.cxx cxx - 2.1.2-SNAPSHOT + 2.1.3-SNAPSHOT cxx-squid-bridge diff --git a/cxx-squid/pom.xml b/cxx-squid/pom.xml index 78ab7901d..0a8c221b0 100644 --- a/cxx-squid/pom.xml +++ b/cxx-squid/pom.xml @@ -7,7 +7,7 @@ org.sonarsource.sonarqube-plugins.cxx cxx - 2.1.2-SNAPSHOT + 2.1.3-SNAPSHOT cxx-squid diff --git a/cxx-sslr-toolkit/pom.xml b/cxx-sslr-toolkit/pom.xml index 62db13a95..b112a52d7 100644 --- a/cxx-sslr-toolkit/pom.xml +++ b/cxx-sslr-toolkit/pom.xml @@ -6,7 +6,7 @@ org.sonarsource.sonarqube-plugins.cxx cxx - 2.1.2-SNAPSHOT + 2.1.3-SNAPSHOT cxx-sslr-toolkit diff --git a/cxx-sslr/pom.xml b/cxx-sslr/pom.xml index 34bcd1992..9e14d4a15 100644 --- a/cxx-sslr/pom.xml +++ b/cxx-sslr/pom.xml @@ -7,7 +7,7 @@ org.sonarsource.sonarqube-plugins.cxx cxx - 2.1.2-SNAPSHOT + 2.1.3-SNAPSHOT cxx-sslr diff --git a/cxx-sslr/sslr-core/pom.xml b/cxx-sslr/sslr-core/pom.xml index d7c944c69..4a1c0e24c 100644 --- a/cxx-sslr/sslr-core/pom.xml +++ b/cxx-sslr/sslr-core/pom.xml @@ -5,7 +5,7 @@ org.sonarsource.sonarqube-plugins.cxx cxx-sslr - 2.1.2-SNAPSHOT + 2.1.3-SNAPSHOT sslr-core diff --git a/cxx-sslr/sslr-testing-harness/pom.xml b/cxx-sslr/sslr-testing-harness/pom.xml index 4bf817191..e35684f05 100644 --- a/cxx-sslr/sslr-testing-harness/pom.xml +++ b/cxx-sslr/sslr-testing-harness/pom.xml @@ -7,7 +7,7 @@ org.sonarsource.sonarqube-plugins.cxx cxx-sslr - 2.1.2-SNAPSHOT + 2.1.3-SNAPSHOT sslr-testing-harness diff --git a/cxx-sslr/sslr-tests/pom.xml b/cxx-sslr/sslr-tests/pom.xml index 29cac46ed..83bc4b5ee 100644 --- a/cxx-sslr/sslr-tests/pom.xml +++ b/cxx-sslr/sslr-tests/pom.xml @@ -7,7 +7,7 @@ org.sonarsource.sonarqube-plugins.cxx cxx-sslr - 2.1.2-SNAPSHOT + 2.1.3-SNAPSHOT sslr-tests diff --git a/cxx-sslr/sslr-toolkit/pom.xml b/cxx-sslr/sslr-toolkit/pom.xml index 8a4431200..cc0a78cc9 100644 --- a/cxx-sslr/sslr-toolkit/pom.xml +++ b/cxx-sslr/sslr-toolkit/pom.xml @@ -7,7 +7,7 @@ org.sonarsource.sonarqube-plugins.cxx cxx-sslr - 2.1.2-SNAPSHOT + 2.1.3-SNAPSHOT sslr-toolkit diff --git a/cxx-sslr/sslr-xpath/pom.xml b/cxx-sslr/sslr-xpath/pom.xml index 5e2ebcd82..f162ff48f 100644 --- a/cxx-sslr/sslr-xpath/pom.xml +++ b/cxx-sslr/sslr-xpath/pom.xml @@ -7,7 +7,7 @@ org.sonarsource.sonarqube-plugins.cxx cxx-sslr - 2.1.2-SNAPSHOT + 2.1.3-SNAPSHOT sslr-xpath diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index 72be1e4ee..9ef62e777 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -5,7 +5,7 @@ org.sonarsource.sonarqube-plugins.cxx cxx - 2.1.2-SNAPSHOT + 2.1.3-SNAPSHOT integration-tests diff --git a/pom.xml b/pom.xml index 2fc02b74e..43bcb132e 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ org.sonarsource.sonarqube-plugins.cxx cxx - 2.1.2-SNAPSHOT + 2.1.3-SNAPSHOT pom Cxx diff --git a/sonar-cxx-plugin/pom.xml b/sonar-cxx-plugin/pom.xml index 35a5b84a3..99b512cad 100644 --- a/sonar-cxx-plugin/pom.xml +++ b/sonar-cxx-plugin/pom.xml @@ -7,7 +7,7 @@ org.sonarsource.sonarqube-plugins.cxx cxx - 2.1.2-SNAPSHOT + 2.1.3-SNAPSHOT sonar-cxx-plugin From ba7407f4279d9c55ef23c54ec97a8d066d8080d4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 16:10:45 +0000 Subject: [PATCH 03/32] Bump com.google.guava:guava from 33.2.1-jre to 33.3.0-jre Bumps [com.google.guava:guava](https://github.com/google/guava) from 33.2.1-jre to 33.3.0-jre. - [Release notes](https://github.com/google/guava/releases) - [Commits](https://github.com/google/guava/commits) --- updated-dependencies: - dependency-name: com.google.guava:guava dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c5fbb898d..2f91eab85 100644 --- a/pom.xml +++ b/pom.xml @@ -275,7 +275,7 @@ 1.28 29.0.0 2.11.0 - 33.2.1-jre + 33.3.0-jre 2.17.2 2.0.0 2.0.6.1 From 3b1406ef1b8eab89b35ab6328d39631bb37eafa0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Aug 2024 16:27:01 +0000 Subject: [PATCH 04/32] Bump org.python:jython-standalone from 2.7.3 to 2.7.4 Bumps [org.python:jython-standalone](https://github.com/jython/jython) from 2.7.3 to 2.7.4. - [Changelog](https://github.com/jython/jython/blob/master/NEWS) - [Commits](https://github.com/jython/jython/compare/v2.7.3...v2.7.4) --- updated-dependencies: - dependency-name: org.python:jython-standalone dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2f91eab85..f1ba88ca3 100644 --- a/pom.xml +++ b/pom.xml @@ -291,7 +291,7 @@ 11 - 2.7.3 + 2.7.4 1.0.0 3.13.0 3.7.1 From ac165857fe73491ada43c9792d15ce4fd14aa6e7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Aug 2024 16:31:34 +0000 Subject: [PATCH 05/32] Bump org.apache.maven.plugins:maven-dependency-plugin Bumps [org.apache.maven.plugins:maven-dependency-plugin](https://github.com/apache/maven-dependency-plugin) from 3.7.1 to 3.8.0. - [Release notes](https://github.com/apache/maven-dependency-plugin/releases) - [Commits](https://github.com/apache/maven-dependency-plugin/compare/maven-dependency-plugin-3.7.1...maven-dependency-plugin-3.8.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-dependency-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f1ba88ca3..be017ec83 100644 --- a/pom.xml +++ b/pom.xml @@ -294,7 +294,7 @@ 2.7.4 1.0.0 3.13.0 - 3.7.1 + 3.8.0 0.8.12 3.4.2 4.5 From 20c54bffc512dba77cfc6d03f3e135ead83a75ad Mon Sep 17 00:00:00 2001 From: guwirth Date: Fri, 23 Aug 2024 11:02:57 +0200 Subject: [PATCH 06/32] JSON Compilation Database: support case sensitive paths Depending on whether the file system is case sensitive or case insentitive, paths/comparisons of paths must be handled differently. - case sensitive: (default Linux): Paths must not be changed. - case insentitive (default Windows): Here, paths in reports from tools are often stored with lower case letters. The original spelling in the file system must be restored before a path comparison. - add additional integration test samples for Windows/Linux using upper case filenames - close #2691 --- .../cxx/config/CxxSquidConfiguration.java | 49 +++++++++++++++++-- .../cxx/config/JsonCompilationDatabase.java | 1 - .../cxx/config/CxxSquidConfigurationTest.java | 4 +- .../config/JsonCompilationDatabaseTest.java | 8 ++- .../resources/jsondb/compile_commands.json | 2 +- integration-tests/features/json-db.feature | 24 +++++++-- .../compile_commands.json | 0 .../sonar-project.properties | 18 +++++++ .../src/FILE2.cc} | 0 .../src/File3.cc} | 0 .../src/file1.cc | 0 .../src/file4.cc | 0 .../src/file5.cc | 0 .../src/file6.cc | 0 .../compile_commands.json | 33 +++++++++++++ .../sonar-project.properties | 2 +- .../src/FILE2.cc | 3 ++ .../src/File3.cc | 3 ++ .../src/file1.cc | 3 ++ .../src/file4.cc | 3 ++ .../src/file5.cc | 3 ++ .../src/file6.cc | 3 ++ .../org/sonar/plugins/cxx/CxxSquidSensor.java | 13 ++++- 23 files changed, 157 insertions(+), 15 deletions(-) rename integration-tests/testdata/{json_db_project => json_db_project_case_insensitive}/compile_commands.json (100%) create mode 100644 integration-tests/testdata/json_db_project_case_insensitive/sonar-project.properties rename integration-tests/testdata/{json_db_project/src/file2.cc => json_db_project_case_insensitive/src/FILE2.cc} (100%) rename integration-tests/testdata/{json_db_project/src/file3.cc => json_db_project_case_insensitive/src/File3.cc} (100%) rename integration-tests/testdata/{json_db_project => json_db_project_case_insensitive}/src/file1.cc (100%) rename integration-tests/testdata/{json_db_project => json_db_project_case_insensitive}/src/file4.cc (100%) rename integration-tests/testdata/{json_db_project => json_db_project_case_insensitive}/src/file5.cc (100%) rename integration-tests/testdata/{json_db_project => json_db_project_case_insensitive}/src/file6.cc (100%) create mode 100644 integration-tests/testdata/json_db_project_case_sensitive/compile_commands.json rename integration-tests/testdata/{json_db_project => json_db_project_case_sensitive}/sonar-project.properties (90%) create mode 100644 integration-tests/testdata/json_db_project_case_sensitive/src/FILE2.cc create mode 100644 integration-tests/testdata/json_db_project_case_sensitive/src/File3.cc create mode 100644 integration-tests/testdata/json_db_project_case_sensitive/src/file1.cc create mode 100644 integration-tests/testdata/json_db_project_case_sensitive/src/file4.cc create mode 100644 integration-tests/testdata/json_db_project_case_sensitive/src/file5.cc create mode 100644 integration-tests/testdata/json_db_project_case_sensitive/src/file6.cc diff --git a/cxx-squid/src/main/java/org/sonar/cxx/config/CxxSquidConfiguration.java b/cxx-squid/src/main/java/org/sonar/cxx/config/CxxSquidConfiguration.java index 451774eb7..8198fb320 100644 --- a/cxx-squid/src/main/java/org/sonar/cxx/config/CxxSquidConfiguration.java +++ b/cxx-squid/src/main/java/org/sonar/cxx/config/CxxSquidConfiguration.java @@ -25,12 +25,14 @@ import java.io.IOException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +import java.nio.file.FileAlreadyExistsException; +import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; -import java.util.Locale; import java.util.Optional; import javax.annotation.CheckForNull; import javax.annotation.Nullable; @@ -130,6 +132,9 @@ public class CxxSquidConfiguration extends SquidConfiguration { private static final Logger LOG = Loggers.get(CxxSquidConfiguration.class); + // case-sensitive filesystem or not + private static boolean isCaseSensitive = true; + private final XPathFactory xFactory = XPathFactory.instance(); private Document document; @@ -159,6 +164,12 @@ public CxxSquidConfiguration(String baseDir, Charset encoding) { super(encoding); this.baseDir = baseDir; + try { + isCaseSensitive = fileSystemIsCaseSensitive(); + } catch (IOException e) { + isCaseSensitive = true; + } + var root = new Element(ROOT); root.setAttribute(new Attribute("version", "1.0")); document = new Document(root); @@ -236,8 +247,8 @@ public boolean isUnitsEmpty() { * @param level The level parameter defines the level on which the data should be inserted. For level a predefined * name can be used or a new one can be defined.
* - If level is an identifier, the information is created in an element with the level-name directly under root.
- * - If level is a path, the information is stored on Units level. In that case the level-string is normalized and - * converted to lower case letters to simplify the following search. + * - If level is a path, the information is stored on Units level. In that case the level-string is normalized to + * simplify the following search. * @param key the key to be placed into the database. * @param value the value corresponding to key. Several values can be assigned to one key. Internally a value-list for * key is created. The method can be called several times for this, but more effective is the method @@ -550,10 +561,34 @@ public void readJsonCompilationDb() { } } + /** + * Check if file system is case sensitive + * + * @return true if running on a case sensitive filesystem + * @throws IOException + */ + public static boolean fileSystemIsCaseSensitive() throws IOException { + Path a = null, b = null; + try { + Path tempDir = Files.createTempDirectory("test"); + a = Files.createFile(tempDir.resolve(Paths.get("test.test"))); + b = Files.createFile(tempDir.resolve(Paths.get("TEST.TEST"))); + } catch (FileAlreadyExistsException e) { + return false; + } finally { + Files.deleteIfExists(a); + if (b != null) { + Files.deleteIfExists(b); + } + } + return true; + } + /** * Create uniform notation of path names. * - * Normalize path and replace file separators by forward slash. Resulting string is converted to lower case. + * Normalize path and replace file separators by forward slash. + * Use lowercase path on case insensitive file systems. * * @param path to unify * @return unified path @@ -563,7 +598,11 @@ private static String unifyPath(String path) { if (result == null) { result = "unknown"; } - return result.toLowerCase(Locale.getDefault()); + if (isCaseSensitive) { + return result; + } else { + return result.toLowerCase(); + } } /** diff --git a/cxx-squid/src/main/java/org/sonar/cxx/config/JsonCompilationDatabase.java b/cxx-squid/src/main/java/org/sonar/cxx/config/JsonCompilationDatabase.java index eeb766d99..81ead528a 100644 --- a/cxx-squid/src/main/java/org/sonar/cxx/config/JsonCompilationDatabase.java +++ b/cxx-squid/src/main/java/org/sonar/cxx/config/JsonCompilationDatabase.java @@ -98,7 +98,6 @@ private static String[] tokenizeCommandLine(String cmdLine) { /** * Set up the given CxxSquidConfiguration from the JSON compilation database * - * @param squidConfig * @param compileCommandsFile * @throws IOException */ diff --git a/cxx-squid/src/test/java/org/sonar/cxx/config/CxxSquidConfigurationTest.java b/cxx-squid/src/test/java/org/sonar/cxx/config/CxxSquidConfigurationTest.java index 87522dd3b..83e2bc70d 100644 --- a/cxx-squid/src/test/java/org/sonar/cxx/config/CxxSquidConfigurationTest.java +++ b/cxx-squid/src/test/java/org/sonar/cxx/config/CxxSquidConfigurationTest.java @@ -288,8 +288,8 @@ void testPathNames() { squidConfig.add("C:\\X\\Y\\Z.cpp", "key4", "value4"); Optional value1 = squidConfig.get("/a/b/c.cpp", "key1"); Optional value2 = squidConfig.get("c:\\a\\b\\c.cpp", "key2"); - Optional value3 = squidConfig.get("/x/y/z.cpp", "key3"); - Optional value4 = squidConfig.get("c:/x/y/z.cpp", "key4"); + Optional value3 = squidConfig.get("/X/Y/Z.cpp", "key3"); + Optional value4 = squidConfig.get("C:/X/Y/Z.cpp", "key4"); var softly = new SoftAssertions(); softly.assertThat(value1).isNotEmpty(); diff --git a/cxx-squid/src/test/java/org/sonar/cxx/config/JsonCompilationDatabaseTest.java b/cxx-squid/src/test/java/org/sonar/cxx/config/JsonCompilationDatabaseTest.java index 5c4ac96a4..aaa02b7d6 100644 --- a/cxx-squid/src/test/java/org/sonar/cxx/config/JsonCompilationDatabaseTest.java +++ b/cxx-squid/src/test/java/org/sonar/cxx/config/JsonCompilationDatabaseTest.java @@ -46,6 +46,10 @@ void testGlobalSettings() throws Exception { CxxSquidConfiguration.INCLUDE_DIRECTORIES); List files = squidConfig.getFiles(); + var cwd = Path.of("."); + var absPath = cwd.resolve("TEST-argument-parser.cpp"); + var filename = absPath.toAbsolutePath().normalize(); + assertThat(defines) .isNotEmpty() .doesNotContain("UNIT_DEFINE 1") @@ -56,6 +60,8 @@ void testGlobalSettings() throws Exception { .contains(unifyPath("/usr/include")); assertThat(files) .hasSize(7); + assertThat(files) + .contains(filename); } @Test @@ -148,7 +154,7 @@ void testArgumentParser() throws Exception { jsonDb.parse(file); var cwd = Path.of("."); - var absPath = cwd.resolve("test-argument-parser.cpp"); + var absPath = cwd.resolve("TEST-argument-parser.cpp"); var filename = absPath.toAbsolutePath().normalize().toString(); List defines = squidConfig.getValues(filename, CxxSquidConfiguration.DEFINES); diff --git a/cxx-squid/src/test/resources/jsondb/compile_commands.json b/cxx-squid/src/test/resources/jsondb/compile_commands.json index 936a109c2..2f57a6906 100644 --- a/cxx-squid/src/test/resources/jsondb/compile_commands.json +++ b/cxx-squid/src/test/resources/jsondb/compile_commands.json @@ -12,7 +12,7 @@ { "_comment_": "test argument parser", "directory": ".", - "file": "test-argument-parser.cpp", + "file": "TEST-argument-parser.cpp", "arguments": [ "-DMACRO1", "-DMACRO2=2", "-D", "MACRO3", "-D", "MACRO4=4", diff --git a/integration-tests/features/json-db.feature b/integration-tests/features/json-db.feature index 4df6f7696..85e872276 100644 --- a/integration-tests/features/json-db.feature +++ b/integration-tests/features/json-db.feature @@ -3,8 +3,9 @@ Feature: JSON Compilation Database support As a CXX Plugin user, I want to use the JSON Compilation Database to analyze SonarQube projects - Scenario: Analyze only the source files contained in the JSON Compilation Database. - Given the project "json_db_project" + Scenario: Analyze only the source files contained in the JSON Compilation Database (case insensitive filesystem). + Given the project "json_db_project_case_insensitive" + And platform is "Windows" When I run sonar-scanner with "-X" Then the analysis finishes successfully And the analysis in server has completed @@ -13,7 +14,24 @@ Feature: JSON Compilation Database support .*WARN.*Unable to get a valid mac address, will use a dummy address """ And the following metrics have following values: - | metric | value | + | metric | value | + | ncloc | 9 | + | lines | 24 | + | statements | 3 | + | functions | 3 | + + Scenario: Analyze only the source files contained in the JSON Compilation Database (case sensitive filesystem). + Given the project "json_db_project_case_sensitive" + And platform is not "Windows" + When I run sonar-scanner with "-X" + Then the analysis finishes successfully + And the analysis in server has completed + And the analysis log contains no error/warning messages except those matching: + """ + .*WARN.*Unable to get a valid mac address, will use a dummy address + """ + And the following metrics have following values: + | metric | value | | ncloc | 9 | | lines | 24 | | statements | 3 | diff --git a/integration-tests/testdata/json_db_project/compile_commands.json b/integration-tests/testdata/json_db_project_case_insensitive/compile_commands.json similarity index 100% rename from integration-tests/testdata/json_db_project/compile_commands.json rename to integration-tests/testdata/json_db_project_case_insensitive/compile_commands.json diff --git a/integration-tests/testdata/json_db_project_case_insensitive/sonar-project.properties b/integration-tests/testdata/json_db_project_case_insensitive/sonar-project.properties new file mode 100644 index 000000000..b0d0c0710 --- /dev/null +++ b/integration-tests/testdata/json_db_project_case_insensitive/sonar-project.properties @@ -0,0 +1,18 @@ +# metadata +sonar.projectKey=json_db_project_case_insensitive + +# disable SCM support +sonar.scm.disabled=true + +# disable XML sensor +sonar.xml.file.suffixes=.disable-xml + +# file extensions assigned to the cxx programming language +sonar.cxx.file.suffixes=.cxx,.cpp,.cc,.c,.hxx,.hpp,.hh,.h + +# comma-separated paths to directories containing source files +sonar.sources=src + +# read a JSON Compilation Database file +sonar.cxx.jsonCompilationDatabase=compile_commands.json +sonar.cxx.jsonCompilationDatabase.analyzeOnlyContainedFiles=true diff --git a/integration-tests/testdata/json_db_project/src/file2.cc b/integration-tests/testdata/json_db_project_case_insensitive/src/FILE2.cc similarity index 100% rename from integration-tests/testdata/json_db_project/src/file2.cc rename to integration-tests/testdata/json_db_project_case_insensitive/src/FILE2.cc diff --git a/integration-tests/testdata/json_db_project/src/file3.cc b/integration-tests/testdata/json_db_project_case_insensitive/src/File3.cc similarity index 100% rename from integration-tests/testdata/json_db_project/src/file3.cc rename to integration-tests/testdata/json_db_project_case_insensitive/src/File3.cc diff --git a/integration-tests/testdata/json_db_project/src/file1.cc b/integration-tests/testdata/json_db_project_case_insensitive/src/file1.cc similarity index 100% rename from integration-tests/testdata/json_db_project/src/file1.cc rename to integration-tests/testdata/json_db_project_case_insensitive/src/file1.cc diff --git a/integration-tests/testdata/json_db_project/src/file4.cc b/integration-tests/testdata/json_db_project_case_insensitive/src/file4.cc similarity index 100% rename from integration-tests/testdata/json_db_project/src/file4.cc rename to integration-tests/testdata/json_db_project_case_insensitive/src/file4.cc diff --git a/integration-tests/testdata/json_db_project/src/file5.cc b/integration-tests/testdata/json_db_project_case_insensitive/src/file5.cc similarity index 100% rename from integration-tests/testdata/json_db_project/src/file5.cc rename to integration-tests/testdata/json_db_project_case_insensitive/src/file5.cc diff --git a/integration-tests/testdata/json_db_project/src/file6.cc b/integration-tests/testdata/json_db_project_case_insensitive/src/file6.cc similarity index 100% rename from integration-tests/testdata/json_db_project/src/file6.cc rename to integration-tests/testdata/json_db_project_case_insensitive/src/file6.cc diff --git a/integration-tests/testdata/json_db_project_case_sensitive/compile_commands.json b/integration-tests/testdata/json_db_project_case_sensitive/compile_commands.json new file mode 100644 index 000000000..260e47526 --- /dev/null +++ b/integration-tests/testdata/json_db_project_case_sensitive/compile_commands.json @@ -0,0 +1,33 @@ +[ + { + "_comment_": "example extension to define global defines and includes for headers and for files which are not compiled", + "file": "__global__", + "defines": { + "GLOBAL_DEFINE": "1" + }, + "includes": [ + "/usr/include" + ] + }, + { + "_comment_": "source file to use", + "directory": "./src", + "file": "file1.cc", + "command": "gcc -o output1 -I/usr/local/include -I /another/include/dir -DSIMPLE1 -DCOMMAND_DEFINE=1 file1.cpp", + "output": "output1" + }, + { + "_comment_": "source file to use", + "directory": "./src", + "file": "FILE2.cc", + "command": "gcc -o output2 -I/usr/local/include -I /another/include/dir -DSIMPLE2 -DCOMMAND_DEFINE=2 FILE2.cpp", + "output": "output2" + }, + { + "_comment_": "source file to use", + "directory": "./src", + "file": "File3.cc", + "command": "gcc -o output3 -I/usr/local/include -I /another/include/dir -DSIMPLE3 -DCOMMAND_DEFINE=3 File3.cpp", + "output": "output3" + } +] diff --git a/integration-tests/testdata/json_db_project/sonar-project.properties b/integration-tests/testdata/json_db_project_case_sensitive/sonar-project.properties similarity index 90% rename from integration-tests/testdata/json_db_project/sonar-project.properties rename to integration-tests/testdata/json_db_project_case_sensitive/sonar-project.properties index 32fb9071f..8203e4755 100644 --- a/integration-tests/testdata/json_db_project/sonar-project.properties +++ b/integration-tests/testdata/json_db_project_case_sensitive/sonar-project.properties @@ -1,5 +1,5 @@ # metadata -sonar.projectKey=json_db_project +sonar.projectKey=json_db_project_case_sensitive # disable SCM support sonar.scm.disabled=true diff --git a/integration-tests/testdata/json_db_project_case_sensitive/src/FILE2.cc b/integration-tests/testdata/json_db_project_case_sensitive/src/FILE2.cc new file mode 100644 index 000000000..c2bcc0a3f --- /dev/null +++ b/integration-tests/testdata/json_db_project_case_sensitive/src/FILE2.cc @@ -0,0 +1,3 @@ +int func2(){ + return 2; +} diff --git a/integration-tests/testdata/json_db_project_case_sensitive/src/File3.cc b/integration-tests/testdata/json_db_project_case_sensitive/src/File3.cc new file mode 100644 index 000000000..2bbcbf27d --- /dev/null +++ b/integration-tests/testdata/json_db_project_case_sensitive/src/File3.cc @@ -0,0 +1,3 @@ +int func3(){ + return 3; +} diff --git a/integration-tests/testdata/json_db_project_case_sensitive/src/file1.cc b/integration-tests/testdata/json_db_project_case_sensitive/src/file1.cc new file mode 100644 index 000000000..16a90573d --- /dev/null +++ b/integration-tests/testdata/json_db_project_case_sensitive/src/file1.cc @@ -0,0 +1,3 @@ +int func1(){ + return 1; +} diff --git a/integration-tests/testdata/json_db_project_case_sensitive/src/file4.cc b/integration-tests/testdata/json_db_project_case_sensitive/src/file4.cc new file mode 100644 index 000000000..21278668e --- /dev/null +++ b/integration-tests/testdata/json_db_project_case_sensitive/src/file4.cc @@ -0,0 +1,3 @@ +int func4(){ + return 4; +} diff --git a/integration-tests/testdata/json_db_project_case_sensitive/src/file5.cc b/integration-tests/testdata/json_db_project_case_sensitive/src/file5.cc new file mode 100644 index 000000000..ef0c5514e --- /dev/null +++ b/integration-tests/testdata/json_db_project_case_sensitive/src/file5.cc @@ -0,0 +1,3 @@ +int func5(){ + return 5; +} diff --git a/integration-tests/testdata/json_db_project_case_sensitive/src/file6.cc b/integration-tests/testdata/json_db_project_case_sensitive/src/file6.cc new file mode 100644 index 000000000..aa2cd848f --- /dev/null +++ b/integration-tests/testdata/json_db_project_case_sensitive/src/file6.cc @@ -0,0 +1,3 @@ +int func6(){ + return 6; +} diff --git a/sonar-cxx-plugin/src/main/java/org/sonar/plugins/cxx/CxxSquidSensor.java b/sonar-cxx-plugin/src/main/java/org/sonar/plugins/cxx/CxxSquidSensor.java index cc3a1410a..ee22f080f 100644 --- a/sonar-cxx-plugin/src/main/java/org/sonar/plugins/cxx/CxxSquidSensor.java +++ b/sonar-cxx-plugin/src/main/java/org/sonar/plugins/cxx/CxxSquidSensor.java @@ -21,7 +21,9 @@ import com.sonar.cxx.sslr.api.Grammar; import java.io.File; +import java.io.IOException; import java.io.Serializable; +import java.nio.file.LinkOption; import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; @@ -396,9 +398,18 @@ private Iterable getInputFiles(SensorContext context, CxxSquidConfigu if (context.config().hasKey(JSON_COMPILATION_DATABASE_KEY) && context.config().getBoolean(JSON_COMPILATION_DATABASE_ONLY_CONTAINED_FILES_KEY).orElse(Boolean.FALSE)) { + // if the source of the configuration is JSON Compilation Database and analyzeOnlyContainedFiles=True, // then analyze only the files contained in the db. - var inputFilesInConfig = squidConfig.getFiles(); + var inputFilesInConfig = new ArrayList(); + for (var inputfile : squidConfig.getFiles()) { + try { + // resolution of symbolic links and case-sensitive paths: In Json DB the path/filenames are often lowercase + inputFilesInConfig.add(inputfile.toRealPath(LinkOption.NOFOLLOW_LINKS)); + } catch (IOException | RuntimeException e) { + // ... + } + } var result = StreamSupport.stream(inputFiles.spliterator(), false) .filter(f -> inputFilesInConfig.contains(Path.of(f.uri()))) .collect(Collectors.toList()); From 68ef72272ad1efe5c211458f7e18e6117a16a8c0 Mon Sep 17 00:00:00 2001 From: guwirth Date: Tue, 27 Aug 2024 14:52:15 +0200 Subject: [PATCH 07/32] preprocessor handle directories as files - close #2692 --- .../main/java/org/sonar/cxx/preprocessor/CxxPreprocessor.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cxx-squid/src/main/java/org/sonar/cxx/preprocessor/CxxPreprocessor.java b/cxx-squid/src/main/java/org/sonar/cxx/preprocessor/CxxPreprocessor.java index 48379400a..24b79b7f7 100644 --- a/cxx-squid/src/main/java/org/sonar/cxx/preprocessor/CxxPreprocessor.java +++ b/cxx-squid/src/main/java/org/sonar/cxx/preprocessor/CxxPreprocessor.java @@ -340,8 +340,7 @@ public void finishedPreprocessing() { * its existence cannot be determined. */ public boolean exists(Path fileName) { - // File.exists has better performance as Files.exists(path) - return fileExists.computeIfAbsent(fileName, f -> f.toFile().exists()); + return fileExists.computeIfAbsent(fileName, f -> f.toFile().isFile()); } private void addPredefinedMacros() { From d5be6e46c904c589d661c071d25ffae3c0c593ad Mon Sep 17 00:00:00 2001 From: guwirth Date: Tue, 27 Aug 2024 15:26:28 +0200 Subject: [PATCH 08/32] use modern API Files.isRegularFile --- .../main/java/org/sonar/cxx/preprocessor/CxxPreprocessor.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cxx-squid/src/main/java/org/sonar/cxx/preprocessor/CxxPreprocessor.java b/cxx-squid/src/main/java/org/sonar/cxx/preprocessor/CxxPreprocessor.java index 24b79b7f7..a6c24a5bc 100644 --- a/cxx-squid/src/main/java/org/sonar/cxx/preprocessor/CxxPreprocessor.java +++ b/cxx-squid/src/main/java/org/sonar/cxx/preprocessor/CxxPreprocessor.java @@ -30,6 +30,7 @@ import com.sonar.cxx.sslr.impl.token.TokenUtils; import java.io.File; import java.nio.charset.Charset; +import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.Collections; @@ -340,7 +341,7 @@ public void finishedPreprocessing() { * its existence cannot be determined. */ public boolean exists(Path fileName) { - return fileExists.computeIfAbsent(fileName, f -> f.toFile().isFile()); + return fileExists.computeIfAbsent(fileName, f -> Files.isRegularFile(f)); } private void addPredefinedMacros() { From 908ba349009ad4521653d296c0e2d1783c4db1c0 Mon Sep 17 00:00:00 2001 From: guwirth Date: Wed, 28 Aug 2024 11:04:31 +0200 Subject: [PATCH 09/32] C++23 preprocessor extensions - [#elifdef and #elifndef](https://en.cppreference.com/w/cpp/preprocessor/conditional) [P2334R1](https://wg21.link/P2334R1) - [#warning](https://en.cppreference.com/w/cpp/preprocessor/error) [P2437R1](https://wg21.link/P2437R1) - linked to #2536 --- cxx-squid/dox/diff-cpp20-cpp23_grammar.txt | 21 -------- .../cxx/preprocessor/PPGrammarImplTest.java | 9 +++- .../resources/parser/own/C++23/elifxdef.cc | 48 +++++++++++++++++++ .../resources/parser/own/C++23/warning.cc | 4 ++ 4 files changed, 59 insertions(+), 23 deletions(-) create mode 100644 cxx-squid/src/test/resources/parser/own/C++23/elifxdef.cc create mode 100644 cxx-squid/src/test/resources/parser/own/C++23/warning.cc diff --git a/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt b/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt index 6cb8e1bf0..0f9ca2a73 100644 --- a/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt +++ b/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt @@ -268,24 +268,3 @@ export-declaration: concept-definition: concept concept-name attribute-specifier-seqopt = constraint-expression ; - -**A.13 Preprocessing directives [gram.cpp]** - -control-line: - # include pp-tokens new-line - pp-import - # define identifier replacement-list new-line - # define identifier lparen identifier-listopt ) replacement-list new-line - # define identifier lparen ... ) replacement-list new-line - # define identifier lparen identifier-list , ... ) replacement-list new-line - # undef identifier new-line - # line pp-tokens new-line - # error pp-tokensopt new-line - # warning pp-tokensopt new-line - # pragma pp-tokensopt new-line - # new-line - -elif-group: - # elif constant-expression new-line groupopt - # elifdef identifier new-line groupopt - # elifndef identifier new-line groupopt diff --git a/cxx-squid/src/test/java/org/sonar/cxx/preprocessor/PPGrammarImplTest.java b/cxx-squid/src/test/java/org/sonar/cxx/preprocessor/PPGrammarImplTest.java index 7809e2c2f..5a1869241 100644 --- a/cxx-squid/src/test/java/org/sonar/cxx/preprocessor/PPGrammarImplTest.java +++ b/cxx-squid/src/test/java/org/sonar/cxx/preprocessor/PPGrammarImplTest.java @@ -316,7 +316,9 @@ void lineLine() { void errorLine() { p.setRootRule(g.rule(PPGrammarImpl.errorLine)); - assertThat(p).matches("#error foo"); + assertThat(p).matches("#error token"); + assertThat(p).matches("#error token token"); + assertThat(p).matches("#error \"txt\""); assertThat(p).matches("#error"); } @@ -331,7 +333,10 @@ void pragmaLine() { void warningLine() { p.setRootRule(g.rule(PPGrammarImpl.warningLine)); - assertThat(p).matches("#warning foo"); + assertThat(p).matches("#warning token"); + assertThat(p).matches("#warning token token"); + assertThat(p).matches("#warning \"txt\""); + assertThat(p).matches("#warning"); } @Test diff --git a/cxx-squid/src/test/resources/parser/own/C++23/elifxdef.cc b/cxx-squid/src/test/resources/parser/own/C++23/elifxdef.cc new file mode 100644 index 000000000..128b0fa85 --- /dev/null +++ b/cxx-squid/src/test/resources/parser/own/C++23/elifxdef.cc @@ -0,0 +1,48 @@ +void sample() { + +// Note that if a compiler does not support C++23's #elifdef/#elifndef +// directives then the "unexpected" block (see below) will be selected. +#ifdef CPU + std::cout << "4: no1\n"; +#elifdef GPU + std::cout << "4: no2\n"; +#elifndef RAM + std::cout << "4: yes\n"; // expected block +#else + std::cout << "4: no!\n"; // unexpectedly selects this block by skipping + // unknown directives and "jumping" directly + // from "#ifdef CPU" to this "#else" block +#endif + +// To fix the problem above we may conditionally define the +// macro ELIFDEF_SUPPORTED only if the C++23 directives +// #elifdef/#elifndef are supported. +#if 0 +#elifndef UNDEFINED_MACRO +#define ELIFDEF_SUPPORTED +#else +#endif + +#ifdef ELIFDEF_SUPPORTED + #ifdef CPU + std::cout << "4: no1\n"; + #elifdef GPU + std::cout << "4: no2\n"; + #elifndef RAM + std::cout << "4: yes\n"; // expected block + #else + std::cout << "4: no3\n"; + #endif +#else // when #elifdef unsupported use old verbose `#elif defined` + #ifdef CPU + std::cout << "4: no1\n"; + #elif defined GPU + std::cout << "4: no2\n"; + #elif !defined RAM + std::cout << "4: yes\n"; // expected block + #else + std::cout << "4: no3\n"; + #endif +#endif + +} diff --git a/cxx-squid/src/test/resources/parser/own/C++23/warning.cc b/cxx-squid/src/test/resources/parser/own/C++23/warning.cc new file mode 100644 index 000000000..4569fc89d --- /dev/null +++ b/cxx-squid/src/test/resources/parser/own/C++23/warning.cc @@ -0,0 +1,4 @@ +#error +#error "diagnostic-message" +#warning +#warning "diagnostic-message (since C++23)" From 3dfda75d7163bd4c553488a76f33536a001dfa35 Mon Sep 17 00:00:00 2001 From: guwirth Date: Wed, 28 Aug 2024 14:26:03 +0200 Subject: [PATCH 10/32] C++23 if consteval - [if consteval](https://en.cppreference.com/w/cpp/language/if#Consteval_if) [P1938R3](https://wg21.link/P1938R3) - linked #2536 --- cxx-squid/dox/diff-cpp20-cpp23_grammar.txt | 7 ---- .../org/sonar/cxx/parser/CxxGrammarImpl.java | 4 +- .../org/sonar/cxx/parser/StatementTest.java | 10 ++++- .../parser/own/C++23/if-consteval.cc | 40 +++++++++++++++++++ 4 files changed, 52 insertions(+), 9 deletions(-) create mode 100644 cxx-squid/src/test/resources/parser/own/C++23/if-consteval.cc diff --git a/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt b/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt index 6cb8e1bf0..641ecc13b 100644 --- a/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt +++ b/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt @@ -204,13 +204,6 @@ label-seq: label label-seq label -selection-statement: - if constexpropt ( init-statementopt condition ) statement - if constexpropt ( init-statementopt condition ) statement else statement - if !opt consteval compound-statement - if !opt consteval compound-statement else statement - switch ( init-statementopt condition ) statement - **A.7 Declarations [gram.dcl]** declaration: diff --git a/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java b/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java index ab2ea45f0..04622b1c9 100644 --- a/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java +++ b/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java @@ -969,7 +969,9 @@ private static void statements(LexerfulGrammarBuilder b) { b.firstOf( b.sequence(CxxKeyword.IF, b.optional(CxxKeyword.CONSTEXPR), "(", b.optional(initStatement), condition, ")", statement, b.optional(CxxKeyword.ELSE, statement)), // C++ - b.sequence(CxxKeyword.SWITCH, "(", b.optional(initStatement), condition, ")", statement) + b.sequence(CxxKeyword.IF, b.optional("!"), CxxKeyword.CONSTEVAL, + compoundStatement, b.optional(CxxKeyword.ELSE, statement)), // C++23 + b.sequence(CxxKeyword.SWITCH, "(", b.optional(initStatement), condition, ")", statement) // C++ ) ); diff --git a/cxx-squid/src/test/java/org/sonar/cxx/parser/StatementTest.java b/cxx-squid/src/test/java/org/sonar/cxx/parser/StatementTest.java index 9e0f0284d..a4194c825 100644 --- a/cxx-squid/src/test/java/org/sonar/cxx/parser/StatementTest.java +++ b/cxx-squid/src/test/java/org/sonar/cxx/parser/StatementTest.java @@ -90,7 +90,10 @@ void selectionStatement_reallife() { // fix #2286 .matches("if(a() < 0 || c >= 1) {}") .matches("if(a() < 0 || c > 1) {}") - .matches("if(a() < 0 || c >> 1) {}"); + .matches("if(a() < 0 || c >> 1) {}") + // C++23 + .matches("if !consteval {}") + .matches("if !consteval {} else ;"); } @Test @@ -131,6 +134,7 @@ void selectionStatement() { mockRule(CxxGrammarImpl.statement); mockRule(CxxGrammarImpl.condition); mockRule(CxxGrammarImpl.initStatement); + mockRule(CxxGrammarImpl.compoundStatement); assertThatParser() .matches("if ( condition ) statement") @@ -141,6 +145,10 @@ void selectionStatement() { .matches("if constexpr ( condition ) statement else statement") .matches("if ( initStatement condition ) statement else statement") .matches("if constexpr ( initStatement condition ) statement else statement") + .matches("if consteval compoundStatement") + .matches("if ! consteval compoundStatement") + .matches("if consteval compoundStatement else statement") + .matches("if ! consteval compoundStatement else statement") .matches("switch ( condition ) statement") .matches("switch ( initStatement condition ) statement"); } diff --git a/cxx-squid/src/test/resources/parser/own/C++23/if-consteval.cc b/cxx-squid/src/test/resources/parser/own/C++23/if-consteval.cc new file mode 100644 index 000000000..f5bf815a1 --- /dev/null +++ b/cxx-squid/src/test/resources/parser/own/C++23/if-consteval.cc @@ -0,0 +1,40 @@ +constexpr bool is_constant_evaluated() noexcept +{ + if consteval { return true; } else { return false; } +} + +constexpr bool is_runtime_evaluated() noexcept +{ + if !consteval { return true; } else { return false; } +} + +consteval std::uint64_t ipow_ct(std::uint64_t base, std::uint8_t exp) +{ + if (!base) return base; + std::uint64_t res{1}; + while (exp) + { + if (exp & 1) res *= base; + exp /= 2; + base *= base; + } + return res; +} + +constexpr std::uint64_t ipow(std::uint64_t base, std::uint8_t exp) +{ + if consteval // use a compile-time friendly algorithm + { + return ipow_ct(base, exp); + } + else // use runtime evaluation + { + return std::pow(base, exp); + } +} + +int main(int, const char* argv[]) +{ + static_assert(ipow(0, 10) == 0 && ipow(2, 10) == 1024); + std::cout << ipow(std::strlen(argv[0]), 3) << '\n'; +} From c60c634736be23b41d6dc538b5ee2baff3f2c4a6 Mon Sep 17 00:00:00 2001 From: guwirth Date: Wed, 28 Aug 2024 15:56:18 +0200 Subject: [PATCH 11/32] C++23 deducing this - [Explicit object parameter (deducing this)](https://en.cppreference.com/w/cpp/language/member_functions#Expli) [P0847R7](https://wg21.link/P0847R7) - linked #2536 --- cxx-squid/dox/diff-cpp20-cpp23_grammar.txt | 6 ---- .../org/sonar/cxx/parser/CxxGrammarImpl.java | 8 ++--- .../org/sonar/cxx/parser/DeclaratorsTest.java | 9 +++++ .../parser/own/C++23/deducing-this.cc | 33 +++++++++++++++++++ 4 files changed, 46 insertions(+), 10 deletions(-) create mode 100644 cxx-squid/src/test/resources/parser/own/C++23/deducing-this.cc diff --git a/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt b/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt index 6cb8e1bf0..c3a969bfd 100644 --- a/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt +++ b/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt @@ -240,12 +240,6 @@ elaborated-type-specifier: class-key nested-name-specifier templateopt simple-template-id enum nested-name-specifieropt identifier -parameter-declaration: - attribute-specifier-seqopt thisopt decl-specifier-seq declarator - attribute-specifier-seqopt decl-specifier-seq declarator = initializer-clause - attribute-specifier-seqopt thisopt decl-specifier-seq abstract-declaratoropt - attribute-specifier-seqopt decl-specifier-seq abstract-declaratoropt = initializer-clause - using-enum-declaration: using enum using-enum-declarator ; diff --git a/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java b/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java index ab2ea45f0..47bbbdfda 100644 --- a/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java +++ b/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java @@ -1428,10 +1428,10 @@ private static void declarations(LexerfulGrammarBuilder b) { // sample: template string f(); b.sequence(b.optional(attributeSpecifierSeq), parameterDeclSpecifierSeq, declarator, "=", LITERAL), // syntax sugar - b.sequence(b.optional(attributeSpecifierSeq), b.optional(vcAtlAttribute), parameterDeclSpecifierSeq, declarator, - b.optional("=", initializerClause)), // C++ - b.sequence(b.optional(attributeSpecifierSeq), parameterDeclSpecifierSeq, b.optional(abstractDeclarator), - b.optional("=", initializerClause))) // C++ + b.sequence(b.optional(attributeSpecifierSeq), b.optional(CxxKeyword.THIS), b.optional(vcAtlAttribute), + parameterDeclSpecifierSeq, declarator, b.optional("=", initializerClause)), // C++ + b.sequence(b.optional(attributeSpecifierSeq), b.optional(CxxKeyword.THIS), parameterDeclSpecifierSeq, + b.optional(abstractDeclarator), b.optional("=", initializerClause))) // C++ ); b.rule(parameterDeclSpecifierSeq).is( // is decl-specifier-seq diff --git a/cxx-squid/src/test/java/org/sonar/cxx/parser/DeclaratorsTest.java b/cxx-squid/src/test/java/org/sonar/cxx/parser/DeclaratorsTest.java index 75b38abfe..a15793639 100644 --- a/cxx-squid/src/test/java/org/sonar/cxx/parser/DeclaratorsTest.java +++ b/cxx-squid/src/test/java/org/sonar/cxx/parser/DeclaratorsTest.java @@ -410,12 +410,18 @@ void parameterDeclaration() { assertThatParser() .matches("parameterDeclSpecifierSeq declarator") + .matches("this parameterDeclSpecifierSeq declarator") .matches("attributeSpecifierSeq parameterDeclSpecifierSeq declarator") + .matches("attributeSpecifierSeq this parameterDeclSpecifierSeq declarator") .matches("parameterDeclSpecifierSeq declarator = initializerClause") .matches("attributeSpecifierSeq parameterDeclSpecifierSeq declarator = initializerClause") .matches("parameterDeclSpecifierSeq") + .matches("this parameterDeclSpecifierSeq") + .matches("attributeSpecifierSeq this parameterDeclSpecifierSeq") .matches("parameterDeclSpecifierSeq abstractDeclarator") + .matches("this parameterDeclSpecifierSeq abstractDeclarator") .matches("attributeSpecifierSeq parameterDeclSpecifierSeq abstractDeclarator") + .matches("attributeSpecifierSeq this parameterDeclSpecifierSeq abstractDeclarator") .matches("parameterDeclSpecifierSeq = initializerClause") .matches("parameterDeclSpecifierSeq abstractDeclarator = initializerClause") .matches("attributeSpecifierSeq parameterDeclSpecifierSeq abstractDeclarator = initializerClause"); @@ -433,6 +439,9 @@ void parameterDeclaration_reallife() { .matches("string") .matches("::P& c") .matches("bool (A::*bar)(void)") + // C++23 + .matches("this Self&& self") + .matches("this Y const&") // CLI extension .matches("const int^ i") .matches("const int% i") diff --git a/cxx-squid/src/test/resources/parser/own/C++23/deducing-this.cc b/cxx-squid/src/test/resources/parser/own/C++23/deducing-this.cc new file mode 100644 index 000000000..4c6ed5687 --- /dev/null +++ b/cxx-squid/src/test/resources/parser/own/C++23/deducing-this.cc @@ -0,0 +1,33 @@ +struct X { + void foo(this X const& self, int i); // same as void foo(int i) const &; +// void foo(int i) const &; // Error: already declared + void bar(this X self, int i); // pass object by value: makes a copy of “*this” +}; + +struct Y { + template + void foo(this Self&&, int); +}; + +struct D : Y {}; + +void ex(Y& y, D& d) +{ + y.foo(1); // Self = Y& + move(x).foo(2); // Self = Y + d.foo(3); // Self = D& +} + +// a CRTP trait +struct add_postfix_increment { + template + auto operator++(this Self&& self, int) { + auto tmp = self; // Self deduces to "some_type" + ++self; + return tmp; + } +}; + +struct some_type : add_postfix_increment { + some_type& operator++() { /*...*/ } +}; From 30530e0c26e2861b685af98284ef84ed8b523b2f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Aug 2024 16:59:25 +0000 Subject: [PATCH 12/32] Bump org.mockito:mockito-core from 5.12.0 to 5.13.0 Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.12.0 to 5.13.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.12.0...v5.13.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index be017ec83..e5ea65ea3 100644 --- a/pom.xml +++ b/pom.xml @@ -282,7 +282,7 @@ 3.0.2 5.11.0 1.10.19 - 5.12.0 + 5.13.0 5.1 2.4.1 4.2.2 From 3f0a7034fb6cc0d5971dc82ca78fcb79511777f9 Mon Sep 17 00:00:00 2001 From: guwirth Date: Thu, 29 Aug 2024 12:04:18 +0200 Subject: [PATCH 13/32] C++23 attributte assume - [attribute [[assume]]](https://en.cppreference.com/w/cpp/language/attributes/assume) [P1774R8](https://wg21.link/P1774R8) - linked #2536 --- .../org/sonar/cxx/parser/AttributeTest.java | 4 ++- .../parser/own/C++23/attributte-assume.cc | 35 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 cxx-squid/src/test/resources/parser/own/C++23/attributte-assume.cc diff --git a/cxx-squid/src/test/java/org/sonar/cxx/parser/AttributeTest.java b/cxx-squid/src/test/java/org/sonar/cxx/parser/AttributeTest.java index 0e04a7976..6f1bfe426 100644 --- a/cxx-squid/src/test/java/org/sonar/cxx/parser/AttributeTest.java +++ b/cxx-squid/src/test/java/org/sonar/cxx/parser/AttributeTest.java @@ -46,7 +46,9 @@ void classSpecifier_reallife() { .matches("[[fallthrough]]") .matches("[[nodiscard]]") .matches("[[maybe_unused]]") - .matches("[[attr1]] [[attr2]] [[attr3]]"); + .matches("[[attr1]] [[attr2]] [[attr3]]") + //C++23 + .matches("[[assume((x - 1) * 3 == 12)]]"); } } diff --git a/cxx-squid/src/test/resources/parser/own/C++23/attributte-assume.cc b/cxx-squid/src/test/resources/parser/own/C++23/attributte-assume.cc new file mode 100644 index 000000000..ab46c0d2e --- /dev/null +++ b/cxx-squid/src/test/resources/parser/own/C++23/attributte-assume.cc @@ -0,0 +1,35 @@ +void f(int& x, int y) +{ + void g(int); + void h(); + + [[assume(x > 0)]]; // Compiler may assume x is positive + + g(x / 2); // More efficient code possibly generated + + x = 3; + int z = x; + + [[assume((h(), x == z))]]; // Compiler may assume x would have the same value after + // calling h + // The assumption does not cause a call to h + + h(); + g(x); // Compiler may replace this with g(3); + + h(); + g(x); // Compiler may NOT replace this with g(3); + // An assumption applies only at the point where it appears + + z = std::abs(y); + + [[assume((g(z), true))]]; // Compiler may assume g(z) will return + + g(z); // Due to above and below assumptions, compiler may replace this with g(10); + + [[assume(y == -10)]]; // Undefined behavior if y != -10 at this point + + [[assume((x - 1) * 3 == 12)]]; + + g(x); // Compiler may replace this with g(5); +} From 993f5b6e53232fba0ea8a7c011c9393ff981579e Mon Sep 17 00:00:00 2001 From: guwirth Date: Thu, 29 Aug 2024 15:52:36 +0200 Subject: [PATCH 14/32] C++23 multidimensional subscript operator - [multidimensional subscript operator](https://en.cppreference.com/w/cpp/language/operators#Array_subscr) [P2128R6](https://wg21.link/P2128R6) - linked #2536 --- cxx-squid/dox/2023-03-19_cpp23_grammar.txt | 6 ++-- cxx-squid/dox/diff-cpp20-cpp23_grammar.txt | 28 ++++--------------- .../org/sonar/cxx/parser/CxxGrammarImpl.java | 2 +- .../org/sonar/cxx/parser/ExpressionTest.java | 8 ++++-- .../multidimensional-subscript-operator.cc | 25 +++++++++++++++++ 5 files changed, 38 insertions(+), 31 deletions(-) create mode 100644 cxx-squid/src/test/resources/parser/own/C++23/multidimensional-subscript-operator.cc diff --git a/cxx-squid/dox/2023-03-19_cpp23_grammar.txt b/cxx-squid/dox/2023-03-19_cpp23_grammar.txt index aa0ca0b75..193c851f4 100644 --- a/cxx-squid/dox/2023-03-19_cpp23_grammar.txt +++ b/cxx-squid/dox/2023-03-19_cpp23_grammar.txt @@ -436,8 +436,7 @@ nested-name-specifier: lambda-expression: lambda-introducer attribute-specifier-seqopt lambda-declarator compound-statement - lambda-introducer < template-parameter-list > requires-clauseopt attribute-specifier-seqopt - lambda-declarator compound-statement + lambda-introducer < template-parameter-list > requires-clauseopt attribute-specifier-seqopt lambda-declarator compound-statement lambda-introducer: [ lambda-captureopt ] @@ -446,8 +445,7 @@ lambda-declarator: lambda-specifier-seq noexcept-specifieropt attribute-specifier-seqopt trailing-return-typeopt noexcept-specifier attribute-specifier-seqopt trailing-return-typeopt trailing-return-typeopt - ( parameter-declaration-clause ) lambda-specifier-seqopt noexcept-specifieropt attribute-specifier-seqopt - trailing-return-typeopt requires-clauseopt + ( parameter-declaration-clause ) lambda-specifier-seqopt noexcept-specifieropt attribute-specifier-seqopt trailing-return-typeopt requires-clauseopt lambda-specifier: consteval diff --git a/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt b/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt index ae20df630..906c12e57 100644 --- a/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt +++ b/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt @@ -136,15 +136,16 @@ d-char: lambda-expression: lambda-introducer attribute-specifier-seqopt lambda-declarator compound-statement - lambda-introducer < template-parameter-list > requires-clauseopt attribute-specifier-seqopt - lambda-declarator compound-statement + lambda-introducer < template-parameter-list > requires-clauseopt attribute-specifier-seqopt lambda-declarator compound-statement + +lambda-introducer: + [ lambda-captureopt ] lambda-declarator: lambda-specifier-seq noexcept-specifieropt attribute-specifier-seqopt trailing-return-typeopt noexcept-specifier attribute-specifier-seqopt trailing-return-typeopt trailing-return-typeopt - ( parameter-declaration-clause ) lambda-specifier-seqopt noexcept-specifieropt attribute-specifier-seqopt - trailing-return-typeopt requires-clauseopt + ( parameter-declaration-clause ) lambda-specifier-seqopt noexcept-specifieropt attribute-specifier-seqopt trailing-return-typeopt requires-clauseopt lambda-specifier: consteval @@ -163,25 +164,6 @@ requirement-seq: requirement requirement requirement-seq -postfix-expression: - primary-expression - postfix-expression [ expression-listopt ] - postfix-expression ( expression-listopt ) - simple-type-specifier ( expression-listopt ) - typename-specifier ( expression-listopt ) - simple-type-specifier braced-init-list - typename-specifier braced-init-list - postfix-expression . templateopt id-expression - postfix-expression -> templateopt id-expression - postfix-expression ++ - postfix-expression -- - dynamic_cast < type-id > ( expression ) - static_cast < type-id > ( expression ) - reinterpret_cast < type-id > ( expression ) - const_cast < type-id > ( expression ) - typeid ( expression ) - typeid ( type-id ) - **A.6 Statements [gram.stmt]** init-statement: diff --git a/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java b/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java index 6ba2fc746..17acdd75e 100644 --- a/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java +++ b/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java @@ -697,7 +697,7 @@ private static void expressions(LexerfulGrammarBuilder b) { ), b.zeroOrMore( b.firstOf( - b.sequence("[", exprOrBracedInitList, "]"), // C++ + b.sequence("[", b.optional(expressionList), "]"), // C++23 b.sequence("(", b.optional(expressionList), ")"), // C++ b.sequence( b.firstOf( diff --git a/cxx-squid/src/test/java/org/sonar/cxx/parser/ExpressionTest.java b/cxx-squid/src/test/java/org/sonar/cxx/parser/ExpressionTest.java index 5a823cef2..5d9a00d22 100644 --- a/cxx-squid/src/test/java/org/sonar/cxx/parser/ExpressionTest.java +++ b/cxx-squid/src/test/java/org/sonar/cxx/parser/ExpressionTest.java @@ -296,7 +296,6 @@ void postfixExpression() { mockRule(CxxGrammarImpl.expression); mockRule(CxxGrammarImpl.idExpression); mockRule(CxxGrammarImpl.typeId); - mockRule(CxxGrammarImpl.exprOrBracedInitList); mockRule(CxxGrammarImpl.cudaKernel); assertThatParser() @@ -313,7 +312,8 @@ void postfixExpression() { .matches("const_cast < typeId > ( expression )") .matches("typeid ( expression )") .matches("typeid ( typeId )") - .matches("primaryExpression [ exprOrBracedInitList ]") + .matches("primaryExpression [ ]") // C++23 + .matches("primaryExpression [ expressionList ]") // C++23 .matches("primaryExpression ( )") .matches("primaryExpression ( expressionList )") .matches("primaryExpression . idExpression") @@ -342,7 +342,9 @@ void postfixExpression_reallife() { .matches("G::typeid") .matches("int::typeid") // CUDA - .matches("kernel<<>>(d_data, height, width)"); + .matches("kernel<<>>(d_data, height, width)") + // C++23 + .matches("array[a, b]"); } @Test diff --git a/cxx-squid/src/test/resources/parser/own/C++23/multidimensional-subscript-operator.cc b/cxx-squid/src/test/resources/parser/own/C++23/multidimensional-subscript-operator.cc new file mode 100644 index 000000000..c2c12d80d --- /dev/null +++ b/cxx-squid/src/test/resources/parser/own/C++23/multidimensional-subscript-operator.cc @@ -0,0 +1,25 @@ +template +struct Matrix { + + static inline std::array mat{}; // (2) + + static T& operator[](std::size_t x, std::size_t y) { // (1) + return mat[y * X + x]; + } +}; + +int main() { + + std::cout << '\n'; + + Matrix mat; + for (auto i : {0, 1, 2}) { + for (auto j : {0, 1, 2}) mat[i, j] = (i * 3) + j; + } + for (auto i : {0, 1, 2}) { + for (auto j : {0, 1, 2}) std::cout << mat[i, j] << " "; + } + + std::cout << '\n'; + +} From dddc9db805bce87ddd0f68749640228ffe703921 Mon Sep 17 00:00:00 2001 From: guwirth Date: Thu, 29 Aug 2024 16:53:23 +0200 Subject: [PATCH 15/32] C++23 extend init-statement to allow alias-declaration - Extend init-statement (of for loop) to allow alias-declaration [P2360R0](https://wg21.link/P2360R0) - linked #2536 --- cxx-squid/dox/diff-cpp20-cpp23_grammar.txt | 5 ----- .../src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java | 3 ++- .../src/test/java/org/sonar/cxx/parser/StatementTest.java | 7 +++++-- .../src/test/resources/parser/own/C++23/init-statement.cc | 4 ++++ 4 files changed, 11 insertions(+), 8 deletions(-) create mode 100644 cxx-squid/src/test/resources/parser/own/C++23/init-statement.cc diff --git a/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt b/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt index ae20df630..a5ae8a2fa 100644 --- a/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt +++ b/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt @@ -184,11 +184,6 @@ postfix-expression: **A.6 Statements [gram.stmt]** -init-statement: - expression-statement - simple-declaration - alias-declaration - label: attribute-specifier-seqopt identifier : attribute-specifier-seqopt case constant-expression : diff --git a/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java b/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java index 6ba2fc746..b84c6f397 100644 --- a/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java +++ b/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java @@ -928,7 +928,8 @@ private static void statements(LexerfulGrammarBuilder b) { b.rule(initStatement).is( b.firstOf( expressionStatement, // C++ - simpleDeclaration // C++ + simpleDeclaration, // C++ + aliasDeclaration // C++23 ) ); diff --git a/cxx-squid/src/test/java/org/sonar/cxx/parser/StatementTest.java b/cxx-squid/src/test/java/org/sonar/cxx/parser/StatementTest.java index a4194c825..326c34f27 100644 --- a/cxx-squid/src/test/java/org/sonar/cxx/parser/StatementTest.java +++ b/cxx-squid/src/test/java/org/sonar/cxx/parser/StatementTest.java @@ -251,7 +251,9 @@ void iterationStatement_reallife() { // CLI extension .matches("for each(String^% s in arr) { s = i++.ToString(); }") // C++17 structered bindings - .matches("for (const auto&[key, val] : mymap) { std::cout << key << \": \" << val << std::endl; }"); + .matches("for (const auto&[key, val] : mymap) { std::cout << key << \": \" << val << std::endl; }") + // C++23 + .matches("for (using T = int; T e : v) ;"); } @Test @@ -259,7 +261,8 @@ void forInitStatement_reallife() { setRootRule(CxxGrammarImpl.initStatement); assertThatParser() - .matches("int i=1;"); + .matches("int i=1;") + .matches("using T = int;"); // C++23 } @Test diff --git a/cxx-squid/src/test/resources/parser/own/C++23/init-statement.cc b/cxx-squid/src/test/resources/parser/own/C++23/init-statement.cc new file mode 100644 index 000000000..1c6511fc0 --- /dev/null +++ b/cxx-squid/src/test/resources/parser/own/C++23/init-statement.cc @@ -0,0 +1,4 @@ +void sample() { + for (using T = int; T e : v) + /* something */; +} From 31167d0e781b4d23a53a8493837e8ea10d9d3a9e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 29 Aug 2024 16:41:23 +0000 Subject: [PATCH 16/32] Bump org.apache.ant:ant from 1.10.14 to 1.10.15 Bumps org.apache.ant:ant from 1.10.14 to 1.10.15. --- updated-dependencies: - dependency-name: org.apache.ant:ant dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e5ea65ea3..6a5ed3c87 100644 --- a/pom.xml +++ b/pom.xml @@ -266,7 +266,7 @@ 8.9 - 1.10.14 + 1.10.15 9.7 3.26.3 2.16.1 From c98012f3984ce5f8dddade7c5e6189cbddb7a5cc Mon Sep 17 00:00:00 2001 From: guwirth Date: Fri, 30 Aug 2024 14:18:18 +0200 Subject: [PATCH 17/32] C++23 lambda changes - [make () more optional for lambdas](https://en.cppreference.com/w/cpp/language/lambda) [P1102R2](https://wg21.link/P1102R2) - [attributes on lambdas](https://en.cppreference.com/w/cpp/language/lambda) [P2173R1](https://wg21.link/P2173R1) - linked to #2536 --- cxx-squid/dox/diff-cpp20-cpp23_grammar.txt | 23 ------- .../org/sonar/cxx/parser/CxxGrammarImpl.java | 39 ++++++++--- .../cxx/parser/LamdaExpressionsTest.java | 64 ++++++++++--------- .../parser/own/C++23/lambda-attributes.cc | 5 ++ .../own/C++23/optional-parenthesis-lambdas.cc | 21 ++++++ 5 files changed, 92 insertions(+), 60 deletions(-) create mode 100644 cxx-squid/src/test/resources/parser/own/C++23/lambda-attributes.cc create mode 100644 cxx-squid/src/test/resources/parser/own/C++23/optional-parenthesis-lambdas.cc diff --git a/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt b/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt index 9a3b4ba38..069136863 100644 --- a/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt +++ b/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt @@ -134,29 +134,6 @@ d-char: **A.5 Expressions [gram.expr]** -lambda-expression: - lambda-introducer attribute-specifier-seqopt lambda-declarator compound-statement - lambda-introducer < template-parameter-list > requires-clauseopt attribute-specifier-seqopt lambda-declarator compound-statement - -lambda-introducer: - [ lambda-captureopt ] - -lambda-declarator: - lambda-specifier-seq noexcept-specifieropt attribute-specifier-seqopt trailing-return-typeopt - noexcept-specifier attribute-specifier-seqopt trailing-return-typeopt - trailing-return-typeopt - ( parameter-declaration-clause ) lambda-specifier-seqopt noexcept-specifieropt attribute-specifier-seqopt trailing-return-typeopt requires-clauseopt - -lambda-specifier: - consteval - constexpr - mutable - static - -lambda-specifier-seq: - lambda-specifier - lambda-specifier lambda-specifier-seq - requirement-parameter-list: ( parameter-declaration-clause ) diff --git a/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java b/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java index 495027fb6..93eee038f 100644 --- a/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java +++ b/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java @@ -60,6 +60,8 @@ public enum CxxGrammarImpl implements GrammarRuleKey { nestedNameSpecifier, lambdaExpression, lambdaIntroducer, + lambdaSpecifier, + lambdaSpecifierSeq, lambdaCapture, captureDefault, captureList, @@ -538,12 +540,12 @@ private static void expressions(LexerfulGrammarBuilder b) { ); b.rule(lambdaExpression).is( - lambdaIntroducer, // C++ - b.optional( - b.sequence("<", templateParameterList, ">", b.optional(requiresClause)) // C++ - ), - b.optional(lambdaDeclarator), // C++ - compoundStatement // C++ + b.firstOf( + b.sequence(lambdaIntroducer, b.optional(attributeSpecifierSeq), lambdaDeclarator, compoundStatement), // C++ + b.sequence(lambdaIntroducer, "<", templateParameterList, ">", b.optional(requiresClause), + b.optional(attributeSpecifierSeq), lambdaDeclarator, compoundStatement // C++ + ) + ) ); b.rule(lambdaIntroducer).is( @@ -551,8 +553,29 @@ private static void expressions(LexerfulGrammarBuilder b) { ); b.rule(lambdaDeclarator).is( - "(", parameterDeclarationClause, ")", b.optional(declSpecifierSeq), b.optional(noexceptSpecifier), - b.optional(attributeSpecifierSeq), b.optional(trailingReturnType), b.optional(requiresClause) // C++ + b.firstOf( + b.sequence(lambdaSpecifierSeq, b.optional(noexceptSpecifier), b.optional(attributeSpecifierSeq), + b.optional(trailingReturnType)), // C++ + b.sequence(noexceptSpecifier, b.optional(attributeSpecifierSeq), + b.optional(trailingReturnType)), // C++ + b.sequence("(", parameterDeclarationClause, ")", b.optional(lambdaSpecifierSeq), + b.optional(noexceptSpecifier), b.optional(attributeSpecifierSeq), b.optional(trailingReturnType), + b.optional(requiresClause)), // C++ + b.optional(trailingReturnType) // C++ + ) + ); + + b.rule(lambdaSpecifier).is( + b.firstOf( + CxxKeyword.CONSTEVAL, // C++ + CxxKeyword.CONSTEXPR, // C++ + CxxKeyword.MUTABLE, // C++ + CxxKeyword.STATIC // C++ + ) + ); + + b.rule(lambdaSpecifierSeq).is( + b.oneOrMore(lambdaSpecifier) // C++ ); b.rule(lambdaCapture).is( diff --git a/cxx-squid/src/test/java/org/sonar/cxx/parser/LamdaExpressionsTest.java b/cxx-squid/src/test/java/org/sonar/cxx/parser/LamdaExpressionsTest.java index cee761055..7c03310c7 100644 --- a/cxx-squid/src/test/java/org/sonar/cxx/parser/LamdaExpressionsTest.java +++ b/cxx-squid/src/test/java/org/sonar/cxx/parser/LamdaExpressionsTest.java @@ -35,12 +35,16 @@ void lambdaExpression() { mockRule(CxxGrammarImpl.compoundStatement); mockRule(CxxGrammarImpl.templateParameterList); mockRule(CxxGrammarImpl.requiresClause); + mockRule(CxxGrammarImpl.attributeSpecifierSeq); assertThatParser() - .matches("lambdaIntroducer compoundStatement") - .matches("lambdaIntroducer < templateParameterList > compoundStatement") - .matches("lambdaIntroducer < templateParameterList > requiresClause compoundStatement") - .matches("lambdaIntroducer lambdaDeclarator compoundStatement"); + .matches("lambdaIntroducer lambdaDeclarator compoundStatement") + .matches("lambdaIntroducer attributeSpecifierSeq lambdaDeclarator compoundStatement") + .matches("lambdaIntroducer < templateParameterList > lambdaDeclarator compoundStatement") + .matches("lambdaIntroducer < templateParameterList > requiresClause lambdaDeclarator compoundStatement") + .matches("lambdaIntroducer < templateParameterList > attributeSpecifierSeq lambdaDeclarator compoundStatement") + .matches( + "lambdaIntroducer < templateParameterList > requiresClause attributeSpecifierSeq lambdaDeclarator compoundStatement"); } @Test @@ -74,7 +78,12 @@ void lambdaExpression_reallife() { .matches("[](const auto& m) { return m.size(); }") .matches("[value = 1] { return value; }") .matches("[value = std::move(ptr)] { return *value; }") - .matches("[&r = x, y = x+1] { r += 2; return y+2; }"); + .matches("[&r = x, y = x+1] { r += 2; return y+2; }") + // C++23 + .matches("[] mutable { }") + .matches("[] static { }") + .matches("[][[noreturn]]() { throw; }") + .matches("[][[nodiscard, vendor::attr]]()->int { return 42; }"); } @Test @@ -185,6 +194,7 @@ void initCapture_reallife() { void lambdaDeclarator() { setRootRule(CxxGrammarImpl.lambdaDeclarator); + mockRule(CxxGrammarImpl.lambdaSpecifierSeq); mockRule(CxxGrammarImpl.parameterDeclarationClause); mockRule(CxxGrammarImpl.noexceptSpecifier); mockRule(CxxGrammarImpl.attributeSpecifierSeq); @@ -192,32 +202,28 @@ void lambdaDeclarator() { mockRule(CxxGrammarImpl.requiresClause); assertThatParser() - .matches("( parameterDeclarationClause ) ") // all opt out - - .matches("( parameterDeclarationClause ) mutable") // mutable in - - .matches("( parameterDeclarationClause ) noexceptSpecifier") // noexceptSpecifier in - - .matches("( parameterDeclarationClause ) attributeSpecifierSeq") // attributeSpecifierSeq in - - .matches("( parameterDeclarationClause ) trailingReturnType") // trailingReturnType in - - .matches("( parameterDeclarationClause ) mutable noexceptSpecifier") // complex 1 - - .matches("( parameterDeclarationClause ) mutable noexceptSpecifier attributeSpecifierSeq") // complex 2 - + .matches("lambdaSpecifierSeq") + .matches("lambdaSpecifierSeq noexceptSpecifier") + .matches("lambdaSpecifierSeq attributeSpecifierSeq") + .matches("lambdaSpecifierSeq trailingReturnType") + .matches("lambdaSpecifierSeq noexceptSpecifier attributeSpecifierSeq") + .matches("lambdaSpecifierSeq noexceptSpecifier trailingReturnType") + .matches("lambdaSpecifierSeq attributeSpecifierSeq trailingReturnType") + .matches("lambdaSpecifierSeq noexceptSpecifier attributeSpecifierSeq trailingReturnType") + .matches("lambdaSpecifierSeq noexceptSpecifier attributeSpecifierSeq trailingReturnType") + .matches("noexceptSpecifier") + .matches("noexceptSpecifier attributeSpecifierSeq") + .matches("noexceptSpecifier trailingReturnType") + .matches("noexceptSpecifier attributeSpecifierSeq trailingReturnType") + .matches("( parameterDeclarationClause )") + .matches("( parameterDeclarationClause ) lambdaSpecifierSeq") + .matches("( parameterDeclarationClause ) lambdaSpecifierSeq noexceptSpecifier") + .matches("( parameterDeclarationClause ) lambdaSpecifierSeq noexceptSpecifier attributeSpecifierSeq") .matches( - "( parameterDeclarationClause ) mutable noexceptSpecifier attributeSpecifierSeq trailingReturnType") // complex - // 3 - - .matches("( parameterDeclarationClause ) noexceptSpecifier attributeSpecifierSeq") // complex 4 - - .matches("( parameterDeclarationClause ) noexceptSpecifier attributeSpecifierSeq trailingReturnType") // complex 5 - - .matches("( parameterDeclarationClause ) attributeSpecifierSeq trailingReturnType") // complex 6 - + "( parameterDeclarationClause ) lambdaSpecifierSeq noexceptSpecifier attributeSpecifierSeq trailingReturnType") .matches( - "( parameterDeclarationClause ) noexceptSpecifier attributeSpecifierSeq trailingReturnType requiresClause"); + "( parameterDeclarationClause ) lambdaSpecifierSeq noexceptSpecifier attributeSpecifierSeq trailingReturnType requiresClause") + .matches("trailingReturnType"); } } diff --git a/cxx-squid/src/test/resources/parser/own/C++23/lambda-attributes.cc b/cxx-squid/src/test/resources/parser/own/C++23/lambda-attributes.cc new file mode 100644 index 000000000..ba5484a74 --- /dev/null +++ b/cxx-squid/src/test/resources/parser/own/C++23/lambda-attributes.cc @@ -0,0 +1,5 @@ +auto rethrower = [][[noreturn]]() { throw; }; + +auto lm = [][[nodiscard]]()->int { return 42; }; + +auto lm = [][[nodiscard, vendor::attr]]()->int { return 42; }; diff --git a/cxx-squid/src/test/resources/parser/own/C++23/optional-parenthesis-lambdas.cc b/cxx-squid/src/test/resources/parser/own/C++23/optional-parenthesis-lambdas.cc new file mode 100644 index 000000000..9b3e451f0 --- /dev/null +++ b/cxx-squid/src/test/resources/parser/own/C++23/optional-parenthesis-lambdas.cc @@ -0,0 +1,21 @@ +std::string s1 = "abc"; +auto withParen = [s1 = std::move(s1)] () { + std::cout << s1 << '\n'; +}; + +std::string s2 = "abc"; +auto noSean = [s2 = std::move(s2)] { // Note no syntax error in C++ < 23 + std::cout << s2 << '\n'; +}; + +std::string s3 = "abc"; +auto withParenCpp23 = [s3 = std::move(s3)] () mutable { + s3 += "d"; + std::cout << s3 << '\n'; +}; + +std::string s4 = "abc"; +auto noSeanCpp23 = [s4 = std::move(s4)] mutable { // C++23, syntax error before without () + s4 += "d"; + std::cout << s4 << '\n'; +}; From 8d13a91b5fa2d880f021ec46520b1c4ad162fc56 Mon Sep 17 00:00:00 2001 From: guwirth Date: Mon, 2 Sep 2024 11:08:53 +0200 Subject: [PATCH 18/32] C++23: labels at the end of compound statements - [P2324R2](https://wg21.link/P2324R2) - linked to #2536 --- cxx-squid/dox/diff-cpp20-cpp23_grammar.txt | 17 ---------- .../org/sonar/cxx/parser/CxxGrammarImpl.java | 22 +++++++++---- .../org/sonar/cxx/parser/StatementTest.java | 31 +++++++++++++------ .../parser/own/C++23/labels-at-the-end.cc | 10 ++++++ 4 files changed, 47 insertions(+), 33 deletions(-) create mode 100644 cxx-squid/src/test/resources/parser/own/C++23/labels-at-the-end.cc diff --git a/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt b/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt index 069136863..b867dab99 100644 --- a/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt +++ b/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt @@ -141,23 +141,6 @@ requirement-seq: requirement requirement requirement-seq -**A.6 Statements [gram.stmt]** - -label: - attribute-specifier-seqopt identifier : - attribute-specifier-seqopt case constant-expression : - attribute-specifier-seqopt default : - -labeled-statement: - label statement - -compound-statement: - { statement-seqopt label-seqopt } - -label-seq: - label - label-seq label - **A.7 Declarations [gram.dcl]** declaration: diff --git a/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java b/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java index 93eee038f..6f907c0f6 100644 --- a/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java +++ b/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java @@ -119,7 +119,9 @@ public enum CxxGrammarImpl implements GrammarRuleKey { expressionStatement, compoundStatement, statementSeq, + labelSeq, condition, + label, selectionStatement, iterationStatement, initStatement, @@ -963,32 +965,40 @@ private static void statements(LexerfulGrammarBuilder b) { ) ); - b.rule(labeledStatement).is( + b.rule(label).is( b.firstOf( - b.sequence(b.optional(attributeSpecifierSeq), IDENTIFIER, ":", statement), // C++ + b.sequence(b.optional(attributeSpecifierSeq), IDENTIFIER, ":"), // C++ b.sequence( b.optional(attributeSpecifierSeq), CxxKeyword.CASE, constantExpression, b.firstOf( - b.sequence(":", statement), // C++ - b.sequence("...", constantExpression, ":", statement) // EXTENSION: gcc's case range + ":", // C++ + b.sequence("...", constantExpression, ":") // EXTENSION: gcc's case range ) ), - b.sequence(b.optional(attributeSpecifierSeq), CxxKeyword.DEFAULT, ":", statement) // C++ + b.sequence(b.optional(attributeSpecifierSeq), CxxKeyword.DEFAULT, ":") // C++ ) ); + b.rule(labeledStatement).is( + label, statement + ); + b.rule(expressionStatement).is( b.optional(expression), ";" // C++ ); b.rule(compoundStatement).is( - "{", b.optional(statementSeq), "}" // C++ + "{", b.optional(statementSeq), b.optional(labelSeq), "}" // C++ ); b.rule(statementSeq).is( b.oneOrMore(statement) // C++ ); + b.rule(labelSeq).is( + b.oneOrMore(label) // C++ + ); + b.rule(selectionStatement).is( b.firstOf( b.sequence(CxxKeyword.IF, b.optional(CxxKeyword.CONSTEXPR), "(", b.optional(initStatement), condition, ")", diff --git a/cxx-squid/src/test/java/org/sonar/cxx/parser/StatementTest.java b/cxx-squid/src/test/java/org/sonar/cxx/parser/StatementTest.java index 326c34f27..e1faf7ad2 100644 --- a/cxx-squid/src/test/java/org/sonar/cxx/parser/StatementTest.java +++ b/cxx-squid/src/test/java/org/sonar/cxx/parser/StatementTest.java @@ -97,23 +97,23 @@ void selectionStatement_reallife() { } @Test - void labeledStatement() { - setRootRule(CxxGrammarImpl.labeledStatement); + void label() { + setRootRule(CxxGrammarImpl.label); mockRule(CxxGrammarImpl.attributeSpecifierSeq); mockRule(CxxGrammarImpl.statement); mockRule(CxxGrammarImpl.constantExpression); assertThatParser() - .matches("foo : statement") - .matches("attributeSpecifierSeq foo : statement") - .matches("case constantExpression : statement") - .matches("attributeSpecifierSeq case constantExpression : statement") - .matches("default : statement") - .matches("attributeSpecifierSeq default : statement") + .matches("foo :") + .matches("attributeSpecifierSeq foo :") + .matches("case constantExpression :") + .matches("attributeSpecifierSeq case constantExpression :") + .matches("default :") + .matches("attributeSpecifierSeq default :") // EXTENSION: gcc's case range - .matches("case constantExpression ... constantExpression : statement") - .matches("attributeSpecifierSeq case constantExpression ... constantExpression : statement"); + .matches("case constantExpression ... constantExpression :") + .matches("attributeSpecifierSeq case constantExpression ... constantExpression :"); } @Test @@ -127,6 +127,17 @@ void statementSeq() { .matches("statement statement"); } + @Test + void labelSeq() { + setRootRule(CxxGrammarImpl.labelSeq); + + mockRule(CxxGrammarImpl.label); + + assertThatParser() + .matches("label") + .matches("label label"); + } + @Test void selectionStatement() { setRootRule(CxxGrammarImpl.selectionStatement); diff --git a/cxx-squid/src/test/resources/parser/own/C++23/labels-at-the-end.cc b/cxx-squid/src/test/resources/parser/own/C++23/labels-at-the-end.cc new file mode 100644 index 000000000..55934869d --- /dev/null +++ b/cxx-squid/src/test/resources/parser/own/C++23/labels-at-the-end.cc @@ -0,0 +1,10 @@ +void foo() +{ + first: // allowed in C++, now also allowed in C + int x; + + second: // allowed in both C++ and C + x = 1; + + last: // C++23: now also allowed in C++ +} From be44729be013ec6bb5a13c5e037b32a61cec847f Mon Sep 17 00:00:00 2001 From: guwirth Date: Mon, 2 Sep 2024 12:09:53 +0200 Subject: [PATCH 19/32] C++23: meaningful exports - DR20: Meaningful exports [P2615R0](https://wg21.link/P2615R0) - linked #2536 --- cxx-squid/dox/diff-cpp20-cpp23_grammar.txt | 32 -------------- .../org/sonar/cxx/parser/CxxGrammarImpl.java | 27 ++++++++---- .../sonar/cxx/parser/DeclarationsTest.java | 42 ++++++++++++++----- .../java/org/sonar/cxx/parser/ModuleTest.java | 4 +- .../parser/own/C++23/meaningful-exports.cc | 4 ++ 5 files changed, 58 insertions(+), 51 deletions(-) create mode 100644 cxx-squid/src/test/resources/parser/own/C++23/meaningful-exports.cc diff --git a/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt b/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt index b867dab99..6c479cc5b 100644 --- a/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt +++ b/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt @@ -143,27 +143,6 @@ requirement-seq: **A.7 Declarations [gram.dcl]** -declaration: - name-declaration - special-declaration - -name-declaration: - block-declaration - nodeclspec-function-declaration - function-definition - template-declaration - deduction-guide - linkage-specification - namespace-definition - empty-declaration - attribute-declaration - module-import-declaration - -special-declaration: - explicit-instantiation - explicit-specialization - export-declaration - elaborated-type-specifier: class-key attribute-specifier-seqopt nested-name-specifieropt identifier class-key simple-template-id @@ -177,17 +156,6 @@ using-enum-declarator: nested-name-specifieropt identifier nested-name-specifieropt simple-template-id -linkage-specification: - extern string-literal { declaration-seqopt } - extern string-literal name-declaration - -**A.8 Modules [gram.module]** - -export-declaration: - export name-declaration - export { declaration-seqopt } - export-keyword module-import-declaration - **A.11 Templates [gram.temp]** concept-definition: diff --git a/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java b/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java index 6f907c0f6..4716e1990 100644 --- a/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java +++ b/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java @@ -133,6 +133,8 @@ public enum CxxGrammarImpl implements GrammarRuleKey { // Declarations declarationSeq, declaration, + nameDeclaration, + specialDeclaration, blockDeclaration, nodeclspecFunctionDeclaration, aliasDeclaration, @@ -1079,6 +1081,13 @@ private static void declarations(LexerfulGrammarBuilder b) { ).skipIfOneChild(); b.rule(declaration).is( + b.firstOf( + nameDeclaration, + specialDeclaration + ) + ); + + b.rule(nameDeclaration).is( b.firstOf( // identifiers with special meaning: import and module => must be placed before rules that start with an identifier! moduleImportDeclaration, // C++ import ... @@ -1088,15 +1097,19 @@ private static void declarations(LexerfulGrammarBuilder b) { functionDefinition, // C++ templateDeclaration, // C++ deductionGuide, // C++ - cliGenericDeclaration, // C++/CLI - explicitInstantiation, // C++ - explicitSpecialization, // C++ - exportDeclaration, // C++ linkageSpecification, // C++ namespaceDefinition, // C++ emptyDeclaration, // C++ - attributeDeclaration, // C++ + attributeDeclaration // C++ + ) + ); + b.rule(specialDeclaration).is( + b.firstOf( + cliGenericDeclaration, // C++/CLI + explicitInstantiation, // C++ + explicitSpecialization, // C++ + exportDeclaration, // C++ vcAtlDeclaration // Attributted-ATL ) ); @@ -1713,7 +1726,7 @@ private static void declarations(LexerfulGrammarBuilder b) { CxxKeyword.EXTERN, STRING, b.firstOf( b.sequence("{", b.optional(declarationSeq), "}"), // C++ - declaration // C++ + nameDeclaration // C++ ) ); @@ -1807,7 +1820,7 @@ private static void modules(LexerfulGrammarBuilder b) { b.rule(exportDeclaration).is( // C++ "export", b.firstOf( - declaration, + nameDeclaration, b.sequence("{", b.optional(declarationSeq), "}"), moduleImportDeclaration ) diff --git a/cxx-squid/src/test/java/org/sonar/cxx/parser/DeclarationsTest.java b/cxx-squid/src/test/java/org/sonar/cxx/parser/DeclarationsTest.java index ec7ca1409..9dd4124c0 100644 --- a/cxx-squid/src/test/java/org/sonar/cxx/parser/DeclarationsTest.java +++ b/cxx-squid/src/test/java/org/sonar/cxx/parser/DeclarationsTest.java @@ -38,19 +38,27 @@ void declarationSeq() { void declaration() { setRootRule(CxxGrammarImpl.declaration); + mockRule(CxxGrammarImpl.nameDeclaration); + mockRule(CxxGrammarImpl.specialDeclaration); + + assertThatParser() + .matches("nameDeclaration") + .matches("specialDeclaration"); + } + + @Test + void nameDeclaration() { + setRootRule(CxxGrammarImpl.nameDeclaration); + mockRule(CxxGrammarImpl.blockDeclaration); mockRule(CxxGrammarImpl.nodeclspecFunctionDeclaration); mockRule(CxxGrammarImpl.functionDefinition); mockRule(CxxGrammarImpl.templateDeclaration); mockRule(CxxGrammarImpl.deductionGuide); - mockRule(CxxGrammarImpl.cliGenericDeclaration); - mockRule(CxxGrammarImpl.explicitInstantiation); - mockRule(CxxGrammarImpl.explicitSpecialization); mockRule(CxxGrammarImpl.linkageSpecification); mockRule(CxxGrammarImpl.namespaceDefinition); mockRule(CxxGrammarImpl.emptyDeclaration); mockRule(CxxGrammarImpl.attributeDeclaration); - mockRule(CxxGrammarImpl.vcAtlDeclaration); assertThatParser() .matches("blockDeclaration") @@ -58,13 +66,27 @@ void declaration() { .matches("functionDefinition") .matches("templateDeclaration") .matches("deductionGuide") - .matches("cliGenericDeclaration") - .matches("explicitInstantiation") - .matches("explicitSpecialization") .matches("linkageSpecification") .matches("namespaceDefinition") .matches("emptyDeclaration") - .matches("attributeDeclaration") + .matches("attributeDeclaration"); + } + + @Test + void specialDeclaration() { + setRootRule(CxxGrammarImpl.specialDeclaration); + + mockRule(CxxGrammarImpl.cliGenericDeclaration); + mockRule(CxxGrammarImpl.explicitInstantiation); + mockRule(CxxGrammarImpl.explicitSpecialization); + mockRule(CxxGrammarImpl.exportDeclaration); + mockRule(CxxGrammarImpl.vcAtlDeclaration); + + assertThatParser() + .matches("cliGenericDeclaration") + .matches("explicitInstantiation") + .matches("explicitSpecialization") + .matches("exportDeclaration") .matches("vcAtlDeclaration"); } @@ -650,12 +672,12 @@ void usingDirective() { void linkageSpecification() { setRootRule(CxxGrammarImpl.linkageSpecification); - mockRule(CxxGrammarImpl.declaration); + mockRule(CxxGrammarImpl.nameDeclaration); mockRule(CxxGrammarImpl.declarationSeq); assertThatParser() .matches("extern \"foo\" { declarationSeq }") - .matches("extern \"foo\" declaration"); + .matches("extern \"foo\" nameDeclaration"); } @Test diff --git a/cxx-squid/src/test/java/org/sonar/cxx/parser/ModuleTest.java b/cxx-squid/src/test/java/org/sonar/cxx/parser/ModuleTest.java index c02301c3e..d88163eee 100644 --- a/cxx-squid/src/test/java/org/sonar/cxx/parser/ModuleTest.java +++ b/cxx-squid/src/test/java/org/sonar/cxx/parser/ModuleTest.java @@ -117,12 +117,12 @@ void moduleNameQualifier() { void exportDeclaration() { setRootRule(CxxGrammarImpl.exportDeclaration); - mockRule(CxxGrammarImpl.declaration); + mockRule(CxxGrammarImpl.nameDeclaration); mockRule(CxxGrammarImpl.declarationSeq); mockRule(CxxGrammarImpl.moduleImportDeclaration); assertThatParser() - .matches("export declaration") + .matches("export nameDeclaration") .matches("export { }") .matches("export { declarationSeq }") .matches("export moduleImportDeclaration"); diff --git a/cxx-squid/src/test/resources/parser/own/C++23/meaningful-exports.cc b/cxx-squid/src/test/resources/parser/own/C++23/meaningful-exports.cc new file mode 100644 index 000000000..71a1e41fc --- /dev/null +++ b/cxx-squid/src/test/resources/parser/own/C++23/meaningful-exports.cc @@ -0,0 +1,4 @@ +export module M; // OK +export int f(); // OK +export namespace N { } // OK +export using namespace N; // OK From 230c5d65a24813335ce344fcc2bc22ae2f547a73 Mon Sep 17 00:00:00 2001 From: guwirth Date: Mon, 2 Sep 2024 14:30:26 +0200 Subject: [PATCH 20/32] C++23: some more grammar changes - add final grammar changes for C++23 - auto(x) and auto{x} [P0849R8](https://wg21.link/P0849R8) - duplicate attributes [P2156R1](https://wg21.link/P2156R1) - static constexpr [P2647R1](https://wg21.link/P2647R1) - static operator [P2589R0](https://wg21.link/P2589R0) [P1169R4](https://wg21.link/P1169R4) - linked #2536 --- cxx-squid/dox/diff-cpp20-cpp23_grammar.txt | 29 ---------- .../org/sonar/cxx/parser/CxxGrammarImpl.java | 22 +++++--- .../sonar/cxx/parser/DeclarationsTest.java | 4 +- .../org/sonar/cxx/parser/ExpressionTest.java | 1 - .../org/sonar/cxx/parser/TemplatesTest.java | 5 +- .../test/resources/parser/own/C++23/auto.cc | 31 ++++++++++ .../parser/own/C++23/duplicate-attributes.cc | 8 +++ .../parser/own/C++23/static-constexpr.cc | 9 +++ .../parser/own/C++23/static-operator.cc | 56 +++++++++++++++++++ 9 files changed, 123 insertions(+), 42 deletions(-) create mode 100644 cxx-squid/src/test/resources/parser/own/C++23/auto.cc create mode 100644 cxx-squid/src/test/resources/parser/own/C++23/duplicate-attributes.cc create mode 100644 cxx-squid/src/test/resources/parser/own/C++23/static-constexpr.cc create mode 100644 cxx-squid/src/test/resources/parser/own/C++23/static-operator.cc diff --git a/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt b/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt index 6c479cc5b..fcb495fc8 100644 --- a/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt +++ b/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt @@ -131,32 +131,3 @@ d-char: any member of the basic character set except: u+0020 space, u+0028 left parenthesis, u+0029 right parenthesis, u+005c reverse solidus, u+0009 character tabulation, u+000b line tabulation, u+000c form feed, and new-line - -**A.5 Expressions [gram.expr]** - -requirement-parameter-list: - ( parameter-declaration-clause ) - -requirement-seq: - requirement - requirement requirement-seq - -**A.7 Declarations [gram.dcl]** - -elaborated-type-specifier: - class-key attribute-specifier-seqopt nested-name-specifieropt identifier - class-key simple-template-id - class-key nested-name-specifier templateopt simple-template-id - enum nested-name-specifieropt identifier - -using-enum-declaration: - using enum using-enum-declarator ; - -using-enum-declarator: - nested-name-specifieropt identifier - nested-name-specifieropt simple-template-id - -**A.11 Templates [gram.temp]** - -concept-definition: - concept concept-name attribute-specifier-seqopt = constraint-expression ; diff --git a/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java b/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java index 4716e1990..07ffc2959 100644 --- a/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java +++ b/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java @@ -164,7 +164,6 @@ public enum CxxGrammarImpl implements GrammarRuleKey { decltypeSpecifier, placeholderTypeSpecifier, elaboratedTypeSpecifier, - elaboratedEnumSpecifier, enumName, enumSpecifier, enumHead, @@ -176,6 +175,7 @@ public enum CxxGrammarImpl implements GrammarRuleKey { enumeratorDefinition, enumerator, usingEnumDeclaration, + usingEnumDeclarator, namespaceName, namespaceDefinition, namedNamespaceDefinition, @@ -649,7 +649,7 @@ private static void expressions(LexerfulGrammarBuilder b) { ); b.rule(requirementParameterList).is( - "(", b.optional(parameterDeclarationClause), ")" // C++ + "(", parameterDeclarationClause, ")" // C++ ); b.rule(requirementBody).is( @@ -1290,14 +1290,10 @@ private static void declarations(LexerfulGrammarBuilder b) { b.sequence(b.optional(attributeSpecifierSeq), b.optional(nestedNameSpecifier), IDENTIFIER) // C++ ) ), - elaboratedEnumSpecifier // C++ + b.sequence(CxxKeyword.ENUM, b.optional(nestedNameSpecifier), IDENTIFIER) // C++ ) ); - b.rule(elaboratedEnumSpecifier).is( - CxxKeyword.ENUM, b.optional(nestedNameSpecifier), IDENTIFIER // C++ - ); - b.rule(decltypeSpecifier).is( CxxKeyword.DECLTYPE, "(", b.firstOf( @@ -1632,7 +1628,15 @@ private static void declarations(LexerfulGrammarBuilder b) { ); b.rule(usingEnumDeclaration).is( - CxxKeyword.USING, elaboratedEnumSpecifier, ";" + CxxKeyword.USING, CxxKeyword.ENUM, usingEnumDeclarator, ";" + ); + + b.rule(usingEnumDeclarator).is( + b.optional(nestedNameSpecifier), + b.firstOf( + IDENTIFIER, + simpleTemplateId + ) ); b.rule(namespaceName).is( @@ -2306,7 +2310,7 @@ private static void templates(LexerfulGrammarBuilder b) { ); b.rule(conceptDefinition).is( - CxxKeyword.CONCEPT, conceptName, "=", constraintExpression, ";" // C++ + CxxKeyword.CONCEPT, conceptName, b.optional(attributeSpecifierSeq), "=", constraintExpression, ";" // C++ ); b.rule(conceptName).is( diff --git a/cxx-squid/src/test/java/org/sonar/cxx/parser/DeclarationsTest.java b/cxx-squid/src/test/java/org/sonar/cxx/parser/DeclarationsTest.java index 9dd4124c0..2cbba3781 100644 --- a/cxx-squid/src/test/java/org/sonar/cxx/parser/DeclarationsTest.java +++ b/cxx-squid/src/test/java/org/sonar/cxx/parser/DeclarationsTest.java @@ -433,7 +433,6 @@ void elaboratedTypeSpecifier() { mockRule(CxxGrammarImpl.attributeSpecifierSeq); mockRule(CxxGrammarImpl.nestedNameSpecifier); mockRule(CxxGrammarImpl.simpleTemplateId); - mockRule(CxxGrammarImpl.elaboratedEnumSpecifier); assertThatParser() .matches("classKey foo") @@ -443,7 +442,8 @@ void elaboratedTypeSpecifier() { .matches("classKey simpleTemplateId") .matches("classKey nestedNameSpecifier simpleTemplateId") .matches("classKey nestedNameSpecifier template simpleTemplateId") - .matches("elaboratedEnumSpecifier"); + .matches("enum foo") + .matches("enum nestedNameSpecifier foo"); } @Test diff --git a/cxx-squid/src/test/java/org/sonar/cxx/parser/ExpressionTest.java b/cxx-squid/src/test/java/org/sonar/cxx/parser/ExpressionTest.java index 5d9a00d22..5984f676b 100644 --- a/cxx-squid/src/test/java/org/sonar/cxx/parser/ExpressionTest.java +++ b/cxx-squid/src/test/java/org/sonar/cxx/parser/ExpressionTest.java @@ -87,7 +87,6 @@ void requirementParameterList() { mockRule(CxxGrammarImpl.parameterDeclarationClause); assertThatParser() - .matches("( )") .matches("( parameterDeclarationClause )"); } diff --git a/cxx-squid/src/test/java/org/sonar/cxx/parser/TemplatesTest.java b/cxx-squid/src/test/java/org/sonar/cxx/parser/TemplatesTest.java index 326d09339..cf6a59718 100644 --- a/cxx-squid/src/test/java/org/sonar/cxx/parser/TemplatesTest.java +++ b/cxx-squid/src/test/java/org/sonar/cxx/parser/TemplatesTest.java @@ -279,8 +279,11 @@ void conceptDefinition() { mockRule(CxxGrammarImpl.conceptName); mockRule(CxxGrammarImpl.constraintExpression); + mockRule(CxxGrammarImpl.attributeSpecifierSeq); - assertThatParser().matches("concept conceptName = constraintExpression ;"); + assertThatParser() + .matches("concept conceptName = constraintExpression ;") + .matches("concept conceptName attributeSpecifierSeq = constraintExpression ;"); } @Test diff --git a/cxx-squid/src/test/resources/parser/own/C++23/auto.cc b/cxx-squid/src/test/resources/parser/own/C++23/auto.cc new file mode 100644 index 000000000..a74a3b23b --- /dev/null +++ b/cxx-squid/src/test/resources/parser/own/C++23/auto.cc @@ -0,0 +1,31 @@ +void foo() { + // variable definition + auto v(x); + auto v{x}; + ClassTemplate v(x); + ClassTemplate v{x}; + + // new expression + new auto(x); + new auto{x}; + new ClassTemplate(x); + new ClassTemplate{x}; +} + +// function-style cast +template +T cast1(U const &u) { + return auto(u); +} +template +T cast2(U const &u) { + return auto{u}; +} +template +T cast3(U const &u) { + return ClassTemplate(u); +} +template +T cast4(U const &u) { + return ClassTemplate{u}; +} diff --git a/cxx-squid/src/test/resources/parser/own/C++23/duplicate-attributes.cc b/cxx-squid/src/test/resources/parser/own/C++23/duplicate-attributes.cc new file mode 100644 index 000000000..9d27939fe --- /dev/null +++ b/cxx-squid/src/test/resources/parser/own/C++23/duplicate-attributes.cc @@ -0,0 +1,8 @@ +[[gnu::sample]] [[gnu::sample]] [[gnu::hot]] [[nodiscard]] +inline int f(); // declare f with four attributes + +[[gnu::sample, gnu::sample, gnu::hot, nodiscard]] +int f(); // same as above, but uses a single attr specifier that contains four attributes + +[[using gnu : sample, sample, hot]] [[nodiscard]] [[gnu::sample]] +int f(); // same as above diff --git a/cxx-squid/src/test/resources/parser/own/C++23/static-constexpr.cc b/cxx-squid/src/test/resources/parser/own/C++23/static-constexpr.cc new file mode 100644 index 000000000..1abca9d22 --- /dev/null +++ b/cxx-squid/src/test/resources/parser/own/C++23/static-constexpr.cc @@ -0,0 +1,9 @@ +char xdigit1(int n) { + static constexpr char digits[] = "0123456789abcdef"; + return digits[n]; +} + +constexpr char xdigit2(int n) { + static constexpr char digits[] = "0123456789abcdef"; // C++23 + return digits[n]; +} diff --git a/cxx-squid/src/test/resources/parser/own/C++23/static-operator.cc b/cxx-squid/src/test/resources/parser/own/C++23/static-operator.cc new file mode 100644 index 000000000..58b802324 --- /dev/null +++ b/cxx-squid/src/test/resources/parser/own/C++23/static-operator.cc @@ -0,0 +1,56 @@ +// --- static operator() --- + +// Overload Resolution +struct less { + static constexpr auto operator()(int i, int j) -> bool { + return i < j; + } + using P = bool( * )(int, int); + operator P() const { + return operator(); + } +}; + +void foo() { + static_assert(less {}(1, 2)); +} + +// Lambdas +auto four = []() static { + return 4; +}; + +// Static lambdas with capture +auto under_lock = [lock = std::unique_lock(mtx)]() static { + /* do something */ ; +}; + +// --- static operator[] --- + +template < typename T, std::size_t S > struct array: std::array < T, S > { + static constexpr inline std::size_t extent = []() -> std::size_t { + if constexpr(_is_array < T > ) { + return 1 + T::extent; + } + return 1; + }(); + constexpr decltype(auto) + operator[](std::size_t idx) { + return * (this -> data() + idx); + } + constexpr decltype(auto) + operator[](std::size_t idx, convertible_to < std::size_t > auto && ...args) + requires(sizeof...(args) < extent) && (sizeof...(args) >= 1) { + typename std::array < T, S > ::reference v = * (this -> data() + idx); + return v.operator[](args...); + } + constexpr decltype(auto) + operator[](std::size_t idx) const { + return * (this -> data() + idx); + } + constexpr decltype(auto) + operator[](std::size_t idx, convertible_to < std::size_t > auto && ...args) const requires(sizeof...(args) < extent) && (sizeof...(args) >= 1) { + typename std::array < T, S > ::reference v = * (this -> data() + idx); + return v.operator[](args...); + } +}; From 960d74a1ab159c52642499ee61d35a38e695c9df Mon Sep 17 00:00:00 2001 From: guwirth Date: Tue, 3 Sep 2024 18:09:10 +0200 Subject: [PATCH 21/32] C++23: literal suffix for (signed) size_t - [P0330R8](https://wg21.link/P0330R8) - linked #2536 --- cxx-squid/dox/diff-cpp20-cpp23_grammar.txt | 11 ------ .../org/sonar/cxx/parser/CxxLexerPool.java | 2 +- .../org/sonar/cxx/lexer/CxxLexerTest.java | 36 ++++++++++++++++--- .../cxx/preprocessor/PPExpressionTest.java | 13 +++++++ .../parser/own/C++23/literal-suffix-size_t.cc | 13 +++++++ 5 files changed, 59 insertions(+), 16 deletions(-) create mode 100644 cxx-squid/src/test/resources/parser/own/C++23/literal-suffix-size_t.cc diff --git a/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt b/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt index fcb495fc8..e0578fb76 100644 --- a/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt +++ b/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt @@ -54,17 +54,6 @@ identifier-continue: nondigit an element of the translation character set with the Unicode property XID_Continue -integer-suffix: - unsigned-suffix long-suffixopt - unsigned-suffix long-long-suffixopt - unsigned-suffix size-suffixopt - long-suffix unsigned-suffixopt - long-long-suffix unsigned-suffixopt - size-suffix unsigned-suffixopt - -size-suffix: one of - z Z - c-char: basic-c-char escape-sequence diff --git a/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxLexerPool.java b/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxLexerPool.java index 0ee6c9e22..b622b3dfd 100644 --- a/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxLexerPool.java +++ b/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxLexerPool.java @@ -50,7 +50,7 @@ public final class CxxLexerPool { private static final String BIN_PREFIX = "0[bB]"; private static final String EXPONENT = "[Ee][+-]?+[0-9_]([']?+[0-9_]++)*+"; private static final String BINARY_EXPONENT = "[pP][+-]?+\\d([']?+\\d++)*+"; // since C++17 - //private static final String INTEGER_SUFFIX = "(((U|u)(i64|LL|ll|L|l)?)|((i64|LL|ll|L|l)(u|U)?))"; + //private static final String INTEGER_SUFFIX = "(((U|u)(i64|LL|ll|L|l)?)|((i64|LL|ll|L|l)(u|U)?)|((z|Z)(u|U)))"; //private static final String FLOAT_SUFFIX = "(f|l|F|L)"; // ud-suffix: identifier (including INTEGER_SUFFIX, FLOAT_SUFFIX) private static final String UD_SUFFIX = "[_a-zA-Z]\\w*+"; diff --git a/cxx-squid/src/test/java/org/sonar/cxx/lexer/CxxLexerTest.java b/cxx-squid/src/test/java/org/sonar/cxx/lexer/CxxLexerTest.java index 8bf39d193..e3ac2b73b 100644 --- a/cxx-squid/src/test/java/org/sonar/cxx/lexer/CxxLexerTest.java +++ b/cxx-squid/src/test/java/org/sonar/cxx/lexer/CxxLexerTest.java @@ -132,7 +132,14 @@ void decimal_integer_literals() { LiteralValuesBuilder.builder("7LLU").tokenValue("7LLU").tokenType(CxxTokenType.NUMBER).build(), // With Microsoft specific 64-bit integer-suffix: i64 LiteralValuesBuilder.builder("7i64").tokenValue("7i64").tokenType(CxxTokenType.NUMBER).build(), - LiteralValuesBuilder.builder("7ui64").tokenValue("7ui64").tokenType(CxxTokenType.NUMBER).build() + LiteralValuesBuilder.builder("7ui64").tokenValue("7ui64").tokenType(CxxTokenType.NUMBER).build(), + // C++23 + LiteralValuesBuilder.builder("7z").tokenValue("7z").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("7uz").tokenValue("7uz").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("7zu").tokenValue("7zu").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("7Z").tokenValue("7Z").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("7UZ").tokenValue("7UZ").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("7ZU").tokenValue("7ZU").tokenType(CxxTokenType.NUMBER).build() )); values.forEach(value @@ -179,7 +186,14 @@ void octal_integer_literals() { LiteralValuesBuilder.builder("07LLU").tokenValue("07LLU").tokenType(CxxTokenType.NUMBER).build(), // With Microsoft specific 64-bit integer-suffix: i64 LiteralValuesBuilder.builder("07i64").tokenValue("07i64").tokenType(CxxTokenType.NUMBER).build(), - LiteralValuesBuilder.builder("07ui64").tokenValue("07ui64").tokenType(CxxTokenType.NUMBER).build() + LiteralValuesBuilder.builder("07ui64").tokenValue("07ui64").tokenType(CxxTokenType.NUMBER).build(), + // C++23 + LiteralValuesBuilder.builder("07z").tokenValue("07z").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("07uz").tokenValue("07uz").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("07zu").tokenValue("07zu").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("07Z").tokenValue("07Z").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("07UZ").tokenValue("07UZ").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("07ZU").tokenValue("07ZU").tokenType(CxxTokenType.NUMBER).build() )); values.forEach(value @@ -226,7 +240,14 @@ void hex_integer_literals() { LiteralValuesBuilder.builder("0x7LLU").tokenValue("0x7LLU").tokenType(CxxTokenType.NUMBER).build(), // With Microsoft specific 64-bit integer-suffix: i64 LiteralValuesBuilder.builder("0x7i64").tokenValue("0x7i64").tokenType(CxxTokenType.NUMBER).build(), - LiteralValuesBuilder.builder("0x7ui64").tokenValue("0x7ui64").tokenType(CxxTokenType.NUMBER).build() + LiteralValuesBuilder.builder("0x7ui64").tokenValue("0x7ui64").tokenType(CxxTokenType.NUMBER).build(), + // C++23 + LiteralValuesBuilder.builder("0x7z").tokenValue("0x7z").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("0x7uz").tokenValue("0x7uz").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("0x7zu").tokenValue("0x7zu").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("0x7Z").tokenValue("0x7Z").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("0x7UZ").tokenValue("0x7UZ").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("0x7ZU").tokenValue("0x7ZU").tokenType(CxxTokenType.NUMBER).build() )); values.forEach(value @@ -243,7 +264,14 @@ void bin_integer_literals() { // bin integer LiteralValuesBuilder.builder("0b0").tokenValue("0b0").tokenType(CxxTokenType.NUMBER).build(), LiteralValuesBuilder.builder("0B1").tokenValue("0B1").tokenType(CxxTokenType.NUMBER).build(), - LiteralValuesBuilder.builder("0b10101001").tokenValue("0b10101001").tokenType(CxxTokenType.NUMBER).build() + LiteralValuesBuilder.builder("0b10101001").tokenValue("0b10101001").tokenType(CxxTokenType.NUMBER).build(), + // C++23 + LiteralValuesBuilder.builder("0b1z").tokenValue("0b1z").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("0b1uz").tokenValue("0b1uz").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("0b1zu").tokenValue("0b1zu").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("0b1Z").tokenValue("0b1Z").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("0b1UZ").tokenValue("0b1UZ").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("0b1ZU").tokenValue("0b1ZU").tokenType(CxxTokenType.NUMBER).build() )); values.forEach(value diff --git a/cxx-squid/src/test/java/org/sonar/cxx/preprocessor/PPExpressionTest.java b/cxx-squid/src/test/java/org/sonar/cxx/preprocessor/PPExpressionTest.java index d4efe32b2..1e342b54b 100644 --- a/cxx-squid/src/test/java/org/sonar/cxx/preprocessor/PPExpressionTest.java +++ b/cxx-squid/src/test/java/org/sonar/cxx/preprocessor/PPExpressionTest.java @@ -75,9 +75,22 @@ void numbers() { assertThat(evaluate("0xffffffffffffffffui64")).isTrue(); assertThat(evaluate("0xffffffffffffffffi64")).isTrue(); assertThat(evaluate("0x7FFFFFL")).isTrue(); + assertThat(evaluate("1z")).isTrue(); + assertThat(evaluate("1ZU")).isTrue(); + assertThat(evaluate("0x1z")).isTrue(); + assertThat(evaluate("0x1ZU")).isTrue(); + assertThat(evaluate("0b1z")).isTrue(); + assertThat(evaluate("0b1ZU")).isTrue(); assertThat(evaluate("0")).isFalse(); assertThat(evaluate("0x0")).isFalse(); + assertThat(evaluate("0b0")).isFalse(); + assertThat(evaluate("0z")).isFalse(); + assertThat(evaluate("0ZU")).isFalse(); + assertThat(evaluate("0x0z")).isFalse(); + assertThat(evaluate("0x0ZU")).isFalse(); + assertThat(evaluate("0b0z")).isFalse(); + assertThat(evaluate("0b0ZU")).isFalse(); } @Test diff --git a/cxx-squid/src/test/resources/parser/own/C++23/literal-suffix-size_t.cc b/cxx-squid/src/test/resources/parser/own/C++23/literal-suffix-size_t.cc new file mode 100644 index 000000000..ae8f27656 --- /dev/null +++ b/cxx-squid/src/test/resources/parser/own/C++23/literal-suffix-size_t.cc @@ -0,0 +1,13 @@ +auto a = 0z; +auto b = 0zu; +auto c = 0uz; + +auto d = 0Z; +auto e = 0ZU; +auto f = 0UZ; + +void foo() { + for (auto i = 0zu; i < v.size(); ++i) { + std::cout << i << ": " << v[i] << '\n'; + } +} From f000b41c58903a1a8c505a6e09ea15f09d49bd52 Mon Sep 17 00:00:00 2001 From: guwirth Date: Wed, 4 Sep 2024 10:46:03 +0200 Subject: [PATCH 22/32] C++23: floting point suffixes - [Requirements for optional extended floating-point types](https://en.cppreference.com/w/cpp/language/floating_literal) [P1467R9](https://wg21.link/P1467R9) - linked #2536 --- cxx-squid/dox/diff-cpp20-cpp23_grammar.txt | 3 -- .../org/sonar/cxx/parser/CxxLexerPool.java | 2 +- .../org/sonar/cxx/lexer/CxxLexerTest.java | 15 ++++++++-- .../cxx/preprocessor/PPExpressionTest.java | 30 +++++++++++++++++++ .../parser/own/C++23/floating-point-suffix.cc | 10 +++++++ 5 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 cxx-squid/src/test/resources/parser/own/C++23/floating-point-suffix.cc diff --git a/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt b/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt index e0578fb76..35cbc1bb2 100644 --- a/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt +++ b/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt @@ -99,9 +99,6 @@ conditional-escape-sequence-char: any member of the basic character set that is not an octal-digit, a simple-escape-sequence-char, or the characters N, o, u, U, or x -floating-point-suffix: one of - f l f16 f32 f64 f128 bf16 F L F16 F32 F64 F128 BF16 - s-char: basic-s-char diff --git a/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxLexerPool.java b/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxLexerPool.java index b622b3dfd..9d553de97 100644 --- a/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxLexerPool.java +++ b/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxLexerPool.java @@ -51,7 +51,7 @@ public final class CxxLexerPool { private static final String EXPONENT = "[Ee][+-]?+[0-9_]([']?+[0-9_]++)*+"; private static final String BINARY_EXPONENT = "[pP][+-]?+\\d([']?+\\d++)*+"; // since C++17 //private static final String INTEGER_SUFFIX = "(((U|u)(i64|LL|ll|L|l)?)|((i64|LL|ll|L|l)(u|U)?)|((z|Z)(u|U)))"; - //private static final String FLOAT_SUFFIX = "(f|l|F|L)"; + //private static final String FLOAT_SUFFIX = "(f|l|F|L|f16|f32|f64|f128|bf16|F16|F32|F64|F128|BF16)"; // ud-suffix: identifier (including INTEGER_SUFFIX, FLOAT_SUFFIX) private static final String UD_SUFFIX = "[_a-zA-Z]\\w*+"; private static final String DECDIGIT_SEQUENCE = "\\d([']?+\\d++)*+"; diff --git a/cxx-squid/src/test/java/org/sonar/cxx/lexer/CxxLexerTest.java b/cxx-squid/src/test/java/org/sonar/cxx/lexer/CxxLexerTest.java index e3ac2b73b..abb2f585b 100644 --- a/cxx-squid/src/test/java/org/sonar/cxx/lexer/CxxLexerTest.java +++ b/cxx-squid/src/test/java/org/sonar/cxx/lexer/CxxLexerTest.java @@ -414,13 +414,24 @@ void floating_point_literals() { LiteralValuesBuilder.builder("3.14e-10L").tokenValue("3.14e-10L").tokenType(CxxTokenType.NUMBER).build(), LiteralValuesBuilder.builder("3.14E-10L").tokenValue("3.14E-10L").tokenType(CxxTokenType.NUMBER).build(), LiteralValuesBuilder.builder("0e0L").tokenValue("0e0L").tokenType(CxxTokenType.NUMBER).build(), - // c++17: hexadecimal floating literals + // C++17: hexadecimal floating literals LiteralValuesBuilder.builder("0x1ffp10").tokenValue("0x1ffp10").tokenType(CxxTokenType.NUMBER).build(), LiteralValuesBuilder.builder("0X0p-1").tokenValue("0X0p-1").tokenType(CxxTokenType.NUMBER).build(), LiteralValuesBuilder.builder("0x1.p0").tokenValue("0x1.p0").tokenType(CxxTokenType.NUMBER).build(), LiteralValuesBuilder.builder("0xf.p-1").tokenValue("0xf.p-1").tokenType(CxxTokenType.NUMBER).build(), LiteralValuesBuilder.builder("0x0.123p-1").tokenValue("0x0.123p-1").tokenType(CxxTokenType.NUMBER).build(), - LiteralValuesBuilder.builder("0xa.bp10l").tokenValue("0xa.bp10l").tokenType(CxxTokenType.NUMBER).build() + LiteralValuesBuilder.builder("0xa.bp10l").tokenValue("0xa.bp10l").tokenType(CxxTokenType.NUMBER).build(), + // C++23 + LiteralValuesBuilder.builder("1.f16").tokenValue("1.f16").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("1.f32").tokenValue("1.f32").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("1.f64").tokenValue("1.f64").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("1.f128").tokenValue("1.f128").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("1.bf16").tokenValue("1.bf16").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("1.F16").tokenValue("1.F16").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("1.F32").tokenValue("1.F32").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("1.F64").tokenValue("1.F64").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("1.F128").tokenValue("1.F128").tokenType(CxxTokenType.NUMBER).build(), + LiteralValuesBuilder.builder("1.BF16").tokenValue("1.BF16").tokenType(CxxTokenType.NUMBER).build() )); values.forEach(value diff --git a/cxx-squid/src/test/java/org/sonar/cxx/preprocessor/PPExpressionTest.java b/cxx-squid/src/test/java/org/sonar/cxx/preprocessor/PPExpressionTest.java index 1e342b54b..b78c4a406 100644 --- a/cxx-squid/src/test/java/org/sonar/cxx/preprocessor/PPExpressionTest.java +++ b/cxx-squid/src/test/java/org/sonar/cxx/preprocessor/PPExpressionTest.java @@ -81,6 +81,21 @@ void numbers() { assertThat(evaluate("0x1ZU")).isTrue(); assertThat(evaluate("0b1z")).isTrue(); assertThat(evaluate("0b1ZU")).isTrue(); + assertThat(evaluate("1.")).isTrue(); + assertThat(evaluate("1.f")).isTrue(); + assertThat(evaluate("1.F")).isTrue(); + assertThat(evaluate("1.l")).isTrue(); + assertThat(evaluate("1.L")).isTrue(); + assertThat(evaluate("1.f16")).isTrue(); + assertThat(evaluate("1.f32")).isTrue(); + assertThat(evaluate("1.f64")).isTrue(); + assertThat(evaluate("1.f128")).isTrue(); + assertThat(evaluate("1.bf16")).isTrue(); + assertThat(evaluate("1.F16")).isTrue(); + assertThat(evaluate("1.F32")).isTrue(); + assertThat(evaluate("1.F64")).isTrue(); + assertThat(evaluate("1.F128")).isTrue(); + assertThat(evaluate("1.BF16")).isTrue(); assertThat(evaluate("0")).isFalse(); assertThat(evaluate("0x0")).isFalse(); @@ -91,6 +106,21 @@ void numbers() { assertThat(evaluate("0x0ZU")).isFalse(); assertThat(evaluate("0b0z")).isFalse(); assertThat(evaluate("0b0ZU")).isFalse(); + assertThat(evaluate("0.")).isFalse(); + assertThat(evaluate("0.f")).isFalse(); + assertThat(evaluate("0.F")).isFalse(); + assertThat(evaluate("0.l")).isFalse(); + assertThat(evaluate("0.L")).isFalse(); + assertThat(evaluate("0.f16")).isFalse(); + assertThat(evaluate("0.f32")).isFalse(); + assertThat(evaluate("0.f64")).isFalse(); + assertThat(evaluate("0.f128")).isFalse(); + assertThat(evaluate("0.bf16")).isFalse(); + assertThat(evaluate("0.F16")).isFalse(); + assertThat(evaluate("0.F32")).isFalse(); + assertThat(evaluate("0.F64")).isFalse(); + assertThat(evaluate("0.F128")).isFalse(); + assertThat(evaluate("0.BF16")).isFalse(); } @Test diff --git a/cxx-squid/src/test/resources/parser/own/C++23/floating-point-suffix.cc b/cxx-squid/src/test/resources/parser/own/C++23/floating-point-suffix.cc new file mode 100644 index 000000000..0d60ec146 --- /dev/null +++ b/cxx-squid/src/test/resources/parser/own/C++23/floating-point-suffix.cc @@ -0,0 +1,10 @@ +std::float16_t f = 58.f16; +std::float16_t f = 0x1p5F16; +std::float32_t f = 4e2f32; +std::float32_t f = 1.18e-4932lF32; +std::float64_t f = 123.456e-67f64; +std::float64_t f = 0.1F64; +std::float128_t f = .1E4f128; +std::float128_t f = .1F128; +std::bfloat16_t f = 3.14'15'92bf16; +std::bfloat16_t f = -10.0BF16; From 19728bab01cdfc02915a3a6efd30b0cae549ad81 Mon Sep 17 00:00:00 2001 From: guwirth Date: Wed, 4 Sep 2024 15:56:17 +0200 Subject: [PATCH 23/32] C++23: escape sequences - [Delimited escape sequences](https://en.cppreference.com/w/cpp/language/escape) [P2290R3](https://wg21.link/P2290R3) - [Named universal character escapes](https://en.cppreference.com/w/cpp/language/escape#Named_universal) [P2071R2](https://wg21.link/P2071R2) - linked #2536 --- cxx-squid/dox/diff-cpp20-cpp23_grammar.txt | 119 ------------------ .../org/sonar/cxx/preprocessor/PPNumber.java | 80 ++++++++++-- .../sonar/cxx/preprocessor/PPNumberTest.java | 32 +++-- .../parser/own/C++23/escape-sequences.cc | 24 ++++ 4 files changed, 114 insertions(+), 141 deletions(-) delete mode 100644 cxx-squid/dox/diff-cpp20-cpp23_grammar.txt create mode 100644 cxx-squid/src/test/resources/parser/own/C++23/escape-sequences.cc diff --git a/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt b/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt deleted file mode 100644 index 35cbc1bb2..000000000 --- a/cxx-squid/dox/diff-cpp20-cpp23_grammar.txt +++ /dev/null @@ -1,119 +0,0 @@ -Annex A (informative) - -**A.3 Lexical conventions [gram.lex]** - -n-char: one of - any member of the translation character set except the u+007d right curly bracket or new-line - character - -n-char-sequence: - n-char - n-char-sequence n-char - -named-universal-character: - \N{ n-char-sequence } - -simple-hexadecimal-digit-sequence: - hexadecimal-digit - simple-hexadecimal-digit-sequence hexadecimal-digit - -universal-character-name: - \u hex-quad - \U hex-quad hex-quad - \u{ simple-hexadecimal-digit-sequence } - named-universal-character - -h-char: - any member of the translation character set except new-line and u+003e greater-than sign - -q-char: - any member of the translation character set except new-line and u+0022 quotation mark - -pp-number: - digit - . digit - pp-number identifier-continue - pp-number ’ digit - pp-number ’ nondigit - pp-number e sign - pp-number E sign - pp-number p sign - pp-number P sign - pp-number . - -identifier: - identifier-start - identifier identifier-continue - -identifier-start: - nondigit - an element of the translation character set with the Unicode property XID_Start - -identifier-continue: - digit - nondigit - an element of the translation character set with the Unicode property XID_Continue - -c-char: - basic-c-char - escape-sequence - universal-character-name - -basic-c-char: - any member of the translation character set except the u+0027 apostrophe, - u+005c reverse solidus, or new-line character - -escape-sequence: - simple-escape-sequence - numeric-escape-sequence - conditional-escape-sequence - -simple-escape-sequence: - \ simple-escape-sequence-char - -simple-escape-sequence-char: one of - ’ " ? \ a b f n r t v - -numeric-escape-sequence: - octal-escape-sequence - hexadecimal-escape-sequence - -simple-octal-digit-sequence: - octal-digit - simple-octal-digit-sequence octal-digit - -octal-escape-sequence: - \ octal-digit - \ octal-digit octal-digit - \ octal-digit octal-digit octal-digit - \o{ simple-octal-digit-sequence } - -hexadecimal-escape-sequence: - \x simple-hexadecimal-digit-sequence - \x{ simple-hexadecimal-digit-sequence } - -conditional-escape-sequence: - \ conditional-escape-sequence-char - -conditional-escape-sequence-char: - any member of the basic character set that is not an octal-digit, a simple-escape-sequence-char, or the - characters N, o, u, U, or x - -s-char: - basic-s-char - - escape-sequence - universal-character-name - -basic-s-char: - any member of the translation character set except the u+0022 quotation mark, - u+005c reverse solidus, or new-line character - -r-char: - any member of the translation character set, except a u+0029 right parenthesis followed by - the initial d-char-sequence (which may be empty) followed by a u+0022 quotation mark - -d-char: - any member of the basic character set except: - u+0020 space, u+0028 left parenthesis, u+0029 right parenthesis, u+005c reverse solidus, - u+0009 character tabulation, u+000b line tabulation, u+000c form feed, and new-line diff --git a/cxx-squid/src/main/java/org/sonar/cxx/preprocessor/PPNumber.java b/cxx-squid/src/main/java/org/sonar/cxx/preprocessor/PPNumber.java index f4a6e0b86..6822688af 100644 --- a/cxx-squid/src/main/java/org/sonar/cxx/preprocessor/PPNumber.java +++ b/cxx-squid/src/main/java/org/sonar/cxx/preprocessor/PPNumber.java @@ -20,7 +20,10 @@ package org.sonar.cxx.preprocessor; import java.math.BigInteger; +import java.util.Collections; import java.util.HashMap; +import java.util.Map; +import org.sonar.api.internal.apachecommons.lang.StringUtils; /** * Helper class to evaluate preprocessor numbers. @@ -28,6 +31,7 @@ final class PPNumber { private static final HashMap numberCache = new HashMap<>(); + private static final Map namedUniversalCharacter = createNamedUniversalCharacter(); private PPNumber() { @@ -127,27 +131,79 @@ static BigInteger decodeCharacter(String charValue) { } switch (charValue.charAt(1)) { - case 't': - return BigInteger.valueOf('\t'); - case 'b': - return BigInteger.valueOf('\b'); - case 'n': - return BigInteger.valueOf('\n'); - case 'r': - return BigInteger.valueOf('\r'); - case 'f': - return BigInteger.valueOf('\f'); case '\'': return BigInteger.valueOf('\''); case '"': return BigInteger.valueOf('\"'); + case '?': + return BigInteger.valueOf(0x3f); case '\\': return BigInteger.valueOf('\\'); + case 'a': + return BigInteger.valueOf(0x07); + case 'b': + return BigInteger.valueOf('\b'); + case 'f': + return BigInteger.valueOf('\f'); + case 'n': + return BigInteger.valueOf('\n'); + case 'r': + return BigInteger.valueOf('\r'); + case 't': + return BigInteger.valueOf('\t'); + case 'v': + return BigInteger.valueOf(0x0b); + + case 'u': + if (charValue.length() > 2 && charValue.charAt(2) == '{') { + return delimitedEscapeSequences(charValue, 16); + } + return new BigInteger(StringUtils.substring(charValue, 2, 2 + 4), 16); // 4 hexadecimal digits + + case 'U': + return new BigInteger(StringUtils.substring(charValue, 2, 2 + 8), 16); // 8 hexadecimal digits + case 'x': - case 'X': + if (charValue.length() > 2 && charValue.charAt(2) == '{') { + return delimitedEscapeSequences(charValue, 16); + } return new BigInteger(charValue.substring(2), 16); + + case 'o': + if (charValue.length() > 2 && charValue.charAt(2) == '{') { + return delimitedEscapeSequences(charValue, 8); + } + return BigInteger.ZERO; + + case 'N': + if (charValue.length() > 2 && charValue.charAt(2) == '{') { + return delimitedEscapeSequences(charValue, -1); + } + return BigInteger.ZERO; + default: - return new BigInteger(charValue.substring(1), 10); + return new BigInteger(charValue.substring(1), 8); } } + + static BigInteger delimitedEscapeSequences(String charValue, int radix) { + int end = charValue.indexOf('}', 3); + if (end != -1) { + String value = charValue.substring(3, end); + if (radix != -1) { + return new BigInteger(value, radix); + } else { // character named by NAME + return BigInteger.valueOf(namedUniversalCharacter.getOrDefault(value, 1)); + } + } + return BigInteger.ZERO; + } + + // currently only NULL and NUL is supported, rest is mapped to 1 + private static Map createNamedUniversalCharacter() { + Map result = new HashMap<>(); + result.put("NULL", 0); + result.put("NUL", 0); + return Collections.unmodifiableMap(result); + } } diff --git a/cxx-squid/src/test/java/org/sonar/cxx/preprocessor/PPNumberTest.java b/cxx-squid/src/test/java/org/sonar/cxx/preprocessor/PPNumberTest.java index 9a4937428..3b4593e61 100644 --- a/cxx-squid/src/test/java/org/sonar/cxx/preprocessor/PPNumberTest.java +++ b/cxx-squid/src/test/java/org/sonar/cxx/preprocessor/PPNumberTest.java @@ -59,22 +59,34 @@ void decode_charcters() { assertThat(PPNumber.decodeCharacter("1")).isEqualTo(BigInteger.valueOf('1')); assertThat(PPNumber.decodeCharacter("A")).isEqualTo(BigInteger.valueOf('A')); - assertThat(PPNumber.decodeCharacter("\\t")).isEqualTo(BigInteger.valueOf('\t')); - assertThat(PPNumber.decodeCharacter("\\b")).isEqualTo(BigInteger.valueOf('\b')); - assertThat(PPNumber.decodeCharacter("\\n")).isEqualTo(BigInteger.valueOf('\n')); - assertThat(PPNumber.decodeCharacter("\\r")).isEqualTo(BigInteger.valueOf('\r')); - assertThat(PPNumber.decodeCharacter("\\f")).isEqualTo(BigInteger.valueOf('\f')); + // simple escape sequences assertThat(PPNumber.decodeCharacter("\\'")).isEqualTo(BigInteger.valueOf('\'')); assertThat(PPNumber.decodeCharacter("\\\"")).isEqualTo(BigInteger.valueOf('\"')); + assertThat(PPNumber.decodeCharacter("\\?")).isEqualTo(BigInteger.valueOf(0x3f)); // \? assertThat(PPNumber.decodeCharacter("\\\\")).isEqualTo(BigInteger.valueOf('\\')); + assertThat(PPNumber.decodeCharacter("\\a")).isEqualTo(BigInteger.valueOf(0x07)); // \a + assertThat(PPNumber.decodeCharacter("\\b")).isEqualTo(BigInteger.valueOf('\b')); + assertThat(PPNumber.decodeCharacter("\\f")).isEqualTo(BigInteger.valueOf('\f')); + assertThat(PPNumber.decodeCharacter("\\n")).isEqualTo(BigInteger.valueOf('\n')); + assertThat(PPNumber.decodeCharacter("\\r")).isEqualTo(BigInteger.valueOf('\r')); + assertThat(PPNumber.decodeCharacter("\\t")).isEqualTo(BigInteger.valueOf('\t')); + assertThat(PPNumber.decodeCharacter("\\v")).isEqualTo(BigInteger.valueOf(0x0b)); // \v + // numeric escape sequences assertThat(PPNumber.decodeCharacter("\\0")).isEqualTo(BigInteger.valueOf(0)); - assertThat(PPNumber.decodeCharacter("\\1")).isEqualTo(BigInteger.valueOf(1)); - + assertThat(PPNumber.decodeCharacter("\\123")).isEqualTo(BigInteger.valueOf(83)); + assertThat(PPNumber.decodeCharacter("\\o{123}")).isEqualTo(BigInteger.valueOf(83)); assertThat(PPNumber.decodeCharacter("\\x00")).isEqualTo(BigInteger.valueOf(0)); - assertThat(PPNumber.decodeCharacter("\\x01")).isEqualTo(BigInteger.valueOf(1)); - assertThat(PPNumber.decodeCharacter("\\X00")).isEqualTo(BigInteger.valueOf(0)); - assertThat(PPNumber.decodeCharacter("\\X01")).isEqualTo(BigInteger.valueOf(1)); + assertThat(PPNumber.decodeCharacter("\\x0f")).isEqualTo(BigInteger.valueOf(15)); + assertThat(PPNumber.decodeCharacter("\\x{FF}")).isEqualTo(BigInteger.valueOf(255)); + + // universal character names + assertThat(PPNumber.decodeCharacter("\\u12345")).isEqualTo(BigInteger.valueOf(0x1234)); + assertThat(PPNumber.decodeCharacter("\\U123456789")).isEqualTo(BigInteger.valueOf(0x12345678)); + assertThat(PPNumber.decodeCharacter("\\u{1234}")).isEqualTo(BigInteger.valueOf(0x1234)); + assertThat(PPNumber.decodeCharacter("\\N{NULL}")).isEqualTo(BigInteger.valueOf(0)); + assertThat(PPNumber.decodeCharacter("\\N{NUL}")).isEqualTo(BigInteger.valueOf(0)); + assertThat(PPNumber.decodeCharacter("\\N{NEW LINE}")).isEqualTo(BigInteger.valueOf(1)); } } diff --git a/cxx-squid/src/test/resources/parser/own/C++23/escape-sequences.cc b/cxx-squid/src/test/resources/parser/own/C++23/escape-sequences.cc new file mode 100644 index 000000000..7de4b0fcd --- /dev/null +++ b/cxx-squid/src/test/resources/parser/own/C++23/escape-sequences.cc @@ -0,0 +1,24 @@ +// simple escape sequences +auto s1 = '\''; +auto s2 = '\"'; +auto s3 = '\?'; +auto s4 = '\\'; +auto s5 = '\a'; +auto s6 = '\b'; +auto s7 = '\f'; +auto s8 = '\n'; +auto s9 = '\r'; +auto s10 = '\t'; +auto s11 = '\v'; + +// numeric escape sequences +auto n1 = '\123'; +auto n2 = '\o{12345}'; +auto n3 = '\xABCDEF'; +auto n4 = '\x{ABFF}'; + +// universal character names +auto u1 = '\u1234'; +auto u2 = '\u{112233FF}'; +auto u3 = '\U12345678'; +auto u4 = '\N{NULL}'; From 8c5377871f45c989b93380c498a3ba45ad5bad02 Mon Sep 17 00:00:00 2001 From: Marian Klymov Date: Mon, 9 Sep 2024 16:23:34 +0300 Subject: [PATCH 24/32] generate_cppcheck_resources.cmd: take all the libraries from folder --- cxx-sensors/src/tools/generate_cppcheck_resources.cmd | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cxx-sensors/src/tools/generate_cppcheck_resources.cmd b/cxx-sensors/src/tools/generate_cppcheck_resources.cmd index 090fcd92e..b5f9fc953 100644 --- a/cxx-sensors/src/tools/generate_cppcheck_resources.cmd +++ b/cxx-sensors/src/tools/generate_cppcheck_resources.cmd @@ -5,7 +5,13 @@ SET SCRIPT_DIR=%~dp0 SET CPPCHECK_DIR=C:\Program Files\Cppcheck\ SET PYTHON_DIR=C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\ -SET CPPCHECK_LIBRARY_ARGS=--library=avr.cfg --library=bento4.cfg --library=boost.cfg --library=bsd.cfg --library=cairo.cfg --library=cppcheck-lib.cfg --library=cppunit.cfg --library=dpdk.cfg --library=embedded_sql.cfg --library=emscripten.cfg --library=ginac.cfg --library=gnu.cfg --library=googletest.cfg --library=gtk.cfg --library=icu.cfg --library=kde.cfg --library=libcerror.cfg --library=libcurl.cfg --library=libsigc++.cfg --library=lua.cfg --library=mfc.cfg --library=microsoft_atl.cfg --library=microsoft_sal.cfg --library=microsoft_unittest.cfg --library=motif.cfg --library=nspr.cfg --library=ntl.cfg --library=opencv2.cfg --library=opengl.cfg --library=openmp.cfg --library=openssl.cfg --library=pcre.cfg --library=posix.cfg --library=python.cfg --library=qt.cfg --library=ruby.cfg --library=sdl.cfg --library=sfml.cfg --library=sqlite3.cfg --library=std.cfg --library=tinyxml2.cfg --library=vcl.cfg --library=windows.cfg --library=wxsqlite3.cfg --library=wxsvg.cfg --library=wxwidgets.cfg --library=zlib.cfg +setlocal ENABLEDELAYEDEXPANSION + +SET CPPCHECK_LIBRARY_ARGS= + +for %%i in ("%CPPCHECK_DIR%cfg\*.cfg") do ( + SET CPPCHECK_LIBRARY_ARGS=!CPPCHECK_LIBRARY_ARGS! "--library=%%~nxi" +) rem download cwec_latest.xml.zip and extract it to unzip cwec_vx.y.xml rem wget https://cwe.mitre.org/data/xml/cwec_latest.xml.zip --output-document=cwec_latest.xml.zip && unzip -j -o cwec_latest.xml.zip From 073a607a07b5ea431ea423042ca4bd53adb5495a Mon Sep 17 00:00:00 2001 From: Marian Klymov Date: Mon, 9 Sep 2024 16:24:57 +0300 Subject: [PATCH 25/32] Cppcheck v2.15.0 support - new rule in Cppcheck 2.15.0 - suspiciousFloatingPointCast - update unit test --- cxx-sensors/src/main/resources/cppcheck.xml | 14 ++++++++++++++ .../cppcheck/CxxCppCheckRuleRepositoryTest.java | 4 ++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/cxx-sensors/src/main/resources/cppcheck.xml b/cxx-sensors/src/main/resources/cppcheck.xml index f960ff0b8..1f6499512 100644 --- a/cxx-sensors/src/main/resources/cppcheck.xml +++ b/cxx-sensors/src/main/resources/cppcheck.xml @@ -8111,6 +8111,20 @@ Pointer arithmetic overflow. CONSTANT_ISSUE 5min + + + suspiciousFloatingPointCast + Floating-point cast causes loss of precision + + If this cast is not intentional, remove it to avoid loss of precision +

+

References

+

CWE-398

+ ]]>
+ cwe + MINOR +
internalAstError diff --git a/cxx-sensors/src/test/java/org/sonar/cxx/sensors/cppcheck/CxxCppCheckRuleRepositoryTest.java b/cxx-sensors/src/test/java/org/sonar/cxx/sensors/cppcheck/CxxCppCheckRuleRepositoryTest.java index 8b8b05ef8..512241a4d 100644 --- a/cxx-sensors/src/test/java/org/sonar/cxx/sensors/cppcheck/CxxCppCheckRuleRepositoryTest.java +++ b/cxx-sensors/src/test/java/org/sonar/cxx/sensors/cppcheck/CxxCppCheckRuleRepositoryTest.java @@ -1,6 +1,6 @@ /* * C++ Community Plugin (cxx plugin) - * Copyright (C) 2010-2023 SonarOpenCommunity + * Copyright (C) 2010-2024 SonarOpenCommunity * http://github.com/SonarOpenCommunity/sonar-cxx * * This program is free software; you can redistribute it and/or @@ -37,7 +37,7 @@ void createRulesTest() { def.define(context); RulesDefinition.Repository repo = context.repository(CxxCppCheckRuleRepository.KEY); - assertThat(repo.rules()).hasSize(685); + assertThat(repo.rules()).hasSize(686); } } From af3f198b1d9b8ade8696ff4ae5d626dd0f824b9a Mon Sep 17 00:00:00 2001 From: Marian Klymov Date: Mon, 9 Sep 2024 16:54:45 +0300 Subject: [PATCH 26/32] undo copyright change --- .../cxx/sensors/cppcheck/CxxCppCheckRuleRepositoryTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cxx-sensors/src/test/java/org/sonar/cxx/sensors/cppcheck/CxxCppCheckRuleRepositoryTest.java b/cxx-sensors/src/test/java/org/sonar/cxx/sensors/cppcheck/CxxCppCheckRuleRepositoryTest.java index 512241a4d..b482e6e37 100644 --- a/cxx-sensors/src/test/java/org/sonar/cxx/sensors/cppcheck/CxxCppCheckRuleRepositoryTest.java +++ b/cxx-sensors/src/test/java/org/sonar/cxx/sensors/cppcheck/CxxCppCheckRuleRepositoryTest.java @@ -1,6 +1,6 @@ /* * C++ Community Plugin (cxx plugin) - * Copyright (C) 2010-2024 SonarOpenCommunity + * Copyright (C) 2010-2023 SonarOpenCommunity * http://github.com/SonarOpenCommunity/sonar-cxx * * This program is free software; you can redistribute it and/or From 7d716e1f0a3b23eb2298e62875ca45e027e39751 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Sep 2024 16:16:54 +0000 Subject: [PATCH 27/32] Bump commons-io:commons-io from 2.16.1 to 2.17.0 Bumps commons-io:commons-io from 2.16.1 to 2.17.0. --- updated-dependencies: - dependency-name: commons-io:commons-io dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6a5ed3c87..3297e4a1d 100644 --- a/pom.xml +++ b/pom.xml @@ -269,7 +269,7 @@ 1.10.15 9.7 3.26.3 - 2.16.1 + 2.17.0 2.6 2.0.1 1.28 From 6d6b60c9320b0cd8b5ec732d332770a7228cd83c Mon Sep 17 00:00:00 2001 From: guwirth Date: Tue, 10 Sep 2024 11:11:13 +0200 Subject: [PATCH 28/32] Improve handling of relative file paths in report files - Up to know we were stating in our [Wiki](https://github.com/SonarOpenCommunity/sonar-cxx/wiki/Troubleshooting-Reports): Relative paths in report files are always relative to the project base directory. Start relative paths always with .\ on Windows or ./ on Linux. - relative paths starting with '..' were resolved to null in the past. "No file" results in adding an issue on project level (project issue). In such a case we replace null with the filename. This leads at least to an error message an that and the issue is not added to the project because typically no such indexed file exists. - The real problem is that tools generate reports with relative paths without defining which base directory is referred to. This problem remains and must be solved via the CI/CD and tool configuration. - close #2741 --- .../sonar/cxx/utils/CxxReportLocation.java | 16 +++- .../cxx/utils/CxxReportLocationTest.java | 78 +++++++++++++++++++ 2 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 cxx-squid/src/test/java/org/sonar/cxx/utils/CxxReportLocationTest.java diff --git a/cxx-squid/src/main/java/org/sonar/cxx/utils/CxxReportLocation.java b/cxx-squid/src/main/java/org/sonar/cxx/utils/CxxReportLocation.java index 1c492b7ce..70e5fb99b 100644 --- a/cxx-squid/src/main/java/org/sonar/cxx/utils/CxxReportLocation.java +++ b/cxx-squid/src/main/java/org/sonar/cxx/utils/CxxReportLocation.java @@ -19,6 +19,7 @@ */ package org.sonar.cxx.utils; +import java.nio.file.Paths; import java.util.Objects; import javax.annotation.Nullable; import org.sonar.api.utils.PathUtils; @@ -35,8 +36,19 @@ public class CxxReportLocation { public CxxReportLocation(@Nullable String file, @Nullable String line, @Nullable String column, String info) { super(); - // normalize file, removing double and single dot path steps => avoids duplicates - this.file = PathUtils.sanitize(file); + + // Normalize file using separators in UNIX format, removing double and single dot path steps. This is to avoid + // duplicates in the issue containers because they are using the file as key. PathUtils.sanitize uses + // FilenameUtils.normalize internally, relative paths starting with a double dot will cause that path segment + // and the one before to be removed. If the double dot has no parent path segment to work with, null is returned. + // null would mean 'project issue' which is wrong in this context. To avoid this we extract the filename to + // generate at least a meningful error message. + var normalized = PathUtils.sanitize(file); + if (normalized == null && (file != null && !file.isBlank())) { + normalized = Paths.get(file).getFileName().toString(); + } + + this.file = normalized; this.line = line; this.column = column; this.info = info; diff --git a/cxx-squid/src/test/java/org/sonar/cxx/utils/CxxReportLocationTest.java b/cxx-squid/src/test/java/org/sonar/cxx/utils/CxxReportLocationTest.java new file mode 100644 index 000000000..61b4ae63c --- /dev/null +++ b/cxx-squid/src/test/java/org/sonar/cxx/utils/CxxReportLocationTest.java @@ -0,0 +1,78 @@ +/* + * C++ Community Plugin (cxx plugin) + * Copyright (C) 2010-2023 SonarOpenCommunity + * http://github.com/SonarOpenCommunity/sonar-cxx + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.cxx.utils; + +import static org.assertj.core.api.Assertions.*; +import org.junit.jupiter.api.Test; + +public class CxxReportLocationTest { + + @Test + void testConstructor() { + var loc0 = new CxxReportLocation(null, null, null, "info"); + assertThat(loc0.getFile()).isNull(); + assertThat(loc0.getLine()).isNull(); + assertThat(loc0.getColumn()).isNull(); + assertThat(loc0.getInfo()).isEqualTo("info"); + assertThat(loc0.toString()).isEqualTo("CxxReportLocation [file=null, line=null, column=null, info=info]"); + + var loc1 = new CxxReportLocation("file", "line", "column", "info"); + assertThat(loc1.getFile()).isEqualTo("file"); + assertThat(loc1.getLine()).isEqualTo("line"); + assertThat(loc1.getColumn()).isEqualTo("column"); + assertThat(loc1.getInfo()).isEqualTo("info"); + assertThat(loc1.toString()).isEqualTo("CxxReportLocation [file=file, line=line, column=column, info=info]"); + } + + @Test + void testPathSanitize() { + var loc = new CxxReportLocation("file", null, null, ""); + + loc = new CxxReportLocation("/dir/File", null, null, ""); + assertThat(loc.getFile()).isEqualTo("/dir/File"); + loc = new CxxReportLocation("/dir/./File", null, null, ""); + assertThat(loc.getFile()).isEqualTo("/dir/File"); + loc = new CxxReportLocation("/dir/../File", null, null, ""); + assertThat(loc.getFile()).isEqualTo("/File"); + loc = new CxxReportLocation("dir/File", null, null, ""); + assertThat(loc.getFile()).isEqualTo("dir/File"); + loc = new CxxReportLocation("./dir/File", null, null, ""); + assertThat(loc.getFile()).isEqualTo("dir/File"); + loc = new CxxReportLocation("../dir/File", null, null, ""); + assertThat(loc.getFile()).isEqualTo("File"); + loc = new CxxReportLocation("../../File", null, null, ""); + assertThat(loc.getFile()).isEqualTo("File"); + + loc = new CxxReportLocation("c:\\dir\\file.ext", null, null, ""); + assertThat(loc.getFile()).isEqualTo("c:/dir/file.ext"); + loc = new CxxReportLocation("C:\\dir\\.\\file.ext", null, null, ""); + assertThat(loc.getFile()).isEqualTo("C:/dir/file.ext"); + loc = new CxxReportLocation("c:\\dir\\..\\file.ext", null, null, ""); + assertThat(loc.getFile()).isEqualTo("c:/file.ext"); + loc = new CxxReportLocation("dir\\file.ext", null, null, ""); + assertThat(loc.getFile()).isEqualTo("dir/file.ext"); + loc = new CxxReportLocation(".\\dir\\file.ext", null, null, ""); + assertThat(loc.getFile()).isEqualTo("dir/file.ext"); + loc = new CxxReportLocation("..\\dir\\file.ext", null, null, ""); + assertThat(loc.getFile()).isEqualTo("file.ext"); + loc = new CxxReportLocation("..\\..\\file.ext", null, null, ""); + assertThat(loc.getFile()).isEqualTo("file.ext"); + } +} From 7bd54f119d1e40afceb1a90d22e85e00377c6e72 Mon Sep 17 00:00:00 2001 From: guwirth Date: Sat, 21 Sep 2024 14:20:21 +0200 Subject: [PATCH 29/32] use FilenameUtils.getName because this works on Windows and Linux also if report is generated on the one and consumed on the other --- .../main/java/org/sonar/cxx/utils/CxxReportLocation.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/cxx-squid/src/main/java/org/sonar/cxx/utils/CxxReportLocation.java b/cxx-squid/src/main/java/org/sonar/cxx/utils/CxxReportLocation.java index 70e5fb99b..b4757e3f4 100644 --- a/cxx-squid/src/main/java/org/sonar/cxx/utils/CxxReportLocation.java +++ b/cxx-squid/src/main/java/org/sonar/cxx/utils/CxxReportLocation.java @@ -19,9 +19,9 @@ */ package org.sonar.cxx.utils; -import java.nio.file.Paths; import java.util.Objects; import javax.annotation.Nullable; +import org.apache.commons.io.FilenameUtils; import org.sonar.api.utils.PathUtils; /** @@ -42,10 +42,13 @@ public CxxReportLocation(@Nullable String file, @Nullable String line, @Nullable // FilenameUtils.normalize internally, relative paths starting with a double dot will cause that path segment // and the one before to be removed. If the double dot has no parent path segment to work with, null is returned. // null would mean 'project issue' which is wrong in this context. To avoid this we extract the filename to - // generate at least a meningful error message. + // generate at least a meningful error message (#2747). var normalized = PathUtils.sanitize(file); if (normalized == null && (file != null && !file.isBlank())) { - normalized = Paths.get(file).getFileName().toString(); + + // use FilenameUtils.getName because this works on Windows and Linux also if + // report is generated on the one and consumed on the other + normalized = FilenameUtils.getName(file); } this.file = normalized; From 9e98b517a576c1be0bd96fdcfa0d992ea0b20f62 Mon Sep 17 00:00:00 2001 From: guwirth Date: Thu, 5 Sep 2024 18:01:02 +0200 Subject: [PATCH 30/32] C++23: Trimming whitespaces before line splicing - [P2223R2](https://wg21.link/P2223R2) - the cxx plugin supports line splicing still not in all cases (e.g. middle of number or identifier) - related to #2536 --- .../sonar/cxx/channels/BackslashChannel.java | 22 ++-- .../org/sonar/cxx/channels/ChannelUtils.java | 88 ++++++++++++++ .../channels/CharacterLiteralsChannel.java | 12 +- .../sonar/cxx/channels/KeywordChannel.java | 3 +- .../cxx/channels/MultiLineCommentChannel.java | 111 ++++++++++++++++++ .../cxx/channels/PreprocessorChannel.java | 85 +++++--------- .../channels/RightAngleBracketsChannel.java | 3 +- .../channels/SingleLineCommentChannel.java | 98 ++++++++++++++++ .../cxx/channels/StringLiteralsChannel.java | 26 ++-- .../org/sonar/cxx/parser/CxxLexerPool.java | 8 +- .../org/sonar/cxx/lexer/CxxLexerTest.java | 74 +++++++++++- .../CxxLexerWithoutPreprocessorTest.java | 2 +- .../java/org/sonar/cxx/lexer/LexerAssert.java | 9 ++ .../preprocessor/IncludeFileLexerTest.java | 6 +- .../src/test/resources/metrics/nosonar.cc | 2 +- .../sonar/cxx/sslr/channel/CodeBuffer.java | 14 +++ .../cxx/sslr/channel/CodeBufferTest.java | 7 ++ 17 files changed, 470 insertions(+), 100 deletions(-) create mode 100644 cxx-squid/src/main/java/org/sonar/cxx/channels/ChannelUtils.java create mode 100644 cxx-squid/src/main/java/org/sonar/cxx/channels/MultiLineCommentChannel.java create mode 100644 cxx-squid/src/main/java/org/sonar/cxx/channels/SingleLineCommentChannel.java diff --git a/cxx-squid/src/main/java/org/sonar/cxx/channels/BackslashChannel.java b/cxx-squid/src/main/java/org/sonar/cxx/channels/BackslashChannel.java index 8fa45142a..55ffbdd01 100644 --- a/cxx-squid/src/main/java/org/sonar/cxx/channels/BackslashChannel.java +++ b/cxx-squid/src/main/java/org/sonar/cxx/channels/BackslashChannel.java @@ -25,21 +25,23 @@ public class BackslashChannel extends Channel { - private static boolean isNewLine(char ch) { - return (ch == '\n') || (ch == '\r'); - } + private final StringBuilder sb = new StringBuilder(256); @Override public boolean consume(CodeReader code, Lexer output) { - var ch = (char) code.peek(); - - if ((ch == '\\') && isNewLine(code.charAt(1))) { - // just throw away the backslash - code.pop(); - return true; + if (code.charAt(0) != '\\') { + return false; } - return false; + var lineSplicing = read(code, sb); + sb.delete(0, sb.length()); + return lineSplicing != 0; + } + + public static int read(CodeReader code, StringBuilder sb) { + var end = ChannelUtils.handleLineSplicing(code, 0); + code.skip(end); // remove line splicing + return end; } } diff --git a/cxx-squid/src/main/java/org/sonar/cxx/channels/ChannelUtils.java b/cxx-squid/src/main/java/org/sonar/cxx/channels/ChannelUtils.java new file mode 100644 index 000000000..0d4180c56 --- /dev/null +++ b/cxx-squid/src/main/java/org/sonar/cxx/channels/ChannelUtils.java @@ -0,0 +1,88 @@ +/* + * C++ Community Plugin (cxx plugin) + * Copyright (C) 2010-2023 SonarOpenCommunity + * http://github.com/SonarOpenCommunity/sonar-cxx + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.cxx.channels; + +import org.sonar.cxx.sslr.channel.CodeReader; + +public class ChannelUtils { + + public static final char LF = '\n'; + public static final char CR = '\r'; + public static final char EOF = (char) -1; + + private ChannelUtils() { + // empty + } + + public static boolean isNewLine(char ch) { + return (ch == LF) || (ch == CR); + } + + public static boolean isWhitespace(char ch) { + return (ch == ' ') || (ch == '\t'); + } + + public static boolean isSuffix(char c) { + return Character.isLowerCase(c) || Character.isUpperCase(c) || (c == '_'); + } + + /** + * Handle line splicing. + * - lines terminated by a \ are spliced together with the next line + * - P2178R0 making trailing whitespaces non-significant + * + * line endings: + * - Linux/Unix, Mac from OS X a.k.a macOS: LF + * - Windows/DOS: CR LF + * - Classic Mac OS: CR + * + * @return numbers of sign to remove to splice the lines + */ + public static int handleLineSplicing(CodeReader code, int start) { + int next = start; + if (code.charAt(next) != '\\') { + return 0; + } + + boolean newline = false; + next++; + while (true) { + var charAt = code.charAt(next); + if (charAt == LF) { + newline = true; + break; + } + if (charAt == CR) { + if (code.charAt(next + 1) == LF) { + next++; + } + newline = true; + break; + } + if (!isWhitespace(charAt)) { + break; + } + next++; + } + + return newline ? (next - start + 1) : 0; + } + +} diff --git a/cxx-squid/src/main/java/org/sonar/cxx/channels/CharacterLiteralsChannel.java b/cxx-squid/src/main/java/org/sonar/cxx/channels/CharacterLiteralsChannel.java index 3d7d9dd6f..5c14ba57b 100644 --- a/cxx-squid/src/main/java/org/sonar/cxx/channels/CharacterLiteralsChannel.java +++ b/cxx-squid/src/main/java/org/sonar/cxx/channels/CharacterLiteralsChannel.java @@ -30,8 +30,6 @@ */ public class CharacterLiteralsChannel extends Channel { - private static final char EOF = (char) -1; - private final StringBuilder sb = new StringBuilder(256); private int index = 0; @@ -67,7 +65,7 @@ public boolean consume(CodeReader code, Lexer output) { private boolean read(CodeReader code) { index++; while (code.charAt(index) != ch) { - if (code.charAt(index) == EOF) { + if (code.charAt(index) == ChannelUtils.EOF) { return false; } if (code.charAt(index) == '\\') { @@ -95,10 +93,10 @@ private void readUdSuffix(CodeReader code) { int len = 0; for (int start_index = index;; index++) { var charAt = code.charAt(index); - if (charAt == EOF) { + if (charAt == ChannelUtils.EOF) { return; } - if (isSuffix(charAt)) { + if (ChannelUtils.isSuffix(charAt)) { len++; } else if (Character.isDigit(charAt)) { if (len > 0) { @@ -113,8 +111,4 @@ private void readUdSuffix(CodeReader code) { } } - private static boolean isSuffix(char c) { - return Character.isLowerCase(c) || Character.isUpperCase(c) || (c == '_'); - } - } diff --git a/cxx-squid/src/main/java/org/sonar/cxx/channels/KeywordChannel.java b/cxx-squid/src/main/java/org/sonar/cxx/channels/KeywordChannel.java index c22349eb8..37e4389a1 100644 --- a/cxx-squid/src/main/java/org/sonar/cxx/channels/KeywordChannel.java +++ b/cxx-squid/src/main/java/org/sonar/cxx/channels/KeywordChannel.java @@ -38,8 +38,7 @@ public class KeywordChannel extends Channel { private final Matcher matcher; private final Token.Builder tokenBuilder = Token.builder(); - public KeywordChannel(String regexp, TokenType[] - ... keywordSets) { + public KeywordChannel(String regexp, TokenType[]... keywordSets) { for (var keywords : keywordSets) { for (var keyword : keywords) { keywordsMap.put(keyword.getValue(), keyword); diff --git a/cxx-squid/src/main/java/org/sonar/cxx/channels/MultiLineCommentChannel.java b/cxx-squid/src/main/java/org/sonar/cxx/channels/MultiLineCommentChannel.java new file mode 100644 index 000000000..c1f1e5947 --- /dev/null +++ b/cxx-squid/src/main/java/org/sonar/cxx/channels/MultiLineCommentChannel.java @@ -0,0 +1,111 @@ +/* + * C++ Community Plugin (cxx plugin) + * Copyright (C) 2010-2023 SonarOpenCommunity + * http://github.com/SonarOpenCommunity/sonar-cxx + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.cxx.channels; + +import static com.sonar.cxx.sslr.api.GenericTokenType.COMMENT; +import com.sonar.cxx.sslr.api.Token; +import com.sonar.cxx.sslr.api.Trivia; +import com.sonar.cxx.sslr.impl.Lexer; +import org.sonar.cxx.sslr.channel.Channel; +import org.sonar.cxx.sslr.channel.CodeReader; + +public class MultiLineCommentChannel extends Channel { + + private final StringBuilder sb = new StringBuilder(256); + private final Token.Builder tokenBuilder = Token.builder(); + + @Override + public boolean consume(CodeReader code, Lexer lexer) { + // start of multi line comment? + int next = isComment(code); + if (next == 0) { + return false; + } + + int line = code.getLinePosition(); + int column = code.getColumnPosition(); + + code.skip(next); + sb.append('/'); + sb.append('*'); + + read(code, sb); // search end of multi line comment + + var value = sb.toString(); + var token = tokenBuilder + .setType(COMMENT) + .setValueAndOriginalValue(value) + .setURI(lexer.getURI()) + .setLine(line) + .setColumn(column) + .build(); + + lexer.addTrivia(Trivia.createComment(token)); + sb.delete(0, sb.length()); + return true; + } + + public static int isComment(CodeReader code) { + int next = 0; + + // start of multi line comment? + if (code.charAt(next) != '/') { + return 0; + } + next += 1; + next += ChannelUtils.handleLineSplicing(code, next); + + if (code.charAt(next) != '*') { + return 0; + } + next += 1; + return next; + } + + public static boolean read(CodeReader code, StringBuilder sb) { + boolean first = false; + while (true) { // search end of multi line comment: */ + var end = ChannelUtils.handleLineSplicing(code, 0); + code.skip(end); // remove line splicing + + var charAt = (char) code.pop(); + switch (charAt) { + case '*': + first = true; + break; + case '/': + if (first) { + sb.append('/'); + return true; + } + break; + case ChannelUtils.EOF: + return false; + default: + first = false; + break; + } + + sb.append(charAt); + } + + } + +} diff --git a/cxx-squid/src/main/java/org/sonar/cxx/channels/PreprocessorChannel.java b/cxx-squid/src/main/java/org/sonar/cxx/channels/PreprocessorChannel.java index 0f8822d4b..2b5421f56 100644 --- a/cxx-squid/src/main/java/org/sonar/cxx/channels/PreprocessorChannel.java +++ b/cxx-squid/src/main/java/org/sonar/cxx/channels/PreprocessorChannel.java @@ -34,9 +34,9 @@ // public class PreprocessorChannel extends Channel { - private static final char EOF = (char) -1; private final StringLiteralsChannel stringLiteralsChannel = new StringLiteralsChannel(); private final StringBuilder sb = new StringBuilder(256); + private final StringBuilder dummy = new StringBuilder(256); private final Matcher matcher; public PreprocessorChannel(TokenType[]... keywordSets) { @@ -84,67 +84,46 @@ public boolean consume(CodeReader code, Lexer output) { private void read(CodeReader code) { while (true) { - var ch = code.charAt(0); - if (isNewline(ch) || ch == EOF) { + var charAt = code.charAt(0); + if (ChannelUtils.isNewLine(charAt) || charAt == ChannelUtils.EOF) { code.pop(); break; - } else if (stringLiteralsChannel.read(code, sb)) { + } else if (stringLiteralsChannel.read(code, sb)) { // string literal continue; } - ch = (char) code.pop(); - if (ch == '/' && code.charAt(0) == '/') { - consumeSingleLineComment(code); - } else if (ch == '/' && code.charAt(0) == '*') { - consumeMultiLineComment(code); - } else if (ch == '\\' && isNewline((char) code.peek())) { - // the newline is escaped: we have a the multi line preprocessor directive - // consume both the backslash and the newline, insert a space instead - consumeNewline(code); - sb.append(' '); - } else { - sb.append(ch); - } - } - } - private static void consumeNewline(CodeReader code) { - if ((code.charAt(0) == '\r') && (code.charAt(1) == '\n')) { - // \r\n - code.pop(); - code.pop(); - } else { - // \r or \n - code.pop(); - } - } - - private static void consumeSingleLineComment(CodeReader code) { - code.pop(); // initial '/' - while (true) { - var charAt = code.charAt(0); - if (isNewline(charAt) || charAt == EOF) { - break; + var len = 0; + switch (charAt) { + case '/': // comment? + len = SingleLineCommentChannel.isComment(code); + if (len != 0) { + // single line comment + code.skip(len); + SingleLineCommentChannel.read(code, dummy); + dummy.delete(0, dummy.length()); + } else { + len = MultiLineCommentChannel.isComment(code); + if (len != 0) { + // multi line comment + code.skip(len); + MultiLineCommentChannel.read(code, dummy); + dummy.delete(0, dummy.length()); + } + } + break; + case '\\': + len = BackslashChannel.read(code, dummy); + if (len != 0) { + // consume backslash and the newline + dummy.delete(0, dummy.length()); + } + break; } - code.pop(); - } - } - private static void consumeMultiLineComment(CodeReader code) { - code.pop(); // initial '*' - while (true) { - var ch = (char) code.pop(); - if (ch == EOF) { - return; - } - if (ch == '*' && code.charAt(0) == '/') { - code.pop(); - return; + if (len == 0) { + sb.append((char) code.pop()); } } } - private static boolean isNewline(char ch) { - return (ch == '\n') || (ch == '\r'); - } - } diff --git a/cxx-squid/src/main/java/org/sonar/cxx/channels/RightAngleBracketsChannel.java b/cxx-squid/src/main/java/org/sonar/cxx/channels/RightAngleBracketsChannel.java index 49cc23070..7c5f33cd8 100644 --- a/cxx-squid/src/main/java/org/sonar/cxx/channels/RightAngleBracketsChannel.java +++ b/cxx-squid/src/main/java/org/sonar/cxx/channels/RightAngleBracketsChannel.java @@ -48,10 +48,9 @@ public class RightAngleBracketsChannel extends Channel { @Override public boolean consume(CodeReader code, Lexer output) { - var ch = (char) code.peek(); var consumed = false; - switch (ch) { + switch (code.charAt(0)) { case '(': if (angleBracketLevel > 0) { parentheseLevel++; diff --git a/cxx-squid/src/main/java/org/sonar/cxx/channels/SingleLineCommentChannel.java b/cxx-squid/src/main/java/org/sonar/cxx/channels/SingleLineCommentChannel.java new file mode 100644 index 000000000..a17af4bf6 --- /dev/null +++ b/cxx-squid/src/main/java/org/sonar/cxx/channels/SingleLineCommentChannel.java @@ -0,0 +1,98 @@ +/* + * C++ Community Plugin (cxx plugin) + * Copyright (C) 2010-2023 SonarOpenCommunity + * http://github.com/SonarOpenCommunity/sonar-cxx + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.cxx.channels; + +import static com.sonar.cxx.sslr.api.GenericTokenType.COMMENT; +import com.sonar.cxx.sslr.api.Token; +import com.sonar.cxx.sslr.api.Trivia; +import com.sonar.cxx.sslr.impl.Lexer; +import org.sonar.cxx.sslr.channel.Channel; +import org.sonar.cxx.sslr.channel.CodeReader; + +public class SingleLineCommentChannel extends Channel { + + private final StringBuilder sb = new StringBuilder(256); + private final Token.Builder tokenBuilder = Token.builder(); + + @Override + public boolean consume(CodeReader code, Lexer lexer) { + // start of single line comment? + int next = isComment(code); + if (next == 0) { + return false; + } + + int line = code.getLinePosition(); + int column = code.getColumnPosition(); + + code.skip(next); + sb.append('/'); + sb.append('/'); + + // search end of line + read(code, sb); + + var value = sb.toString(); + var token = tokenBuilder + .setType(COMMENT) + .setValueAndOriginalValue(value) + .setURI(lexer.getURI()) + .setLine(line) + .setColumn(column) + .build(); + + lexer.addTrivia(Trivia.createComment(token)); + sb.delete(0, sb.length()); + return true; + } + + public static int isComment(CodeReader code) { + int next = 0; + + // start of single line comment? + if (code.charAt(next) != '/') { + return 0; + } + + next += 1; + next += ChannelUtils.handleLineSplicing(code, next); + + if (code.charAt(next) != '/') { + return 0; + } + next += 1; + return next; + } + + public static boolean read(CodeReader code, StringBuilder sb) { + while (true) { // search end of line + var end = ChannelUtils.handleLineSplicing(code, 0); + code.skip(end); // remove line splicing + + var charAt = code.charAt(0); + if (ChannelUtils.isNewLine(charAt) || charAt == ChannelUtils.EOF) { + break; + } + sb.append((char) code.pop()); + } + return true; + } + +} diff --git a/cxx-squid/src/main/java/org/sonar/cxx/channels/StringLiteralsChannel.java b/cxx-squid/src/main/java/org/sonar/cxx/channels/StringLiteralsChannel.java index 288ed1d65..135e0bbb4 100644 --- a/cxx-squid/src/main/java/org/sonar/cxx/channels/StringLiteralsChannel.java +++ b/cxx-squid/src/main/java/org/sonar/cxx/channels/StringLiteralsChannel.java @@ -30,8 +30,6 @@ */ public class StringLiteralsChannel extends Channel { - private static final char EOF = (char) -1; - private final StringBuilder csb = new StringBuilder(256); private int index = 0; private char ch = ' '; @@ -72,6 +70,14 @@ public boolean read(CodeReader code, StringBuilder sb) { } readUdSuffix(code); for (var i = 0; i < index; i++) { + if (code.charAt(0) == '\\') { + var len = ChannelUtils.handleLineSplicing(code, 0); + if (len > 1) { + code.skip(len); // remove line splicing + i += (len - 1); + continue; + } + } sb.append((char) code.pop()); } return true; @@ -102,7 +108,7 @@ private boolean readRawString(CodeReader code, StringBuilder sb) { char charAt; index++; while ((charAt = code.charAt(index)) != '(') { // delimiter in front of ( - if (charAt == EOF) { + if (charAt == ChannelUtils.EOF) { return false; } sb.append(charAt); @@ -114,14 +120,14 @@ private boolean readRawString(CodeReader code, StringBuilder sb) { index -= sb.length(); sb.delete(0, sb.length()); while ((charAt = code.charAt(index)) != ')') { // raw_character* - if (charAt == EOF) { + if (charAt == ChannelUtils.EOF) { return false; } index++; } index++; while ((charAt = code.charAt(index)) != '"') { // delimiter after ) - if (charAt == EOF) { + if (charAt == ChannelUtils.EOF) { return false; } sb.append(charAt); @@ -141,7 +147,7 @@ private boolean readString(CodeReader code) { index++; char charAt; while ((charAt = code.charAt(index)) != ch) { - if (charAt == EOF) { + if (charAt == ChannelUtils.EOF) { return false; } if (charAt == '\\') { @@ -158,10 +164,10 @@ private void readUdSuffix(CodeReader code) { int len = 0; for (int start_index = index;; index++) { var charAt = code.charAt(index); - if (charAt == EOF) { + if (charAt == ChannelUtils.EOF) { return; } - if (isSuffix(charAt)) { + if (ChannelUtils.isSuffix(charAt)) { len++; } else if (Character.isDigit(charAt)) { if (len > 0) { @@ -176,8 +182,4 @@ private void readUdSuffix(CodeReader code) { } } - private static boolean isSuffix(char c) { - return Character.isLowerCase(c) || Character.isUpperCase(c) || (c == '_'); - } - } diff --git a/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxLexerPool.java b/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxLexerPool.java index 9d553de97..5d1539c28 100644 --- a/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxLexerPool.java +++ b/cxx-squid/src/main/java/org/sonar/cxx/parser/CxxLexerPool.java @@ -25,9 +25,7 @@ import com.sonar.cxx.sslr.impl.channel.BomCharacterChannel; import com.sonar.cxx.sslr.impl.channel.IdentifierAndKeywordChannel; import com.sonar.cxx.sslr.impl.channel.PunctuatorChannel; -import static com.sonar.cxx.sslr.impl.channel.RegexpChannelBuilder.ANY_CHAR; import static com.sonar.cxx.sslr.impl.channel.RegexpChannelBuilder.and; -import static com.sonar.cxx.sslr.impl.channel.RegexpChannelBuilder.commentRegexp; import static com.sonar.cxx.sslr.impl.channel.RegexpChannelBuilder.g; import static com.sonar.cxx.sslr.impl.channel.RegexpChannelBuilder.o2n; import static com.sonar.cxx.sslr.impl.channel.RegexpChannelBuilder.opt; @@ -39,8 +37,10 @@ import java.util.Set; import org.sonar.cxx.channels.BackslashChannel; import org.sonar.cxx.channels.CharacterLiteralsChannel; +import org.sonar.cxx.channels.MultiLineCommentChannel; import org.sonar.cxx.channels.PreprocessorChannel; import org.sonar.cxx.channels.RightAngleBracketsChannel; +import org.sonar.cxx.channels.SingleLineCommentChannel; import org.sonar.cxx.channels.StringLiteralsChannel; import org.sonar.cxx.preprocessor.PPSpecialIdentifier; @@ -81,8 +81,8 @@ public static CxxLexerPool create(Charset charset, Preprocessor... preprocessors .withFailIfNoChannelToConsumeOneCharacter(true) .withChannel(new BlackHoleChannel("\\s++")) // C++ Standard, Section 2.8 "Comments" - .withChannel(commentRegexp("//[^\\n\\r]*+")) - .withChannel(commentRegexp("/\\*", ANY_CHAR + "*?", "\\*/")) + .withChannel(new SingleLineCommentChannel()) + .withChannel(new MultiLineCommentChannel()) // backslash at the end of the line: just throw away .withChannel(new BackslashChannel()) // detects preprocessor directives: diff --git a/cxx-squid/src/test/java/org/sonar/cxx/lexer/CxxLexerTest.java b/cxx-squid/src/test/java/org/sonar/cxx/lexer/CxxLexerTest.java index abb2f585b..a52fd9cdd 100644 --- a/cxx-squid/src/test/java/org/sonar/cxx/lexer/CxxLexerTest.java +++ b/cxx-squid/src/test/java/org/sonar/cxx/lexer/CxxLexerTest.java @@ -23,7 +23,6 @@ import com.sonar.cxx.sslr.api.Grammar; import com.sonar.cxx.sslr.impl.Lexer; import java.io.File; -import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Arrays; import static org.assertj.core.api.Assertions.assertThat; @@ -55,10 +54,77 @@ public void init() { lexer = CxxLexerPool.create(cxxpp, new JoinStringsPreprocessor()).getLexer(); } + /** + * C++ Standard, line splicing + */ + @Test + void line_splicing() { + var softly = new SoftAssertions(); + + softly.assertThat(lexer.lex("" + )).as("empty file").allSatisfy(token + -> assertThat(token).isValue("EOF").isLine(1)); + softly.assertThat(lexer.lex("\\\n" + )).as("empty file with line splicing").allSatisfy(token + -> assertThat(token).isValue("EOF").isLine(2)); + softly.assertThat(lexer.lex("\\ \t \n" + )).as("empty file with line splicing and whitespaces").allSatisfy(token + -> assertThat(token).isValue("EOF").isLine(2)); + + softly.assertThat(lexer.lex("//a\\\n" + + "b\n")).as("comment c++: line splicing").anySatisfy(token + -> assertThat(token).hasTrivia().isTrivia("//ab").isComment().isTriviaLine(1)); + softly.assertThat(lexer.lex("/\\\n" + + "/ab\n")).as("comment c++: line splicing").anySatisfy(token + -> assertThat(token).hasTrivia().isTrivia("//ab").isComment().isTriviaLine(1)); + softly.assertThat(lexer.lex("/\\ \t \n" + + "/ab\n")).as("comment c++: line splicing").anySatisfy(token + -> assertThat(token).hasTrivia().isTrivia("//ab").isComment().isTriviaLine(1)); + softly.assertThat(lexer.lex("int main() {\n" + + "int i = 1\n" + + "// \\\n" // line splicing + + "+ 42\n" + + ";\n" + + "return i;\n" + + "}\n")).as("comment c++: line splicing").anySatisfy(token + -> assertThat(token).hasTrivia().isTrivia("// + 42").isComment().isTriviaLine(3)); + softly.assertThat(lexer.lex("int main() {\n" + + "int i = 1\n" + + "// \\ \t \n" // line splicing with whitespaces + + "+ 42\n" + + ";\n" + + "return i;\n" + + "}\n")).as("comment c++: line splicing with whitespaces").anySatisfy(token + -> assertThat(token).hasTrivia().isTrivia("// + 42").isComment().isTriviaLine(3)); + + softly.assertThat(lexer.lex("/\\\n" // line splicing + + "**\\\n" // line splicing + + "/")).as("comment c: line splicing").anySatisfy(token + -> assertThat(token).isValue("EOF").hasTrivia().isTrivia("/**/").isComment().isTriviaLine(1)); + softly.assertThat(lexer.lex("/\\ \t \n" // line splicing with whitespaces + + "**\\ \t \n" // line splicing with whitespaces + + "/")).as("comment c: line splicing with whitespaces").anySatisfy(token + -> assertThat(token).isValue("EOF").hasTrivia().isTrivia("/**/").isComment().isTriviaLine(1)); + + softly.assertThat(lexer.lex("/\\\n" + + "*\n" + + "*/ # /*\n" + + "*/ defi\\\n" + + "ne FO\\\n" + + "O 10\\\n" + + "20\n")).as("preprocessor directive with line splicing").anySatisfy(token + -> assertThat(token).isValue("EOF").hasTrivia().isTrivia("# define FOO 1020").isTriviaLine(3)); + softly.assertAll(); + + softly.assertThat(lexer.lex("\"str\\\n" + + "i\\\n" + + "ng\"")).as("string with line splicing").anySatisfy(token + -> assertThat(token).isValue("\"string\"").hasType(CxxTokenType.STRING).isLine(1)); + softly.assertAll(); + } + /** * C++ Standard, Section 2.8 "Comments" - * - * @throws URISyntaxException */ @Test void comments_cxx() { @@ -85,7 +151,7 @@ void comments_c() { softly.assertThat(lexer.lex("/* My comment */")).as("comment c: simple").anySatisfy(token -> assertThat(token).isValue("EOF").hasTrivia().isTrivia("/* My comment */").isComment().isTriviaLine(1)); softly.assertThat(lexer.lex("/*\\\n*/")).as("comment c: with newline").anySatisfy(token - -> assertThat(token).isValue("EOF").hasTrivia().isTrivia("/*\\\n*/").isComment().isTriviaLine(1)); + -> assertThat(token).isValue("EOF").hasTrivia().isTrivia("/**/").isComment().isTriviaLine(1)); softly.assertThat(lexer.lex("/*//*/")).as("comment c: nested").anySatisfy(token -> assertThat(token).isValue("EOF").hasTrivia().isTrivia("/*//*/").isComment().isTriviaLine(1)); softly.assertThat(lexer.lex("/* /* */")).as("comment c: nested2").anySatisfy(token diff --git a/cxx-squid/src/test/java/org/sonar/cxx/lexer/CxxLexerWithoutPreprocessorTest.java b/cxx-squid/src/test/java/org/sonar/cxx/lexer/CxxLexerWithoutPreprocessorTest.java index 0d7406175..6a9b82908 100644 --- a/cxx-squid/src/test/java/org/sonar/cxx/lexer/CxxLexerWithoutPreprocessorTest.java +++ b/cxx-squid/src/test/java/org/sonar/cxx/lexer/CxxLexerWithoutPreprocessorTest.java @@ -66,7 +66,7 @@ void preprocessor_directives() { @Test void preprocessor_continued_define() { assertThat(lexer.lex("#define M\\\n" - + "0")).anySatisfy(token -> assertThat(token).isValue("#define M 0").hasType( + + "0")).anySatisfy(token -> assertThat(token).isValue("#define M0").hasType( CxxTokenType.PREPROCESSOR)); } diff --git a/cxx-squid/src/test/java/org/sonar/cxx/lexer/LexerAssert.java b/cxx-squid/src/test/java/org/sonar/cxx/lexer/LexerAssert.java index 1ee4728f0..2eaec38a9 100644 --- a/cxx-squid/src/test/java/org/sonar/cxx/lexer/LexerAssert.java +++ b/cxx-squid/src/test/java/org/sonar/cxx/lexer/LexerAssert.java @@ -51,6 +51,15 @@ public LexerAssert isValue(String value) { return this; } + public LexerAssert isLine(int line) { + isNotNull(); + int tokenLine = actual.getLine(); + if (tokenLine != line) { + failWithMessage("Expected the Token line to be <%s> but was <%s>", line, tokenLine); + } + return this; + } + public LexerAssert hasTrivia() { isNotNull(); boolean exists = actual.hasTrivia(); diff --git a/cxx-squid/src/test/java/org/sonar/cxx/preprocessor/IncludeFileLexerTest.java b/cxx-squid/src/test/java/org/sonar/cxx/preprocessor/IncludeFileLexerTest.java index 56f9ffb7e..3c3625d0a 100644 --- a/cxx-squid/src/test/java/org/sonar/cxx/preprocessor/IncludeFileLexerTest.java +++ b/cxx-squid/src/test/java/org/sonar/cxx/preprocessor/IncludeFileLexerTest.java @@ -44,8 +44,10 @@ void proper_preprocessor_directives_are_created() { @Test void continued_lines_are_handled_correctly() { - List tokens = LEXER.lex("#define\\\nname"); - assertThat(hasToken("#define name", CxxTokenType.PREPROCESSOR) + List tokens = LEXER.lex("#define \\\n" + + "name \\\n" + + "10"); + assertThat(hasToken("#define name 10", CxxTokenType.PREPROCESSOR) .matches(tokens)).isTrue(); assertThat(tokens).hasSize(2); } diff --git a/cxx-squid/src/test/resources/metrics/nosonar.cc b/cxx-squid/src/test/resources/metrics/nosonar.cc index 83538969b..22c25f1c1 100644 --- a/cxx-squid/src/test/resources/metrics/nosonar.cc +++ b/cxx-squid/src/test/resources/metrics/nosonar.cc @@ -10,4 +10,4 @@ int c; /* NOSONAR */ int d; // NOSONAR -/* EOF '/ +/* EOF */ diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/CodeBuffer.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/CodeBuffer.java index 94fb56f1f..c6cf46190 100644 --- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/CodeBuffer.java +++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/CodeBuffer.java @@ -113,6 +113,20 @@ public final int pop() { return character; } + /** + * Read and consume the next characters + * + * @param number number of characters to consume + * @return the next character or -1 if the end of the stream is reached + */ + public final int skip(int number) { + while (number != 0) { + pop(); + number--; + } + return peek(); + } + private void updateCursorPosition(int character) { // see Java Language Specification : http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.4 if (character == LF || character == CR && peek() != LF) { diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/channel/CodeBufferTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/channel/CodeBufferTest.java index c2c3c2a06..d0f1e2268 100644 --- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/channel/CodeBufferTest.java +++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/channel/CodeBufferTest.java @@ -41,6 +41,13 @@ void testPop() { assertThat(code.pop()).isEqualTo(-1); } + @Test + void testSkip() { + var code = new CodeBuffer("1234", defaulConfiguration); + assertThat((char) code.skip(2)).isEqualTo('3'); + assertThat(code.skip(2)).isEqualTo(-1); + } + @Test void testPeek() { var code = new CodeBuffer("pa", defaulConfiguration); From afb5aeace16a37514dcd4be07aed97928e0dd35a Mon Sep 17 00:00:00 2001 From: guwirth Date: Wed, 25 Sep 2024 14:16:24 +0200 Subject: [PATCH 31/32] update copyright in license headers - close #2746 --- .../resources/org/sonar/l10n/cxx/rules/cxx/FileHeader.html | 2 +- cxx-sensors/src/tools/clangsa_createrules.py | 2 +- cxx-sensors/src/tools/clangtidy_createrules.py | 2 +- cxx-sensors/src/tools/cppcheck_createrules.py | 2 +- cxx-sensors/src/tools/infer_createrules.py | 2 +- cxx-sensors/src/tools/utils_createrules.py | 2 +- cxx-sensors/src/tools/vc_createrules.py | 2 +- cxx-squid-bridge/README.md | 2 +- cxx-squid-bridge/pom.xml | 2 +- .../src/main/java/org/sonar/cxx/squidbridge/AstScanner.java | 2 +- .../org/sonar/cxx/squidbridge/AstScannerExceptionHandler.java | 2 +- .../main/java/org/sonar/cxx/squidbridge/CommentAnalyser.java | 2 +- .../org/sonar/cxx/squidbridge/SourceCodeBuilderCallback.java | 2 +- .../org/sonar/cxx/squidbridge/SourceCodeBuilderVisitor.java | 2 +- .../main/java/org/sonar/cxx/squidbridge/SquidAstVisitor.java | 2 +- .../java/org/sonar/cxx/squidbridge/SquidAstVisitorContext.java | 2 +- .../org/sonar/cxx/squidbridge/SquidAstVisitorContextImpl.java | 2 +- .../sonar/cxx/squidbridge/annotations/ActivatedByDefault.java | 2 +- .../annotations/AnnotationBasedRulesDefinition.java | 2 +- .../java/org/sonar/cxx/squidbridge/annotations/NoSqale.java | 2 +- .../org/sonar/cxx/squidbridge/annotations/RuleTemplate.java | 2 +- .../cxx/squidbridge/annotations/SqaleConstantRemediation.java | 2 +- .../cxx/squidbridge/annotations/SqaleLinearRemediation.java | 2 +- .../annotations/SqaleLinearWithOffsetRemediation.java | 2 +- .../cxx/squidbridge/annotations/SqaleSubCharacteristic.java | 2 +- .../main/java/org/sonar/cxx/squidbridge/annotations/Tags.java | 2 +- .../org/sonar/cxx/squidbridge/annotations/package-info.java | 2 +- .../java/org/sonar/cxx/squidbridge/api/AnalysisException.java | 2 +- .../main/java/org/sonar/cxx/squidbridge/api/CheckMessage.java | 2 +- .../src/main/java/org/sonar/cxx/squidbridge/api/CodeCheck.java | 2 +- .../main/java/org/sonar/cxx/squidbridge/api/CodeVisitor.java | 2 +- .../src/main/java/org/sonar/cxx/squidbridge/api/Query.java | 2 +- .../main/java/org/sonar/cxx/squidbridge/api/SourceClass.java | 2 +- .../main/java/org/sonar/cxx/squidbridge/api/SourceCode.java | 2 +- .../java/org/sonar/cxx/squidbridge/api/SourceCodeIndexer.java | 2 +- .../org/sonar/cxx/squidbridge/api/SourceCodeSearchEngine.java | 2 +- .../org/sonar/cxx/squidbridge/api/SourceCodeTreeDecorator.java | 2 +- .../main/java/org/sonar/cxx/squidbridge/api/SourceFile.java | 2 +- .../java/org/sonar/cxx/squidbridge/api/SourceFunction.java | 2 +- .../main/java/org/sonar/cxx/squidbridge/api/SourceMethod.java | 2 +- .../main/java/org/sonar/cxx/squidbridge/api/SourcePackage.java | 2 +- .../main/java/org/sonar/cxx/squidbridge/api/SourceProject.java | 2 +- .../java/org/sonar/cxx/squidbridge/api/SquidConfiguration.java | 2 +- .../main/java/org/sonar/cxx/squidbridge/api/package-info.java | 2 +- .../checks/AbstractCommentRegularExpressionCheck.java | 2 +- .../squidbridge/checks/AbstractOneStatementPerLineCheck.java | 2 +- .../org/sonar/cxx/squidbridge/checks/AbstractXPathCheck.java | 2 +- .../sonar/cxx/squidbridge/checks/CheckMessagesVerifier.java | 2 +- .../cxx/squidbridge/checks/CheckMessagesVerifierRule.java | 2 +- .../java/org/sonar/cxx/squidbridge/checks/ChecksHelper.java | 2 +- .../main/java/org/sonar/cxx/squidbridge/checks/SquidCheck.java | 2 +- .../java/org/sonar/cxx/squidbridge/checks/package-info.java | 2 +- .../java/org/sonar/cxx/squidbridge/indexer/QueryByType.java | 2 +- .../java/org/sonar/cxx/squidbridge/indexer/SquidIndex.java | 2 +- .../java/org/sonar/cxx/squidbridge/indexer/package-info.java | 2 +- .../org/sonar/cxx/squidbridge/measures/AggregationFormula.java | 2 +- .../cxx/squidbridge/measures/CalculatedMetricFormula.java | 2 +- .../java/org/sonar/cxx/squidbridge/measures/Measurable.java | 2 +- .../main/java/org/sonar/cxx/squidbridge/measures/Measures.java | 2 +- .../java/org/sonar/cxx/squidbridge/measures/MetricDef.java | 2 +- .../sonar/cxx/squidbridge/measures/SumAggregationFormula.java | 2 +- .../java/org/sonar/cxx/squidbridge/measures/package-info.java | 2 +- .../org/sonar/cxx/squidbridge/metrics/CommentsVisitor.java | 2 +- .../org/sonar/cxx/squidbridge/metrics/ComplexityVisitor.java | 2 +- .../java/org/sonar/cxx/squidbridge/metrics/CounterVisitor.java | 2 +- .../org/sonar/cxx/squidbridge/metrics/LinesOfCodeVisitor.java | 2 +- .../java/org/sonar/cxx/squidbridge/metrics/LinesVisitor.java | 2 +- .../java/org/sonar/cxx/squidbridge/metrics/package-info.java | 2 +- .../src/main/java/org/sonar/cxx/squidbridge/package-info.java | 2 +- .../sonar/cxx/squidbridge/rules/ExternalDescriptionLoader.java | 2 +- .../java/org/sonar/cxx/squidbridge/rules/package-info.java | 2 +- .../annotations/AnnotationBasedRulesDefinitionTest.java | 2 +- .../java/org/sonar/cxx/squidbridge/api/CheckMessageTest.java | 2 +- .../java/org/sonar/cxx/squidbridge/api/SourceCodeTest.java | 2 +- .../java/org/sonar/cxx/squidbridge/api/SourceFileTest.java | 2 +- .../java/org/sonar/cxx/squidbridge/api/SourceMethodTest.java | 2 +- .../checks/AbstractCommentRegularExpressionCheckTest.java | 2 +- .../checks/AbstractOneStatementPerLineCheckTest.java | 2 +- .../sonar/cxx/squidbridge/checks/AbstractXPathCheckTest.java | 2 +- .../cxx/squidbridge/checks/CheckMessagesVerifierRuleTest.java | 2 +- .../cxx/squidbridge/checks/CheckMessagesVerifierTest.java | 2 +- .../org/sonar/cxx/squidbridge/checks/ChecksHelperTest.java | 2 +- .../java/org/sonar/cxx/squidbridge/checks/ResourceParser.java | 2 +- .../java/org/sonar/cxx/squidbridge/checks/SquidCheckTest.java | 2 +- .../java/org/sonar/cxx/squidbridge/indexer/SquidIndexTest.java | 2 +- .../org/sonar/cxx/squidbridge/metrics/CommentsVisitorTest.java | 2 +- .../sonar/cxx/squidbridge/metrics/ComplexityVisitorTest.java | 2 +- .../org/sonar/cxx/squidbridge/metrics/CounterVisitorTest.java | 2 +- .../sonar/cxx/squidbridge/metrics/LinesOfCodeVisitorTest.java | 2 +- .../org/sonar/cxx/squidbridge/metrics/LinesVisitorTest.java | 2 +- .../java/org/sonar/cxx/squidbridge/metrics/ResourceParser.java | 2 +- .../cxx/squidbridge/rules/ExternalDescriptionLoaderTest.java | 2 +- .../org/sonar/cxx/squidbridge/test/miniC/MiniCAstScanner.java | 2 +- .../test/miniC/fakeChecks/FakeCommentCheckTest.java | 2 +- .../cxx/squidbridge/test/miniC/fakeChecks/ResourceParser.java | 2 +- cxx-squid/dox/tools/grammar_parser/grammar_parser.py | 2 +- .../src/main/java/org/sonar/cxx/channels/ChannelUtils.java | 2 +- .../java/org/sonar/cxx/channels/MultiLineCommentChannel.java | 2 +- .../java/org/sonar/cxx/channels/SingleLineCommentChannel.java | 2 +- .../test/java/org/sonar/cxx/utils/CxxReportLocationTest.java | 2 +- cxx-sslr/README.md | 2 +- cxx-sslr/pom.xml | 2 +- .../main/java/com/sonar/cxx/sslr/api/AstAndTokenVisitor.java | 2 +- .../src/main/java/com/sonar/cxx/sslr/api/AstNode.java | 2 +- .../java/com/sonar/cxx/sslr/api/AstNodeSkippingPolicy.java | 2 +- .../src/main/java/com/sonar/cxx/sslr/api/AstNodeType.java | 2 +- .../src/main/java/com/sonar/cxx/sslr/api/AstVisitor.java | 2 +- .../src/main/java/com/sonar/cxx/sslr/api/GenericTokenType.java | 2 +- .../src/main/java/com/sonar/cxx/sslr/api/Grammar.java | 2 +- .../java/com/sonar/cxx/sslr/api/PreprocessingDirective.java | 2 +- .../src/main/java/com/sonar/cxx/sslr/api/Preprocessor.java | 2 +- .../main/java/com/sonar/cxx/sslr/api/PreprocessorAction.java | 2 +- .../main/java/com/sonar/cxx/sslr/api/RecognitionException.java | 2 +- .../sslr-core/src/main/java/com/sonar/cxx/sslr/api/Rule.java | 2 +- .../sslr-core/src/main/java/com/sonar/cxx/sslr/api/Token.java | 2 +- .../src/main/java/com/sonar/cxx/sslr/api/TokenType.java | 2 +- .../sslr-core/src/main/java/com/sonar/cxx/sslr/api/Trivia.java | 2 +- .../src/main/java/com/sonar/cxx/sslr/api/package-info.java | 2 +- .../main/java/com/sonar/cxx/sslr/api/typed/ActionParser.java | 2 +- .../main/java/com/sonar/cxx/sslr/api/typed/AstNodeBuilder.java | 2 +- .../main/java/com/sonar/cxx/sslr/api/typed/GrammarBuilder.java | 2 +- .../src/main/java/com/sonar/cxx/sslr/api/typed/Input.java | 2 +- .../main/java/com/sonar/cxx/sslr/api/typed/NodeBuilder.java | 2 +- .../java/com/sonar/cxx/sslr/api/typed/NonterminalBuilder.java | 2 +- .../src/main/java/com/sonar/cxx/sslr/api/typed/Optional.java | 2 +- .../main/java/com/sonar/cxx/sslr/api/typed/package-info.java | 2 +- .../sslr-core/src/main/java/com/sonar/cxx/sslr/impl/Lexer.java | 2 +- .../src/main/java/com/sonar/cxx/sslr/impl/LexerException.java | 2 +- .../src/main/java/com/sonar/cxx/sslr/impl/Parser.java | 2 +- .../java/com/sonar/cxx/sslr/impl/ast/AlwaysSkipFromAst.java | 2 +- .../src/main/java/com/sonar/cxx/sslr/impl/ast/AstWalker.java | 2 +- .../main/java/com/sonar/cxx/sslr/impl/ast/AstXmlPrinter.java | 2 +- .../java/com/sonar/cxx/sslr/impl/ast/NeverSkipFromAst.java | 2 +- .../com/sonar/cxx/sslr/impl/ast/SkipFromAstIfOnlyOneChild.java | 2 +- .../main/java/com/sonar/cxx/sslr/impl/ast/package-info.java | 2 +- .../java/com/sonar/cxx/sslr/impl/channel/BlackHoleChannel.java | 2 +- .../com/sonar/cxx/sslr/impl/channel/BomCharacterChannel.java | 2 +- .../com/sonar/cxx/sslr/impl/channel/CommentRegexpChannel.java | 2 +- .../cxx/sslr/impl/channel/IdentifierAndKeywordChannel.java | 2 +- .../com/sonar/cxx/sslr/impl/channel/PunctuatorChannel.java | 2 +- .../java/com/sonar/cxx/sslr/impl/channel/RegexpChannel.java | 2 +- .../com/sonar/cxx/sslr/impl/channel/RegexpChannelBuilder.java | 2 +- .../sonar/cxx/sslr/impl/channel/UnknownCharacterChannel.java | 2 +- .../java/com/sonar/cxx/sslr/impl/channel/package-info.java | 2 +- .../java/com/sonar/cxx/sslr/impl/matcher/GrammarFunctions.java | 2 +- .../src/main/java/com/sonar/cxx/sslr/impl/matcher/Matcher.java | 2 +- .../java/com/sonar/cxx/sslr/impl/matcher/RuleDefinition.java | 2 +- .../java/com/sonar/cxx/sslr/impl/matcher/package-info.java | 2 +- .../src/main/java/com/sonar/cxx/sslr/impl/package-info.java | 2 +- .../main/java/com/sonar/cxx/sslr/impl/token/TokenUtils.java | 2 +- .../main/java/com/sonar/cxx/sslr/impl/token/package-info.java | 2 +- .../java/com/sonar/cxx/sslr/impl/typed/AstNodeReflector.java | 2 +- .../cxx/sslr/impl/typed/DelayedRuleInvocationExpression.java | 2 +- .../sonar/cxx/sslr/impl/typed/GrammarBuilderInterceptor.java | 2 +- .../main/java/com/sonar/cxx/sslr/impl/typed/Interceptor.java | 2 +- .../java/com/sonar/cxx/sslr/impl/typed/MethodInterceptor.java | 2 +- .../java/com/sonar/cxx/sslr/impl/typed/ReflectionUtils.java | 2 +- .../java/com/sonar/cxx/sslr/impl/typed/SyntaxTreeCreator.java | 2 +- .../main/java/com/sonar/cxx/sslr/impl/typed/package-info.java | 2 +- .../src/main/java/org/sonar/cxx/sslr/channel/Channel.java | 2 +- .../org/sonar/cxx/sslr/channel/ChannelCodeReaderFilter.java | 2 +- .../java/org/sonar/cxx/sslr/channel/ChannelDispatcher.java | 2 +- .../main/java/org/sonar/cxx/sslr/channel/ChannelException.java | 2 +- .../src/main/java/org/sonar/cxx/sslr/channel/CodeBuffer.java | 2 +- .../src/main/java/org/sonar/cxx/sslr/channel/CodeReader.java | 2 +- .../org/sonar/cxx/sslr/channel/CodeReaderConfiguration.java | 2 +- .../main/java/org/sonar/cxx/sslr/channel/CodeReaderFilter.java | 2 +- .../src/main/java/org/sonar/cxx/sslr/channel/EndMatcher.java | 2 +- .../src/main/java/org/sonar/cxx/sslr/channel/RegexChannel.java | 2 +- .../src/main/java/org/sonar/cxx/sslr/channel/package-info.java | 2 +- .../main/java/org/sonar/cxx/sslr/grammar/GrammarBuilder.java | 2 +- .../main/java/org/sonar/cxx/sslr/grammar/GrammarException.java | 2 +- .../java/org/sonar/cxx/sslr/grammar/GrammarRuleBuilder.java | 2 +- .../main/java/org/sonar/cxx/sslr/grammar/GrammarRuleKey.java | 2 +- .../org/sonar/cxx/sslr/grammar/LexerfulGrammarBuilder.java | 2 +- .../org/sonar/cxx/sslr/grammar/LexerlessGrammarBuilder.java | 2 +- .../src/main/java/org/sonar/cxx/sslr/grammar/package-info.java | 2 +- .../org/sonar/cxx/sslr/internal/grammar/MutableGrammar.java | 2 +- .../sonar/cxx/sslr/internal/grammar/MutableParsingRule.java | 2 +- .../java/org/sonar/cxx/sslr/internal/grammar/package-info.java | 2 +- .../java/org/sonar/cxx/sslr/internal/matchers/AstCreator.java | 2 +- .../sonar/cxx/sslr/internal/matchers/ImmutableInputBuffer.java | 2 +- .../java/org/sonar/cxx/sslr/internal/matchers/InputBuffer.java | 2 +- .../sonar/cxx/sslr/internal/matchers/LexerfulAstCreator.java | 2 +- .../java/org/sonar/cxx/sslr/internal/matchers/LocatedText.java | 2 +- .../java/org/sonar/cxx/sslr/internal/matchers/Matcher.java | 2 +- .../sonar/cxx/sslr/internal/matchers/MatcherPathElement.java | 2 +- .../java/org/sonar/cxx/sslr/internal/matchers/ParseNode.java | 2 +- .../org/sonar/cxx/sslr/internal/matchers/TextLocation.java | 2 +- .../java/org/sonar/cxx/sslr/internal/matchers/TextUtils.java | 2 +- .../org/sonar/cxx/sslr/internal/matchers/package-info.java | 2 +- .../org/sonar/cxx/sslr/internal/vm/CompilableGrammarRule.java | 2 +- .../org/sonar/cxx/sslr/internal/vm/CompilationHandler.java | 2 +- .../java/org/sonar/cxx/sslr/internal/vm/CompiledGrammar.java | 2 +- .../org/sonar/cxx/sslr/internal/vm/EndOfInputExpression.java | 2 +- .../org/sonar/cxx/sslr/internal/vm/ErrorLocatingHandler.java | 2 +- .../java/org/sonar/cxx/sslr/internal/vm/ErrorTreeNode.java | 2 +- .../java/org/sonar/cxx/sslr/internal/vm/FirstOfExpression.java | 2 +- .../main/java/org/sonar/cxx/sslr/internal/vm/Instruction.java | 2 +- .../src/main/java/org/sonar/cxx/sslr/internal/vm/Machine.java | 2 +- .../java/org/sonar/cxx/sslr/internal/vm/MachineHandler.java | 2 +- .../main/java/org/sonar/cxx/sslr/internal/vm/MachineStack.java | 2 +- .../org/sonar/cxx/sslr/internal/vm/MemoParsingExpression.java | 2 +- .../org/sonar/cxx/sslr/internal/vm/MutableGrammarCompiler.java | 2 +- .../java/org/sonar/cxx/sslr/internal/vm/NativeExpression.java | 2 +- .../java/org/sonar/cxx/sslr/internal/vm/NextExpression.java | 2 +- .../java/org/sonar/cxx/sslr/internal/vm/NextNotExpression.java | 2 +- .../java/org/sonar/cxx/sslr/internal/vm/NothingExpression.java | 2 +- .../org/sonar/cxx/sslr/internal/vm/OneOrMoreExpression.java | 2 +- .../org/sonar/cxx/sslr/internal/vm/OptionalExpression.java | 2 +- .../java/org/sonar/cxx/sslr/internal/vm/ParsingExpression.java | 2 +- .../java/org/sonar/cxx/sslr/internal/vm/PatternExpression.java | 2 +- .../java/org/sonar/cxx/sslr/internal/vm/RuleRefExpression.java | 2 +- .../org/sonar/cxx/sslr/internal/vm/SequenceExpression.java | 2 +- .../java/org/sonar/cxx/sslr/internal/vm/StringExpression.java | 2 +- .../java/org/sonar/cxx/sslr/internal/vm/TokenExpression.java | 2 +- .../java/org/sonar/cxx/sslr/internal/vm/TriviaExpression.java | 2 +- .../org/sonar/cxx/sslr/internal/vm/ZeroOrMoreExpression.java | 2 +- .../cxx/sslr/internal/vm/lexerful/AdjacentExpression.java | 2 +- .../cxx/sslr/internal/vm/lexerful/AnyTokenExpression.java | 2 +- .../sslr/internal/vm/lexerful/LexerfulParseErrorFormatter.java | 2 +- .../cxx/sslr/internal/vm/lexerful/TillNewLineExpression.java | 2 +- .../sslr/internal/vm/lexerful/TokenTypeClassExpression.java | 2 +- .../cxx/sslr/internal/vm/lexerful/TokenTypeExpression.java | 2 +- .../cxx/sslr/internal/vm/lexerful/TokenTypesExpression.java | 2 +- .../cxx/sslr/internal/vm/lexerful/TokenValueExpression.java | 2 +- .../cxx/sslr/internal/vm/lexerful/TokensBridgeExpression.java | 2 +- .../org/sonar/cxx/sslr/internal/vm/lexerful/package-info.java | 2 +- .../main/java/org/sonar/cxx/sslr/internal/vm/package-info.java | 2 +- .../main/java/org/sonar/cxx/sslr/parser/GrammarOperators.java | 2 +- .../main/java/org/sonar/cxx/sslr/parser/LexerlessGrammar.java | 2 +- .../src/main/java/org/sonar/cxx/sslr/parser/ParseError.java | 2 +- .../java/org/sonar/cxx/sslr/parser/ParseErrorFormatter.java | 2 +- .../src/main/java/org/sonar/cxx/sslr/parser/ParseRunner.java | 2 +- .../src/main/java/org/sonar/cxx/sslr/parser/ParserAdapter.java | 2 +- .../src/main/java/org/sonar/cxx/sslr/parser/ParsingResult.java | 2 +- .../src/main/java/org/sonar/cxx/sslr/parser/package-info.java | 2 +- .../src/test/java/com/sonar/cxx/sslr/api/AstNodeTest.java | 2 +- .../src/test/java/com/sonar/cxx/sslr/api/GrammarTest.java | 2 +- .../java/com/sonar/cxx/sslr/api/typed/ActionParserTest.java | 2 +- .../src/test/java/com/sonar/cxx/sslr/api/typed/InputTest.java | 2 +- .../test/java/com/sonar/cxx/sslr/api/typed/OptionalTest.java | 2 +- .../com/sonar/cxx/sslr/impl/ast/AlwaysSkipFromAstTest.java | 2 +- .../java/com/sonar/cxx/sslr/impl/ast/NeverSkipFromAstTest.java | 2 +- .../sonar/cxx/sslr/impl/ast/SkipFromAstIfOnlyOneChildTest.java | 2 +- .../com/sonar/cxx/sslr/impl/matcher/GrammarFunctionsTest.java | 2 +- .../sslr/impl/typed/DelayedRuleInvocationExpressionTest.java | 2 +- .../java/com/sonar/cxx/sslr/impl/typed/InterceptorTest.java | 2 +- .../java/org/sonar/cxx/sslr/channel/ChannelDispatcherTest.java | 2 +- .../test/java/org/sonar/cxx/sslr/channel/CodeBufferTest.java | 2 +- .../test/java/org/sonar/cxx/sslr/channel/CodeReaderTest.java | 2 +- .../test/java/org/sonar/cxx/sslr/channel/RegexChannelTest.java | 2 +- .../org/sonar/cxx/sslr/grammar/LexerfulGrammarBuilderTest.java | 2 +- .../sonar/cxx/sslr/grammar/LexerlessGrammarBuilderTest.java | 2 +- .../test/java/org/sonar/cxx/sslr/grammar/RuleBuilderTest.java | 2 +- .../sonar/cxx/sslr/internal/grammar/MutableGrammarTest.java | 2 +- .../cxx/sslr/internal/grammar/MutableParsingRuleTest.java | 2 +- .../org/sonar/cxx/sslr/internal/matchers/AstCreatorTest.java | 2 +- .../sonar/cxx/sslr/internal/matchers/ExpressionGrammar.java | 2 +- .../cxx/sslr/internal/matchers/ExpressionGrammarTest.java | 2 +- .../cxx/sslr/internal/matchers/ImmutableInputBufferTest.java | 2 +- .../org/sonar/cxx/sslr/internal/matchers/ParseTreePrinter.java | 2 +- .../org/sonar/cxx/sslr/internal/matchers/TextUtilsTest.java | 2 +- .../sonar/cxx/sslr/internal/vm/EndOfInputExpressionTest.java | 2 +- .../sonar/cxx/sslr/internal/vm/ErrorLocatingHandlerTest.java | 2 +- .../org/sonar/cxx/sslr/internal/vm/FirstOfExpressionTest.java | 2 +- .../java/org/sonar/cxx/sslr/internal/vm/InstructionTest.java | 2 +- .../org/sonar/cxx/sslr/internal/vm/MachineIntegrationTest.java | 2 +- .../test/java/org/sonar/cxx/sslr/internal/vm/MachineTest.java | 2 +- .../org/sonar/cxx/sslr/internal/vm/NextExpressionTest.java | 2 +- .../org/sonar/cxx/sslr/internal/vm/NextNotExpressionTest.java | 2 +- .../org/sonar/cxx/sslr/internal/vm/NothingExpressionTest.java | 2 +- .../sonar/cxx/sslr/internal/vm/OneOrMoreExpressionTest.java | 2 +- .../org/sonar/cxx/sslr/internal/vm/OptionalExpressionTest.java | 2 +- .../org/sonar/cxx/sslr/internal/vm/PatternExpressionTest.java | 2 +- .../org/sonar/cxx/sslr/internal/vm/RuleRefExpressionTest.java | 2 +- .../org/sonar/cxx/sslr/internal/vm/SequenceExpressionTest.java | 2 +- .../org/sonar/cxx/sslr/internal/vm/StringExpressionTest.java | 2 +- .../java/org/sonar/cxx/sslr/internal/vm/SubExpression.java | 2 +- .../org/sonar/cxx/sslr/internal/vm/TokenExpressionTest.java | 2 +- .../org/sonar/cxx/sslr/internal/vm/TriviaExpressionTest.java | 2 +- .../sonar/cxx/sslr/internal/vm/ZeroOrMoreExpressionTest.java | 2 +- .../cxx/sslr/internal/vm/lexerful/AdjacentExpressionTest.java | 2 +- .../cxx/sslr/internal/vm/lexerful/AnyTokenExpressionTest.java | 2 +- .../internal/vm/lexerful/LexerfulMachineIntegrationTest.java | 2 +- .../internal/vm/lexerful/LexerfulParseErrorFormatterTest.java | 2 +- .../sslr/internal/vm/lexerful/TillNewLineExpressionTest.java | 2 +- .../cxx/sslr/internal/vm/lexerful/TokenTypeClassTest.java | 2 +- .../cxx/sslr/internal/vm/lexerful/TokenTypeExpressionTest.java | 2 +- .../sslr/internal/vm/lexerful/TokenTypesExpressionTest.java | 2 +- .../sslr/internal/vm/lexerful/TokenValueExpressionTest.java | 2 +- .../sslr/internal/vm/lexerful/TokensBridgeExpressionTest.java | 2 +- .../java/org/sonar/cxx/sslr/parser/GrammarOperatorsTest.java | 2 +- .../java/org/sonar/cxx/sslr/parser/LexerlessGrammarTest.java | 2 +- .../org/sonar/cxx/sslr/parser/ParseErrorFormatterTest.java | 2 +- .../test/java/org/sonar/cxx/sslr/parser/ParseRunnerTest.java | 2 +- .../test/java/org/sonar/cxx/sslr/parser/ParserAdapterTest.java | 2 +- .../com/sonar/cxx/sslr/test/lexer/HasCommentCondition.java | 2 +- .../com/sonar/cxx/sslr/test/lexer/HasLastTokenCondition.java | 2 +- .../java/com/sonar/cxx/sslr/test/lexer/HasTokenCondition.java | 2 +- .../com/sonar/cxx/sslr/test/lexer/HasTokenTypeCondition.java | 2 +- .../com/sonar/cxx/sslr/test/lexer/HasTokenValueCondition.java | 2 +- .../java/com/sonar/cxx/sslr/test/lexer/HasTokensCondition.java | 2 +- .../java/com/sonar/cxx/sslr/test/lexer/LexerConditions.java | 2 +- .../main/java/com/sonar/cxx/sslr/test/lexer/package-info.java | 2 +- .../java/com/sonar/cxx/sslr/test/minic/MiniCColorizer.java | 2 +- .../main/java/com/sonar/cxx/sslr/test/minic/MiniCGrammar.java | 2 +- .../main/java/com/sonar/cxx/sslr/test/minic/MiniCLexer.java | 2 +- .../main/java/com/sonar/cxx/sslr/test/minic/MiniCParser.java | 2 +- .../main/java/com/sonar/cxx/sslr/test/minic/MiniCToolkit.java | 2 +- .../main/java/com/sonar/cxx/sslr/test/minic/package-info.java | 2 +- .../java/org/sonar/cxx/sslr/test/channel/ChannelCondition.java | 2 +- .../java/org/sonar/cxx/sslr/test/channel/ChannelMatchers.java | 2 +- .../cxx/sslr/test/channel/ReaderHasNextCharCondition.java | 2 +- .../java/org/sonar/cxx/sslr/test/channel/package-info.java | 2 +- .../src/main/java/org/sonar/cxx/sslr/tests/Assertions.java | 2 +- .../src/main/java/org/sonar/cxx/sslr/tests/ParserAssert.java | 2 +- .../sonar/cxx/sslr/tests/ParsingResultComparisonFailure.java | 2 +- .../src/main/java/org/sonar/cxx/sslr/tests/RuleAssert.java | 2 +- .../src/main/java/org/sonar/cxx/sslr/tests/package-info.java | 2 +- .../org/sonar/cxx/sslr/test/channel/ChannelMatchersTest.java | 2 +- .../src/test/java/org/sonar/cxx/sslr/tests/AssertionsTest.java | 2 +- .../test/java/org/sonar/cxx/sslr/tests/ParserAssertTest.java | 2 +- .../cxx/sslr/tests/ParsingResultComparisonFailureTest.java | 2 +- .../src/test/java/org/sonar/cxx/sslr/tests/RuleAssertTest.java | 2 +- .../src/test/java/com/sonar/cxx/sslr/api/AstNodeTest.java | 2 +- .../src/test/java/com/sonar/cxx/sslr/impl/MockTokenType.java | 2 +- .../src/test/java/com/sonar/cxx/sslr/impl/ParserTest.java | 2 +- .../test/java/com/sonar/cxx/sslr/impl/ast/AstWalkerTest.java | 2 +- .../java/com/sonar/cxx/sslr/impl/ast/AstXmlPrinterTest.java | 2 +- .../com/sonar/cxx/sslr/impl/channel/BlackHoleChannelTest.java | 2 +- .../sonar/cxx/sslr/impl/channel/BomCharacterChannelTest.java | 2 +- .../com/sonar/cxx/sslr/impl/channel/CommentChannelTest.java | 2 +- .../cxx/sslr/impl/channel/IdentifierAndKeywordChannelTest.java | 2 +- .../com/sonar/cxx/sslr/impl/channel/PunctuatorChannelTest.java | 2 +- .../sonar/cxx/sslr/impl/channel/RegexpChannelBuilderTest.java | 2 +- .../com/sonar/cxx/sslr/impl/channel/RegexpChannelTest.java | 2 +- .../cxx/sslr/impl/channel/UnknownCharacterChannelTest.java | 2 +- .../com/sonar/cxx/sslr/impl/matcher/RuleDefinitionTest.java | 2 +- .../java/com/sonar/cxx/sslr/test/minic/MiniCLexerTest.java | 2 +- .../cxx/sslr/test/minic/integration/MiniCOwnExamplesTest.java | 2 +- .../com/sonar/cxx/sslr/test/minic/rules/ExpressionTest.java | 2 +- .../java/com/sonar/cxx/sslr/test/minic/rules/RuleTest.java | 2 +- .../java/com/sonar/cxx/sslr/test/minic/rules/StructTest.java | 2 +- .../test/java/com/sonar/cxx/sslr/xpath/BasicQueriesTest.java | 2 +- .../java/com/sonar/cxx/sslr/xpath/IdentifiersTooLongTest.java | 2 +- .../java/com/sonar/cxx/sslr/xpath/IfSMustUseBracesTest.java | 2 +- .../java/org/sonar/cxx/sslr/ast/CollapsibleIfSelectTest.java | 2 +- .../java/org/sonar/cxx/sslr/ast/CollapsibleIfVisitorTest.java | 2 +- .../cxx/sslr/internal/toolkit/ConfigurationPropertyPanel.java | 2 +- .../java/org/sonar/cxx/sslr/internal/toolkit/CssLoader.java | 2 +- .../java/org/sonar/cxx/sslr/internal/toolkit/LineOffsets.java | 2 +- .../org/sonar/cxx/sslr/internal/toolkit/SourceCodeModel.java | 2 +- .../org/sonar/cxx/sslr/internal/toolkit/ToolkitPresenter.java | 2 +- .../java/org/sonar/cxx/sslr/internal/toolkit/ToolkitView.java | 2 +- .../org/sonar/cxx/sslr/internal/toolkit/ToolkitViewImpl.java | 2 +- .../java/org/sonar/cxx/sslr/internal/toolkit/package-info.java | 2 +- .../org/sonar/cxx/sslr/toolkit/AbstractConfigurationModel.java | 2 +- .../java/org/sonar/cxx/sslr/toolkit/ConfigurationModel.java | 2 +- .../java/org/sonar/cxx/sslr/toolkit/ConfigurationProperty.java | 2 +- .../src/main/java/org/sonar/cxx/sslr/toolkit/Toolkit.java | 2 +- .../java/org/sonar/cxx/sslr/toolkit/ValidationCallback.java | 2 +- .../src/main/java/org/sonar/cxx/sslr/toolkit/Validators.java | 2 +- .../src/main/java/org/sonar/cxx/sslr/toolkit/package-info.java | 2 +- .../resources/org/sonar/cxx/sslr/toolkit/sourceCodeEditor.css | 2 +- .../org/sonar/cxx/sslr/internal/toolkit/CssLoaderTest.java | 2 +- .../org/sonar/cxx/sslr/internal/toolkit/LineOffsetsTest.java | 2 +- .../sonar/cxx/sslr/internal/toolkit/ToolkitPresenterTest.java | 2 +- .../sonar/cxx/sslr/toolkit/AbstractConfigurationModelTest.java | 2 +- .../org/sonar/cxx/sslr/toolkit/ConfigurationPropertyTest.java | 2 +- .../test/java/org/sonar/cxx/sslr/toolkit/ValidatorsTest.java | 2 +- .../java/com/sonar/cxx/sslr/impl/xpath/AstNodeNavigator.java | 2 +- .../main/java/com/sonar/cxx/sslr/impl/xpath/package-info.java | 2 +- .../java/com/sonar/cxx/sslr/xpath/api/AstNodeXPathQuery.java | 2 +- .../main/java/com/sonar/cxx/sslr/xpath/api/package-info.java | 2 +- .../com/sonar/cxx/sslr/impl/xpath/AstNodeNavigatorTest.java | 2 +- .../com/sonar/cxx/sslr/xpath/api/AstNodeXPathQueryTest.java | 2 +- integration-tests/features/common.py | 1 + integration-tests/features/environment.py | 1 + integration-tests/features/steps/test_execution_statistics.py | 1 + integration-tests/features/webapi.py | 1 + pom.xml | 3 ++- 382 files changed, 383 insertions(+), 378 deletions(-) diff --git a/cxx-checks/src/main/resources/org/sonar/l10n/cxx/rules/cxx/FileHeader.html b/cxx-checks/src/main/resources/org/sonar/l10n/cxx/rules/cxx/FileHeader.html index 7ebb835a7..ee6d451e9 100644 --- a/cxx-checks/src/main/resources/org/sonar/l10n/cxx/rules/cxx/FileHeader.html +++ b/cxx-checks/src/main/resources/org/sonar/l10n/cxx/rules/cxx/FileHeader.html @@ -7,7 +7,7 @@
 /*
  * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2013 SonarSource
+ * Copyright (C) 2010-2024 SonarSource
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * SonarQube is free software; you can redistribute it and/or
diff --git a/cxx-sensors/src/tools/clangsa_createrules.py b/cxx-sensors/src/tools/clangsa_createrules.py
index 8d07b2ce7..964f0f981 100644
--- a/cxx-sensors/src/tools/clangsa_createrules.py
+++ b/cxx-sensors/src/tools/clangsa_createrules.py
@@ -2,7 +2,7 @@
 
 # -*- coding: utf-8 -*-
 # SonarQube C++ Community Plugin (cxx plugin)
-# Copyright (C) 2010-2022 SonarOpenCommunity
+# Copyright (C) 2010-2024 SonarOpenCommunity
 # http://github.com/SonarOpenCommunity/sonar-cxx
 #
 # This program is free software; you can redistribute it and/or
diff --git a/cxx-sensors/src/tools/clangtidy_createrules.py b/cxx-sensors/src/tools/clangtidy_createrules.py
index d64f6910a..c18a2f2fa 100644
--- a/cxx-sensors/src/tools/clangtidy_createrules.py
+++ b/cxx-sensors/src/tools/clangtidy_createrules.py
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 # SonarQube C++ Community Plugin (cxx plugin)
-# Copyright (C) 2010-2022 SonarOpenCommunity
+# Copyright (C) 2010-2024 SonarOpenCommunity
 # http://github.com/SonarOpenCommunity/sonar-cxx
 #
 # This program is free software; you can redistribute it and/or
diff --git a/cxx-sensors/src/tools/cppcheck_createrules.py b/cxx-sensors/src/tools/cppcheck_createrules.py
index f860bca5c..3de75e50b 100644
--- a/cxx-sensors/src/tools/cppcheck_createrules.py
+++ b/cxx-sensors/src/tools/cppcheck_createrules.py
@@ -1,5 +1,5 @@
 # C++ Community Plugin (cxx plugin)
-# Copyright (C) 2010-2022 SonarOpenCommunity
+# Copyright (C) 2010-2024 SonarOpenCommunity
 # http://github.com/SonarOpenCommunity/sonar-cxx
 #
 # This program is free software; you can redistribute it and/or
diff --git a/cxx-sensors/src/tools/infer_createrules.py b/cxx-sensors/src/tools/infer_createrules.py
index 6f303669c..3b6c56266 100644
--- a/cxx-sensors/src/tools/infer_createrules.py
+++ b/cxx-sensors/src/tools/infer_createrules.py
@@ -1,5 +1,5 @@
 # C++ Community Plugin (cxx plugin)
-# Copyright (C) 2010-2019 SonarOpenCommunity
+# Copyright (C) 2010-2024 SonarOpenCommunity
 # http://github.com/SonarOpenCommunity/sonar-cxx
 #
 # This program is free software; you can redistribute it and/or
diff --git a/cxx-sensors/src/tools/utils_createrules.py b/cxx-sensors/src/tools/utils_createrules.py
index 60e06d0bc..be174c49c 100644
--- a/cxx-sensors/src/tools/utils_createrules.py
+++ b/cxx-sensors/src/tools/utils_createrules.py
@@ -1,5 +1,5 @@
 # C++ Community Plugin (cxx plugin)
-# Copyright (C) 2010-2022 SonarOpenCommunity
+# Copyright (C) 2010-2024 SonarOpenCommunity
 # http://github.com/SonarOpenCommunity/sonar-cxx
 #
 # This program is free software; you can redistribute it and/or
diff --git a/cxx-sensors/src/tools/vc_createrules.py b/cxx-sensors/src/tools/vc_createrules.py
index bce8eb690..e1f933f17 100644
--- a/cxx-sensors/src/tools/vc_createrules.py
+++ b/cxx-sensors/src/tools/vc_createrules.py
@@ -1,5 +1,5 @@
 # C++ Community Plugin (cxx plugin)
-# Copyright (C) 2020 SonarOpenCommunity
+# Copyright (C) 2020-2024 SonarOpenCommunity
 # http://github.com/SonarOpenCommunity/sonar-cxx
 #
 # This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/README.md b/cxx-squid-bridge/README.md
index 0d5ca622e..8eb2bf108 100644
--- a/cxx-squid-bridge/README.md
+++ b/cxx-squid-bridge/README.md
@@ -31,7 +31,7 @@ In the original version, some features were discontinued in subsequent versions,
 ```Java
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/pom.xml b/cxx-squid-bridge/pom.xml
index 3c3ce9e64..8402d814b 100644
--- a/cxx-squid-bridge/pom.xml
+++ b/cxx-squid-bridge/pom.xml
@@ -14,7 +14,7 @@
   Cxx :: Language Recognizer :: Squid Bridge
 
   
-    2021-2022
+    2021-2024
     
     ${basedir}/../${aggregate.report.dir}
   
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/AstScanner.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/AstScanner.java
index be65a84ef..bbc7212e6 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/AstScanner.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/AstScanner.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/AstScannerExceptionHandler.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/AstScannerExceptionHandler.java
index d5ab02be6..456210e47 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/AstScannerExceptionHandler.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/AstScannerExceptionHandler.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/CommentAnalyser.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/CommentAnalyser.java
index 55b1a34cf..55ec97386 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/CommentAnalyser.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/CommentAnalyser.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/SourceCodeBuilderCallback.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/SourceCodeBuilderCallback.java
index ffee13454..897de28da 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/SourceCodeBuilderCallback.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/SourceCodeBuilderCallback.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/SourceCodeBuilderVisitor.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/SourceCodeBuilderVisitor.java
index d37356b30..8ebd7da49 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/SourceCodeBuilderVisitor.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/SourceCodeBuilderVisitor.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/SquidAstVisitor.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/SquidAstVisitor.java
index 6234d120e..89c63dffc 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/SquidAstVisitor.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/SquidAstVisitor.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/SquidAstVisitorContext.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/SquidAstVisitorContext.java
index 9a309bf25..6e7238192 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/SquidAstVisitorContext.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/SquidAstVisitorContext.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/SquidAstVisitorContextImpl.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/SquidAstVisitorContextImpl.java
index 26f6ac3ed..f19dc3ad9 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/SquidAstVisitorContextImpl.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/SquidAstVisitorContextImpl.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/ActivatedByDefault.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/ActivatedByDefault.java
index f9e3adc06..cd116937e 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/ActivatedByDefault.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/ActivatedByDefault.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/AnnotationBasedRulesDefinition.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/AnnotationBasedRulesDefinition.java
index 01b913e53..48f2b396c 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/AnnotationBasedRulesDefinition.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/AnnotationBasedRulesDefinition.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/NoSqale.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/NoSqale.java
index 24dadcbbe..bff761876 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/NoSqale.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/NoSqale.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/RuleTemplate.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/RuleTemplate.java
index c656f4bf5..24c457709 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/RuleTemplate.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/RuleTemplate.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/SqaleConstantRemediation.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/SqaleConstantRemediation.java
index 83902e1c7..ebea839f2 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/SqaleConstantRemediation.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/SqaleConstantRemediation.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/SqaleLinearRemediation.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/SqaleLinearRemediation.java
index b9fda9235..ef01eecda 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/SqaleLinearRemediation.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/SqaleLinearRemediation.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/SqaleLinearWithOffsetRemediation.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/SqaleLinearWithOffsetRemediation.java
index 661c646c1..e4e51692f 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/SqaleLinearWithOffsetRemediation.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/SqaleLinearWithOffsetRemediation.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/SqaleSubCharacteristic.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/SqaleSubCharacteristic.java
index 90abef0de..19e640625 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/SqaleSubCharacteristic.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/SqaleSubCharacteristic.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/Tags.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/Tags.java
index 1f37cdbaa..a2e3ec6e3 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/Tags.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/Tags.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/package-info.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/package-info.java
index 158a4917c..7c06728c9 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/package-info.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/annotations/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/AnalysisException.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/AnalysisException.java
index 3385f3bb3..266baafc3 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/AnalysisException.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/AnalysisException.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/CheckMessage.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/CheckMessage.java
index d5cbc7499..06485b449 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/CheckMessage.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/CheckMessage.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/CodeCheck.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/CodeCheck.java
index fa9c6924f..96e940205 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/CodeCheck.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/CodeCheck.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/CodeVisitor.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/CodeVisitor.java
index 1292ab64b..d0a253a01 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/CodeVisitor.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/CodeVisitor.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/Query.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/Query.java
index a25c566a5..3f957342b 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/Query.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/Query.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceClass.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceClass.java
index 227c428e1..f71361d7d 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceClass.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceClass.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceCode.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceCode.java
index 4677ee530..7a87c56d7 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceCode.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceCode.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceCodeIndexer.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceCodeIndexer.java
index b63330446..87b7f2dad 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceCodeIndexer.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceCodeIndexer.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceCodeSearchEngine.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceCodeSearchEngine.java
index 7dd41d1c4..a1a3708e8 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceCodeSearchEngine.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceCodeSearchEngine.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceCodeTreeDecorator.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceCodeTreeDecorator.java
index 50aee729e..60161c6ef 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceCodeTreeDecorator.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceCodeTreeDecorator.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceFile.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceFile.java
index cb9f99299..4eb4a4e12 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceFile.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceFile.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceFunction.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceFunction.java
index 36f92c8cc..d1769b625 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceFunction.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceFunction.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceMethod.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceMethod.java
index 46a925b9d..a0352d759 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceMethod.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceMethod.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourcePackage.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourcePackage.java
index aa43a5f23..ea44b9cd3 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourcePackage.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourcePackage.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceProject.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceProject.java
index 7464460ad..969a9cec5 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceProject.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SourceProject.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SquidConfiguration.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SquidConfiguration.java
index 0ea66a6b5..4df6ae3fb 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SquidConfiguration.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/SquidConfiguration.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/package-info.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/package-info.java
index c1cb747b9..1f4470330 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/package-info.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/api/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/AbstractCommentRegularExpressionCheck.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/AbstractCommentRegularExpressionCheck.java
index f70c1ceb0..cfa7252e1 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/AbstractCommentRegularExpressionCheck.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/AbstractCommentRegularExpressionCheck.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/AbstractOneStatementPerLineCheck.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/AbstractOneStatementPerLineCheck.java
index 6e56d38d9..de858eb64 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/AbstractOneStatementPerLineCheck.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/AbstractOneStatementPerLineCheck.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/AbstractXPathCheck.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/AbstractXPathCheck.java
index 487db6e44..3c4a02100 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/AbstractXPathCheck.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/AbstractXPathCheck.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/CheckMessagesVerifier.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/CheckMessagesVerifier.java
index 2a6a4af83..00d67e9eb 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/CheckMessagesVerifier.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/CheckMessagesVerifier.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/CheckMessagesVerifierRule.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/CheckMessagesVerifierRule.java
index de60b8cfa..14dd09ef6 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/CheckMessagesVerifierRule.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/CheckMessagesVerifierRule.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/ChecksHelper.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/ChecksHelper.java
index 13394aec9..645816548 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/ChecksHelper.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/ChecksHelper.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/SquidCheck.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/SquidCheck.java
index be63bdd3d..82cfd949c 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/SquidCheck.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/SquidCheck.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/package-info.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/package-info.java
index c04531dd0..4bc1ead1a 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/package-info.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/checks/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/indexer/QueryByType.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/indexer/QueryByType.java
index 2060f3b4c..7faedcec4 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/indexer/QueryByType.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/indexer/QueryByType.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/indexer/SquidIndex.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/indexer/SquidIndex.java
index 893cab971..7adf0aee6 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/indexer/SquidIndex.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/indexer/SquidIndex.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/indexer/package-info.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/indexer/package-info.java
index dd3d4f394..aea25a86f 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/indexer/package-info.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/indexer/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/AggregationFormula.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/AggregationFormula.java
index 1b0174b10..3a1c5bd6b 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/AggregationFormula.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/AggregationFormula.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/CalculatedMetricFormula.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/CalculatedMetricFormula.java
index 9a32d5d9c..e4eac9795 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/CalculatedMetricFormula.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/CalculatedMetricFormula.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/Measurable.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/Measurable.java
index 2f7ced0a9..694c20f14 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/Measurable.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/Measurable.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/Measures.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/Measures.java
index b844737c4..d3adfb039 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/Measures.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/Measures.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/MetricDef.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/MetricDef.java
index 4f01a4be6..0a9feab9e 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/MetricDef.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/MetricDef.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/SumAggregationFormula.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/SumAggregationFormula.java
index 7e4dacc85..971b67c8f 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/SumAggregationFormula.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/SumAggregationFormula.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/package-info.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/package-info.java
index 010b27974..a1cc66c25 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/package-info.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/measures/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/metrics/CommentsVisitor.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/metrics/CommentsVisitor.java
index 6f63eec54..d87ce8184 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/metrics/CommentsVisitor.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/metrics/CommentsVisitor.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/metrics/ComplexityVisitor.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/metrics/ComplexityVisitor.java
index e24a82584..e264d6d12 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/metrics/ComplexityVisitor.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/metrics/ComplexityVisitor.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/metrics/CounterVisitor.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/metrics/CounterVisitor.java
index 6896ba079..f6201d628 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/metrics/CounterVisitor.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/metrics/CounterVisitor.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/metrics/LinesOfCodeVisitor.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/metrics/LinesOfCodeVisitor.java
index d110f8023..31e79d6bf 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/metrics/LinesOfCodeVisitor.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/metrics/LinesOfCodeVisitor.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/metrics/LinesVisitor.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/metrics/LinesVisitor.java
index 1e17f7a08..146ab8647 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/metrics/LinesVisitor.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/metrics/LinesVisitor.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/metrics/package-info.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/metrics/package-info.java
index 617abbc1e..b9f1260b5 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/metrics/package-info.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/metrics/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/package-info.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/package-info.java
index 6bbc6b60e..e310c18a3 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/package-info.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/rules/ExternalDescriptionLoader.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/rules/ExternalDescriptionLoader.java
index 4119a9926..4f87e2044 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/rules/ExternalDescriptionLoader.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/rules/ExternalDescriptionLoader.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/rules/package-info.java b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/rules/package-info.java
index c7f18d52c..51983a750 100644
--- a/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/rules/package-info.java
+++ b/cxx-squid-bridge/src/main/java/org/sonar/cxx/squidbridge/rules/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/annotations/AnnotationBasedRulesDefinitionTest.java b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/annotations/AnnotationBasedRulesDefinitionTest.java
index 2877db1c2..2680a356a 100644
--- a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/annotations/AnnotationBasedRulesDefinitionTest.java
+++ b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/annotations/AnnotationBasedRulesDefinitionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/api/CheckMessageTest.java b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/api/CheckMessageTest.java
index 0c7a4d351..b84763c79 100644
--- a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/api/CheckMessageTest.java
+++ b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/api/CheckMessageTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/api/SourceCodeTest.java b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/api/SourceCodeTest.java
index 99b6d41e1..7312a1721 100644
--- a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/api/SourceCodeTest.java
+++ b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/api/SourceCodeTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/api/SourceFileTest.java b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/api/SourceFileTest.java
index 4c0640e44..cccaaad5d 100644
--- a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/api/SourceFileTest.java
+++ b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/api/SourceFileTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/api/SourceMethodTest.java b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/api/SourceMethodTest.java
index 98860a17d..1f39ee271 100644
--- a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/api/SourceMethodTest.java
+++ b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/api/SourceMethodTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/AbstractCommentRegularExpressionCheckTest.java b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/AbstractCommentRegularExpressionCheckTest.java
index 9a32ebf6c..d63126bee 100644
--- a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/AbstractCommentRegularExpressionCheckTest.java
+++ b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/AbstractCommentRegularExpressionCheckTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/AbstractOneStatementPerLineCheckTest.java b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/AbstractOneStatementPerLineCheckTest.java
index d613dd132..a84b5c02b 100644
--- a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/AbstractOneStatementPerLineCheckTest.java
+++ b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/AbstractOneStatementPerLineCheckTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/AbstractXPathCheckTest.java b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/AbstractXPathCheckTest.java
index 02fd60260..1be235c7d 100644
--- a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/AbstractXPathCheckTest.java
+++ b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/AbstractXPathCheckTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/CheckMessagesVerifierRuleTest.java b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/CheckMessagesVerifierRuleTest.java
index e14781fe1..4fddcd5d4 100644
--- a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/CheckMessagesVerifierRuleTest.java
+++ b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/CheckMessagesVerifierRuleTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/CheckMessagesVerifierTest.java b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/CheckMessagesVerifierTest.java
index 4861ca686..2002153ef 100644
--- a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/CheckMessagesVerifierTest.java
+++ b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/CheckMessagesVerifierTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/ChecksHelperTest.java b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/ChecksHelperTest.java
index 80e2d62da..0dfa7d91d 100644
--- a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/ChecksHelperTest.java
+++ b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/ChecksHelperTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/ResourceParser.java b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/ResourceParser.java
index d1e9793bc..5674fcc9c 100644
--- a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/ResourceParser.java
+++ b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/ResourceParser.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/SquidCheckTest.java b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/SquidCheckTest.java
index c6b5cc0aa..a7e8e79e9 100644
--- a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/SquidCheckTest.java
+++ b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/checks/SquidCheckTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/indexer/SquidIndexTest.java b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/indexer/SquidIndexTest.java
index 6f44fc684..d3febd448 100644
--- a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/indexer/SquidIndexTest.java
+++ b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/indexer/SquidIndexTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/metrics/CommentsVisitorTest.java b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/metrics/CommentsVisitorTest.java
index 5507de1d4..299899f40 100644
--- a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/metrics/CommentsVisitorTest.java
+++ b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/metrics/CommentsVisitorTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/metrics/ComplexityVisitorTest.java b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/metrics/ComplexityVisitorTest.java
index caefcb881..aec52514f 100644
--- a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/metrics/ComplexityVisitorTest.java
+++ b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/metrics/ComplexityVisitorTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/metrics/CounterVisitorTest.java b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/metrics/CounterVisitorTest.java
index 8b498bd45..ad396703f 100644
--- a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/metrics/CounterVisitorTest.java
+++ b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/metrics/CounterVisitorTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/metrics/LinesOfCodeVisitorTest.java b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/metrics/LinesOfCodeVisitorTest.java
index 0d5f6d847..fad8f68f2 100644
--- a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/metrics/LinesOfCodeVisitorTest.java
+++ b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/metrics/LinesOfCodeVisitorTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/metrics/LinesVisitorTest.java b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/metrics/LinesVisitorTest.java
index fd2c425f1..ead176e84 100644
--- a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/metrics/LinesVisitorTest.java
+++ b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/metrics/LinesVisitorTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/metrics/ResourceParser.java b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/metrics/ResourceParser.java
index 431c92e05..84b27c0d0 100644
--- a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/metrics/ResourceParser.java
+++ b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/metrics/ResourceParser.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/rules/ExternalDescriptionLoaderTest.java b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/rules/ExternalDescriptionLoaderTest.java
index eaa4f265e..a2ada4033 100644
--- a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/rules/ExternalDescriptionLoaderTest.java
+++ b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/rules/ExternalDescriptionLoaderTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/test/miniC/MiniCAstScanner.java b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/test/miniC/MiniCAstScanner.java
index 1ca9c36d6..ce881b241 100644
--- a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/test/miniC/MiniCAstScanner.java
+++ b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/test/miniC/MiniCAstScanner.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/test/miniC/fakeChecks/FakeCommentCheckTest.java b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/test/miniC/fakeChecks/FakeCommentCheckTest.java
index 2376d8316..bb98429dd 100644
--- a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/test/miniC/fakeChecks/FakeCommentCheckTest.java
+++ b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/test/miniC/fakeChecks/FakeCommentCheckTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/test/miniC/fakeChecks/ResourceParser.java b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/test/miniC/fakeChecks/ResourceParser.java
index de7724c1b..4357d7c8a 100644
--- a/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/test/miniC/fakeChecks/ResourceParser.java
+++ b/cxx-squid-bridge/src/test/java/org/sonar/cxx/squidbridge/test/miniC/fakeChecks/ResourceParser.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid/dox/tools/grammar_parser/grammar_parser.py b/cxx-squid/dox/tools/grammar_parser/grammar_parser.py
index fcf3a64d6..869e16b63 100644
--- a/cxx-squid/dox/tools/grammar_parser/grammar_parser.py
+++ b/cxx-squid/dox/tools/grammar_parser/grammar_parser.py
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 # SonarQube C++ Community Plugin (cxx plugin)
-# Copyright (C) 2010-2022 SonarOpenCommunity
+# Copyright (C) 2010-2024 SonarOpenCommunity
 # http://github.com/SonarOpenCommunity/sonar-cxx
 #
 # This program is free software; you can redistribute it and/or
diff --git a/cxx-squid/src/main/java/org/sonar/cxx/channels/ChannelUtils.java b/cxx-squid/src/main/java/org/sonar/cxx/channels/ChannelUtils.java
index 0d4180c56..5189a6b81 100644
--- a/cxx-squid/src/main/java/org/sonar/cxx/channels/ChannelUtils.java
+++ b/cxx-squid/src/main/java/org/sonar/cxx/channels/ChannelUtils.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2010-2023 SonarOpenCommunity
+ * Copyright (C) 2010-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid/src/main/java/org/sonar/cxx/channels/MultiLineCommentChannel.java b/cxx-squid/src/main/java/org/sonar/cxx/channels/MultiLineCommentChannel.java
index c1f1e5947..154b31632 100644
--- a/cxx-squid/src/main/java/org/sonar/cxx/channels/MultiLineCommentChannel.java
+++ b/cxx-squid/src/main/java/org/sonar/cxx/channels/MultiLineCommentChannel.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2010-2023 SonarOpenCommunity
+ * Copyright (C) 2010-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid/src/main/java/org/sonar/cxx/channels/SingleLineCommentChannel.java b/cxx-squid/src/main/java/org/sonar/cxx/channels/SingleLineCommentChannel.java
index a17af4bf6..7b5292a1b 100644
--- a/cxx-squid/src/main/java/org/sonar/cxx/channels/SingleLineCommentChannel.java
+++ b/cxx-squid/src/main/java/org/sonar/cxx/channels/SingleLineCommentChannel.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2010-2023 SonarOpenCommunity
+ * Copyright (C) 2010-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-squid/src/test/java/org/sonar/cxx/utils/CxxReportLocationTest.java b/cxx-squid/src/test/java/org/sonar/cxx/utils/CxxReportLocationTest.java
index 61b4ae63c..44f677d2a 100644
--- a/cxx-squid/src/test/java/org/sonar/cxx/utils/CxxReportLocationTest.java
+++ b/cxx-squid/src/test/java/org/sonar/cxx/utils/CxxReportLocationTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2010-2023 SonarOpenCommunity
+ * Copyright (C) 2010-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/README.md b/cxx-sslr/README.md
index 2268e5530..8b13fb895 100644
--- a/cxx-sslr/README.md
+++ b/cxx-sslr/README.md
@@ -31,7 +31,7 @@ In the original version, some features were discontinued in subsequent versions,
 ```Java
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2021-2022 SonarOpenCommunity
+ * Copyright (C) 2021-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/pom.xml b/cxx-sslr/pom.xml
index d2e5c6cc5..c811f91a9 100644
--- a/cxx-sslr/pom.xml
+++ b/cxx-sslr/pom.xml
@@ -15,7 +15,7 @@
   pom
 
   
-    2022
+    2022-2024
   
 
   
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/AstAndTokenVisitor.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/AstAndTokenVisitor.java
index 3048c86ea..7179f684f 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/AstAndTokenVisitor.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/AstAndTokenVisitor.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/AstNode.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/AstNode.java
index 017afcf25..93da0f51a 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/AstNode.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/AstNode.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/AstNodeSkippingPolicy.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/AstNodeSkippingPolicy.java
index 3c2ea4d5d..ef74e5d6b 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/AstNodeSkippingPolicy.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/AstNodeSkippingPolicy.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/AstNodeType.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/AstNodeType.java
index 1c02e73b2..916a21bce 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/AstNodeType.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/AstNodeType.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/AstVisitor.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/AstVisitor.java
index f77f773e4..cae416689 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/AstVisitor.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/AstVisitor.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/GenericTokenType.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/GenericTokenType.java
index 04d285740..214c40277 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/GenericTokenType.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/GenericTokenType.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/Grammar.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/Grammar.java
index ba7342ef0..ea1a0c359 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/Grammar.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/Grammar.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/PreprocessingDirective.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/PreprocessingDirective.java
index b2479e725..0a3cd9672 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/PreprocessingDirective.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/PreprocessingDirective.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/Preprocessor.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/Preprocessor.java
index 33bb69ff6..ca3045960 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/Preprocessor.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/Preprocessor.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/PreprocessorAction.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/PreprocessorAction.java
index de722c2a8..479541c7c 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/PreprocessorAction.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/PreprocessorAction.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/RecognitionException.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/RecognitionException.java
index 14a4fc236..f279a86b0 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/RecognitionException.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/RecognitionException.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/Rule.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/Rule.java
index 73abc6b38..0f17329a4 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/Rule.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/Rule.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/Token.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/Token.java
index 92be4244e..fc2378868 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/Token.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/Token.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/TokenType.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/TokenType.java
index c35893070..f6350fa2b 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/TokenType.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/TokenType.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/Trivia.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/Trivia.java
index 6ec3a0936..5c2bcbc64 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/Trivia.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/Trivia.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/package-info.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/package-info.java
index 6601429ca..3fd9675e5 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/package-info.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/ActionParser.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/ActionParser.java
index b4740e3a7..eb7a74c35 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/ActionParser.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/ActionParser.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/AstNodeBuilder.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/AstNodeBuilder.java
index 77462c020..7707534e8 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/AstNodeBuilder.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/AstNodeBuilder.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/GrammarBuilder.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/GrammarBuilder.java
index 2c06bc274..f8ff6460b 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/GrammarBuilder.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/GrammarBuilder.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/Input.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/Input.java
index d255d73a9..3b687dea3 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/Input.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/Input.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/NodeBuilder.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/NodeBuilder.java
index 70158e472..3cec2c217 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/NodeBuilder.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/NodeBuilder.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/NonterminalBuilder.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/NonterminalBuilder.java
index 907f03920..7a8c5f7ab 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/NonterminalBuilder.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/NonterminalBuilder.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/Optional.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/Optional.java
index 0c762053f..12f160cac 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/Optional.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/Optional.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/package-info.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/package-info.java
index 8c88d2114..06ff947a8 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/package-info.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/api/typed/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/Lexer.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/Lexer.java
index e13cf9473..840c2e7bf 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/Lexer.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/Lexer.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/LexerException.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/LexerException.java
index 6a220dbc4..09c1f76ea 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/LexerException.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/LexerException.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/Parser.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/Parser.java
index 19f444ef7..f4fccfdd9 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/Parser.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/Parser.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/ast/AlwaysSkipFromAst.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/ast/AlwaysSkipFromAst.java
index 206e47768..a98c4b01a 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/ast/AlwaysSkipFromAst.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/ast/AlwaysSkipFromAst.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/ast/AstWalker.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/ast/AstWalker.java
index 6cf94f5f9..e6c4ca3be 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/ast/AstWalker.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/ast/AstWalker.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/ast/AstXmlPrinter.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/ast/AstXmlPrinter.java
index bd47fe763..92ed599ad 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/ast/AstXmlPrinter.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/ast/AstXmlPrinter.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/ast/NeverSkipFromAst.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/ast/NeverSkipFromAst.java
index 5f50b3c9c..ef51f8cb2 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/ast/NeverSkipFromAst.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/ast/NeverSkipFromAst.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/ast/SkipFromAstIfOnlyOneChild.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/ast/SkipFromAstIfOnlyOneChild.java
index acf6683f0..98ec0e0ca 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/ast/SkipFromAstIfOnlyOneChild.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/ast/SkipFromAstIfOnlyOneChild.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/ast/package-info.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/ast/package-info.java
index adee96391..47af98752 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/ast/package-info.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/ast/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/BlackHoleChannel.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/BlackHoleChannel.java
index 82b4acc84..2cfc6b348 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/BlackHoleChannel.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/BlackHoleChannel.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/BomCharacterChannel.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/BomCharacterChannel.java
index 46645d0e7..7c9c70c59 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/BomCharacterChannel.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/BomCharacterChannel.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/CommentRegexpChannel.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/CommentRegexpChannel.java
index 2890bd63b..6983c9f98 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/CommentRegexpChannel.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/CommentRegexpChannel.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/IdentifierAndKeywordChannel.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/IdentifierAndKeywordChannel.java
index 397a6d846..bbaf05039 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/IdentifierAndKeywordChannel.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/IdentifierAndKeywordChannel.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/PunctuatorChannel.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/PunctuatorChannel.java
index 5dd28a208..bb227ca57 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/PunctuatorChannel.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/PunctuatorChannel.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/RegexpChannel.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/RegexpChannel.java
index bb031c516..0efe46b36 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/RegexpChannel.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/RegexpChannel.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/RegexpChannelBuilder.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/RegexpChannelBuilder.java
index c6a80dc5a..8bdc3b556 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/RegexpChannelBuilder.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/RegexpChannelBuilder.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/UnknownCharacterChannel.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/UnknownCharacterChannel.java
index 6b1cec1f1..101e3a968 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/UnknownCharacterChannel.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/UnknownCharacterChannel.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/package-info.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/package-info.java
index 5dd96597c..b96ea84fe 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/package-info.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/channel/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/matcher/GrammarFunctions.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/matcher/GrammarFunctions.java
index 3f69d7ed8..17d35d7ec 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/matcher/GrammarFunctions.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/matcher/GrammarFunctions.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/matcher/Matcher.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/matcher/Matcher.java
index 66a48a976..99736c55e 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/matcher/Matcher.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/matcher/Matcher.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/matcher/RuleDefinition.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/matcher/RuleDefinition.java
index 081bfd26b..b6acdbe64 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/matcher/RuleDefinition.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/matcher/RuleDefinition.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/matcher/package-info.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/matcher/package-info.java
index 706227d52..e1096501e 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/matcher/package-info.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/matcher/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/package-info.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/package-info.java
index 93e761c7f..c1f8de9d7 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/package-info.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/token/TokenUtils.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/token/TokenUtils.java
index 9f656398b..e26057133 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/token/TokenUtils.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/token/TokenUtils.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/token/package-info.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/token/package-info.java
index 9063e1834..3fbd5950b 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/token/package-info.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/token/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/AstNodeReflector.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/AstNodeReflector.java
index 26278e21f..8128fc5b5 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/AstNodeReflector.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/AstNodeReflector.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/DelayedRuleInvocationExpression.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/DelayedRuleInvocationExpression.java
index e56def70c..1fe5303f5 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/DelayedRuleInvocationExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/DelayedRuleInvocationExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/GrammarBuilderInterceptor.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/GrammarBuilderInterceptor.java
index 1c5312d8d..d4378159a 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/GrammarBuilderInterceptor.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/GrammarBuilderInterceptor.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/Interceptor.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/Interceptor.java
index 783a27351..f5811c36e 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/Interceptor.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/Interceptor.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/MethodInterceptor.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/MethodInterceptor.java
index dc59af837..73d1e54a8 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/MethodInterceptor.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/MethodInterceptor.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/ReflectionUtils.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/ReflectionUtils.java
index 01d8ec5c2..dd216ab4f 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/ReflectionUtils.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/ReflectionUtils.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/SyntaxTreeCreator.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/SyntaxTreeCreator.java
index a99cdc95e..e992998bb 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/SyntaxTreeCreator.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/SyntaxTreeCreator.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/package-info.java b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/package-info.java
index 2eb0ba677..abcd7017f 100644
--- a/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/package-info.java
+++ b/cxx-sslr/sslr-core/src/main/java/com/sonar/cxx/sslr/impl/typed/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/Channel.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/Channel.java
index b8b9e55e4..88faa340b 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/Channel.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/Channel.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/ChannelCodeReaderFilter.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/ChannelCodeReaderFilter.java
index e30425138..61246fdfd 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/ChannelCodeReaderFilter.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/ChannelCodeReaderFilter.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/ChannelDispatcher.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/ChannelDispatcher.java
index 5aa02c182..ea7d3dc1c 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/ChannelDispatcher.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/ChannelDispatcher.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/ChannelException.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/ChannelException.java
index 971806790..82b2d2120 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/ChannelException.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/ChannelException.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/CodeBuffer.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/CodeBuffer.java
index c6cf46190..6de09e966 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/CodeBuffer.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/CodeBuffer.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/CodeReader.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/CodeReader.java
index ae0be87a6..84a180ff0 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/CodeReader.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/CodeReader.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/CodeReaderConfiguration.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/CodeReaderConfiguration.java
index 7ec6f9cf1..9d57a8aa0 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/CodeReaderConfiguration.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/CodeReaderConfiguration.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/CodeReaderFilter.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/CodeReaderFilter.java
index 4c3b7ac31..2434d4f41 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/CodeReaderFilter.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/CodeReaderFilter.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/EndMatcher.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/EndMatcher.java
index f2363962e..44a0c8793 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/EndMatcher.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/EndMatcher.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/RegexChannel.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/RegexChannel.java
index dcd226f80..b2d7906cb 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/RegexChannel.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/RegexChannel.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/package-info.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/package-info.java
index db7db98f3..3972d6030 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/package-info.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/channel/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/GrammarBuilder.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/GrammarBuilder.java
index 4c9c41e33..4d5e389a7 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/GrammarBuilder.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/GrammarBuilder.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/GrammarException.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/GrammarException.java
index 7c988316d..b2f6fc6c4 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/GrammarException.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/GrammarException.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/GrammarRuleBuilder.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/GrammarRuleBuilder.java
index 29d1e40e5..158fc9e2f 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/GrammarRuleBuilder.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/GrammarRuleBuilder.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/GrammarRuleKey.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/GrammarRuleKey.java
index d17fec832..c99a5d92b 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/GrammarRuleKey.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/GrammarRuleKey.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/LexerfulGrammarBuilder.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/LexerfulGrammarBuilder.java
index 64a2384df..740768201 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/LexerfulGrammarBuilder.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/LexerfulGrammarBuilder.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/LexerlessGrammarBuilder.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/LexerlessGrammarBuilder.java
index 428ba5194..c6446cf41 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/LexerlessGrammarBuilder.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/LexerlessGrammarBuilder.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/package-info.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/package-info.java
index cc4f2dec9..8eaacaa6a 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/package-info.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/grammar/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/grammar/MutableGrammar.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/grammar/MutableGrammar.java
index 8b76861a4..53739033e 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/grammar/MutableGrammar.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/grammar/MutableGrammar.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/grammar/MutableParsingRule.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/grammar/MutableParsingRule.java
index be76ed1f2..0c0565395 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/grammar/MutableParsingRule.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/grammar/MutableParsingRule.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/grammar/package-info.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/grammar/package-info.java
index f340ac4a3..407e2d3f6 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/grammar/package-info.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/grammar/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/AstCreator.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/AstCreator.java
index 5e1dc5864..edc8160b4 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/AstCreator.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/AstCreator.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/ImmutableInputBuffer.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/ImmutableInputBuffer.java
index 37ed8176b..b5dee993b 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/ImmutableInputBuffer.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/ImmutableInputBuffer.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/InputBuffer.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/InputBuffer.java
index 9c8f01107..9a8fdcdd3 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/InputBuffer.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/InputBuffer.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/LexerfulAstCreator.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/LexerfulAstCreator.java
index 0f06004e1..7afc12809 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/LexerfulAstCreator.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/LexerfulAstCreator.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/LocatedText.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/LocatedText.java
index ab35001eb..64d8ff614 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/LocatedText.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/LocatedText.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/Matcher.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/Matcher.java
index 320aefee2..4f1266476 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/Matcher.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/Matcher.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/MatcherPathElement.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/MatcherPathElement.java
index 5ba6d0047..53948df42 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/MatcherPathElement.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/MatcherPathElement.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/ParseNode.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/ParseNode.java
index 25a85c332..b7459add1 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/ParseNode.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/ParseNode.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/TextLocation.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/TextLocation.java
index 521a2def8..3a44d8b3f 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/TextLocation.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/TextLocation.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/TextUtils.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/TextUtils.java
index 0534ebfee..ff53d608f 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/TextUtils.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/TextUtils.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/package-info.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/package-info.java
index 4e90d3f77..6102a239f 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/package-info.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/matchers/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/CompilableGrammarRule.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/CompilableGrammarRule.java
index e0c694fdc..4309f0a5d 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/CompilableGrammarRule.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/CompilableGrammarRule.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/CompilationHandler.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/CompilationHandler.java
index fc6e7868e..23833a118 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/CompilationHandler.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/CompilationHandler.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/CompiledGrammar.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/CompiledGrammar.java
index 417b5c317..f02b54c0a 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/CompiledGrammar.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/CompiledGrammar.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/EndOfInputExpression.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/EndOfInputExpression.java
index 4755ae17a..727bd5831 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/EndOfInputExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/EndOfInputExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/ErrorLocatingHandler.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/ErrorLocatingHandler.java
index 6d88f7f24..4a771d149 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/ErrorLocatingHandler.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/ErrorLocatingHandler.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/ErrorTreeNode.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/ErrorTreeNode.java
index 1bf18b4e3..db1c74229 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/ErrorTreeNode.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/ErrorTreeNode.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/FirstOfExpression.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/FirstOfExpression.java
index 189f706e8..8c458259a 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/FirstOfExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/FirstOfExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/Instruction.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/Instruction.java
index 808d6dec1..27bf5bec8 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/Instruction.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/Instruction.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/Machine.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/Machine.java
index 9d39a5a34..e1a157ddf 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/Machine.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/Machine.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/MachineHandler.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/MachineHandler.java
index 5f0fadcf3..1271b04de 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/MachineHandler.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/MachineHandler.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/MachineStack.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/MachineStack.java
index d4bad34d5..803872a3b 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/MachineStack.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/MachineStack.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/MemoParsingExpression.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/MemoParsingExpression.java
index 13741a486..188cd003c 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/MemoParsingExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/MemoParsingExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/MutableGrammarCompiler.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/MutableGrammarCompiler.java
index 0bb7aa528..6be0fdc9d 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/MutableGrammarCompiler.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/MutableGrammarCompiler.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/NativeExpression.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/NativeExpression.java
index 445bf0c1b..5195ef4cf 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/NativeExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/NativeExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/NextExpression.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/NextExpression.java
index d90a9b6e2..7d4eee86f 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/NextExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/NextExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/NextNotExpression.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/NextNotExpression.java
index 1bce2bc0d..1d38c93cc 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/NextNotExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/NextNotExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/NothingExpression.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/NothingExpression.java
index a996bd260..41459dd6d 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/NothingExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/NothingExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/OneOrMoreExpression.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/OneOrMoreExpression.java
index b0f804d54..980b6f558 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/OneOrMoreExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/OneOrMoreExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/OptionalExpression.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/OptionalExpression.java
index 7cafe113b..416c32f74 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/OptionalExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/OptionalExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/ParsingExpression.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/ParsingExpression.java
index 4b53d4d37..6bef2d66a 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/ParsingExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/ParsingExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/PatternExpression.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/PatternExpression.java
index cca4d1318..d7f6a4d4d 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/PatternExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/PatternExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/RuleRefExpression.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/RuleRefExpression.java
index de4350d39..4520917e1 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/RuleRefExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/RuleRefExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/SequenceExpression.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/SequenceExpression.java
index 442c7909c..809a52f45 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/SequenceExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/SequenceExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/StringExpression.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/StringExpression.java
index 664fdc67a..ba14529e3 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/StringExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/StringExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/TokenExpression.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/TokenExpression.java
index 6b057e7d1..09034de03 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/TokenExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/TokenExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/TriviaExpression.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/TriviaExpression.java
index da95f40a8..2fe597a7a 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/TriviaExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/TriviaExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/ZeroOrMoreExpression.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/ZeroOrMoreExpression.java
index 469de9b62..4b154524b 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/ZeroOrMoreExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/ZeroOrMoreExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/AdjacentExpression.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/AdjacentExpression.java
index 393915d86..40df85a48 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/AdjacentExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/AdjacentExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/AnyTokenExpression.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/AnyTokenExpression.java
index 3bd5563b3..8753e7cd6 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/AnyTokenExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/AnyTokenExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/LexerfulParseErrorFormatter.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/LexerfulParseErrorFormatter.java
index 1cea29316..e0c01cba8 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/LexerfulParseErrorFormatter.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/LexerfulParseErrorFormatter.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/TillNewLineExpression.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/TillNewLineExpression.java
index 54629d34b..9f115ee53 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/TillNewLineExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/TillNewLineExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenTypeClassExpression.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenTypeClassExpression.java
index 3be76246c..c8b0392ed 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenTypeClassExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenTypeClassExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenTypeExpression.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenTypeExpression.java
index c5942e1a3..28fd85371 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenTypeExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenTypeExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenTypesExpression.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenTypesExpression.java
index 9e33571cf..8ad84a351 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenTypesExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenTypesExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenValueExpression.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenValueExpression.java
index f6c1a4c37..d3a27a80f 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenValueExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenValueExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokensBridgeExpression.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokensBridgeExpression.java
index ebc39577e..6df5053fd 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokensBridgeExpression.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokensBridgeExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/package-info.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/package-info.java
index 5934663d7..6fb947620 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/package-info.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/lexerful/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/package-info.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/package-info.java
index aae3870ed..ef6a98b78 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/package-info.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/internal/vm/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/GrammarOperators.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/GrammarOperators.java
index c56363f86..f8660abe6 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/GrammarOperators.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/GrammarOperators.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/LexerlessGrammar.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/LexerlessGrammar.java
index 9f7baa9a0..370e5abd7 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/LexerlessGrammar.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/LexerlessGrammar.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/ParseError.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/ParseError.java
index c3102fca8..6206dabc9 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/ParseError.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/ParseError.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/ParseErrorFormatter.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/ParseErrorFormatter.java
index e8ae99bce..6c62532e4 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/ParseErrorFormatter.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/ParseErrorFormatter.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/ParseRunner.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/ParseRunner.java
index 4d684d20c..8c1845c1b 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/ParseRunner.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/ParseRunner.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/ParserAdapter.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/ParserAdapter.java
index f5e8bbf5a..733075948 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/ParserAdapter.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/ParserAdapter.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/ParsingResult.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/ParsingResult.java
index 5504d7127..09126e04c 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/ParsingResult.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/ParsingResult.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/package-info.java b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/package-info.java
index 8204e8331..1e5f57707 100644
--- a/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/package-info.java
+++ b/cxx-sslr/sslr-core/src/main/java/org/sonar/cxx/sslr/parser/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/api/AstNodeTest.java b/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/api/AstNodeTest.java
index 4dc42c78f..e4945e3bc 100644
--- a/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/api/AstNodeTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/api/AstNodeTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/api/GrammarTest.java b/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/api/GrammarTest.java
index c7dd25c28..54cf90be9 100644
--- a/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/api/GrammarTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/api/GrammarTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/api/typed/ActionParserTest.java b/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/api/typed/ActionParserTest.java
index e8e39b7ff..aa6904537 100644
--- a/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/api/typed/ActionParserTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/api/typed/ActionParserTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/api/typed/InputTest.java b/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/api/typed/InputTest.java
index 345a170e3..2daff32e7 100644
--- a/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/api/typed/InputTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/api/typed/InputTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/api/typed/OptionalTest.java b/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/api/typed/OptionalTest.java
index 0a2b4c6d3..f40da006c 100644
--- a/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/api/typed/OptionalTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/api/typed/OptionalTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/impl/ast/AlwaysSkipFromAstTest.java b/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/impl/ast/AlwaysSkipFromAstTest.java
index 554e8d9da..4614ff3e7 100644
--- a/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/impl/ast/AlwaysSkipFromAstTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/impl/ast/AlwaysSkipFromAstTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/impl/ast/NeverSkipFromAstTest.java b/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/impl/ast/NeverSkipFromAstTest.java
index 98282b315..36d335212 100644
--- a/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/impl/ast/NeverSkipFromAstTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/impl/ast/NeverSkipFromAstTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/impl/ast/SkipFromAstIfOnlyOneChildTest.java b/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/impl/ast/SkipFromAstIfOnlyOneChildTest.java
index f8430e175..a19b54f66 100644
--- a/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/impl/ast/SkipFromAstIfOnlyOneChildTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/impl/ast/SkipFromAstIfOnlyOneChildTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/impl/matcher/GrammarFunctionsTest.java b/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/impl/matcher/GrammarFunctionsTest.java
index 28ea3e298..ce1b10c9d 100644
--- a/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/impl/matcher/GrammarFunctionsTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/impl/matcher/GrammarFunctionsTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/impl/typed/DelayedRuleInvocationExpressionTest.java b/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/impl/typed/DelayedRuleInvocationExpressionTest.java
index 98963527a..05945f2d1 100644
--- a/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/impl/typed/DelayedRuleInvocationExpressionTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/impl/typed/DelayedRuleInvocationExpressionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/impl/typed/InterceptorTest.java b/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/impl/typed/InterceptorTest.java
index de7d1cf47..8bc5bcd12 100644
--- a/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/impl/typed/InterceptorTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/com/sonar/cxx/sslr/impl/typed/InterceptorTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/channel/ChannelDispatcherTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/channel/ChannelDispatcherTest.java
index 92dbb2ccb..6509c7df8 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/channel/ChannelDispatcherTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/channel/ChannelDispatcherTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/channel/CodeBufferTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/channel/CodeBufferTest.java
index d0f1e2268..505185e1b 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/channel/CodeBufferTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/channel/CodeBufferTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/channel/CodeReaderTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/channel/CodeReaderTest.java
index bedf276b3..44b1ea2c5 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/channel/CodeReaderTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/channel/CodeReaderTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/channel/RegexChannelTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/channel/RegexChannelTest.java
index 7f3454033..77823ec97 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/channel/RegexChannelTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/channel/RegexChannelTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/grammar/LexerfulGrammarBuilderTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/grammar/LexerfulGrammarBuilderTest.java
index aefe56ef0..e70a2b80b 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/grammar/LexerfulGrammarBuilderTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/grammar/LexerfulGrammarBuilderTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/grammar/LexerlessGrammarBuilderTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/grammar/LexerlessGrammarBuilderTest.java
index 90507aa07..048d7a43c 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/grammar/LexerlessGrammarBuilderTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/grammar/LexerlessGrammarBuilderTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/grammar/RuleBuilderTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/grammar/RuleBuilderTest.java
index f05dd8e8a..8e2e67cf1 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/grammar/RuleBuilderTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/grammar/RuleBuilderTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/grammar/MutableGrammarTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/grammar/MutableGrammarTest.java
index f46403322..3bf97b249 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/grammar/MutableGrammarTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/grammar/MutableGrammarTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/grammar/MutableParsingRuleTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/grammar/MutableParsingRuleTest.java
index 5245cabd2..277fa4038 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/grammar/MutableParsingRuleTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/grammar/MutableParsingRuleTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/matchers/AstCreatorTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/matchers/AstCreatorTest.java
index 62915c107..a85bb567d 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/matchers/AstCreatorTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/matchers/AstCreatorTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/matchers/ExpressionGrammar.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/matchers/ExpressionGrammar.java
index 1636c150c..98546851a 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/matchers/ExpressionGrammar.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/matchers/ExpressionGrammar.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/matchers/ExpressionGrammarTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/matchers/ExpressionGrammarTest.java
index 135d175b1..bb8de74f4 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/matchers/ExpressionGrammarTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/matchers/ExpressionGrammarTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/matchers/ImmutableInputBufferTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/matchers/ImmutableInputBufferTest.java
index 0b28316b0..e4fe3c0fe 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/matchers/ImmutableInputBufferTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/matchers/ImmutableInputBufferTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/matchers/ParseTreePrinter.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/matchers/ParseTreePrinter.java
index 62aea4070..646785c39 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/matchers/ParseTreePrinter.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/matchers/ParseTreePrinter.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/matchers/TextUtilsTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/matchers/TextUtilsTest.java
index 7064bfe73..da87533ee 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/matchers/TextUtilsTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/matchers/TextUtilsTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/EndOfInputExpressionTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/EndOfInputExpressionTest.java
index fa0a75ca9..34431d9fc 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/EndOfInputExpressionTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/EndOfInputExpressionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/ErrorLocatingHandlerTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/ErrorLocatingHandlerTest.java
index 0581b8667..c2668a12b 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/ErrorLocatingHandlerTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/ErrorLocatingHandlerTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/FirstOfExpressionTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/FirstOfExpressionTest.java
index 7fe17863f..3adee253e 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/FirstOfExpressionTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/FirstOfExpressionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/InstructionTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/InstructionTest.java
index 6da291672..a355fb6e2 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/InstructionTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/InstructionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/MachineIntegrationTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/MachineIntegrationTest.java
index 5515e2ec8..22a695d57 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/MachineIntegrationTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/MachineIntegrationTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/MachineTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/MachineTest.java
index 1de4894cb..485c38e89 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/MachineTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/MachineTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/NextExpressionTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/NextExpressionTest.java
index eb704b1f1..d5a395108 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/NextExpressionTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/NextExpressionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/NextNotExpressionTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/NextNotExpressionTest.java
index f0cb33bd3..992bb5d54 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/NextNotExpressionTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/NextNotExpressionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/NothingExpressionTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/NothingExpressionTest.java
index 29816f38f..81b82b8f7 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/NothingExpressionTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/NothingExpressionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/OneOrMoreExpressionTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/OneOrMoreExpressionTest.java
index cfa7408ce..a1bdd408e 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/OneOrMoreExpressionTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/OneOrMoreExpressionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/OptionalExpressionTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/OptionalExpressionTest.java
index 942ec4515..5b6f021aa 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/OptionalExpressionTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/OptionalExpressionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/PatternExpressionTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/PatternExpressionTest.java
index e77ed1850..2b02ae0e5 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/PatternExpressionTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/PatternExpressionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/RuleRefExpressionTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/RuleRefExpressionTest.java
index 7a68457a4..15c5e3eda 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/RuleRefExpressionTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/RuleRefExpressionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/SequenceExpressionTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/SequenceExpressionTest.java
index 82abded61..d7296e55f 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/SequenceExpressionTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/SequenceExpressionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/StringExpressionTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/StringExpressionTest.java
index 1f23eeabe..8fe7d896a 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/StringExpressionTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/StringExpressionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/SubExpression.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/SubExpression.java
index 41efcbd56..1a5f870c6 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/SubExpression.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/SubExpression.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/TokenExpressionTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/TokenExpressionTest.java
index 69645af70..576a5b43a 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/TokenExpressionTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/TokenExpressionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/TriviaExpressionTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/TriviaExpressionTest.java
index 3f93a2e7c..43f0c99c4 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/TriviaExpressionTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/TriviaExpressionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/ZeroOrMoreExpressionTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/ZeroOrMoreExpressionTest.java
index 41e1b3ac0..2bfd53d1c 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/ZeroOrMoreExpressionTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/ZeroOrMoreExpressionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/AdjacentExpressionTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/AdjacentExpressionTest.java
index 6f39f8d20..8ed767357 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/AdjacentExpressionTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/AdjacentExpressionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/AnyTokenExpressionTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/AnyTokenExpressionTest.java
index ad941045b..af82a402f 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/AnyTokenExpressionTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/AnyTokenExpressionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/LexerfulMachineIntegrationTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/LexerfulMachineIntegrationTest.java
index d3a70c138..8510dd0ff 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/LexerfulMachineIntegrationTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/LexerfulMachineIntegrationTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/LexerfulParseErrorFormatterTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/LexerfulParseErrorFormatterTest.java
index 248423cfa..fcf3ed52b 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/LexerfulParseErrorFormatterTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/LexerfulParseErrorFormatterTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/TillNewLineExpressionTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/TillNewLineExpressionTest.java
index 50e80e184..3df9c5f52 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/TillNewLineExpressionTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/TillNewLineExpressionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenTypeClassTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenTypeClassTest.java
index e49f9cc33..33d84ea0a 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenTypeClassTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenTypeClassTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenTypeExpressionTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenTypeExpressionTest.java
index 7c449f4fc..4e432fd88 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenTypeExpressionTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenTypeExpressionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenTypesExpressionTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenTypesExpressionTest.java
index 6962a8727..46c76969d 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenTypesExpressionTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenTypesExpressionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenValueExpressionTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenValueExpressionTest.java
index 2861d9972..a7ba66bda 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenValueExpressionTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokenValueExpressionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokensBridgeExpressionTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokensBridgeExpressionTest.java
index 2d08ce772..30b6a2711 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokensBridgeExpressionTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/internal/vm/lexerful/TokensBridgeExpressionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/parser/GrammarOperatorsTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/parser/GrammarOperatorsTest.java
index b0432bfe6..24b0734ce 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/parser/GrammarOperatorsTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/parser/GrammarOperatorsTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/parser/LexerlessGrammarTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/parser/LexerlessGrammarTest.java
index 079ebe7d3..8c1ef946f 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/parser/LexerlessGrammarTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/parser/LexerlessGrammarTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/parser/ParseErrorFormatterTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/parser/ParseErrorFormatterTest.java
index e93ea5f74..d03550d92 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/parser/ParseErrorFormatterTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/parser/ParseErrorFormatterTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/parser/ParseRunnerTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/parser/ParseRunnerTest.java
index 95a6f7303..671c643e2 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/parser/ParseRunnerTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/parser/ParseRunnerTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/parser/ParserAdapterTest.java b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/parser/ParserAdapterTest.java
index 1f0f296ea..c3672836c 100644
--- a/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/parser/ParserAdapterTest.java
+++ b/cxx-sslr/sslr-core/src/test/java/org/sonar/cxx/sslr/parser/ParserAdapterTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/HasCommentCondition.java b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/HasCommentCondition.java
index 5a9cf129e..567ac485c 100644
--- a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/HasCommentCondition.java
+++ b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/HasCommentCondition.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/HasLastTokenCondition.java b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/HasLastTokenCondition.java
index fd607afbc..70c654551 100644
--- a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/HasLastTokenCondition.java
+++ b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/HasLastTokenCondition.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/HasTokenCondition.java b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/HasTokenCondition.java
index 7f6669d4a..da9c11d7f 100644
--- a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/HasTokenCondition.java
+++ b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/HasTokenCondition.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/HasTokenTypeCondition.java b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/HasTokenTypeCondition.java
index a5101e245..7d88dad62 100644
--- a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/HasTokenTypeCondition.java
+++ b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/HasTokenTypeCondition.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/HasTokenValueCondition.java b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/HasTokenValueCondition.java
index 12aed6c6d..002410079 100644
--- a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/HasTokenValueCondition.java
+++ b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/HasTokenValueCondition.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/HasTokensCondition.java b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/HasTokensCondition.java
index c17cb1cc2..7a7e2b8cd 100644
--- a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/HasTokensCondition.java
+++ b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/HasTokensCondition.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/LexerConditions.java b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/LexerConditions.java
index 8be5578f7..9644e8fad 100644
--- a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/LexerConditions.java
+++ b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/LexerConditions.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/package-info.java b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/package-info.java
index a40173f4d..8c19360c8 100644
--- a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/package-info.java
+++ b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/lexer/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/minic/MiniCColorizer.java b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/minic/MiniCColorizer.java
index 5ec12097a..6669a2298 100644
--- a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/minic/MiniCColorizer.java
+++ b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/minic/MiniCColorizer.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/minic/MiniCGrammar.java b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/minic/MiniCGrammar.java
index edd55e487..4eea8634a 100644
--- a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/minic/MiniCGrammar.java
+++ b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/minic/MiniCGrammar.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/minic/MiniCLexer.java b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/minic/MiniCLexer.java
index bf35be305..5a1f65467 100644
--- a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/minic/MiniCLexer.java
+++ b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/minic/MiniCLexer.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/minic/MiniCParser.java b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/minic/MiniCParser.java
index 70c843ff6..0aaa2e540 100644
--- a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/minic/MiniCParser.java
+++ b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/minic/MiniCParser.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/minic/MiniCToolkit.java b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/minic/MiniCToolkit.java
index 4f2667570..e53732e22 100644
--- a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/minic/MiniCToolkit.java
+++ b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/minic/MiniCToolkit.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/minic/package-info.java b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/minic/package-info.java
index 54fd2d403..3ca661914 100644
--- a/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/minic/package-info.java
+++ b/cxx-sslr/sslr-testing-harness/src/main/java/com/sonar/cxx/sslr/test/minic/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/test/channel/ChannelCondition.java b/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/test/channel/ChannelCondition.java
index 1b7d18f74..5cd88f3fc 100644
--- a/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/test/channel/ChannelCondition.java
+++ b/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/test/channel/ChannelCondition.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/test/channel/ChannelMatchers.java b/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/test/channel/ChannelMatchers.java
index 5e9ee901b..fd2c4783a 100644
--- a/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/test/channel/ChannelMatchers.java
+++ b/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/test/channel/ChannelMatchers.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/test/channel/ReaderHasNextCharCondition.java b/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/test/channel/ReaderHasNextCharCondition.java
index 8a39a5b17..34cf0519d 100644
--- a/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/test/channel/ReaderHasNextCharCondition.java
+++ b/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/test/channel/ReaderHasNextCharCondition.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/test/channel/package-info.java b/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/test/channel/package-info.java
index 0f07536c7..285288f10 100644
--- a/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/test/channel/package-info.java
+++ b/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/test/channel/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/tests/Assertions.java b/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/tests/Assertions.java
index 0a6ff6ed2..b6f9bd315 100644
--- a/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/tests/Assertions.java
+++ b/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/tests/Assertions.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/tests/ParserAssert.java b/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/tests/ParserAssert.java
index f04563007..ca8d17e33 100644
--- a/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/tests/ParserAssert.java
+++ b/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/tests/ParserAssert.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/tests/ParsingResultComparisonFailure.java b/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/tests/ParsingResultComparisonFailure.java
index d64ad244d..07fcc16de 100644
--- a/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/tests/ParsingResultComparisonFailure.java
+++ b/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/tests/ParsingResultComparisonFailure.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/tests/RuleAssert.java b/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/tests/RuleAssert.java
index 55ec3dfe0..83c03ce9a 100644
--- a/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/tests/RuleAssert.java
+++ b/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/tests/RuleAssert.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/tests/package-info.java b/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/tests/package-info.java
index 3733b646f..6b386ff93 100644
--- a/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/tests/package-info.java
+++ b/cxx-sslr/sslr-testing-harness/src/main/java/org/sonar/cxx/sslr/tests/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/test/java/org/sonar/cxx/sslr/test/channel/ChannelMatchersTest.java b/cxx-sslr/sslr-testing-harness/src/test/java/org/sonar/cxx/sslr/test/channel/ChannelMatchersTest.java
index 950367244..4b990a9f8 100644
--- a/cxx-sslr/sslr-testing-harness/src/test/java/org/sonar/cxx/sslr/test/channel/ChannelMatchersTest.java
+++ b/cxx-sslr/sslr-testing-harness/src/test/java/org/sonar/cxx/sslr/test/channel/ChannelMatchersTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/test/java/org/sonar/cxx/sslr/tests/AssertionsTest.java b/cxx-sslr/sslr-testing-harness/src/test/java/org/sonar/cxx/sslr/tests/AssertionsTest.java
index 1d2a78136..03522c83c 100644
--- a/cxx-sslr/sslr-testing-harness/src/test/java/org/sonar/cxx/sslr/tests/AssertionsTest.java
+++ b/cxx-sslr/sslr-testing-harness/src/test/java/org/sonar/cxx/sslr/tests/AssertionsTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/test/java/org/sonar/cxx/sslr/tests/ParserAssertTest.java b/cxx-sslr/sslr-testing-harness/src/test/java/org/sonar/cxx/sslr/tests/ParserAssertTest.java
index 7258c308b..d7e5b7400 100644
--- a/cxx-sslr/sslr-testing-harness/src/test/java/org/sonar/cxx/sslr/tests/ParserAssertTest.java
+++ b/cxx-sslr/sslr-testing-harness/src/test/java/org/sonar/cxx/sslr/tests/ParserAssertTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/test/java/org/sonar/cxx/sslr/tests/ParsingResultComparisonFailureTest.java b/cxx-sslr/sslr-testing-harness/src/test/java/org/sonar/cxx/sslr/tests/ParsingResultComparisonFailureTest.java
index f710d34a9..7a21605b6 100644
--- a/cxx-sslr/sslr-testing-harness/src/test/java/org/sonar/cxx/sslr/tests/ParsingResultComparisonFailureTest.java
+++ b/cxx-sslr/sslr-testing-harness/src/test/java/org/sonar/cxx/sslr/tests/ParsingResultComparisonFailureTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-testing-harness/src/test/java/org/sonar/cxx/sslr/tests/RuleAssertTest.java b/cxx-sslr/sslr-testing-harness/src/test/java/org/sonar/cxx/sslr/tests/RuleAssertTest.java
index da768c51e..ea934f641 100644
--- a/cxx-sslr/sslr-testing-harness/src/test/java/org/sonar/cxx/sslr/tests/RuleAssertTest.java
+++ b/cxx-sslr/sslr-testing-harness/src/test/java/org/sonar/cxx/sslr/tests/RuleAssertTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/api/AstNodeTest.java b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/api/AstNodeTest.java
index 7f4e0219d..1297306d6 100644
--- a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/api/AstNodeTest.java
+++ b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/api/AstNodeTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/MockTokenType.java b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/MockTokenType.java
index 001843cec..4203e49dd 100644
--- a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/MockTokenType.java
+++ b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/MockTokenType.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/ParserTest.java b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/ParserTest.java
index 3c0560fef..6c13fd519 100644
--- a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/ParserTest.java
+++ b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/ParserTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/ast/AstWalkerTest.java b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/ast/AstWalkerTest.java
index b66d543be..93a15af84 100644
--- a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/ast/AstWalkerTest.java
+++ b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/ast/AstWalkerTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/ast/AstXmlPrinterTest.java b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/ast/AstXmlPrinterTest.java
index 7b10d0ba7..2303e3a0b 100644
--- a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/ast/AstXmlPrinterTest.java
+++ b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/ast/AstXmlPrinterTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/BlackHoleChannelTest.java b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/BlackHoleChannelTest.java
index 66e70b1bb..c887d3929 100644
--- a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/BlackHoleChannelTest.java
+++ b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/BlackHoleChannelTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/BomCharacterChannelTest.java b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/BomCharacterChannelTest.java
index bc9babbbe..80785446d 100644
--- a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/BomCharacterChannelTest.java
+++ b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/BomCharacterChannelTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/CommentChannelTest.java b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/CommentChannelTest.java
index 7c75c1649..2f32685a1 100644
--- a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/CommentChannelTest.java
+++ b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/CommentChannelTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/IdentifierAndKeywordChannelTest.java b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/IdentifierAndKeywordChannelTest.java
index 32345dca0..ea5a29116 100644
--- a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/IdentifierAndKeywordChannelTest.java
+++ b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/IdentifierAndKeywordChannelTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/PunctuatorChannelTest.java b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/PunctuatorChannelTest.java
index 8ada57d63..f39997aa4 100644
--- a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/PunctuatorChannelTest.java
+++ b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/PunctuatorChannelTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/RegexpChannelBuilderTest.java b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/RegexpChannelBuilderTest.java
index eb25b4acb..eaebcce4c 100644
--- a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/RegexpChannelBuilderTest.java
+++ b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/RegexpChannelBuilderTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/RegexpChannelTest.java b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/RegexpChannelTest.java
index e5184ca62..5b621614a 100644
--- a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/RegexpChannelTest.java
+++ b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/RegexpChannelTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/UnknownCharacterChannelTest.java b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/UnknownCharacterChannelTest.java
index 369868ab1..6b81684f8 100644
--- a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/UnknownCharacterChannelTest.java
+++ b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/channel/UnknownCharacterChannelTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/matcher/RuleDefinitionTest.java b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/matcher/RuleDefinitionTest.java
index ef354dce6..ba21d0d67 100644
--- a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/matcher/RuleDefinitionTest.java
+++ b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/impl/matcher/RuleDefinitionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/test/minic/MiniCLexerTest.java b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/test/minic/MiniCLexerTest.java
index 6752f8e93..da524cc2a 100644
--- a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/test/minic/MiniCLexerTest.java
+++ b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/test/minic/MiniCLexerTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/test/minic/integration/MiniCOwnExamplesTest.java b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/test/minic/integration/MiniCOwnExamplesTest.java
index 01fc62f52..2688551f2 100644
--- a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/test/minic/integration/MiniCOwnExamplesTest.java
+++ b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/test/minic/integration/MiniCOwnExamplesTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/test/minic/rules/ExpressionTest.java b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/test/minic/rules/ExpressionTest.java
index 0649e910b..5216bd677 100644
--- a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/test/minic/rules/ExpressionTest.java
+++ b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/test/minic/rules/ExpressionTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/test/minic/rules/RuleTest.java b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/test/minic/rules/RuleTest.java
index d0e0d4dfc..f4920df8c 100644
--- a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/test/minic/rules/RuleTest.java
+++ b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/test/minic/rules/RuleTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/test/minic/rules/StructTest.java b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/test/minic/rules/StructTest.java
index ebd6c7a12..8c41ffe53 100644
--- a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/test/minic/rules/StructTest.java
+++ b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/test/minic/rules/StructTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/xpath/BasicQueriesTest.java b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/xpath/BasicQueriesTest.java
index a0ccd2ecc..f7a1ed309 100644
--- a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/xpath/BasicQueriesTest.java
+++ b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/xpath/BasicQueriesTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/xpath/IdentifiersTooLongTest.java b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/xpath/IdentifiersTooLongTest.java
index ac4af56b2..6dee72041 100644
--- a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/xpath/IdentifiersTooLongTest.java
+++ b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/xpath/IdentifiersTooLongTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/xpath/IfSMustUseBracesTest.java b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/xpath/IfSMustUseBracesTest.java
index f9cdbfe97..1debb62cd 100644
--- a/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/xpath/IfSMustUseBracesTest.java
+++ b/cxx-sslr/sslr-tests/src/test/java/com/sonar/cxx/sslr/xpath/IfSMustUseBracesTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-tests/src/test/java/org/sonar/cxx/sslr/ast/CollapsibleIfSelectTest.java b/cxx-sslr/sslr-tests/src/test/java/org/sonar/cxx/sslr/ast/CollapsibleIfSelectTest.java
index f4a9c000e..432733a78 100644
--- a/cxx-sslr/sslr-tests/src/test/java/org/sonar/cxx/sslr/ast/CollapsibleIfSelectTest.java
+++ b/cxx-sslr/sslr-tests/src/test/java/org/sonar/cxx/sslr/ast/CollapsibleIfSelectTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-tests/src/test/java/org/sonar/cxx/sslr/ast/CollapsibleIfVisitorTest.java b/cxx-sslr/sslr-tests/src/test/java/org/sonar/cxx/sslr/ast/CollapsibleIfVisitorTest.java
index 931719a05..8391e9ccf 100644
--- a/cxx-sslr/sslr-tests/src/test/java/org/sonar/cxx/sslr/ast/CollapsibleIfVisitorTest.java
+++ b/cxx-sslr/sslr-tests/src/test/java/org/sonar/cxx/sslr/ast/CollapsibleIfVisitorTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/ConfigurationPropertyPanel.java b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/ConfigurationPropertyPanel.java
index 85c0d024a..f12b38b94 100644
--- a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/ConfigurationPropertyPanel.java
+++ b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/ConfigurationPropertyPanel.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/CssLoader.java b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/CssLoader.java
index 517d78d41..c3384f30b 100644
--- a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/CssLoader.java
+++ b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/CssLoader.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/LineOffsets.java b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/LineOffsets.java
index 590c9acc1..b442a7f9e 100644
--- a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/LineOffsets.java
+++ b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/LineOffsets.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/SourceCodeModel.java b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/SourceCodeModel.java
index f98018a1f..9d9dbae5e 100644
--- a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/SourceCodeModel.java
+++ b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/SourceCodeModel.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/ToolkitPresenter.java b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/ToolkitPresenter.java
index b7fa153c3..eb38a2334 100644
--- a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/ToolkitPresenter.java
+++ b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/ToolkitPresenter.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/ToolkitView.java b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/ToolkitView.java
index 59affba4d..feb2668a0 100644
--- a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/ToolkitView.java
+++ b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/ToolkitView.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/ToolkitViewImpl.java b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/ToolkitViewImpl.java
index bc5c66129..d76221ecf 100644
--- a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/ToolkitViewImpl.java
+++ b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/ToolkitViewImpl.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/package-info.java b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/package-info.java
index ca7308489..b7adf7c74 100644
--- a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/package-info.java
+++ b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/internal/toolkit/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/AbstractConfigurationModel.java b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/AbstractConfigurationModel.java
index a602bf743..157cac182 100644
--- a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/AbstractConfigurationModel.java
+++ b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/AbstractConfigurationModel.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/ConfigurationModel.java b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/ConfigurationModel.java
index 8f06d62eb..594db196a 100644
--- a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/ConfigurationModel.java
+++ b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/ConfigurationModel.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/ConfigurationProperty.java b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/ConfigurationProperty.java
index f1240f548..511c2e407 100644
--- a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/ConfigurationProperty.java
+++ b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/ConfigurationProperty.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/Toolkit.java b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/Toolkit.java
index 3d0f2082c..99222582b 100644
--- a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/Toolkit.java
+++ b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/Toolkit.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/ValidationCallback.java b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/ValidationCallback.java
index c584f44af..d8710af8b 100644
--- a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/ValidationCallback.java
+++ b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/ValidationCallback.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/Validators.java b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/Validators.java
index 1d60672dd..da08c8f3b 100644
--- a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/Validators.java
+++ b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/Validators.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/package-info.java b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/package-info.java
index c3e4eaacf..d675e41ec 100644
--- a/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/package-info.java
+++ b/cxx-sslr/sslr-toolkit/src/main/java/org/sonar/cxx/sslr/toolkit/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-toolkit/src/main/resources/org/sonar/cxx/sslr/toolkit/sourceCodeEditor.css b/cxx-sslr/sslr-toolkit/src/main/resources/org/sonar/cxx/sslr/toolkit/sourceCodeEditor.css
index ea04b0ef3..d69c61498 100644
--- a/cxx-sslr/sslr-toolkit/src/main/resources/org/sonar/cxx/sslr/toolkit/sourceCodeEditor.css
+++ b/cxx-sslr/sslr-toolkit/src/main/resources/org/sonar/cxx/sslr/toolkit/sourceCodeEditor.css
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-toolkit/src/test/java/org/sonar/cxx/sslr/internal/toolkit/CssLoaderTest.java b/cxx-sslr/sslr-toolkit/src/test/java/org/sonar/cxx/sslr/internal/toolkit/CssLoaderTest.java
index 58ee13c36..35512684b 100644
--- a/cxx-sslr/sslr-toolkit/src/test/java/org/sonar/cxx/sslr/internal/toolkit/CssLoaderTest.java
+++ b/cxx-sslr/sslr-toolkit/src/test/java/org/sonar/cxx/sslr/internal/toolkit/CssLoaderTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-toolkit/src/test/java/org/sonar/cxx/sslr/internal/toolkit/LineOffsetsTest.java b/cxx-sslr/sslr-toolkit/src/test/java/org/sonar/cxx/sslr/internal/toolkit/LineOffsetsTest.java
index 639666895..f5aec5485 100644
--- a/cxx-sslr/sslr-toolkit/src/test/java/org/sonar/cxx/sslr/internal/toolkit/LineOffsetsTest.java
+++ b/cxx-sslr/sslr-toolkit/src/test/java/org/sonar/cxx/sslr/internal/toolkit/LineOffsetsTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-toolkit/src/test/java/org/sonar/cxx/sslr/internal/toolkit/ToolkitPresenterTest.java b/cxx-sslr/sslr-toolkit/src/test/java/org/sonar/cxx/sslr/internal/toolkit/ToolkitPresenterTest.java
index 86f7b1242..0ffce15a0 100644
--- a/cxx-sslr/sslr-toolkit/src/test/java/org/sonar/cxx/sslr/internal/toolkit/ToolkitPresenterTest.java
+++ b/cxx-sslr/sslr-toolkit/src/test/java/org/sonar/cxx/sslr/internal/toolkit/ToolkitPresenterTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-toolkit/src/test/java/org/sonar/cxx/sslr/toolkit/AbstractConfigurationModelTest.java b/cxx-sslr/sslr-toolkit/src/test/java/org/sonar/cxx/sslr/toolkit/AbstractConfigurationModelTest.java
index 3fcae6433..ee70101cd 100644
--- a/cxx-sslr/sslr-toolkit/src/test/java/org/sonar/cxx/sslr/toolkit/AbstractConfigurationModelTest.java
+++ b/cxx-sslr/sslr-toolkit/src/test/java/org/sonar/cxx/sslr/toolkit/AbstractConfigurationModelTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-toolkit/src/test/java/org/sonar/cxx/sslr/toolkit/ConfigurationPropertyTest.java b/cxx-sslr/sslr-toolkit/src/test/java/org/sonar/cxx/sslr/toolkit/ConfigurationPropertyTest.java
index c76b40e20..eb4c89d78 100644
--- a/cxx-sslr/sslr-toolkit/src/test/java/org/sonar/cxx/sslr/toolkit/ConfigurationPropertyTest.java
+++ b/cxx-sslr/sslr-toolkit/src/test/java/org/sonar/cxx/sslr/toolkit/ConfigurationPropertyTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-toolkit/src/test/java/org/sonar/cxx/sslr/toolkit/ValidatorsTest.java b/cxx-sslr/sslr-toolkit/src/test/java/org/sonar/cxx/sslr/toolkit/ValidatorsTest.java
index 45625586d..0f088e735 100644
--- a/cxx-sslr/sslr-toolkit/src/test/java/org/sonar/cxx/sslr/toolkit/ValidatorsTest.java
+++ b/cxx-sslr/sslr-toolkit/src/test/java/org/sonar/cxx/sslr/toolkit/ValidatorsTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-xpath/src/main/java/com/sonar/cxx/sslr/impl/xpath/AstNodeNavigator.java b/cxx-sslr/sslr-xpath/src/main/java/com/sonar/cxx/sslr/impl/xpath/AstNodeNavigator.java
index ce3cf5e43..1a1c941d6 100644
--- a/cxx-sslr/sslr-xpath/src/main/java/com/sonar/cxx/sslr/impl/xpath/AstNodeNavigator.java
+++ b/cxx-sslr/sslr-xpath/src/main/java/com/sonar/cxx/sslr/impl/xpath/AstNodeNavigator.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-xpath/src/main/java/com/sonar/cxx/sslr/impl/xpath/package-info.java b/cxx-sslr/sslr-xpath/src/main/java/com/sonar/cxx/sslr/impl/xpath/package-info.java
index a12659672..c41738926 100644
--- a/cxx-sslr/sslr-xpath/src/main/java/com/sonar/cxx/sslr/impl/xpath/package-info.java
+++ b/cxx-sslr/sslr-xpath/src/main/java/com/sonar/cxx/sslr/impl/xpath/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-xpath/src/main/java/com/sonar/cxx/sslr/xpath/api/AstNodeXPathQuery.java b/cxx-sslr/sslr-xpath/src/main/java/com/sonar/cxx/sslr/xpath/api/AstNodeXPathQuery.java
index 6ee3c7a3e..54d65b2bb 100644
--- a/cxx-sslr/sslr-xpath/src/main/java/com/sonar/cxx/sslr/xpath/api/AstNodeXPathQuery.java
+++ b/cxx-sslr/sslr-xpath/src/main/java/com/sonar/cxx/sslr/xpath/api/AstNodeXPathQuery.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-xpath/src/main/java/com/sonar/cxx/sslr/xpath/api/package-info.java b/cxx-sslr/sslr-xpath/src/main/java/com/sonar/cxx/sslr/xpath/api/package-info.java
index bc312f8a5..67134cf86 100644
--- a/cxx-sslr/sslr-xpath/src/main/java/com/sonar/cxx/sslr/xpath/api/package-info.java
+++ b/cxx-sslr/sslr-xpath/src/main/java/com/sonar/cxx/sslr/xpath/api/package-info.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-xpath/src/test/java/com/sonar/cxx/sslr/impl/xpath/AstNodeNavigatorTest.java b/cxx-sslr/sslr-xpath/src/test/java/com/sonar/cxx/sslr/impl/xpath/AstNodeNavigatorTest.java
index 35f55609b..e8976dfcc 100644
--- a/cxx-sslr/sslr-xpath/src/test/java/com/sonar/cxx/sslr/impl/xpath/AstNodeNavigatorTest.java
+++ b/cxx-sslr/sslr-xpath/src/test/java/com/sonar/cxx/sslr/impl/xpath/AstNodeNavigatorTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/cxx-sslr/sslr-xpath/src/test/java/com/sonar/cxx/sslr/xpath/api/AstNodeXPathQueryTest.java b/cxx-sslr/sslr-xpath/src/test/java/com/sonar/cxx/sslr/xpath/api/AstNodeXPathQueryTest.java
index acd6a6ff9..87b8d811b 100644
--- a/cxx-sslr/sslr-xpath/src/test/java/com/sonar/cxx/sslr/xpath/api/AstNodeXPathQueryTest.java
+++ b/cxx-sslr/sslr-xpath/src/test/java/com/sonar/cxx/sslr/xpath/api/AstNodeXPathQueryTest.java
@@ -1,6 +1,6 @@
 /*
  * C++ Community Plugin (cxx plugin)
- * Copyright (C) 2022 SonarOpenCommunity
+ * Copyright (C) 2022-2024 SonarOpenCommunity
  * http://github.com/SonarOpenCommunity/sonar-cxx
  *
  * This program is free software; you can redistribute it and/or
diff --git a/integration-tests/features/common.py b/integration-tests/features/common.py
index e3a4ad89b..f64eac513 100644
--- a/integration-tests/features/common.py
+++ b/integration-tests/features/common.py
@@ -3,6 +3,7 @@
 
 # C++ Community Plugin (cxx plugin)
 # Copyright (C) Waleri Enns
+# Copyright (C) 2010-2024 SonarOpenCommunity
 # dev@sonar.codehaus.org
 
 # This program is free software; you can redistribute it and/or
diff --git a/integration-tests/features/environment.py b/integration-tests/features/environment.py
index 65ba73e36..21160a61f 100644
--- a/integration-tests/features/environment.py
+++ b/integration-tests/features/environment.py
@@ -3,6 +3,7 @@
 
 # C++ Community Plugin (cxx plugin)
 # Copyright (C) Waleri Enns
+# Copyright (C) 2010-2024 SonarOpenCommunity
 # dev@sonar.codehaus.org
 
 # This program is free software; you can redistribute it and/or
diff --git a/integration-tests/features/steps/test_execution_statistics.py b/integration-tests/features/steps/test_execution_statistics.py
index 40103f3ea..b4517da6d 100644
--- a/integration-tests/features/steps/test_execution_statistics.py
+++ b/integration-tests/features/steps/test_execution_statistics.py
@@ -3,6 +3,7 @@
 
 # SonarQube Python Plugin
 # Copyright (C) Waleri Enns, Günter Wirth
+# Copyright (C) 2010-2024 SonarOpenCommunity
 # dev@sonar.codehaus.org
 
 # This program is free software; you can redistribute it and/or
diff --git a/integration-tests/features/webapi.py b/integration-tests/features/webapi.py
index 067f76ee9..6c3998ed3 100644
--- a/integration-tests/features/webapi.py
+++ b/integration-tests/features/webapi.py
@@ -3,6 +3,7 @@
 
 # SonarQube Python Plugin
 # Copyright (C) Waleri Enns, Günter Wirth
+# Copyright (C) 2010-2024 SonarOpenCommunity
 # dev@sonar.codehaus.org
 
 # This program is free software; you can redistribute it and/or
diff --git a/pom.xml b/pom.xml
index 2f6ba2a92..0c1c1e5fe 100644
--- a/pom.xml
+++ b/pom.xml
@@ -259,7 +259,8 @@
     UTF-8
     true
     integration-tests/target/site/jacoco-aggregate/jacoco.xml
-
+    2010-2024
+    
     
     10.4.0.87286
     10.6.0.2114

From 9dc34f9cf7540fac75c6ecbeffa855c211c4430e Mon Sep 17 00:00:00 2001
From: guwirth 
Date: Thu, 26 Sep 2024 10:19:30 +0200
Subject: [PATCH 32/32] fix integration test

---
 integration-tests/features/json-db.feature | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/integration-tests/features/json-db.feature b/integration-tests/features/json-db.feature
index af66a125d..3d5ff63fe 100644
--- a/integration-tests/features/json-db.feature
+++ b/integration-tests/features/json-db.feature
@@ -28,7 +28,7 @@ Feature: JSON Compilation Database support
     And the analysis in server has completed
     And the analysis log contains no error/warning messages except those matching:
       """
-      .*WARN.*Unable to get a valid mac address, will use a dummy address
+      .*ERROR.*preprocessor:.*
       """
     And the following metrics have following values:
       | metric     | value |