Avoid NPE when trying to delete changes for a project

After I5babf38b0, trying to delete a project fails in some occasions
with a NPE when trying to open a connection to ReviewDb [1].

Using the ReviewDb provider to get an instance fixes the issue.

[1] https://pastebin.com/9qf9Sntn

Change-Id: I33d4cb86742df536f73c22ee67d0a2c6505d69f3
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/database/DatabaseDeleteHandler.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/database/DatabaseDeleteHandler.java
index b7b09c4..4c2c116 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/database/DatabaseDeleteHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/database/DatabaseDeleteHandler.java
@@ -66,7 +66,7 @@
 public class DatabaseDeleteHandler {
   private static final Logger log = LoggerFactory.getLogger(DatabaseDeleteHandler.class);
 
-  private final ReviewDb db;
+  private final Provider<ReviewDb> dbProvider;
   private final Provider<InternalChangeQuery> queryProvider;
   private final GitRepositoryManager repoManager;
   private final SubmoduleOp.Factory subOpFactory;
@@ -79,7 +79,7 @@
 
   @Inject
   public DatabaseDeleteHandler(
-      ReviewDb db,
+      Provider<ReviewDb> dbProvider,
       Provider<InternalChangeQuery> queryProvider,
       GitRepositoryManager repoManager,
       SubmoduleOp.Factory subOpFactory,
@@ -91,7 +91,7 @@
       Provider<WatchConfig.Accessor> watchConfig) {
     this.accountQueryProvider = accountQueryProvider;
     this.watchConfig = watchConfig;
-    this.db = ReviewDbUtil.unwrapDb(db);
+    this.dbProvider = dbProvider;
     this.queryProvider = queryProvider;
     this.repoManager = repoManager;
     this.subOpFactory = subOpFactory;
@@ -116,6 +116,7 @@
   public void delete(Project project) throws OrmException {
     // TODO(davido): Why not to use 1.7 features?
     // http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.20.3.2
+    ReviewDb db = ReviewDbUtil.unwrapDb(dbProvider.get());
     Connection conn = ((JdbcSchema) db).getConnection();
     try {
       conn.setAutoCommit(false);
@@ -128,7 +129,7 @@
         while (resultSet.next()) {
           changeIds.add(new Change.Id(resultSet.getInt(1)));
         }
-        atomicDelete(project, changeIds);
+        atomicDelete(db, project, changeIds);
         conn.commit();
       } finally {
         conn.setAutoCommit(true);
@@ -143,7 +144,7 @@
     }
   }
 
-  private final void deleteChanges(Project.NameKey project, List<Change.Id> changeIds)
+  private final void deleteChanges(ReviewDb db, Project.NameKey project, List<Change.Id> changeIds)
       throws OrmException {
 
     for (Change.Id id : changeIds) {
@@ -152,10 +153,9 @@
       } catch (NoSuchChangeException e) {
         // we can ignore the exception during delete
       }
-      ResultSet<PatchSet> patchSets = null;
-      patchSets = db.patchSets().byChange(id);
+      ResultSet<PatchSet> patchSets = db.patchSets().byChange(id);
       if (patchSets != null) {
-        deleteFromPatchSets(patchSets);
+        deleteFromPatchSets(db, patchSets);
       }
 
       // In the future, use schemaVersion to decide what to delete.
@@ -174,7 +174,8 @@
     }
   }
 
-  private final void deleteFromPatchSets(final ResultSet<PatchSet> patchSets) throws OrmException {
+  private final void deleteFromPatchSets(ReviewDb db, final ResultSet<PatchSet> patchSets)
+      throws OrmException {
     for (PatchSet patchSet : patchSets) {
       accountPatchReviewStore.get().clearReviewed(patchSet.getId());
       db.patchSets().delete(Collections.singleton(patchSet));
@@ -204,9 +205,10 @@
     }
   }
 
-  public void atomicDelete(Project project, List<Change.Id> changeIds) throws OrmException {
+  public void atomicDelete(ReviewDb db, Project project, List<Change.Id> changeIds)
+      throws OrmException {
 
-    deleteChanges(project.getNameKey(), changeIds);
+    deleteChanges(db, project.getNameKey(), changeIds);
 
     for (AccountState a : accountQueryProvider.get().byWatchedProject(project.getNameKey())) {
       Account.Id accountId = a.getAccount().getId();