From 6a9f19a2c7d9f0792f2e52e1e3dab82d20858ad3 Mon Sep 17 00:00:00 2001 From: Tomasz Tylenda Date: Fri, 29 May 2026 13:30:04 +0200 Subject: [PATCH 1/3] Support records in S1068 --- .../src/main/java/checks/unused/UnusedPrivateFieldCheck.java | 4 ++++ .../org/sonar/java/checks/unused/UnusedPrivateFieldCheck.java | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/java-checks-test-sources/default/src/main/java/checks/unused/UnusedPrivateFieldCheck.java b/java-checks-test-sources/default/src/main/java/checks/unused/UnusedPrivateFieldCheck.java index 46ea217fb04..28cfff0dbc2 100644 --- a/java-checks-test-sources/default/src/main/java/checks/unused/UnusedPrivateFieldCheck.java +++ b/java-checks-test-sources/default/src/main/java/checks/unused/UnusedPrivateFieldCheck.java @@ -194,3 +194,7 @@ private void f() { } } +record MyRecord(int a) { + private static final int XYZ = 3; // Noncompliant +// ^^^ +} diff --git a/java-checks/src/main/java/org/sonar/java/checks/unused/UnusedPrivateFieldCheck.java b/java-checks/src/main/java/org/sonar/java/checks/unused/UnusedPrivateFieldCheck.java index 0aee6c10d7c..6b65de2a075 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/unused/UnusedPrivateFieldCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/unused/UnusedPrivateFieldCheck.java @@ -99,7 +99,7 @@ public class UnusedPrivateFieldCheck extends IssuableSubscriptionVisitor { @Override public List nodesToVisit() { - return Arrays.asList(Tree.Kind.CLASS, Tree.Kind.METHOD, Tree.Kind.EXPRESSION_STATEMENT, Tree.Kind.IDENTIFIER); + return Arrays.asList(Tree.Kind.CLASS, Tree.Kind.RECORD, Tree.Kind.METHOD, Tree.Kind.EXPRESSION_STATEMENT, Tree.Kind.IDENTIFIER); } @Override @@ -129,7 +129,7 @@ public void visitNode(Tree tree) { case METHOD: checkIfNativeMethod((MethodTree) tree); break; - case CLASS: + case CLASS, RECORD: classes.add((ClassTree) tree); break; case EXPRESSION_STATEMENT: From abb74a707baf4edfe8f4604b0484937c35eafd68 Mon Sep 17 00:00:00 2001 From: Tomasz Tylenda Date: Fri, 29 May 2026 13:39:19 +0200 Subject: [PATCH 2/3] Non-private example --- .../src/main/java/checks/unused/UnusedPrivateFieldCheck.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/java-checks-test-sources/default/src/main/java/checks/unused/UnusedPrivateFieldCheck.java b/java-checks-test-sources/default/src/main/java/checks/unused/UnusedPrivateFieldCheck.java index 28cfff0dbc2..89da784b2ee 100644 --- a/java-checks-test-sources/default/src/main/java/checks/unused/UnusedPrivateFieldCheck.java +++ b/java-checks-test-sources/default/src/main/java/checks/unused/UnusedPrivateFieldCheck.java @@ -195,6 +195,8 @@ private void f() { } record MyRecord(int a) { - private static final int XYZ = 3; // Noncompliant + private static final int XXX = 3; // Noncompliant // ^^^ + + static final int YYY = 4; // Compliant } From 706e616dbe6e965b3e2fbfcbe338bd11e048566f Mon Sep 17 00:00:00 2001 From: Tomasz Tylenda Date: Fri, 29 May 2026 16:14:55 +0200 Subject: [PATCH 3/3] Add USED case. Improve comment. --- .../main/java/checks/unused/UnusedPrivateFieldCheck.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/java-checks-test-sources/default/src/main/java/checks/unused/UnusedPrivateFieldCheck.java b/java-checks-test-sources/default/src/main/java/checks/unused/UnusedPrivateFieldCheck.java index 89da784b2ee..e2794fd5ee3 100644 --- a/java-checks-test-sources/default/src/main/java/checks/unused/UnusedPrivateFieldCheck.java +++ b/java-checks-test-sources/default/src/main/java/checks/unused/UnusedPrivateFieldCheck.java @@ -198,5 +198,12 @@ record MyRecord(int a) { private static final int XXX = 3; // Noncompliant // ^^^ - static final int YYY = 4; // Compliant + // Non-private fields should not be reported. + static final int YYY = 4; + + private static final int USED = 5; + + int sum() { + return a + USED; + } }