title: PMD rule DataflowAnomalyAnalysis oddness
body: <p>I have the following JUnit test:</p>
  
  <pre><code>@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();
  }
  </code></pre>
  
  <p>And PMD gives the following violations:</p>
  
  <pre><code>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').
  </code></pre>
  
  <p>Line 36 in my file is the line the method is defined:</p>
  
  <pre><code>public void testRunLocalhost() throws IOException, InterruptedException {
  </code></pre>
  
  <p>I don't understand what the violations are saying. Where should I defining those three variables? Why wasn't the AnnouncerThread in the violations? It's declared the same way I've tried re-ordering the declarations to no avail.</p>