From d11f1a087ab42b9bfba00d2cc720b4a8a84dcb79 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Fri, 26 Mar 2021 09:00:00 +0100 Subject: [PATCH] [java] InvalidLogMessageFormat more String.format detection Fixes #3165 --- docs/pages/release_notes.md | 1 + .../InvalidLogMessageFormatRule.java | 5 +++++ .../xml/InvalidLogMessageFormat.xml | 20 +++++++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index cc883c5a74..41369ec732 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -31,6 +31,7 @@ the parser. More information can be found in the [language specific documentatio * [#3160](https://github.com/pmd/pmd/issues/3160): \[java] MethodReturnsInternalArray does not consider static final fields and fields initialized with empty array * java-errorprone * [#3146](https://github.com/pmd/pmd/issues/3146): \[java] InvalidLogMessageFormat detection failing when String.format used + * [#3165](https://github.com/pmd/pmd/issues/3165): \[java] InvalidLogMessageFormat detection failing when String.format used in a variable * java-performance * [#2427](https://github.com/pmd/pmd/issues/2427): \[java] ConsecutiveLiteralAppend false-positive with builder inside lambda * [#3152](https://github.com/pmd/pmd/issues/3152): \[java] ConsecutiveLiteralAppends and InsufficientStringBufferDeclaration: FP with switch expressions diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/InvalidLogMessageFormatRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/InvalidLogMessageFormatRule.java index 08daaa34d5..d2a3c53945 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/InvalidLogMessageFormatRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/InvalidLogMessageFormatRule.java @@ -300,6 +300,11 @@ public class InvalidLogMessageFormatRule extends AbstractJavaRule { } private int countPlaceholders(final ASTExpression node) { + // ignore if String.format + if (isStringFormatCall(node)) { + return -1; + } + List literals = getStringLiterals(node); if (literals.isEmpty()) { // -1 we could not analyze the message parameter diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/InvalidLogMessageFormat.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/InvalidLogMessageFormat.xml index c5b043b692..4f95dab5b5 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/InvalidLogMessageFormat.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/InvalidLogMessageFormat.xml @@ -948,4 +948,24 @@ class TestInvalidLogMessageFormat { } ]]> + + + [java] InvalidLogMessageFormat detection failing when String.format used in a variable + 0 + +