Extract the change cache key to a separate class

This is a preparation change for reusing the cache key
in the next forthcoming cache last update timestamp
cache.

Change-Id: I3db3b6e7fb6d9e24424cd4e1d9ab228ee8b5cd25
diff --git a/src/main/java/com/googlesource/gerrit/modules/gitrefsfilter/ChangeCacheKey.java b/src/main/java/com/googlesource/gerrit/modules/gitrefsfilter/ChangeCacheKey.java
new file mode 100644
index 0000000..9a6b0d6
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/modules/gitrefsfilter/ChangeCacheKey.java
@@ -0,0 +1,44 @@
+// Copyright (C) 2022 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.googlesource.gerrit.modules.gitrefsfilter;
+
+import com.google.auto.value.AutoValue;
+import com.google.gerrit.common.Nullable;
+import com.google.gerrit.entities.Change;
+import com.google.gerrit.entities.Project;
+import org.eclipse.jgit.lib.ObjectId;
+import org.eclipse.jgit.lib.Repository;
+
+@AutoValue
+public abstract class ChangeCacheKey {
+  /* `repo` and `changeId` need to be part of the cache key because the
+  Loader requires them in order to fetch the relevant changeNote. */
+  public abstract Repository repo();
+
+  public abstract Change.Id changeId();
+
+  @Nullable
+  public abstract ObjectId changeRevision();
+
+  public abstract Project.NameKey project();
+
+  static ChangeCacheKey create(
+      Repository repo,
+      Change.Id changeId,
+      @Nullable ObjectId changeRevision,
+      Project.NameKey project) {
+    return new AutoValue_ChangeCacheKey(repo, changeId, changeRevision, project);
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/modules/gitrefsfilter/ForProjectWrapper.java b/src/main/java/com/googlesource/gerrit/modules/gitrefsfilter/ForProjectWrapper.java
index 9233c54..75842e3 100644
--- a/src/main/java/com/googlesource/gerrit/modules/gitrefsfilter/ForProjectWrapper.java
+++ b/src/main/java/com/googlesource/gerrit/modules/gitrefsfilter/ForProjectWrapper.java
@@ -44,7 +44,7 @@
 public class ForProjectWrapper extends ForProject {
   private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 
-  private final LoadingCache<OpenChangesCache.Key, Boolean> openChangesCache;
+  private final LoadingCache<ChangeCacheKey, Boolean> openChangesCache;
   private final ForProject defaultForProject;
   private final Project.NameKey project;
   private final FilterRefsConfig config;
@@ -56,7 +56,7 @@
   @Inject
   public ForProjectWrapper(
       FilterRefsConfig config,
-      @Named(OPEN_CHANGES_CACHE) LoadingCache<OpenChangesCache.Key, Boolean> openChangesCache,
+      @Named(OPEN_CHANGES_CACHE) LoadingCache<ChangeCacheKey, Boolean> openChangesCache,
       @Assisted ForProject defaultForProject,
       @Assisted Project.NameKey project) {
     this.openChangesCache = openChangesCache;
@@ -121,8 +121,7 @@
 
   private boolean isOpen(Repository repo, Change.Id changeId, @Nullable ObjectId changeRevision) {
     try {
-      return openChangesCache.get(
-          OpenChangesCache.Key.create(repo, changeId, changeRevision, project));
+      return openChangesCache.get(ChangeCacheKey.create(repo, changeId, changeRevision, project));
     } catch (ExecutionException e) {
       logger.atWarning().withCause(e).log(
           "Error getting change '%d' from the cache. Do not hide from the advertised refs",
diff --git a/src/main/java/com/googlesource/gerrit/modules/gitrefsfilter/OpenChangesCache.java b/src/main/java/com/googlesource/gerrit/modules/gitrefsfilter/OpenChangesCache.java
index 12a6d72..8e1c371 100644
--- a/src/main/java/com/googlesource/gerrit/modules/gitrefsfilter/OpenChangesCache.java
+++ b/src/main/java/com/googlesource/gerrit/modules/gitrefsfilter/OpenChangesCache.java
@@ -13,12 +13,8 @@
 // limitations under the License.
 package com.googlesource.gerrit.modules.gitrefsfilter;
 
-import com.google.auto.value.AutoValue;
 import com.google.common.cache.CacheLoader;
 import com.google.common.flogger.FluentLogger;
-import com.google.gerrit.common.Nullable;
-import com.google.gerrit.entities.Change;
-import com.google.gerrit.entities.Project;
 import com.google.gerrit.server.cache.CacheModule;
 import com.google.gerrit.server.notedb.ChangeNotes;
 import com.google.gerrit.server.project.NoSuchChangeException;
@@ -26,8 +22,6 @@
 import com.google.inject.Module;
 import com.google.inject.Singleton;
 import com.google.inject.TypeLiteral;
-import org.eclipse.jgit.lib.ObjectId;
-import org.eclipse.jgit.lib.Repository;
 
 public class OpenChangesCache {
   public static final String OPEN_CHANGES_CACHE = "open_changes";
@@ -36,36 +30,14 @@
     return new CacheModule() {
       @Override
       protected void configure() {
-        cache(OPEN_CHANGES_CACHE, Key.class, new TypeLiteral<Boolean>() {}).loader(Loader.class);
+        cache(OPEN_CHANGES_CACHE, ChangeCacheKey.class, new TypeLiteral<Boolean>() {})
+            .loader(Loader.class);
       }
     };
   }
 
-  @AutoValue
-  public abstract static class Key {
-    /* Note: `repo` and `changeId` need to be part of the cache key because the
-    Loader requires them in order to compute the relevant changeNote to extract
-    the change openness status from. */
-    public abstract Repository repo();
-
-    public abstract Change.Id changeId();
-
-    @Nullable
-    public abstract ObjectId changeRevision();
-
-    public abstract Project.NameKey project();
-
-    static Key create(
-        Repository repo,
-        Change.Id changeId,
-        @Nullable ObjectId changeRevision,
-        Project.NameKey project) {
-      return new AutoValue_OpenChangesCache_Key(repo, changeId, changeRevision, project);
-    }
-  }
-
   @Singleton
-  static class Loader extends CacheLoader<Key, Boolean> {
+  static class Loader extends CacheLoader<ChangeCacheKey, Boolean> {
     private static final FluentLogger logger = FluentLogger.forEnclosingClass();
     private final ChangeNotes.Factory changeNotesFactory;
 
@@ -75,7 +47,7 @@
     }
 
     @Override
-    public Boolean load(Key key) throws Exception {
+    public Boolean load(ChangeCacheKey key) throws Exception {
       try {
         ChangeNotes changeNotes =
             changeNotesFactory.createChecked(
diff --git a/src/test/java/com/googlesource/gerrit/libmodule/plugins/test/GitRefsFilterTest.java b/src/test/java/com/googlesource/gerrit/libmodule/plugins/test/GitRefsFilterTest.java
index 857173a..a8bcf02 100644
--- a/src/test/java/com/googlesource/gerrit/libmodule/plugins/test/GitRefsFilterTest.java
+++ b/src/test/java/com/googlesource/gerrit/libmodule/plugins/test/GitRefsFilterTest.java
@@ -30,7 +30,7 @@
 import com.google.inject.Inject;
 import com.google.inject.Module;
 import com.google.inject.name.Named;
-import com.googlesource.gerrit.modules.gitrefsfilter.OpenChangesCache;
+import com.googlesource.gerrit.modules.gitrefsfilter.ChangeCacheKey;
 import com.googlesource.gerrit.modules.gitrefsfilter.RefsFilterModule;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -55,7 +55,7 @@
   @Inject private RequestScopeOperations requestScopeOperations;
 
   @Inject
-  private @Named(OPEN_CHANGES_CACHE) LoadingCache<OpenChangesCache.Key, Boolean> changeOpenCache;
+  private @Named(OPEN_CHANGES_CACHE) LoadingCache<ChangeCacheKey, Boolean> changeOpenCache;
 
   @Override
   public Module createModule() {
@@ -136,7 +136,7 @@
 
     assertThat(changeOpenCache.asMap().size()).isEqualTo(1);
 
-    Map.Entry<OpenChangesCache.Key, Boolean> cacheEntry =
+    Map.Entry<ChangeCacheKey, Boolean> cacheEntry =
         new ArrayList<>(changeOpenCache.asMap().entrySet()).get(0);
 
     assertThat(cacheEntry.getKey().project()).isEqualTo(project);
@@ -156,7 +156,7 @@
 
     assertThat(changeOpenCache.asMap().size()).isEqualTo(1);
 
-    Map.Entry<OpenChangesCache.Key, Boolean> cacheEntry =
+    Map.Entry<ChangeCacheKey, Boolean> cacheEntry =
         new ArrayList<>(changeOpenCache.asMap().entrySet()).get(0);
 
     assertThat(cacheEntry.getKey().project()).isEqualTo(project);