From 8f75a95103af4cef9ef1a53922b714a96c050b0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Coet?= Date: Thu, 29 Jan 2026 16:35:55 +0100 Subject: [PATCH 1/3] Add Jakarta's @Inject annotation to the exceptions for S1258 --- .../main/java/checks/AtLeastOneConstructorCheckSample.java | 5 +++++ .../org/sonar/java/checks/AtLeastOneConstructorCheck.java | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/java-checks-test-sources/default/src/main/java/checks/AtLeastOneConstructorCheckSample.java b/java-checks-test-sources/default/src/main/java/checks/AtLeastOneConstructorCheckSample.java index 4f6e8c37ab..57307a320e 100644 --- a/java-checks-test-sources/default/src/main/java/checks/AtLeastOneConstructorCheckSample.java +++ b/java-checks-test-sources/default/src/main/java/checks/AtLeastOneConstructorCheckSample.java @@ -78,6 +78,11 @@ class Inject2 { // Noncompliant //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^< } +class JakartaInject { + @jakarta.inject.Inject + private MyService myService; // Compliant, fields annotated with Jakarta's @Inject should be ignored. +} + class ABuilder { // Compliant, Builder pattern are excluded private int field; diff --git a/java-checks/src/main/java/org/sonar/java/checks/AtLeastOneConstructorCheck.java b/java-checks/src/main/java/org/sonar/java/checks/AtLeastOneConstructorCheck.java index 17717c6a40..f2ebc07749 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/AtLeastOneConstructorCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/AtLeastOneConstructorCheck.java @@ -54,12 +54,13 @@ public class AtLeastOneConstructorCheck extends IssuableSubscriptionVisitor { "javax.annotation.Resource", "javax.ejb.EJB", "javax.inject.Inject", + "jakarta.inject.Inject", "org.apache.maven.plugins.annotations.Component", "org.apache.maven.plugins.annotations.Parameter", "org.codehaus.plexus.component.annotations.Requirement", "org.codehaus.plexus.component.annotations.Configuration", "org.springframework.beans.factory.annotation.Value" - ); + ); @Override public List nodesToVisit() { From e2250eaa8e987ee417ef48b2bd669bffdf4e4005 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Coet?= Date: Fri, 30 Jan 2026 16:58:12 +0100 Subject: [PATCH 2/3] Move tests with Jakarta in separate sample file --- .../AtLeastOneConstructorCheckJakartaSample.java | 16 ++++++++++++++++ .../checks/AtLeastOneConstructorCheckSample.java | 5 ----- .../checks/AtLeastOneConstructorCheckTest.java | 4 ++++ 3 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 java-checks-test-sources/default/src/main/java/checks/AtLeastOneConstructorCheckJakartaSample.java diff --git a/java-checks-test-sources/default/src/main/java/checks/AtLeastOneConstructorCheckJakartaSample.java b/java-checks-test-sources/default/src/main/java/checks/AtLeastOneConstructorCheckJakartaSample.java new file mode 100644 index 0000000000..23ce1ba26d --- /dev/null +++ b/java-checks-test-sources/default/src/main/java/checks/AtLeastOneConstructorCheckJakartaSample.java @@ -0,0 +1,16 @@ +package checks; + +import jakarta.inject.Inject; + +class InjectedService { +} + +class JakartaInject { + @jakarta.inject.Inject + private InjectedService myService; // Compliant, fields annotated with Jakarta's @Inject should be ignored. +} + +class JakartaImportedInject { + @Inject + private InjectedService myService; // Compliant, fields annotated with Jakarta's @Inject should be ignored. +} diff --git a/java-checks-test-sources/default/src/main/java/checks/AtLeastOneConstructorCheckSample.java b/java-checks-test-sources/default/src/main/java/checks/AtLeastOneConstructorCheckSample.java index 57307a320e..4f6e8c37ab 100644 --- a/java-checks-test-sources/default/src/main/java/checks/AtLeastOneConstructorCheckSample.java +++ b/java-checks-test-sources/default/src/main/java/checks/AtLeastOneConstructorCheckSample.java @@ -78,11 +78,6 @@ class Inject2 { // Noncompliant //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^< } -class JakartaInject { - @jakarta.inject.Inject - private MyService myService; // Compliant, fields annotated with Jakarta's @Inject should be ignored. -} - class ABuilder { // Compliant, Builder pattern are excluded private int field; diff --git a/java-checks/src/test/java/org/sonar/java/checks/AtLeastOneConstructorCheckTest.java b/java-checks/src/test/java/org/sonar/java/checks/AtLeastOneConstructorCheckTest.java index e3f3b62b1a..c6557513d1 100644 --- a/java-checks/src/test/java/org/sonar/java/checks/AtLeastOneConstructorCheckTest.java +++ b/java-checks/src/test/java/org/sonar/java/checks/AtLeastOneConstructorCheckTest.java @@ -30,6 +30,10 @@ void test() { .onFile(mainCodeSourcesPath("checks/AtLeastOneConstructorCheckSample.java")) .withCheck(new AtLeastOneConstructorCheck()) .verifyIssues(); + CheckVerifier.newVerifier() + .onFile(mainCodeSourcesPath("checks/AtLeastOneConstructorCheckJakartaSample.java")) + .withCheck(new AtLeastOneConstructorCheck()) + .verifyNoIssues(); } @Test From 121d4920e43c20c644f87a1d7759d1e9c90124c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Coet?= Date: Mon, 2 Feb 2026 10:37:40 +0100 Subject: [PATCH 3/3] Fix the ground truth for autoscan tests --- its/autoscan/src/test/resources/autoscan/diffs/diff_S6813.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/its/autoscan/src/test/resources/autoscan/diffs/diff_S6813.json b/its/autoscan/src/test/resources/autoscan/diffs/diff_S6813.json index 31507ae569..d50149014f 100644 --- a/its/autoscan/src/test/resources/autoscan/diffs/diff_S6813.json +++ b/its/autoscan/src/test/resources/autoscan/diffs/diff_S6813.json @@ -1,6 +1,6 @@ { "ruleKey": "S6813", "hasTruePositives": true, - "falseNegatives": 64, + "falseNegatives": 65, "falsePositives": 0 }