From ec0529470f2759a6126f99035e3b54d27b49ffad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Coet?= Date: Tue, 10 Mar 2026 09:55:48 +0100 Subject: [PATCH] Repair S1612's quickfix for string literals --- .../org/sonar/java/checks/helpers/ExpressionsHelper.java | 4 ++++ .../java/checks/ReplaceLambdaByMethodRefCheckSample.java | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/java-checks-common/src/main/java/org/sonar/java/checks/helpers/ExpressionsHelper.java b/java-checks-common/src/main/java/org/sonar/java/checks/helpers/ExpressionsHelper.java index e4cb27cfd16..3a8005001bb 100644 --- a/java-checks-common/src/main/java/org/sonar/java/checks/helpers/ExpressionsHelper.java +++ b/java-checks-common/src/main/java/org/sonar/java/checks/helpers/ExpressionsHelper.java @@ -36,6 +36,7 @@ import org.sonar.plugins.java.api.tree.ClassTree; import org.sonar.plugins.java.api.tree.ExpressionTree; import org.sonar.plugins.java.api.tree.IdentifierTree; +import org.sonar.plugins.java.api.tree.LiteralTree; import org.sonar.plugins.java.api.tree.MemberSelectExpressionTree; import org.sonar.plugins.java.api.tree.MethodInvocationTree; import org.sonar.plugins.java.api.tree.NewArrayTree; @@ -80,6 +81,9 @@ public static String concatenate(@Nullable ExpressionTree tree) { IdentifierTree idt = (IdentifierTree) expr; pieces.push(idt.name()); } + if (expr instanceof LiteralTree literal) { + pieces.push(literal.token().text()); + } StringBuilder sb = new StringBuilder(); for (String piece : pieces) { diff --git a/java-checks-test-sources/default/src/main/java/checks/ReplaceLambdaByMethodRefCheckSample.java b/java-checks-test-sources/default/src/main/java/checks/ReplaceLambdaByMethodRefCheckSample.java index 47c84510384..9d5f0d8ae6a 100644 --- a/java-checks-test-sources/default/src/main/java/checks/ReplaceLambdaByMethodRefCheckSample.java +++ b/java-checks-test-sources/default/src/main/java/checks/ReplaceLambdaByMethodRefCheckSample.java @@ -358,6 +358,11 @@ void quickFixes(List strings) { // ^^ // fix@qf_cast2 {{Replace with "TestA[][].class::cast"}} // edit@qf_cast2 [[sc=10;ec=40]] {{TestA[][].class::cast}} + + strings.stream().allMatch(it -> "x1".equals(it)); // Noncompliant {{Replace this lambda with method reference '"x1"::equals'.}} [[quickfixes=qf_str_lit]] +// ^^ + // fix@qf_str_lit {{Replace with ""x1"::equals"}} + // edit@qf_str_lit [[sc=31;ec=52]] {{"x1"::equals}} } int notStatic(int x) {