は、私は次の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つの変数はどこで定義する必要がありますか?なぜアナウンサースレッドは違反していませんでしたか?宣言は無駄に再注文しようとしたのと同じ方法で宣言されています。
が違反を処分したの前に定義されていませんでした変数への参照があります。 –
はPMDのバグですか? –
はい、 'DataflowAnomalyAnalysis'はかなり古くなっています。この特定のアサルトに関する問題は[最近修正され、PMD 6.0.0の一部となりました](https://github.com/pmd/pmd/pull/420)、まだ[懸案事項が残っています](https ://github.com/pmd/pmd/labels/in%3Adata-flow) – Johnco