From 6cc119a4225a3f599a1fa0f34c5b6c8ae596d433 Mon Sep 17 00:00:00 2001 From: Knut Wannheden Date: Tue, 25 Feb 2025 11:10:21 +0100 Subject: [PATCH] Allow `FindLiterals` to match text blocks For `FindLiterals` it makes more sense to match the regex against the literal's value, as that will then have the quotes stripped. Also for other literals it makes sense to match the pattern against the value, so that e.g. a pattern `1000` also matches an integer literal like `1_000`. --- .../java/search/FindLiteralsTest.java | 46 ++++++++++++++++++- .../openrewrite/java/search/FindLiterals.java | 8 ++-- 2 files changed, 48 insertions(+), 6 deletions(-) diff --git a/rewrite-java-test/src/test/java/org/openrewrite/java/search/FindLiteralsTest.java b/rewrite-java-test/src/test/java/org/openrewrite/java/search/FindLiteralsTest.java index 43c435d11c5..064213bf643 100644 --- a/rewrite-java-test/src/test/java/org/openrewrite/java/search/FindLiteralsTest.java +++ b/rewrite-java-test/src/test/java/org/openrewrite/java/search/FindLiteralsTest.java @@ -25,7 +25,7 @@ class FindLiteralsTest implements RewriteTest { @DocumentExample @Test - void findLiterals() { + void string() { rewriteRun( spec -> spec.recipe(new FindLiterals("Hello.*")), java( @@ -42,4 +42,48 @@ class Test { ) ); } + + @Test + void textBlock() { + rewriteRun( + spec -> spec.recipe(new FindLiterals("(?s)Hello.*")), + java( + """ + class Test { + String s = \""" + Hello Jonathan + \"""; + } + """, + """ + class Test { + String s = /*~~>*/\""" + Hello Jonathan + \"""; + } + """ + ) + ); + } + + @Test + void number() { + rewriteRun( + spec -> spec.recipe(new FindLiterals("1000")), + java( + """ + class Test { + int i1 = 1000; + int i2 = 1_000; + } + """, + """ + class Test { + int i1 = /*~~>*/1000; + int i2 = /*~~>*/1_000; + } + """ + ) + ); + } } diff --git a/rewrite-java/src/main/java/org/openrewrite/java/search/FindLiterals.java b/rewrite-java/src/main/java/org/openrewrite/java/search/FindLiterals.java index 9a28bf2ef60..71dfa7ef770 100644 --- a/rewrite-java/src/main/java/org/openrewrite/java/search/FindLiterals.java +++ b/rewrite-java/src/main/java/org/openrewrite/java/search/FindLiterals.java @@ -66,12 +66,10 @@ public TreeVisitor getVisitor() { @Override public J.Literal visitLiteral(J.Literal literal, ExecutionContext ctx) { if (literal.getValueSource() != null) { - if (literal.getType() == JavaType.Primitive.String) { - if (!literal.getValueSource().isEmpty() && compiledPattern.matcher(literal.getValueSource().substring(1, literal.getValueSource().length() - 1)).matches()) { - return SearchResult.found(literal); - } + if (literal.getValue() != null && compiledPattern.matcher(literal.getValue().toString()).matches()) { + return SearchResult.found(literal); } - if (compiledPattern.matcher(literal.getValueSource()).matches()) { + if (literal.getType() != JavaType.Primitive.String && compiledPattern.matcher(literal.getValueSource()).matches()) { return SearchResult.found(literal); } }