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;
        }
    }
}

関連記事

  1. コメント 0

  1. トラックバック 0

return top