Compile plugin against 2.15.3

Change-Id: I319626ab52af3d9581f95c0f8351ea50766d163e
diff --git a/README.md b/README.md
index b133981..1ed0bf5 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
 # Rename project plugin for Gerrit Code Review
 
-This plugin currently only supports Gerrit version 2.14.X.
+This plugin currently supports Gerrit version 2.14.X and 2.15.X with changes in reviewDb, noteDB is not yet supported.
 
 For more information, see: `src/main/resources/Documentation/about.md`
diff --git a/WORKSPACE b/WORKSPACE
index 8cfa6c4..e37c6d0 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,7 +3,7 @@
 load("//:bazlets.bzl", "load_bazlets")
 
 load_bazlets(
-    commit = "11ce7521051ca73598d099aa8a396c9ffe932a74",
+    commit = "3995849fe742201d93e40f2b109dcff13dd0a4ed",
 )
 
 # Release Plugin API
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameProject.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameProject.java
index 4bfba27..849b803 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameProject.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameProject.java
@@ -19,6 +19,7 @@
 
 import com.google.common.base.Strings;
 import com.google.gerrit.extensions.annotations.PluginName;
+import com.google.gerrit.extensions.api.access.PluginPermission;
 import com.google.gerrit.extensions.restapi.AuthException;
 import com.google.gerrit.extensions.restapi.BadRequestException;
 import com.google.gerrit.extensions.restapi.ResourceConflictException;
@@ -26,8 +27,9 @@
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.IdentifiedUser;
-import com.google.gerrit.server.account.CapabilityControl;
 import com.google.gerrit.server.extensions.events.PluginEvent;
+import com.google.gerrit.server.permissions.GlobalPermission;
+import com.google.gerrit.server.permissions.PermissionBackend;
 import com.google.gerrit.server.project.ProjectResource;
 import com.google.gwtorm.server.OrmException;
 import com.google.inject.Inject;
@@ -64,6 +66,7 @@
   private final PluginEvent pluginEvent;
   private final String pluginName;
   private final RenameLog renameLog;
+  private final PermissionBackend permissionBackend;
 
   @Inject
   RenameProject(
@@ -76,7 +79,8 @@
       LockUnlockProject lockUnlockProject,
       PluginEvent pluginEvent,
       @PluginName String pluginName,
-      RenameLog renameLog) {
+      RenameLog renameLog,
+      PermissionBackend permissionBackend) {
     this.dbHandler = dbHandler;
     this.fsHandler = fsHandler;
     this.cacheHandler = cacheHandler;
@@ -87,6 +91,7 @@
     this.pluginEvent = pluginEvent;
     this.pluginName = pluginName;
     this.renameLog = renameLog;
+    this.permissionBackend = permissionBackend;
   }
 
   private void assertNewNameNotNull(Input input) throws BadRequestException {
@@ -102,10 +107,11 @@
   }
 
   protected boolean canRename(ProjectResource rsrc) {
-    CapabilityControl ctl = userProvider.get().getCapabilities();
-    return ctl.canAdministrateServer()
-        || ctl.canPerform(pluginName + "-" + RENAME_PROJECT)
-        || (ctl.canPerform(pluginName + "-" + RENAME_OWN_PROJECT) && rsrc.getControl().isOwner());
+    PermissionBackend.WithUser userPermission = permissionBackend.user(userProvider);
+    return userPermission.testOrFalse(GlobalPermission.ADMINISTRATE_SERVER)
+        || userPermission.testOrFalse(new PluginPermission(pluginName, RENAME_PROJECT))
+        || (userPermission.testOrFalse(new PluginPermission(pluginName, RENAME_OWN_PROJECT))
+            && rsrc.getControl().isOwner());
   }
 
   void assertCanRename(ProjectResource rsrc, Input input, ProgressMonitor pm)
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/conditions/RenamePreconditions.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/conditions/RenamePreconditions.java
index e1104dc..2246d50 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/conditions/RenamePreconditions.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/conditions/RenamePreconditions.java
@@ -22,7 +22,9 @@
 import com.google.gerrit.server.config.AllUsersName;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.git.MergeOpRepoManager;
+import com.google.gerrit.server.git.SubmoduleException;
 import com.google.gerrit.server.git.SubmoduleOp;
+import com.google.gerrit.server.permissions.PermissionBackendException;
 import com.google.gerrit.server.project.ListChildProjects;
 import com.google.gerrit.server.project.ProjectResource;
 import com.google.inject.Inject;
@@ -87,14 +89,19 @@
   }
 
   private void assertHasNoChildProjects(ProjectResource rsrc) throws CannotRenameProjectException {
-    List<ProjectInfo> children = listChildProjectsProvider.get().apply(rsrc);
-    if (!children.isEmpty()) {
-      String childrenString =
-          String.join(", ", children.stream().map(info -> info.name).collect(Collectors.toList()));
-      String message =
-          String.format("Cannot rename project because it has children: %s", childrenString);
-      log.error(message);
-      throw new CannotRenameProjectException(message);
+    try {
+      List<ProjectInfo> children = listChildProjectsProvider.get().apply(rsrc);
+      if (!children.isEmpty()) {
+        String childrenString =
+            String.join(
+                ", ", children.stream().map(info -> info.name).collect(Collectors.toList()));
+        String message =
+            String.format("Cannot rename project because it has children: %s", childrenString);
+        log.error(message);
+        throw new CannotRenameProjectException(message);
+      }
+    } catch (PermissionBackendException e) {
+      throw new CannotRenameProjectException(e);
     }
   }
 
@@ -113,7 +120,7 @@
           throw new CannotRenameProjectException(message);
         }
       }
-    } catch (IOException e) {
+    } catch (IOException | SubmoduleException e) {
       throw new CannotRenameProjectException(e);
     }
   }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/renameproject/RenameIT.java b/src/test/java/com/googlesource/gerrit/plugins/renameproject/RenameIT.java
index 163b704..879e660 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/renameproject/RenameIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/renameproject/RenameIT.java
@@ -42,7 +42,7 @@
     createChange();
     adminSshSession.exec(PLUGIN_NAME + " " + project.get() + " " + NEW_PROJECT_NAME);
 
-    assertThat(adminSshSession.hasError()).isFalse();
+    adminSshSession.assertSuccess();
     ProjectState projectState = projectCache.get(new Project.NameKey(NEW_PROJECT_NAME));
     assertThat(projectState).isNotNull();
     assertThat(queryProvider.get().byProject(project)).isEmpty();
@@ -56,7 +56,7 @@
     String newProjectName = "";
     adminSshSession.exec(PLUGIN_NAME + " " + project.get() + " " + newProjectName);
 
-    assertThat(adminSshSession.hasError()).isTrue();
+    adminSshSession.assertFailure();
     ProjectState projectState = projectCache.get(new Project.NameKey(newProjectName));
     assertThat(projectState).isNull();
   }
@@ -67,7 +67,7 @@
     createChange();
     adminSshSession.exec(PLUGIN_NAME + " " + allProjects.get() + " " + NEW_PROJECT_NAME);
 
-    assertThat(adminSshSession.hasError()).isTrue();
+    adminSshSession.assertFailure();
     ProjectState projectState = projectCache.get(new Project.NameKey(NEW_PROJECT_NAME));
     assertThat(projectState).isNull();
   }
@@ -77,7 +77,7 @@
   public void testRenameExistingProjectFail() throws Exception {
     createChange();
     adminSshSession.exec(PLUGIN_NAME + " " + project.get() + " " + project.get());
-    assertThat(adminSshSession.hasError()).isTrue();
+    adminSshSession.assertFailure();
   }
 
   @Test
@@ -98,6 +98,6 @@
     SubmoduleUtil.createSubmoduleSubscription(cfg, superRepo, "master", subProject.get(), "master");
 
     adminSshSession.exec(PLUGIN_NAME + " " + subProject.get() + " " + NEW_PROJECT_NAME);
-    assertThat(adminSshSession.hasError()).isTrue();
+    adminSshSession.assertFailure();
   }
 }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/renameproject/conditions/RenamePreconditionsTest.java b/src/test/java/com/googlesource/gerrit/plugins/renameproject/conditions/RenamePreconditionsTest.java
index 05194d7..2d35147 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/renameproject/conditions/RenamePreconditionsTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/renameproject/conditions/RenamePreconditionsTest.java
@@ -24,6 +24,7 @@
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.git.MergeOpRepoManager;
 import com.google.gerrit.server.git.SubmoduleOp;
+import com.google.gerrit.server.permissions.PermissionBackendException;
 import com.google.gerrit.server.project.ListChildProjects;
 import com.google.gerrit.server.project.ProjectControl;
 import com.google.gerrit.server.project.ProjectResource;
@@ -107,7 +108,8 @@
 
   @Test(expected = CannotRenameProjectException.class)
   public void testAssertCannotRenameHasChildren()
-      throws RepositoryNotFoundException, IOException, CannotRenameProjectException {
+      throws RepositoryNotFoundException, IOException, CannotRenameProjectException,
+          PermissionBackendException {
     Project oldProject = new Project(new Project.NameKey("oldProject"));
     when(control.getProject()).thenReturn(oldProject);
     when(objDb.exists()).thenReturn(false);