2009-07-19 30 views
0

は、私は次のJUnitのテストがあります。PMDルールDataflowAnomalyAnalysis奇数判定は

@Test 
public void testRunLocalhost() throws IOException, InterruptedException { 
    // Start an AnnouncerThread 
    final AnnouncerThread announcer = new AnnouncerThread(); 
    announcer.start(); 

    // Create the socket and listen on the right port. 
    final DatagramSocket socket = new DatagramSocket(); 
    assert(socket != null); 

    // Create a packet to send. 
    final DatagramPacket packet = new DatagramPacket(new byte[0], 0, InetAddress.getByName(AnnouncerThread.GROUP), AnnouncerThread.PORT); 
    assert(packet != null); 

    // Send the packet. 
    socket.send(packet); 

    // Listen for the IP from the server. 
    final DatagramPacket receivedPacket = new DatagramPacket(new byte[256], 256); 
    socket.setSoTimeout(2000); // Only wait 2 seconds. 
    socket.receive(receivedPacket); 
    socket.close(); 

    // Get localhost's address. 
    final InetAddress localhost = InetAddress.getLocalHost(); 
    assert(localhost != null); 

    // Compare the receive IP to the localhost IP. 
    final String receivedIP = new String(receivedPacket.getData()); 
    if (!receivedIP.startsWith(localhost.getHostAddress())) { 
     fail("Received IP: '" + receivedIP + "' not the same as localhost: '" + localhost.getHostAddress() + "'"); 
    } 

    announcer.shutdown(); 
    announcer.join(); 
} 

をそしてPMDは以下の違反与える:私のファイルに

Found 'UR'-anomaly for variable 'socket' (lines '36'-'36'). 
Found 'UR'-anomaly for variable 'localhost' (lines '36'-'36'). 
Found 'UR'-anomaly for variable 'packet' (lines '36'-'36'). 

ライン36をメソッドが定義されている行です。

public void testRunLocalhost() throws IOException, InterruptedException { 

違反の内容を理解できません。これらの3つの変数はどこで定義する必要がありますか?なぜアナウンサースレッドは違反していませんでしたか?宣言は無駄に再注文しようとしたのと同じ方法で宣言されています。

答えて

3

最後の3つの変数を割り当てた直後に、assertの呼び出しと関係があると思われます。

PMDのドキュメント(http://pmd.sourceforge.net/rules/controversial.html#DataflowAnomalyAnalysis)は言う:

UR - 異常を:アサートを削除する

+0

が違反を処分したの前に定義されていませんでした変数への参照があります。 –

+0

はPMDのバグですか? –

+0

はい、 'DataflowAnomalyAnalysis'はかなり古くなっています。この特定のアサルトに関する問題は[最近修正され、PMD 6.0.0の一部となりました](https://github.com/pmd/pmd/pull/420)、まだ[懸案事項が残っています](https ://github.com/pmd/pmd/labels/in%3Adata-flow) – Johnco

0

これはかなり奇妙に見えます。興味深いことに、 'new'で割り当てられたオブジェクトに対して定義されている3つの変数すべてに対して発生し、ヌルネスをチェックします。私は 'new'の結果が常に有効/無効でないと期待します。そうでなければOutOfMemoryExceptionがスローされます。それは問題なのだろうか?