[java] Add DoNotExtendJavaLangThrowable rule

Copy and pasted code from DoNotExtendJavaLangError rule.

Resolves #367
https://github.com/pmd/pmd/issues/367
This commit is contained in:
Robert Painsi
2017-10-14 15:59:14 +02:00
parent 598c7910a3
commit 82b219428b
5 changed files with 88 additions and 1 deletions

View File

@ -243,6 +243,31 @@ public class Foo extends Error { }
]]></example>
</rule>
<rule name="DoNotExtendJavaLangThrowable"
language="java"
since="6.0"
message="Exceptions should not extend java.lang.Throwable"
class="net.sourceforge.pmd.lang.rule.XPathRule"
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_strictexception.html#donotextendjavalangthrowable">
<description>
Extend Exception or RuntimeException instead of Throwable.
</description>
<priority>3</priority>
<properties>
<property name="xpath">
<value>
<![CDATA[
//ClassOrInterfaceDeclaration/ExtendsList/ClassOrInterfaceType
[@Image="Throwable" or @Image="java.lang.Throwable"]
]]>
</value>
</property>
</properties>
<example><![CDATA[
public class Foo extends Throwable { }
]]></example>
</rule>
<rule name="DoNotThrowExceptionInFinally"
language="java"
since="4.2"

View File

@ -21,6 +21,7 @@ public class StrictExceptionRulesTest extends SimpleAggregatorTst {
addRule(RULESET, "AvoidThrowingNullPointerException");
addRule(RULESET, "AvoidThrowingRawExceptionTypes");
addRule(RULESET, "DoNotExtendJavaLangError");
addRule(RULESET, "DoNotExtendJavaLangThrowable");
addRule(RULESET, "ExceptionAsFlowControl");
addRule(RULESET, "SignatureDeclareThrowsException");
addRule(RULESET, "DoNotThrowExceptionInFinally");

View File

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<test-data
xmlns="http://pmd.sourceforge.net/rule-tests"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd">
<test-code>
<description><![CDATA[
Extends with fully qualified name
]]></description>
<expected-problems>1</expected-problems>
<code><![CDATA[
public class Foo extends java.lang.Throwable {
}
]]></code>
</test-code>
<test-code>
<description><![CDATA[
Extends with implicit import
]]></description>
<expected-problems>1</expected-problems>
<code><![CDATA[
public class Foo extends Throwable {
}
]]></code>
</test-code>
<test-code>
<description><![CDATA[
Extends something else
]]></description>
<expected-problems>0</expected-problems>
<code><![CDATA[
public class Foo extends FooThrowable {
}
]]></code>
</test-code>
</test-data>