Use auto-closable RevWalk, TreeWalk and Repository

Change-Id: Iaa1f28626b010cd17d05cf464b1350b9df7909f3
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java
index 5b05218..c4036d0 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java
@@ -109,38 +109,30 @@
   @Override
   public Resource load(String strKey) throws Exception {
     XDocResourceKey key = XDocResourceKey.fromString(strKey);
-    try {
+    try (Repository repo = repoManager.openRepository(key.getProject())) {
       FormatterProvider formatter = getFormatter(key.getFormatter());
-      Repository repo = repoManager.openRepository(key.getProject());
-      try {
-        RevWalk rw = new RevWalk(repo);
-        try {
-          String html = null;
-          if (key.getRevId() != null) {
-            html = loadHtml(formatter, repo, rw, key, key.getRevId());
-          }
-
-          if (key.getDiffMode() != DiffMode.NO_DIFF) {
-            String htmlB =
-                loadHtml(formatter, repo, rw, key, checkRevId(key.getRevIdB()));
-            if (html == null && htmlB == null) {
-              throw new ResourceNotFoundException();
-            }
-            html = diffHtml(html, htmlB, key.getDiffMode());
-          } else {
-            if (html == null) {
-              throw new ResourceNotFoundException();
-            }
-          }
-
-          RevCommit commit = rw.parseCommit(
-              MoreObjects.firstNonNull(key.getRevIdB(), key.getRevId()));
-          return getAsHtmlResource(html, commit.getCommitTime());
-        } finally {
-          rw.release();
+      try (RevWalk rw = new RevWalk(repo)) {
+        String html = null;
+        if (key.getRevId() != null) {
+          html = loadHtml(formatter, repo, rw, key, key.getRevId());
         }
-      } finally {
-        repo.close();
+
+        if (key.getDiffMode() != DiffMode.NO_DIFF) {
+          String htmlB =
+              loadHtml(formatter, repo, rw, key, checkRevId(key.getRevIdB()));
+          if (html == null && htmlB == null) {
+            throw new ResourceNotFoundException();
+          }
+          html = diffHtml(html, htmlB, key.getDiffMode());
+        } else {
+          if (html == null) {
+            throw new ResourceNotFoundException();
+          }
+        }
+
+        RevCommit commit = rw.parseCommit(
+            MoreObjects.firstNonNull(key.getRevIdB(), key.getRevId()));
+        return getAsHtmlResource(html, commit.getCommitTime());
       }
     } catch (ResourceNotFoundException e) {
       return Resource.NOT_FOUND;
@@ -171,8 +163,7 @@
       ResourceNotFoundException, MethodNotAllowedException, GitAPIException {
     RevCommit commit = rw.parseCommit(revId);
     RevTree tree = commit.getTree();
-    TreeWalk tw = new TreeWalk(repo);
-    try {
+    try (TreeWalk tw = new TreeWalk(repo)) {
       tw.addTree(tree);
       tw.setRecursive(true);
       tw.setFilter(PathFilter.create(key.getResource()));
@@ -183,8 +174,6 @@
       ObjectLoader loader = repo.open(objectId);
       return getHtml(formatter, repo, loader, key.getProject(),
           key.getResource(), revId);
-    } finally {
-      tw.release();
     }
   }
 
@@ -314,11 +303,8 @@
 
   private static String getAbbrRevId(Repository repo, ObjectId revId)
       throws IOException {
-    ObjectReader reader = repo.newObjectReader();
-    try {
+    try (ObjectReader reader = repo.newObjectReader()) {
       return reader.abbreviate(revId).name();
-    } finally {
-      reader.release();
     }
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocServlet.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocServlet.java
index 3863da9..f62389b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocServlet.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocServlet.java
@@ -198,12 +198,10 @@
     ObjectId id = diffMode == DiffMode.NO_DIFF || diffMode == DiffMode.SIDEBYSIDE_A
         ? revId
         : revIdB;
-    RevWalk rw = new RevWalk(repo);
-    try {
+    try (RevWalk rw = new RevWalk(repo)) {
       RevCommit commit = rw.parseCommit(id);
       RevTree tree = commit.getTree();
-      TreeWalk tw = new TreeWalk(repo);
-      try {
+      try (TreeWalk tw = new TreeWalk(repo)) {
         tw.addTree(tree);
         tw.setRecursive(true);
         tw.setFilter(PathFilter.create(file));
@@ -222,13 +220,9 @@
             .setContentType(mimeType.toString())
             .setCharacterEncoding(UTF_8.name())
             .setLastModified(commit.getCommitTime());
-      } finally {
-        tw.release();
       }
     } catch (IOException e) {
       return Resource.NOT_FOUND;
-    } finally {
-      rw.release();
     }
   }
 
@@ -329,14 +323,11 @@
   private void validateCanReadCommit(Repository repo,
       ProjectControl projectControl, ObjectId revId)
       throws ResourceNotFoundException, IOException {
-    RevWalk rw = new RevWalk(repo);
-    try {
+    try (RevWalk rw = new RevWalk(repo)) {
       RevCommit commit = rw.parseCommit(revId);
       if (!projectControl.canReadCommit(db.get(), rw, commit)) {
         throw new ResourceNotFoundException();
       }
-    } finally {
-      rw.release();
     }
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/FormatterUtil.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/FormatterUtil.java
index 514a51b..4e2993b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/FormatterUtil.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/FormatterUtil.java
@@ -304,38 +304,27 @@
    * @return the file content, <code>null</code> if the file doesn't exist
    */
   public String getMetaConfigFile(String projectName, String fileName) {
-    try {
-      Repository repo =
-          repoManager.openRepository(new Project.NameKey(projectName));
-      try {
-        RevWalk rw = new RevWalk(repo);
-        try {
-          ObjectId id = repo.resolve(RefNames.REFS_CONFIG);
-          if (id == null) {
+    try (Repository repo = repoManager.openRepository(
+        new Project.NameKey(projectName))) {
+      try (RevWalk rw = new RevWalk(repo)) {
+        ObjectId id = repo.resolve(RefNames.REFS_CONFIG);
+        if (id == null) {
+          return null;
+        }
+        RevCommit commit = rw.parseCommit(id);
+        RevTree tree = commit.getTree();
+        try (TreeWalk tw = new TreeWalk(repo)) {
+          tw.addTree(tree);
+          tw.setRecursive(true);
+          tw.setFilter(PathFilter.create(pluginName + "/" + fileName));
+          if (!tw.next()) {
             return null;
           }
-          RevCommit commit = rw.parseCommit(id);
-          RevTree tree = commit.getTree();
-          TreeWalk tw = new TreeWalk(repo);
-          try {
-            tw.addTree(tree);
-            tw.setRecursive(true);
-            tw.setFilter(PathFilter.create(pluginName + "/" + fileName));
-            if (!tw.next()) {
-              return null;
-            }
-            ObjectId objectId = tw.getObjectId(0);
-            ObjectLoader loader = repo.open(objectId);
-            byte[] raw = loader.getBytes(Integer.MAX_VALUE);
-            return new String(raw, UTF_8);
-          } finally {
-            tw.release();
-          }
-        } finally {
-          rw.release();
+          ObjectId objectId = tw.getObjectId(0);
+          ObjectLoader loader = repo.open(objectId);
+          byte[] raw = loader.getBytes(Integer.MAX_VALUE);
+          return new String(raw, UTF_8);
         }
-      } finally {
-        repo.close();
       }
     } catch (IOException e) {
       return null;