Skip to content

[java] LawOfDemeter: False negative with Try-resource block treated as function call by rule #2192

@linusjf

Description

@linusjf

Affects PMD Version:
6.20.0.
Rule:
LawOfDemeter

Description:
False negative. Object created elsewhere is not flagged within try-resource block but is flagged outside of it.

Code Sample demonstrating the issue:

package pmdtests;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

// @WebServlet("/DbServlet")
public class DbServlet extends HttpServlet {
  private static final long serialVersionUID = 1L;
  private static final String URL = "jdbc:derby:HomeDB";
  private transient Connection link;

  public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    response.setContentType("text/HTML");
    PrintWriter out = response.getWriter();
    
    try (Statement statement = link.createStatement();
         ResultSet results = statement.executeQuery("SELECT * FROM PhoneNums");) {
      
      while (results.next()) {
        out.println("<TR>");
        out.println("<TD>");
        out.println(results.getString("Surname"));
        out.println("</TD>");
        out.println("<TD>");
        out.println(results.getString("Forenames"));
        out.println("</TD>");
        out.println("<TD>");
        out.println(results.getString("PhoneNum"));
        out.println("</TD>");
        out.println("</TR>");
      }
      out.println("</TABLE>");
    } catch (SQLException sqlEx) {
      printHtmlSelectError(out);
      return;
    }
    out.println("<BODY>");
    out.println("</HTML>");
    out.flush();
  }
}

Running PMD through: [CLI | Ant | Maven | Gradle | Designer | Other]

Metadata

Metadata

Assignees

No one assigned

    Labels

    a:false-negativePMD doesn't flag a problematic piece of code

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions