From d9f35f2eb00bedebcedddb8f9cfc10f62f03270c Mon Sep 17 00:00:00 2001 From: "PARAMESH.N" Date: Sun, 15 Feb 2026 20:24:13 +0530 Subject: [PATCH 1/2] Add mustcall annotations to ResultSet interface All ResultSet and RowSet implementations, both connected and disconnected, should be explicitly closed. Connected types release live database resources such as connections and cursors, while disconnected types still hold internal resources that should not be left to garbage collection, especially in long running applications. --- src/java.sql/share/classes/java/sql/ResultSet.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/java.sql/share/classes/java/sql/ResultSet.java b/src/java.sql/share/classes/java/sql/ResultSet.java index 4534bd8e537be..f83e796aef7f4 100644 --- a/src/java.sql/share/classes/java/sql/ResultSet.java +++ b/src/java.sql/share/classes/java/sql/ResultSet.java @@ -26,6 +26,7 @@ package java.sql; import org.checkerframework.checker.nullness.qual.Nullable; +import org.checkerframework.checker.mustcall.qual.InheritableMustCall; import org.checkerframework.framework.qual.AnnotatedFor; import java.math.BigDecimal; @@ -149,7 +150,8 @@ * @since 1.1 */ -@AnnotatedFor("nullness") +@AnnotatedFor({"nullness", "mustcall"}) +@InheritableMustCall("close") public interface ResultSet extends Wrapper, AutoCloseable { /** From f6e09ddedd5ff64e4af6361ba5efcee423014c37 Mon Sep 17 00:00:00 2001 From: "PARAMESH.N" Date: Sun, 15 Feb 2026 20:31:25 +0530 Subject: [PATCH 2/2] Add must call annotations for Statement Statement owns independent JDBC resources and must be explicitly closed. Relying on Connection.close() is unsafe (e.g., with connection pooling) and not clearly guaranteed by the JDBC specification. Annotating Statement enables sound resource-leak detection and reflects recommended JDBC usage. --- src/java.sql/share/classes/java/sql/Statement.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/java.sql/share/classes/java/sql/Statement.java b/src/java.sql/share/classes/java/sql/Statement.java index f62a6ef545008..af068ab8ee883 100644 --- a/src/java.sql/share/classes/java/sql/Statement.java +++ b/src/java.sql/share/classes/java/sql/Statement.java @@ -28,6 +28,9 @@ import org.checkerframework.checker.sqlquotes.qual.SqlEvenQuotes; import org.checkerframework.checker.tainting.qual.Untainted; +import org.checkerframework.checker.mustcall.qual.InheritableMustCall; +import org.checkerframework.framework.qual.AnnotatedFor; + import java.util.regex.Pattern; import static java.util.stream.Collectors.joining; @@ -47,6 +50,8 @@ * @see ResultSet * @since 1.1 */ +@AnnotatedFor({"mustcall"}) +@InheritableMustCall("close") public interface Statement extends Wrapper, AutoCloseable { /**