javaeclipsecompiler-warningssuppress-warningsdead-code

Dead code warning in Eclipse - is this a bug in Eclipse? Or me overlooking something obvious?


With this (simplified) code example Eclipse (Kepler SR2) gives a warning for the innermost if-statement (if (con != null)), dead code.

public class DbManager {
    public String getSingleString(String query) throws SQLException {
        DbManager dbmgr = new DbManager();
        Connection con = null;
        try {
            con = dbmgr.getConnection("user", "pwd", URL);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
            if (con != null) {
                PreparedStatement pstmt = null;
                ResultSet rset = null;
                pstmt = con.prepareStatement(query.toString());
                rset = pstmt.executeQuery();
                if (rset != null && rset.next()) {
                    return (rset.getString(1));
                }
            }
        }
        return null;
    }
}

Typically the database connection defined on the line after the try will create a connection and then the offending if-statement will be true. Is the warning about dead code really correct?


Solution

  • If the connection is successfully created, then that catch statement will never be called so it is dead code, try rearranging it to:

    try {
        con = dbmgr.getConnection("user", "pwd", URL);
        //if (con != null) { <-- not required because of the try and catch
        PreparedStatement pstmt = null;
        ResultSet rset = null;
        pstmt = con.prepareStatement(query.toString());
        rset = pstmt.executeQuery();
        if (rset != null && rset.next()) {
            return (rset.getString(1));
        }
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    }