Merge branch 'stable-2.15' into stable-2.16

* stable-2.15:
  Upgrade bazlets to latest stable-2.15 to build with 2.15.19 API
  Upgrade bazlets to latest stable-2.14 to build with 2.14.21 API

Change-Id: I4309136779db78f54fb953a6690a2a3acf918fce
diff --git a/.bazelversion b/.bazelversion
index 9084fa2..fd2a018 100644
--- a/.bazelversion
+++ b/.bazelversion
@@ -1 +1 @@
-1.1.0
+3.1.0
diff --git a/WORKSPACE b/WORKSPACE
index db73778..d6f9091 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,7 +3,7 @@
 load("//:bazlets.bzl", "load_bazlets")
 
 load_bazlets(
-    commit = "9af263722b7eafe99af079d6ef7cf1de23e6f8d7",
+    commit = "fff6f20bb2eceaf872a8acf8ad51471c25a82d38",
     #local_path = "/home/<user>/projects/bazlets",
 )
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/LockUnlockProject.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/LockUnlockProject.java
index 45cf294..04426bc 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/LockUnlockProject.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/LockUnlockProject.java
@@ -16,9 +16,9 @@
 
 import com.google.gerrit.extensions.client.ProjectState;
 import com.google.gerrit.reviewdb.client.Project;
-import com.google.gerrit.server.git.MetaDataUpdate;
-import com.google.gerrit.server.git.ProjectConfig;
+import com.google.gerrit.server.git.meta.MetaDataUpdate;
 import com.google.gerrit.server.project.ProjectCache;
+import com.google.gerrit.server.project.ProjectConfig;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import java.io.IOException;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameCommand.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameCommand.java
index b28d47c..14b5898 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameCommand.java
@@ -18,12 +18,15 @@
 
 import com.google.gerrit.extensions.restapi.RestApiException;
 import com.google.gerrit.reviewdb.client.Change;
-import com.google.gerrit.server.project.ProjectControl;
+import com.google.gerrit.reviewdb.client.Project;
+import com.google.gerrit.server.CurrentUser;
+import com.google.gerrit.server.project.ProjectCache;
 import com.google.gerrit.server.project.ProjectResource;
 import com.google.gerrit.sshd.CommandMetaData;
 import com.google.gerrit.sshd.SshCommand;
 import com.google.gwtorm.server.OrmException;
 import com.google.inject.Inject;
+import com.google.inject.Provider;
 import com.googlesource.gerrit.plugins.renameproject.monitor.CommandProgressMonitor;
 import com.googlesource.gerrit.plugins.renameproject.monitor.ProgressMonitor;
 import java.io.BufferedReader;
@@ -37,17 +40,24 @@
 @CommandMetaData(name = "rename", description = "Rename project")
 public final class RenameCommand extends SshCommand {
   @Argument(index = 0, required = true, metaVar = "OLDPROJECT", usage = "project to rename")
-  private ProjectControl projectControl;
+  private String projectControl;
 
   @Argument(index = 1, required = true, metaVar = "NEWNAME", usage = "new name for the project")
   private String newProjectName;
 
   private static final Logger log = LoggerFactory.getLogger(RenameCommand.class);
   private final RenameProject renameProject;
+  private final Provider<ProjectCache> projectCacheProvider;
+  private final Provider<CurrentUser> self;
 
   @Inject
-  protected RenameCommand(RenameProject renameProject) {
+  protected RenameCommand(
+      RenameProject renameProject,
+      Provider<ProjectCache> projectCacheProvider,
+      Provider<CurrentUser> self) {
     this.renameProject = renameProject;
+    this.projectCacheProvider = projectCacheProvider;
+    this.self = self;
   }
 
   @Override
@@ -55,7 +65,9 @@
     try {
       RenameProject.Input input = new RenameProject.Input();
       input.name = newProjectName;
-      ProjectResource rsrc = new ProjectResource(projectControl);
+      ProjectResource rsrc =
+          new ProjectResource(
+              projectCacheProvider.get().get(new Project.NameKey(projectControl)), self.get());
       try (CommandProgressMonitor monitor = new CommandProgressMonitor(stdout)) {
         renameProject.assertCanRename(rsrc, input, monitor);
         List<Change.Id> changeIds = renameProject.getChanges(rsrc, monitor);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameLog.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameLog.java
index a15d2c5..88c0e3b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameLog.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameLog.java
@@ -16,15 +16,15 @@
 
 import com.google.common.collect.ListMultimap;
 import com.google.common.collect.MultimapBuilder;
-import com.google.gerrit.audit.AuditEvent;
-import com.google.gerrit.audit.AuditService;
-import com.google.gerrit.common.TimeUtil;
 import com.google.gerrit.extensions.systemstatus.ServerInformation;
 import com.google.gerrit.reviewdb.client.Project;
+import com.google.gerrit.server.AuditEvent;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.OutputFormat;
+import com.google.gerrit.server.audit.AuditService;
 import com.google.gerrit.server.util.PluginLogFile;
 import com.google.gerrit.server.util.SystemLog;
+import com.google.gerrit.server.util.time.TimeUtil;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import org.apache.log4j.Level;
@@ -68,7 +68,7 @@
             null);
 
     event.setProperty(ACCOUNT_ID, user.getAccountId().toString());
-    event.setProperty(USER_NAME, user.getUserName());
+    event.setProperty(USER_NAME, user.getUserName().get());
     event.setProperty(PROJECT_NAME, project.get());
 
     if (options != null) {
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 e21aa50..d1f1ba5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameProject.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameProject.java
@@ -32,6 +32,8 @@
 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.permissions.PermissionBackendException;
+import com.google.gerrit.server.permissions.ProjectPermission;
 import com.google.gerrit.server.project.ProjectResource;
 import com.google.gwtorm.server.OrmException;
 import com.google.inject.Inject;
@@ -122,11 +124,27 @@
   }
 
   protected boolean canRename(ProjectResource rsrc) {
-    PermissionBackend.WithUser userPermission = permissionBackend.user(userProvider);
+    PermissionBackend.WithUser userPermission = permissionBackend.user(userProvider.get());
     return userPermission.testOrFalse(GlobalPermission.ADMINISTRATE_SERVER)
         || userPermission.testOrFalse(new PluginPermission(pluginName, RENAME_PROJECT))
         || (userPermission.testOrFalse(new PluginPermission(pluginName, RENAME_OWN_PROJECT))
-            && rsrc.getControl().isOwner());
+            && isOwner(rsrc));
+  }
+
+  private boolean isOwner(ProjectResource project) {
+    try {
+      permissionBackend
+          .user(project.getUser())
+          .project(project.getNameKey())
+          .check(ProjectPermission.WRITE_CONFIG);
+    } catch (AuthException | PermissionBackendException noWriter) {
+      try {
+        permissionBackend.user(project.getUser()).check(GlobalPermission.ADMINISTRATE_SERVER);
+      } catch (AuthException | PermissionBackendException noAdmin) {
+        return false;
+      }
+    }
+    return true;
   }
 
   void assertCanRename(ProjectResource rsrc, Input input, ProgressMonitor pm)
@@ -144,14 +162,14 @@
 
   void doRename(List<Change.Id> changeIds, ProjectResource rsrc, Input input, ProgressMonitor pm)
       throws InterruptedException, OrmException, ConfigInvalidException, IOException {
-    Project.NameKey oldProjectKey = rsrc.getControl().getProject().getNameKey();
+    Project.NameKey oldProjectKey = rsrc.getNameKey();
     Project.NameKey newProjectKey = new Project.NameKey(input.name);
     Exception ex = null;
     stepsPerformed.clear();
     try {
       fsRenameStep(oldProjectKey, newProjectKey, pm);
 
-      cacheRenameStep(rsrc.getControl().getProject().getNameKey(), newProjectKey);
+      cacheRenameStep(rsrc.getNameKey(), newProjectKey);
 
       List<Change.Id> updatedChangeIds = dbRenameStep(changeIds, oldProjectKey, newProjectKey, pm);
 
@@ -200,7 +218,8 @@
     logPerformedStep(Step.FILESYSTEM, newProjectKey, oldProjectKey);
   }
 
-  void cacheRenameStep(Project.NameKey oldProjectKey, Project.NameKey newProjectKey) {
+  void cacheRenameStep(Project.NameKey oldProjectKey, Project.NameKey newProjectKey)
+      throws IOException {
     cacheHandler.update(oldProjectKey, newProjectKey);
     logPerformedStep(Step.CACHE, newProjectKey, oldProjectKey);
   }
@@ -260,7 +279,7 @@
   List<Change.Id> getChanges(ProjectResource rsrc, ProgressMonitor pm)
       throws OrmException, IOException {
     pm.beginTask("Retrieving the list of changes from DB");
-    Project.NameKey oldProjectKey = rsrc.getControl().getProject().getNameKey();
+    Project.NameKey oldProjectKey = rsrc.getNameKey();
     return dbHandler.getChangeIds(oldProjectKey);
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProject.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProject.java
index 8b7b700..5de66f2 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProject.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProject.java
@@ -104,4 +104,4 @@
       }
     }
   }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/SshModule.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/SshModule.java
index e2a7ee0..4dcae20 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/SshModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/SshModule.java
@@ -16,7 +16,7 @@
 
 import com.google.gerrit.sshd.SingleCommandPluginModule;
 import com.google.inject.binder.LinkedBindingBuilder;
-import org.apache.sshd.server.Command;
+import org.apache.sshd.server.command.Command;
 
 public class SshModule extends SingleCommandPluginModule {
   @Override
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/cache/CacheRenameHandler.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/cache/CacheRenameHandler.java
index 0165835..4526489 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/cache/CacheRenameHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/cache/CacheRenameHandler.java
@@ -18,6 +18,7 @@
 import com.google.gerrit.server.project.ProjectCache;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
+import java.io.IOException;
 
 @Singleton
 public class CacheRenameHandler {
@@ -29,7 +30,8 @@
     this.projectCache = projectCache;
   }
 
-  public void update(Project.NameKey oldProjectKey, Project.NameKey newProjectKey) {
+  public void update(Project.NameKey oldProjectKey, Project.NameKey newProjectKey)
+      throws IOException {
     projectCache.remove(oldProjectKey);
     projectCache.onCreateProject(newProjectKey);
   }
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 2246d50..9efa51d 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
@@ -15,18 +15,20 @@
 package com.googlesource.gerrit.plugins.renameproject.conditions;
 
 import com.google.gerrit.extensions.common.ProjectInfo;
+import com.google.gerrit.extensions.restapi.RestApiException;
 import com.google.gerrit.reviewdb.client.Branch;
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.reviewdb.client.RefNames;
 import com.google.gerrit.server.config.AllProjectsName;
 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.gerrit.server.restapi.project.ListChildProjects;
+import com.google.gerrit.server.submit.MergeOpRepoManager;
+import com.google.gerrit.server.submit.SubmoduleException;
+import com.google.gerrit.server.submit.SubmoduleOp;
+import com.google.gwtorm.server.OrmException;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
@@ -73,7 +75,7 @@
 
   public void assertCanRename(ProjectResource oldProjectRsrc, Project.NameKey newProjectKey)
       throws CannotRenameProjectException {
-    Project.NameKey oldProjectKey = oldProjectRsrc.getControl().getProject().getNameKey();
+    Project.NameKey oldProjectKey = oldProjectRsrc.getNameKey();
     assertNewRepoNotExists(newProjectKey);
     assertIsNotDefaultProject(oldProjectKey);
     assertHasNoChildProjects(oldProjectRsrc);
@@ -100,7 +102,7 @@
         log.error(message);
         throw new CannotRenameProjectException(message);
       }
-    } catch (PermissionBackendException e) {
+    } catch (PermissionBackendException | OrmException | RestApiException e) {
       throw new CannotRenameProjectException(e);
     }
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/DatabaseRenameHandler.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/DatabaseRenameHandler.java
index 671dc27..a837267 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/DatabaseRenameHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/DatabaseRenameHandler.java
@@ -14,15 +14,17 @@
 
 package com.googlesource.gerrit.plugins.renameproject.database;
 
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
 import com.google.gerrit.reviewdb.client.Account;
 import com.google.gerrit.reviewdb.client.Change;
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.reviewdb.server.ReviewDb;
+import com.google.gerrit.server.ServerInitiated;
 import com.google.gerrit.server.account.AccountState;
-import com.google.gerrit.server.account.WatchConfig;
-import com.google.gerrit.server.account.WatchConfig.Accessor;
-import com.google.gerrit.server.account.WatchConfig.NotifyType;
-import com.google.gerrit.server.account.WatchConfig.ProjectWatchKey;
+import com.google.gerrit.server.account.AccountsUpdate;
+import com.google.gerrit.server.account.ProjectWatches.NotifyType;
+import com.google.gerrit.server.account.ProjectWatches.ProjectWatchKey;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.notedb.ChangeNotes;
 import com.google.gerrit.server.notedb.ChangeNotes.Factory.ChangeNotesResult;
@@ -42,6 +44,7 @@
 import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -59,7 +62,7 @@
   private final ChangeNotes.Factory schemaFactoryNoteDb;
   private final GitRepositoryManager repoManager;
   private final Provider<InternalAccountQuery> accountQueryProvider;
-  private final Provider<Accessor> watchConfig;
+  private final Provider<AccountsUpdate> accountsUpdateProvider;
   private NotesMigration migration;
 
   @Inject
@@ -69,12 +72,12 @@
       GitRepositoryManager repoManager,
       NotesMigration migration,
       Provider<InternalAccountQuery> accountQueryProvider,
-      Provider<WatchConfig.Accessor> watchConfig) {
+      @ServerInitiated Provider<AccountsUpdate> accountsUpdateProvider) {
     this.accountQueryProvider = accountQueryProvider;
-    this.watchConfig = watchConfig;
     this.schemaFactory = schemaFactory;
     this.schemaFactoryNoteDb = schemaFactoryNoteDb;
     this.repoManager = repoManager;
+    this.accountsUpdateProvider = accountsUpdateProvider;
     this.migration = migration;
   }
 
@@ -240,20 +243,31 @@
       throws OrmException {
     for (AccountState a : accountQueryProvider.get().byWatchedProject(oldProjectKey)) {
       Account.Id accountId = a.getAccount().getId();
+      ImmutableMap<ProjectWatchKey, ImmutableSet<NotifyType>> projectWatches =
+          a.getProjectWatches();
+      Map<ProjectWatchKey, Set<NotifyType>> newProjectWatches = new HashMap<>();
+      List<ProjectWatchKey> oldProjectWatches = new ArrayList<>();
       for (ProjectWatchKey watchKey : a.getProjectWatches().keySet()) {
         if (oldProjectKey.equals(watchKey.project())) {
+          newProjectWatches.put(
+              ProjectWatchKey.create(newProjectKey, watchKey.filter()),
+              projectWatches.get(watchKey));
+          oldProjectWatches.add(watchKey);
           try {
-            Map<ProjectWatchKey, Set<NotifyType>> newProjectWatches =
-                watchConfig.get().getProjectWatches(accountId);
-
-            newProjectWatches.put(
-                ProjectWatchKey.create(newProjectKey, watchKey.filter()),
-                a.getProjectWatches().get(watchKey));
-
-            newProjectWatches.remove(watchKey);
-
-            watchConfig.get().deleteAllProjectWatches(accountId);
-            watchConfig.get().upsertProjectWatches(accountId, newProjectWatches);
+            accountsUpdateProvider
+                .get()
+                .update(
+                    "Add watch entry",
+                    accountId,
+                    (accountState, update) ->
+                        update.updateProjectWatches(newProjectWatches).build());
+            accountsUpdateProvider
+                .get()
+                .update(
+                    "Remove watch entry",
+                    accountId,
+                    (accountState, update) ->
+                        update.deleteProjectWatches(oldProjectWatches).build());
           } catch (ConfigInvalidException e) {
             log.error(
                 "Updating watch entry for user {} in project {} failed. Watch config found invalid.",
diff --git a/src/main/resources/Documentation/build.md b/src/main/resources/Documentation/build.md
index dfc86a6..6386725 100644
--- a/src/main/resources/Documentation/build.md
+++ b/src/main/resources/Documentation/build.md
@@ -35,6 +35,12 @@
   bazel-bin/lib@PLUGIN@__plugin-src.jar
 ```
 
+To execute the tests run:
+
+```
+  bazel test //...
+```
+
 This project can be imported into the Eclipse IDE. Execute:
 
 ```
@@ -59,6 +65,12 @@
   bazel-bin/plugins/@PLUGIN@/@PLUGIN@.jar
 ```
 
+To execute the tests run either one of:
+
+```
+  bazel test --test_tag_filters=@PLUGIN@ //...
+  bazel test plugins/@PLUGIN@:@PLUGIN@_tests
+```
 
 This project can be imported into the Eclipse IDE.
 Add the plugin name to the `CUSTOM_PLUGINS` set in
@@ -67,3 +79,7 @@
 ```
   ./tools/eclipse/project.py
 ```
+
+[Back to @PLUGIN@ documentation index][index]
+
+[index]: index.html
diff --git a/src/test/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProjectTest.java b/src/test/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProjectTest.java
index 64bc221..d060414 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProjectTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProjectTest.java
@@ -25,7 +25,6 @@
 import com.google.gerrit.extensions.common.ChangeInfo;
 import com.google.gerrit.reviewdb.client.Change;
 import com.google.gerrit.reviewdb.client.Project;
-import com.google.gerrit.server.project.ProjectControl;
 import com.google.gerrit.server.project.ProjectResource;
 import com.google.gerrit.server.project.ProjectState;
 import com.googlesource.gerrit.plugins.renameproject.RenameProject.Step;
@@ -59,9 +58,8 @@
 
     pm = Mockito.mock(ProgressMonitor.class);
 
-    ProjectControl control = Mockito.mock(ProjectControl.class);
-    when(control.getProject()).thenReturn(new Project(oldProjectKey));
-    oldRsrc = new ProjectResource(control);
+    oldRsrc = Mockito.mock(ProjectResource.class);
+    when(oldRsrc.getNameKey()).thenReturn(oldProjectKey);
   }
 
   @Test
@@ -154,4 +152,4 @@
       assertThat(queryProvider.get().byProject(oldProjectKey)).isEmpty();
     }
   }
-}
\ No newline at end of file
+}
diff --git a/src/test/java/com/googlesource/gerrit/plugins/renameproject/SubmoduleUtil.java b/src/test/java/com/googlesource/gerrit/plugins/renameproject/SubmoduleUtil.java
index 89243a1..e6fcdd1 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/renameproject/SubmoduleUtil.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/renameproject/SubmoduleUtil.java
@@ -18,10 +18,10 @@
 
 import com.google.gerrit.common.data.SubscribeSection;
 import com.google.gerrit.reviewdb.client.Project.NameKey;
-import com.google.gerrit.server.git.MetaDataUpdate;
-import com.google.gerrit.server.git.MetaDataUpdate.Server;
-import com.google.gerrit.server.git.ProjectConfig;
+import com.google.gerrit.server.git.meta.MetaDataUpdate;
+import com.google.gerrit.server.git.meta.MetaDataUpdate.Server;
 import com.google.gerrit.server.project.ProjectCache;
+import com.google.gerrit.server.project.ProjectConfig;
 import org.eclipse.jgit.junit.TestRepository;
 import org.eclipse.jgit.lib.Config;
 import org.eclipse.jgit.lib.ObjectId;
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 43050e1..e42e550 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
@@ -19,14 +19,15 @@
 
 import com.google.gerrit.extensions.common.ProjectInfo;
 import com.google.gerrit.reviewdb.client.Project;
+import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.config.AllProjectsName;
 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.SubmoduleOp;
-import com.google.gerrit.server.project.ListChildProjects;
-import com.google.gerrit.server.project.ProjectControl;
 import com.google.gerrit.server.project.ProjectResource;
+import com.google.gerrit.server.project.ProjectState;
+import com.google.gerrit.server.restapi.project.ListChildProjects;
+import com.google.gerrit.server.submit.MergeOpRepoManager;
+import com.google.gerrit.server.submit.SubmoduleOp;
 import com.google.inject.Provider;
 import com.googlesource.gerrit.plugins.renameproject.CannotRenameProjectException;
 import java.util.ArrayList;
@@ -50,7 +51,8 @@
   @Mock private Provider<MergeOpRepoManager> ormProvider;
   @Mock private RenamePreconditions preconditions;
   @Mock private ObjectDatabase objDb;
-  @Mock private ProjectControl control;
+  @Mock private ProjectState control;
+  @Mock private CurrentUser user;
   @Mock private Repository repo;
   @Mock private ListChildProjects listChildProjects;
 
@@ -60,7 +62,7 @@
 
   @Before
   public void setUp() throws Exception {
-    oldRsrc = new ProjectResource(control);
+    oldRsrc = new ProjectResource(control, user);
     when(repoManager.openRepository(newProjectKey)).thenReturn(repo);
     when(repo.getObjectDatabase()).thenReturn(objDb);
     preconditions =
@@ -75,8 +77,6 @@
 
   @Test(expected = CannotRenameProjectException.class)
   public void testAssertCannotRenameRepoExists() throws Exception {
-    Project oldProject = new Project(new Project.NameKey("oldProject"));
-    when(control.getProject()).thenReturn(oldProject);
     when(objDb.exists()).thenReturn(true);
 
     preconditions.assertCanRename(oldRsrc, newProjectKey);
@@ -85,7 +85,7 @@
   @Test(expected = CannotRenameProjectException.class)
   public void testAssertCannotRenameAllProjects() throws Exception {
     Project oldProject = new Project(allProjects);
-    when(control.getProject()).thenReturn(oldProject);
+    when(oldRsrc.getNameKey()).thenReturn(oldProject.getNameKey());
     when(objDb.exists()).thenReturn(false);
 
     preconditions.assertCanRename(oldRsrc, newProjectKey);
@@ -94,7 +94,7 @@
   @Test(expected = CannotRenameProjectException.class)
   public void testAssertCannotRenameAllUsers() throws Exception {
     Project oldProject = new Project(allUsersName);
-    when(control.getProject()).thenReturn(oldProject);
+    when(oldRsrc.getNameKey()).thenReturn(oldProject.getNameKey());
     when(objDb.exists()).thenReturn(false);
 
     preconditions.assertCanRename(oldRsrc, newProjectKey);
@@ -103,7 +103,7 @@
   @Test(expected = CannotRenameProjectException.class)
   public void testAssertCannotRenameHasChildren() throws Exception {
     Project oldProject = new Project(new Project.NameKey("oldProject"));
-    when(control.getProject()).thenReturn(oldProject);
+    when(oldRsrc.getNameKey()).thenReturn(oldProject.getNameKey());
     when(objDb.exists()).thenReturn(false);
 
     when(listChildProjectsProvider.get()).thenReturn(listChildProjects);