mirror of
https://github.com/ysoftdevs/DependencyCheck.git
synced 2026-03-21 00:29:21 +01:00
added rough rule to look for copy paste errors regarding loggers (i.e. obtaining the logger for the wrong class per PR #247)
Former-commit-id: ca6b2566ea496909ea4ab4f48241bb664b130183
This commit is contained in:
@@ -1,28 +1,61 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
<ruleset name="DependencyCheck Rules"
|
<ruleset name="DependencyCheck Rules"
|
||||||
xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
|
xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0
|
xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0
|
||||||
http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
|
http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
|
||||||
|
|
||||||
<rule name="LoggerChaining"
|
<rule name="LoggerChaining"
|
||||||
message="Logger should be a field, don't chain it"
|
message="Logger should be a field, don't chain it"
|
||||||
class="net.sourceforge.pmd.lang.rule.XPathRule"
|
class="net.sourceforge.pmd.lang.rule.XPathRule"
|
||||||
language="java">
|
language="java">
|
||||||
<description><![CDATA[
|
<description><![CDATA[
|
||||||
Loggers should be created as fields within the class for general
|
Loggers should be created as fields within the class for general
|
||||||
use, rather than chaining the call to getLogger() followed by
|
use, rather than chaining the call to getLogger() followed by
|
||||||
the work on the Logger.
|
the work on the Logger.
|
||||||
]]></description>
|
]]></description>
|
||||||
<properties>
|
<properties>
|
||||||
<property name="xpath">
|
<property name="xpath">
|
||||||
<value><![CDATA[
|
<value><![CDATA[
|
||||||
//PrimaryPrefix[Name/@Image = 'Logger.getLogger' and count(following-sibling::PrimarySuffix) > 2]
|
//PrimaryPrefix[Name/@Image = 'Logger.getLogger' and count(following-sibling::PrimarySuffix) > 2]
|
||||||
]]></value>
|
]]></value>
|
||||||
</property>
|
</property>
|
||||||
</properties>
|
</properties>
|
||||||
<example><![CDATA[
|
<example><![CDATA[
|
||||||
Logger.getLogger(Foo.class).log(Level.FINEST, "Don't do this");
|
Logger.getLogger(Foo.class).log(Level.FINEST, "Don't do this");
|
||||||
]]></example>
|
]]></example>
|
||||||
</rule>
|
</rule>
|
||||||
|
<rule name="LoggingWrongClass"
|
||||||
|
message="The logger is obtained for the wrong class"
|
||||||
|
class="net.sourceforge.pmd.lang.rule.XPathRule"
|
||||||
|
language="java">
|
||||||
|
<description><![CDATA[
|
||||||
|
Loggers should be created as fields within the class for general
|
||||||
|
use, rather than chaining the call to getLogger() followed by
|
||||||
|
the work on the Logger.
|
||||||
|
]]></description>
|
||||||
|
<properties>
|
||||||
|
<property name="xpath">
|
||||||
|
<value><![CDATA[
|
||||||
|
//ClassOrInterfaceDeclaration[.//PrimaryExpression[PrimaryPrefix/Name[@Image = 'Logger.getLogger']]
|
||||||
|
and not(@Image = .//PrimaryExpression[PrimaryPrefix/Name[@Image = 'Logger.getLogger']]
|
||||||
|
/PrimarySuffix
|
||||||
|
/Arguments
|
||||||
|
/ArgumentList
|
||||||
|
/Expression
|
||||||
|
/PrimaryExpression
|
||||||
|
/PrimaryPrefix
|
||||||
|
/ResultType
|
||||||
|
/Type
|
||||||
|
/ReferenceType
|
||||||
|
/ClassOrInterfaceType/@Image
|
||||||
|
)] ]]></value>
|
||||||
|
</property>
|
||||||
|
</properties>
|
||||||
|
<example><![CDATA[
|
||||||
|
public class Foo {
|
||||||
|
Logger LOGGER = Logger.getLogger(Bar.class.getName()); //should be Foo.class
|
||||||
|
}
|
||||||
|
]]></example>
|
||||||
|
</rule>
|
||||||
</ruleset>
|
</ruleset>
|
||||||
|
|||||||
Reference in New Issue
Block a user