Add currentUser() to PermissionBackend

Passing in a Provider<CurrentUser> into PermissionBackend is
boiler-platy. This change adds a convenience method to PermissionBackend
and DefaultPermissionBackend to limit this boiler-plate. Future commits
will remove #user(Provider<CurrentUser>) from PermissionBackend, once
all callers were moved.

Change-Id: Ifcd07fe2c7d2673a66b2b4f9eff06ee8a3b6b943
diff --git a/java/com/google/gerrit/server/permissions/DefaultPermissionBackend.java b/java/com/google/gerrit/server/permissions/DefaultPermissionBackend.java
index 800d877..d8e01f9 100644
--- a/java/com/google/gerrit/server/permissions/DefaultPermissionBackend.java
+++ b/java/com/google/gerrit/server/permissions/DefaultPermissionBackend.java
@@ -32,6 +32,7 @@
 import com.google.gerrit.server.project.ProjectCache;
 import com.google.gerrit.server.project.ProjectState;
 import com.google.inject.Inject;
+import com.google.inject.Provider;
 import com.google.inject.Singleton;
 import java.io.IOException;
 import java.util.Collection;
@@ -44,12 +45,16 @@
 public class DefaultPermissionBackend extends PermissionBackend {
   private static final CurrentUser.PropertyKey<Boolean> IS_ADMIN = CurrentUser.PropertyKey.create();
 
+  private final Provider<CurrentUser> currentUser;
   private final ProjectCache projectCache;
   private final ProjectControl.Factory projectControlFactory;
 
   @Inject
   DefaultPermissionBackend(
-      ProjectCache projectCache, ProjectControl.Factory projectControlFactory) {
+      Provider<CurrentUser> currentUser,
+      ProjectCache projectCache,
+      ProjectControl.Factory projectControlFactory) {
+    this.currentUser = currentUser;
     this.projectCache = projectCache;
     this.projectControlFactory = projectControlFactory;
   }
@@ -59,6 +64,11 @@
   }
 
   @Override
+  public WithUser currentUser() {
+    return new WithUserImpl(currentUser.get());
+  }
+
+  @Override
   public WithUser user(CurrentUser user) {
     return new WithUserImpl(checkNotNull(user, "user"));
   }
diff --git a/java/com/google/gerrit/server/permissions/PermissionBackend.java b/java/com/google/gerrit/server/permissions/PermissionBackend.java
index 56c300d..8b82e79 100644
--- a/java/com/google/gerrit/server/permissions/PermissionBackend.java
+++ b/java/com/google/gerrit/server/permissions/PermissionBackend.java
@@ -90,10 +90,19 @@
 public abstract class PermissionBackend {
   private static final Logger logger = LoggerFactory.getLogger(PermissionBackend.class);
 
-  /** @return lightweight factory scoped to answer for the specified user. */
+  /** @return lightweight factory scoped to answer for the current user. */
+  public abstract WithUser currentUser();
+
+  /**
+   * @return lightweight factory scoped to answer for the specified user. If an instance scoped to
+   *     the current user is desired, use {@code currentUser()} instead.
+   */
   public abstract WithUser user(CurrentUser user);
 
-  /** @return lightweight factory scoped to answer for the specified user. */
+  /**
+   * @return lightweight factory scoped to answer for the specified user. If an instance scoped to
+   *     the current user is desired, use {@code currentUser()} instead.
+   */
   public <U extends CurrentUser> WithUser user(Provider<U> user) {
     return user(checkNotNull(user, "Provider<CurrentUser>").get());
   }