[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:
@ -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"
|
||||
|
@ -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");
|
||||
|
@ -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>
|
Reference in New Issue
Block a user