PathToLockId: Refactor to use a FunctionalInterface

Define a FunctionalInterface, and provide a static instance of
the converter. This allows to call it directly instead of getting
an instance injected.

Inspired-by: David Ostrovsky <david@ostrovsky.org>
Change-Id: I8d51c2989152672e3bbaae14c58f2973421c3732
diff --git a/src/main/java/com/googlesource/gerrit/plugins/lfs/locks/LfsLocksHandler.java b/src/main/java/com/googlesource/gerrit/plugins/lfs/locks/LfsLocksHandler.java
index 1e75677..66ee924 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/lfs/locks/LfsLocksHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/lfs/locks/LfsLocksHandler.java
@@ -67,14 +67,10 @@
     };
   }
 
-  private final PathToLockId toLockId;
   private final LoadingCache<Project.NameKey, LfsProjectLocks> projectLocks;
 
   @Inject
-  LfsLocksHandler(
-      PathToLockId toLockId,
-      @Named(CACHE_NAME) LoadingCache<Project.NameKey, LfsProjectLocks> projectLocks) {
-    this.toLockId = toLockId;
+  LfsLocksHandler(@Named(CACHE_NAME) LoadingCache<Project.NameKey, LfsProjectLocks> projectLocks) {
     this.projectLocks = projectLocks;
   }
 
@@ -122,8 +118,7 @@
 
   LfsGetLocksResponse listLocksByPath(Project.NameKey project, String path) {
     log.atFine().log("Get lock for %s path in %s project", path, project);
-    String lockId = toLockId.apply(path);
-    return listLocksById(project, lockId);
+    return listLocksById(project, PathToLockId.CONVERTER.convert(path));
   }
 
   LfsGetLocksResponse listLocksById(Project.NameKey project, String id) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/lfs/locks/LfsProjectLocks.java b/src/main/java/com/googlesource/gerrit/plugins/lfs/locks/LfsProjectLocks.java
index 4526fa4..e8987f9 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/lfs/locks/LfsProjectLocks.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/lfs/locks/LfsProjectLocks.java
@@ -43,19 +43,13 @@
 
   private static final FluentLogger log = FluentLogger.forEnclosingClass();
   private final LfsGson gson;
-  private final PathToLockId toLockId;
   private final String project;
   private final Path locksPath;
   private final Cache<String, LfsLock> locks;
 
   @Inject
-  LfsProjectLocks(
-      LfsGson gson,
-      PathToLockId toLockId,
-      LfsLocksPathProvider locksPath,
-      @Assisted Project.NameKey project) {
+  LfsProjectLocks(LfsGson gson, LfsLocksPathProvider locksPath, @Assisted Project.NameKey project) {
     this.gson = gson;
-    this.toLockId = toLockId;
     this.project = project.get();
     this.locksPath = Paths.get(locksPath.get(), this.project);
     this.locks = CacheBuilder.newBuilder().build();
@@ -94,7 +88,7 @@
 
   LfsLock createLock(CurrentUser user, LfsCreateLockInput input) throws LfsException {
     log.atFine().log("Create lock for %s in project %s", input.path, project);
-    String lockId = toLockId.apply(input.path);
+    String lockId = PathToLockId.CONVERTER.convert(input.path);
     LfsLock lock = locks.getIfPresent(lockId);
     if (lock != null) {
       throw new LfsLockExistsException(lock);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/lfs/locks/PathToLockId.java b/src/main/java/com/googlesource/gerrit/plugins/lfs/locks/PathToLockId.java
index d90ebb8..4449469 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/lfs/locks/PathToLockId.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/lfs/locks/PathToLockId.java
@@ -14,16 +14,22 @@
 
 package com.googlesource.gerrit.plugins.lfs.locks;
 
-import com.google.common.base.Function;
-import com.google.common.hash.HashCode;
+import static java.nio.charset.StandardCharsets.UTF_8;
+
 import com.google.common.hash.Hashing;
 import com.google.common.io.BaseEncoding;
-import java.nio.charset.StandardCharsets;
 
-public class PathToLockId implements Function<String, String> {
-  @Override
-  public String apply(String path) {
-    HashCode hash = Hashing.sha256().hashString(path, StandardCharsets.UTF_8);
-    return BaseEncoding.base16().lowerCase().encode(hash.asBytes());
+public class PathToLockId {
+  private PathToLockId() {}
+
+  @FunctionalInterface
+  public interface PathToLockIdInterface {
+    String convert(String path);
   }
+
+  static final PathToLockIdInterface CONVERTER =
+      path ->
+          BaseEncoding.base16()
+              .lowerCase()
+              .encode(Hashing.sha256().hashString(path, UTF_8).asBytes());
 }