Migrate sqlite to use JSpecify annotations

CL created by running `development/jspecify_update.py sqlite`

We are updating all AndroidX libraries to use the Jspecify nullness annotations (https://docs.google.com/document/d/1XjainD032hUdCfgXIzRThHvP9FJANYuocKaTDXWuLXo/edit?usp=sharing)

Bug: 326456246
Test: `checkApi`, `lint`, `runErrorProne`
Relnote: "This library now uses [JSpecify nullness annotations](https://jspecify.dev/), which are type-use. Kotlin developers should use the following compiler arguments to enforce correct usage: -Xjspecify-annotations=strict, -Xtype-enhancement-improvements-strict-mode"
Change-Id: I9e70d0aa195089a7f59c41f43a6a01ec9eca9643
diff --git a/sqlite/sqlite-inspection/build.gradle b/sqlite/sqlite-inspection/build.gradle
index 7f8acbb..be0a598 100644
--- a/sqlite/sqlite-inspection/build.gradle
+++ b/sqlite/sqlite-inspection/build.gradle
@@ -32,6 +32,7 @@
 }
 
 dependencies {
+    api(libs.jspecify)
     api("androidx.annotation:annotation:1.8.1")
     compileOnly(project(":inspection:inspection"))
 
@@ -51,8 +52,6 @@
     // the inspection protocol, which is alpha
     inceptionYear = "2019"
     description = "The implementation of SQLite Inspector."
-    // TODO: b/326456246
-    optOutJSpecify = true
 }
 
 android {
diff --git a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/DatabaseExtensions.java b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/DatabaseExtensions.java
index d3d98b9..9bcffcf 100644
--- a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/DatabaseExtensions.java
+++ b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/DatabaseExtensions.java
@@ -18,7 +18,7 @@
 
 import android.database.sqlite.SQLiteDatabase;
 
-import androidx.annotation.NonNull;
+import org.jspecify.annotations.NonNull;
 
 import java.io.File;
 import java.util.Objects;
diff --git a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/DatabaseLockRegistry.java b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/DatabaseLockRegistry.java
index 3f4b9af..eee1078 100644
--- a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/DatabaseLockRegistry.java
+++ b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/DatabaseLockRegistry.java
@@ -20,11 +20,12 @@
 import android.os.CancellationSignal;
 
 import androidx.annotation.GuardedBy;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
 import androidx.sqlite.inspection.SqliteInspector.DatabaseConnection;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.Executor;
@@ -48,7 +49,7 @@
     // A dedicated thread required as database transactions are tied to a thread. In order to
     // release a lock, we need to use the same thread as the one we used to establish the lock.
     // Thread names need to start with 'Studio:' as per some framework limitations.
-    @NonNull private final Executor mExecutor =
+    private final @NonNull Executor mExecutor =
             Executors.newSingleThreadExecutor(new ThreadFactory() {
                 @Override
                 public Thread newThread(Runnable r) {
diff --git a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/DatabaseRegistry.java b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/DatabaseRegistry.java
index ec47a8f..87e4a3f 100644
--- a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/DatabaseRegistry.java
+++ b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/DatabaseRegistry.java
@@ -23,8 +23,9 @@
 import android.util.ArraySet;
 
 import androidx.annotation.GuardedBy;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
+
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
 
 import java.util.HashMap;
 import java.util.Iterator;
@@ -250,8 +251,7 @@
      * Consumer of this method must release the reference when done using it.
      * Thread-safe
      */
-    @Nullable
-    SQLiteDatabase getConnection(int databaseId) {
+    @Nullable SQLiteDatabase getConnection(int databaseId) {
         synchronized (mLock) {
             return getConnectionImpl(databaseId);
         }
diff --git a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/EntryExitMatchingHookRegistry.java b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/EntryExitMatchingHookRegistry.java
index 8e6aa48..473c4c1 100644
--- a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/EntryExitMatchingHookRegistry.java
+++ b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/EntryExitMatchingHookRegistry.java
@@ -16,12 +16,13 @@
 
 package androidx.sqlite.inspection;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.inspection.ArtTooling.EntryHook;
 import androidx.inspection.ArtTooling.ExitHook;
 import androidx.inspection.InspectorEnvironment;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.util.ArrayDeque;
 import java.util.Deque;
 import java.util.List;
@@ -44,9 +45,8 @@
     EntryExitMatchingHookRegistry(InspectorEnvironment environment) {
         mEnvironment = environment;
         mFrameStack = new ThreadLocal<Deque<Frame>>() {
-            @NonNull
             @Override
-            protected Deque<Frame> initialValue() {
+            protected @NonNull Deque<Frame> initialValue() {
                 return new ArrayDeque<>();
             }
         };
diff --git a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/RoomInvalidationRegistry.java b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/RoomInvalidationRegistry.java
index 566c732..d987c3f 100644
--- a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/RoomInvalidationRegistry.java
+++ b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/RoomInvalidationRegistry.java
@@ -19,10 +19,11 @@
 import android.annotation.SuppressLint;
 import android.util.Log;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.inspection.InspectorEnvironment;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.lang.ref.WeakReference;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
@@ -45,14 +46,12 @@
     /**
      * Might be null if application does not ship with Room.
      */
-    @Nullable
-    private final InvalidationTrackerInvoker mInvoker;
+    private final @Nullable InvalidationTrackerInvoker mInvoker;
 
     /**
      * The list of InvalidationTracker instances.
      */
-    @Nullable
-    private List<WeakReference<?>> mInvalidationInstances = null;
+    private @Nullable List<WeakReference<?>> mInvalidationInstances = null;
 
     RoomInvalidationRegistry(InspectorEnvironment environment) {
         mEnvironment = environment;
@@ -85,8 +84,7 @@
         mInvalidationInstances = null;
     }
 
-    @NonNull
-    private List<WeakReference<?>> getInvalidationTrackerInstances() {
+    private @NonNull List<WeakReference<?>> getInvalidationTrackerInstances() {
         List<WeakReference<?>> cached = mInvalidationInstances;
         if (cached != null) {
             return cached;
@@ -105,8 +103,7 @@
         return cached;
     }
 
-    @Nullable
-    private InvalidationTrackerInvoker findInvalidationTrackerClass() {
+    private @Nullable InvalidationTrackerInvoker findInvalidationTrackerClass() {
         try {
             ClassLoader classLoader = RoomInvalidationRegistry.class.getClassLoader();
             if (classLoader != null) {
@@ -124,8 +121,7 @@
      */
     static class InvalidationTrackerInvoker {
         public final Class<?> invalidationTrackerClass;
-        @Nullable
-        private final Method mRefreshMethod;
+        private final @Nullable Method mRefreshMethod;
 
         InvalidationTrackerInvoker(Class<?> invalidationTrackerClass) {
             this.invalidationTrackerClass = invalidationTrackerClass;
diff --git a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/SqlDelight2Invalidation.java b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/SqlDelight2Invalidation.java
index 5598d1a..19e6c4e 100644
--- a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/SqlDelight2Invalidation.java
+++ b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/SqlDelight2Invalidation.java
@@ -19,9 +19,10 @@
 import android.annotation.SuppressLint;
 import android.util.Log;
 
-import androidx.annotation.NonNull;
 import androidx.inspection.ArtTooling;
 
+import org.jspecify.annotations.NonNull;
+
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.util.Map;
diff --git a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/SqlDelightInvalidation.java b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/SqlDelightInvalidation.java
index e37adfe..a012621 100644
--- a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/SqlDelightInvalidation.java
+++ b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/SqlDelightInvalidation.java
@@ -19,9 +19,10 @@
 import android.annotation.SuppressLint;
 import android.util.Log;
 
-import androidx.annotation.NonNull;
 import androidx.inspection.ArtTooling;
 
+import org.jspecify.annotations.NonNull;
+
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.Objects;
@@ -37,8 +38,7 @@
     private final @NonNull Class<?> mQueryClass;
     private final @NonNull Method mNotifyDataChangeMethod;
 
-    @NonNull
-    static Invalidation create(@NonNull ArtTooling artTooling) {
+    static @NonNull Invalidation create(@NonNull ArtTooling artTooling) {
         ClassLoader classLoader = SqlDelightInvalidation.class.getClassLoader();
         Objects.requireNonNull(classLoader);
         try {
diff --git a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/SqliteInspector.java b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/SqliteInspector.java
index c29c45f..e043571 100644
--- a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/SqliteInspector.java
+++ b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/SqliteInspector.java
@@ -43,8 +43,6 @@
 import android.os.CancellationSignal;
 import android.util.Log;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.inspection.ArtTooling;
 import androidx.inspection.ArtTooling.EntryHook;
 import androidx.inspection.ArtTooling.ExitHook;
@@ -81,6 +79,9 @@
 
 import com.google.protobuf.ByteString;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.io.File;
 import java.io.PrintWriter;
 import java.io.StringWriter;
@@ -211,7 +212,7 @@
     }
 
     @Override
-    public void onReceiveCommand(@NonNull byte[] data, @NonNull CommandCallback callback) {
+    public void onReceiveCommand(byte @NonNull [] data, @NonNull CommandCallback callback) {
         try {
             Command command = Command.parseFrom(data);
             switch (command.getOneOfCase()) {
@@ -688,7 +689,7 @@
 
     @SuppressLint("Recycle") // For: "The cursor should be freed up after use with #close"
     private static Cursor rawQuery(@NonNull SQLiteDatabase database, @NonNull String queryText,
-            @NonNull final String[] params, @Nullable CancellationSignal cancellationSignal) {
+            final String @NonNull [] params, @Nullable CancellationSignal cancellationSignal) {
         SQLiteDatabase.CursorFactory cursorFactory = new SQLiteDatabase.CursorFactory() {
             @Override
             public Cursor newCursor(SQLiteDatabase db, SQLiteCursorDriver driver,
@@ -710,8 +711,7 @@
                 cancellationSignal);
     }
 
-    @NonNull
-    private static String[] parseQueryParameterValues(QueryCommand command) {
+    private static String @NonNull [] parseQueryParameterValues(QueryCommand command) {
         String[] params = new String[command.getQueryParameterValuesCount()];
         for (int i = 0; i < command.getQueryParameterValuesCount(); i++) {
             QueryParameterValue param = command.getQueryParameterValues(i);
@@ -745,8 +745,8 @@
      *
      * @return null if no database found for the provided id. A database reference otherwise.
      */
-    @Nullable
-    private DatabaseConnection acquireConnection(int databaseId, CommandCallback callback) {
+    private @Nullable DatabaseConnection acquireConnection(int databaseId,
+            CommandCallback callback) {
         DatabaseConnection connection = mDatabaseLockRegistry.getConnection(databaseId);
         if (connection != null) {
             // With WAL enabled, we prefer to use the IO executor. With WAL off we don't have a
@@ -951,8 +951,7 @@
                 .build();
     }
 
-    @NonNull
-    private static String stackTraceFromException(Exception exception) {
+    private static @NonNull String stackTraceFromException(Exception exception) {
         StringWriter writer = new StringWriter();
         exception.printStackTrace(new PrintWriter(writer));
         return writer.toString();
@@ -970,8 +969,8 @@
      * needs to run queries on the thread that locked it.
      */
     static final class DatabaseConnection {
-        @NonNull final SQLiteDatabase mDatabase;
-        @NonNull final Executor mExecutor;
+        final @NonNull SQLiteDatabase mDatabase;
+        final @NonNull Executor mExecutor;
 
         DatabaseConnection(@NonNull SQLiteDatabase database, @NonNull Executor executor) {
             mDatabase = database;
diff --git a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/SqliteInspectorFactory.java b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/SqliteInspectorFactory.java
index db69c72..e3d2f01 100644
--- a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/SqliteInspectorFactory.java
+++ b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/SqliteInspectorFactory.java
@@ -16,11 +16,12 @@
 
 package androidx.sqlite.inspection;
 
-import androidx.annotation.NonNull;
 import androidx.inspection.Connection;
 import androidx.inspection.InspectorEnvironment;
 import androidx.inspection.InspectorFactory;
 
+import org.jspecify.annotations.NonNull;
+
 /**
  * Factory for SqliteInspector
  */
@@ -32,9 +33,8 @@
         super(SQLITE_INSPECTOR_ID);
     }
 
-    @NonNull
     @Override
-    public SqliteInspector createInspector(@NonNull Connection connection,
+    public @NonNull SqliteInspector createInspector(@NonNull Connection connection,
             @NonNull InspectorEnvironment environment) {
         return new SqliteInspector(connection, environment);
     }