28591


以下のJavaのソースコードでFindBugsを実行すると、  
カテゴリー CORRECTNESS - タイプ NP_NULL_ON_SOME_PATH  
の警告が検出できると思っていましたが、実際には検出できませんでした。

[EmpService.java]

[code]

    private void hoge(){
        // ~略~
        String emp_code = EmpUtil.getEmp(foo).getEmpCode(); // この行に警告を出して欲しかった。
        // ~略~
    }
    
[/code]

[EmpUtil.java]

※回答ありがとうございます。  
最初に、少し端折ってサンプルソースを書いてしまったので、もう少しありのままのコードを書きます。

[code]

    public static Emp getEmp(String foo) {
        SelectedData lineCodeData = getLineCode(foo);
        if (lineCodeData == null) {
            return null;
        }
        String lineCode = lineCodeData.getData();
        Emp emp = getLineRecord(lineCode);
        if (emp == null) {
            return null;
        }
        Emp retEmp = new Emp();
        retEmp.setLine_cd(lineCode);
        retEmp.setLine_nm(emp.getLine_nm());
        return retEmp;
    }
    
[/code]

[環境]  
実行環境：Eclipse(ver:4.4.2)のFindBugsフィーチャー(ver:3.0.1.20150306)  
FindBugsの設定：報告する最小ランク=20、レポートする最低の信頼度=Low  
JDK：1.7

この場合は検出されないものでしょうか。


CC BY-SA 3.0
2016-08-30T01:10:08.963
28570
2016-08-31T01:32:21.263
2016-08-30T03:51:34.147
18643
18643
question
java eclipse
FindBugsで潜在的なNullPointerExceptionを検出できなかった


`findByName`メソッド内のコードがどのようになっているのかが判断できないので正確な回答はできませんが、FindBugsは静的解析ツールですので、実行しないとnullになるかどうかわからないコードはFindBugsの能力の範囲外であり、検出はできません。

例えば、`findByName`メソッド内のコードが下記のような場合は、  
`findByName`メソッドがnullを返す可能性があるので検出される可能性があります。

[code]

    if (foo.eqauals("foo")) {
        return new Emp();
    }
    else {
        return null;
    }
    
[/code]


CC BY-SA 3.0
2016-08-30T02:02:49.060
28574
2016-08-30T02:02:49.060
10724
28570
answer


FindBugsでは、単独のJava（クラス）ファイル内部のみを検索対象としています。  
複数Java（クラス）ファイルをまたがってチェックを行いたい場合は、別のツールを利用する必要があります。

有償ツールでいば、

  * jtest 
    * フロー解析と呼ばれている部分がそれに相当します。
  * coverity

などが有名です。

OSSツールでは、

  * infer（facebook社製）

などがあります。


CC BY-SA 3.0
2016-08-31T01:32:21.263
28591
2016-08-31T01:32:21.263
3355
28570
answer