Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 60 additions & 0 deletions checker/tests/resourceleak/JdbcResourceLeak.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
// Tests for JDBC types resource leak detection
// Test case for issue 6354:
// https://github.com/typetools/checker-framework/issues/6354

import java.sql.*;

class JdbcResourceLeak {

// ========== ResultSet Tests ==========

void resultSetNotClosed(Statement stmt) throws SQLException {
ResultSet rs = stmt.executeQuery("SELECT 1");
// :: error: (required.method.not.called)
}

void resultSetClosed(Statement stmt) throws SQLException {
ResultSet rs = stmt.executeQuery("SELECT 1");
rs.close();
}

// ========== Statement Tests ==========

void statementNotClosed(Connection conn) throws SQLException {
Statement stmt = conn.createStatement();
// :: error: (required.method.not.called)
}

void statementClosed(Connection conn) throws SQLException {
Statement stmt = conn.createStatement();
stmt.close();
}

// ========== PreparedStatement Tests ==========

void preparedStatementNotClosed(Connection conn) throws SQLException {
PreparedStatement ps = conn.prepareStatement("SELECT ?");
// :: error: (required.method.not.called)
}

void preparedStatementClosed(Connection conn) throws SQLException {
PreparedStatement ps = conn.prepareStatement("SELECT ?");
ps.close();
}

// ========== Nested Resources ==========

void nestedBothClosed(Connection conn) throws SQLException {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT 1");
rs.close();
stmt.close();
}

void nestedStatementNotClosed(Connection conn) throws SQLException {
Statement stmt = conn.createStatement();
// :: error: (required.method.not.called)
ResultSet rs = stmt.executeQuery("SELECT 1");
rs.close();
}
}
84 changes: 84 additions & 0 deletions checker/tests/resourceleak/RowSetResourceLeak.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
// Tests for RowSet types resource leak detection
// Test case for issue 6354:
// https://github.com/typetools/checker-framework/issues/6354

import javax.sql.rowset.*;
import com.sun.rowset.*;
import java.sql.*;

class RowSetResourceLeak {

// ========== JdbcRowSet Tests ==========

void jdbcRowSetNotClosed(ResultSet rs) throws SQLException {
JdbcRowSet jrs = new JdbcRowSetImpl(rs);
// :: error: (required.method.not.called)
}

void jdbcRowSetClosed(ResultSet rs) throws SQLException {
JdbcRowSet jrs = new JdbcRowSetImpl(rs);
jrs.close();
}

// ========== CachedRowSet Tests ==========

void cachedRowSetNotClosed() throws SQLException {
CachedRowSet crs = new CachedRowSetImpl();
// :: error: (required.method.not.called)
}

void cachedRowSetClosed() throws SQLException {
CachedRowSet crs = new CachedRowSetImpl();
crs.close();
}

void cachedRowSetToResultSetNotClosed() throws SQLException {
CachedRowSet crs = new CachedRowSetImpl();
ResultSet rs = crs.toResultSet();
// :: error: (required.method.not.called)
crs.close();
}

void cachedRowSetToResultSetBothClosed() throws SQLException {
CachedRowSet crs = new CachedRowSetImpl();
ResultSet rs = crs.toResultSet();
rs.close();
crs.close();
}

// ========== FilteredRowSet Tests ==========

void filteredRowSetNotClosed() throws SQLException {
FilteredRowSet frs = new FilteredRowSetImpl();
// :: error: (required.method.not.called)
}

void filteredRowSetClosed() throws SQLException {
FilteredRowSet frs = new FilteredRowSetImpl();
frs.close();
}

// ========== WebRowSet Tests ==========

void webRowSetNotClosed() throws SQLException {
WebRowSet wrs = new WebRowSetImpl();
// :: error: (required.method.not.called)
}

void webRowSetClosed() throws SQLException {
WebRowSet wrs = new WebRowSetImpl();
wrs.close();
}

// ========== JoinRowSet Tests ==========

void joinRowSetNotClosed() throws SQLException {
JoinRowSet jrs = new JoinRowSetImpl();
// :: error: (required.method.not.called)
}

void joinRowSetClosed() throws SQLException {
JoinRowSet jrs = new JoinRowSetImpl();
jrs.close();
}
}
Loading