PMD – Strict Exceptionルール・セット
厳密な例外に関するルールセットです。
※PMD 3.9に対応しています。
AvoidCatchingThrowable
Throwableをcatchしていないかチェックします。
Throwableをcatchしてしまうと、OutOfMemoryErrorのような例外もcatchしてしまいます。
public class Foo { public void bar() { try { // … } catch (Throwable th) { // ThrowableはcatchすべきではないのでNG! th.printStackTrace(); } } }
SignatureDeclareThrowsException
Exceptionをthrowしているメソッドがないかチェックします。
// ExceptionをthrowすべきではないのでNG public void methodThrowingException() throws Exception { // … }
ExceptionAsFlowControl
GOTO文のように例外を使用していないかチェックします。
public class Foo { void bar() { try { try { // … } catch (Exception e) { // GOTO文のように // WrapperExceptionのcatchブロックへ処理が移る throw new WrapperException(e); } } catch (WrapperException e) { // … } } }
AvoidCatchingNPE
NullPointerExceptionがcatchされていないかチェックします。
public class Foo { void bar() { try { // … } catch (NullPointerException npe) { // NullPointerExceptionがcatchされているのでNG! } } }
AvoidThrowingRawExceptionTypes
RuntimeException、Throwable、Exception、Errorがthrowされていないかチェックします。
通常はこれらのサブクラスをthrowすべきです。
public class Foo { public void bar() throws Exception { // ExceptionがthrowされているのでNG! throw new Exception(); } }
AvoidThrowingNullPointerException
NullPointerExceptionをthrowしていないかチェックします。
NullPointerExceptionはJVMがthrowするものなので、明示的に記述すべきではありません。
public class Foo { void bar() { // NullPointerExceptionが明示的にthrowされているのでNG! throw new NullPointerException(); } }
AvoidRethrowingException
catchブロックで例外をそのままthrowしていないかチェックします。
public class Foo { void bar() { try { // … } catch (SomeException se) { // そのままthrowしているだけなのでNG! throw se; } } }
関連記事
コメント 0