From 149f85a7e417829e325aa68f619d169223d6599e Mon Sep 17 00:00:00 2001 From: Shubham Date: Wed, 30 Jan 2019 14:02:17 +0530 Subject: [PATCH] #1633 [java] UnsynchronizedStaticFormatter reports commons lang FastDateFormat Thread safe formatter org.apache.commons.lang3.time.FastDateFormat can not avoid UnsynchronizedStaticFormatterRule. --- .../UnsynchronizedStaticFormatterRule.java | 7 +++++++ .../xml/UnsynchronizedStaticFormatter.xml | 14 ++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/multithreading/UnsynchronizedStaticFormatterRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/multithreading/UnsynchronizedStaticFormatterRule.java index f53089abcb..4402b17ba8 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/multithreading/UnsynchronizedStaticFormatterRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/multithreading/UnsynchronizedStaticFormatterRule.java @@ -5,6 +5,7 @@ package net.sourceforge.pmd.lang.java.rule.multithreading; import java.text.Format; +import java.util.Arrays; import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceType; @@ -27,6 +28,9 @@ import net.sourceforge.pmd.lang.symboltable.NameOccurrence; */ public class UnsynchronizedStaticFormatterRule extends AbstractJavaRule { private Class formatterClassToCheck = Format.class; + private String[] threadSafeFormatter = { + "org.apache.commons.lang3.time.FastDateFormat", + }; public UnsynchronizedStaticFormatterRule() { addRuleChainVisit(ASTFieldDeclaration.class); @@ -48,6 +52,9 @@ public class UnsynchronizedStaticFormatterRule extends AbstractJavaRule { } ASTVariableDeclaratorId var = node.getFirstDescendantOfType(ASTVariableDeclaratorId.class); + if (Arrays.asList(threadSafeFormatter).contains(var.getType().getName())) { + return data; + } for (NameOccurrence occ : var.getUsages()) { Node n = occ.getLocation(); if (n.getFirstParentOfType(ASTSynchronizedStatement.class) != null) { diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticFormatter.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticFormatter.xml index 365c79fd99..5c9db4e1f0 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticFormatter.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticFormatter.xml @@ -132,6 +132,20 @@ public class Foo { void bar() { messageFormat.format(); } +} + ]]> + + + #1633 [java] UnsynchronizedStaticFormatter reports commons lang FastDateFormat + 0 +