UserPreferencesConverter: use ProtoConverter interface

Release-Notes: skip
Google-Bug-Id: b/335372403
Change-Id: I1ef2d87c1c4ba9e141bfb56ff15ea3d257f3673b
diff --git a/java/com/google/gerrit/server/config/PreferencesParserUtil.java b/java/com/google/gerrit/server/config/PreferencesParserUtil.java
index 93df926..ecb0868 100644
--- a/java/com/google/gerrit/server/config/PreferencesParserUtil.java
+++ b/java/com/google/gerrit/server/config/PreferencesParserUtil.java
@@ -17,6 +17,9 @@
 import static com.google.gerrit.server.config.ConfigUtil.loadSection;
 import static com.google.gerrit.server.config.ConfigUtil.mergeWithDefaults;
 import static com.google.gerrit.server.config.ConfigUtil.skipField;
+import static com.google.gerrit.server.config.UserPreferencesConverter.DiffPreferencesInfoConverter.DIFF_PREFERENCES_INFO_CONVERTER;
+import static com.google.gerrit.server.config.UserPreferencesConverter.EditPreferencesInfoConverter.EDIT_PREFERENCES_INFO_CONVERTER;
+import static com.google.gerrit.server.config.UserPreferencesConverter.GeneralPreferencesInfoConverter.GENERAL_PREFERENCES_INFO_CONVERTER;
 import static com.google.gerrit.server.git.UserConfigSections.CHANGE_TABLE;
 import static com.google.gerrit.server.git.UserConfigSections.CHANGE_TABLE_COLUMN;
 import static com.google.gerrit.server.git.UserConfigSections.KEY_ID;
@@ -350,8 +353,7 @@
 
     @Override
     public GeneralPreferencesInfo fromUserPreferences(UserPreferences p) {
-      return UserPreferencesConverter.GeneralPreferencesInfoConverter.fromProto(
-          p.getGeneralPreferencesInfo());
+      return GENERAL_PREFERENCES_INFO_CONVERTER.fromProto(p.getGeneralPreferencesInfo());
     }
 
     @Override
@@ -381,8 +383,7 @@
 
     @Override
     public EditPreferencesInfo fromUserPreferences(UserPreferences p) {
-      return UserPreferencesConverter.EditPreferencesInfoConverter.fromProto(
-          p.getEditPreferencesInfo());
+      return EDIT_PREFERENCES_INFO_CONVERTER.fromProto(p.getEditPreferencesInfo());
     }
 
     @Override
@@ -412,8 +413,7 @@
 
     @Override
     public DiffPreferencesInfo fromUserPreferences(UserPreferences p) {
-      return UserPreferencesConverter.DiffPreferencesInfoConverter.fromProto(
-          p.getDiffPreferencesInfo());
+      return DIFF_PREFERENCES_INFO_CONVERTER.fromProto(p.getDiffPreferencesInfo());
     }
 
     @Override
diff --git a/java/com/google/gerrit/server/config/UserPreferencesConverter.java b/java/com/google/gerrit/server/config/UserPreferencesConverter.java
index 7eae7d0..912abc4 100644
--- a/java/com/google/gerrit/server/config/UserPreferencesConverter.java
+++ b/java/com/google/gerrit/server/config/UserPreferencesConverter.java
@@ -17,12 +17,14 @@
 import static com.google.common.collect.ImmutableList.toImmutableList;
 
 import com.google.gerrit.common.Nullable;
+import com.google.gerrit.entities.converter.ProtoConverter;
 import com.google.gerrit.extensions.client.DiffPreferencesInfo;
 import com.google.gerrit.extensions.client.EditPreferencesInfo;
 import com.google.gerrit.extensions.client.GeneralPreferencesInfo;
 import com.google.gerrit.extensions.client.MenuItem;
 import com.google.gerrit.proto.Entities.UserPreferences;
 import com.google.protobuf.Message;
+import com.google.protobuf.Parser;
 import com.google.protobuf.ProtocolMessageEnum;
 import java.util.function.Function;
 
@@ -33,8 +35,12 @@
  * equivalents in Spanner.
  */
 public final class UserPreferencesConverter {
-  public static final class GeneralPreferencesInfoConverter {
-    public static UserPreferences.GeneralPreferencesInfo toProto(GeneralPreferencesInfo info) {
+  public enum GeneralPreferencesInfoConverter
+      implements ProtoConverter<UserPreferences.GeneralPreferencesInfo, GeneralPreferencesInfo> {
+    GENERAL_PREFERENCES_INFO_CONVERTER;
+
+    @Override
+    public UserPreferences.GeneralPreferencesInfo toProto(GeneralPreferencesInfo info) {
       UserPreferences.GeneralPreferencesInfo.Builder builder =
           UserPreferences.GeneralPreferencesInfo.newBuilder();
       builder = setIfNotNull(builder, builder::setChangesPerPage, info.changesPerPage);
@@ -116,7 +122,8 @@
       return builder.build();
     }
 
-    public static GeneralPreferencesInfo fromProto(UserPreferences.GeneralPreferencesInfo proto) {
+    @Override
+    public GeneralPreferencesInfo fromProto(UserPreferences.GeneralPreferencesInfo proto) {
       GeneralPreferencesInfo res = new GeneralPreferencesInfo();
       res.changesPerPage = proto.hasChangesPerPage() ? proto.getChangesPerPage() : null;
       res.downloadScheme = proto.hasDownloadScheme() ? proto.getDownloadScheme() : null;
@@ -177,6 +184,11 @@
       return res;
     }
 
+    @Override
+    public Parser<UserPreferences.GeneralPreferencesInfo> getParser() {
+      return UserPreferences.GeneralPreferencesInfo.parser();
+    }
+
     private static UserPreferences.GeneralPreferencesInfo.MenuItem menuItemToProto(
         MenuItem javaItem) {
       UserPreferences.GeneralPreferencesInfo.MenuItem.Builder builder =
@@ -200,12 +212,14 @@
           proto.hasTarget() ? proto.getTarget().trim() : null,
           proto.hasId() ? proto.getId().trim() : null);
     }
-
-    private GeneralPreferencesInfoConverter() {}
   }
 
-  public static final class DiffPreferencesInfoConverter {
-    public static UserPreferences.DiffPreferencesInfo toProto(DiffPreferencesInfo info) {
+  public enum DiffPreferencesInfoConverter
+      implements ProtoConverter<UserPreferences.DiffPreferencesInfo, DiffPreferencesInfo> {
+    DIFF_PREFERENCES_INFO_CONVERTER;
+
+    @Override
+    public UserPreferences.DiffPreferencesInfo toProto(DiffPreferencesInfo info) {
       UserPreferences.DiffPreferencesInfo.Builder builder =
           UserPreferences.DiffPreferencesInfo.newBuilder();
       builder = setIfNotNull(builder, builder::setContext, info.context);
@@ -241,7 +255,8 @@
       return builder.build();
     }
 
-    public static DiffPreferencesInfo fromProto(UserPreferences.DiffPreferencesInfo proto) {
+    @Override
+    public DiffPreferencesInfo fromProto(UserPreferences.DiffPreferencesInfo proto) {
       DiffPreferencesInfo res = new DiffPreferencesInfo();
       res.context = proto.hasContext() ? proto.getContext() : null;
       res.tabSize = proto.hasTabSize() ? proto.getTabSize() : null;
@@ -276,11 +291,18 @@
       return res;
     }
 
-    private DiffPreferencesInfoConverter() {}
+    @Override
+    public Parser<UserPreferences.DiffPreferencesInfo> getParser() {
+      return UserPreferences.DiffPreferencesInfo.parser();
+    }
   }
 
-  public static final class EditPreferencesInfoConverter {
-    public static UserPreferences.EditPreferencesInfo toProto(EditPreferencesInfo info) {
+  public enum EditPreferencesInfoConverter
+      implements ProtoConverter<UserPreferences.EditPreferencesInfo, EditPreferencesInfo> {
+    EDIT_PREFERENCES_INFO_CONVERTER;
+
+    @Override
+    public UserPreferences.EditPreferencesInfo toProto(EditPreferencesInfo info) {
       UserPreferences.EditPreferencesInfo.Builder builder =
           UserPreferences.EditPreferencesInfo.newBuilder();
       builder = setIfNotNull(builder, builder::setTabSize, info.tabSize);
@@ -300,7 +322,8 @@
       return builder.build();
     }
 
-    public static EditPreferencesInfo fromProto(UserPreferences.EditPreferencesInfo proto) {
+    @Override
+    public EditPreferencesInfo fromProto(UserPreferences.EditPreferencesInfo proto) {
       EditPreferencesInfo res = new EditPreferencesInfo();
       res.tabSize = proto.hasTabSize() ? proto.getTabSize() : null;
       res.lineLength = proto.hasLineLength() ? proto.getLineLength() : null;
@@ -320,7 +343,10 @@
       return res;
     }
 
-    private EditPreferencesInfoConverter() {}
+    @Override
+    public Parser<UserPreferences.EditPreferencesInfo> getParser() {
+      return UserPreferences.EditPreferencesInfo.parser();
+    }
   }
 
   private static <ValueT, BuilderT extends Message.Builder> BuilderT setIfNotNull(
diff --git a/javatests/com/google/gerrit/server/config/UserPreferencesConverterTest.java b/javatests/com/google/gerrit/server/config/UserPreferencesConverterTest.java
index 8cfcdbd..621b06b 100644
--- a/javatests/com/google/gerrit/server/config/UserPreferencesConverterTest.java
+++ b/javatests/com/google/gerrit/server/config/UserPreferencesConverterTest.java
@@ -18,6 +18,9 @@
 import static com.google.common.collect.ImmutableMap.toImmutableMap;
 import static com.google.common.truth.Truth.assertThat;
 import static com.google.common.truth.extensions.proto.ProtoTruth.assertThat;
+import static com.google.gerrit.server.config.UserPreferencesConverter.DiffPreferencesInfoConverter.DIFF_PREFERENCES_INFO_CONVERTER;
+import static com.google.gerrit.server.config.UserPreferencesConverter.EditPreferencesInfoConverter.EDIT_PREFERENCES_INFO_CONVERTER;
+import static com.google.gerrit.server.config.UserPreferencesConverter.GeneralPreferencesInfoConverter.GENERAL_PREFERENCES_INFO_CONVERTER;
 import static java.util.Arrays.stream;
 
 import com.google.common.collect.ImmutableList;
@@ -35,9 +38,6 @@
 import com.google.gerrit.proto.Entities.UserPreferences.GeneralPreferencesInfo.MenuItem;
 import com.google.gerrit.proto.Entities.UserPreferences.GeneralPreferencesInfo.Theme;
 import com.google.gerrit.proto.Entities.UserPreferences.GeneralPreferencesInfo.TimeFormat;
-import com.google.gerrit.server.config.UserPreferencesConverter.DiffPreferencesInfoConverter;
-import com.google.gerrit.server.config.UserPreferencesConverter.EditPreferencesInfoConverter;
-import com.google.gerrit.server.config.UserPreferencesConverter.GeneralPreferencesInfoConverter;
 import com.google.protobuf.Descriptors.Descriptor;
 import com.google.protobuf.Descriptors.EnumDescriptor;
 import java.util.EnumSet;
@@ -112,8 +112,8 @@
             .setDiffPageSidebar("plugin-insight")
             .build();
     UserPreferences.GeneralPreferencesInfo resProto =
-        GeneralPreferencesInfoConverter.toProto(
-            GeneralPreferencesInfoConverter.fromProto(originalProto));
+        GENERAL_PREFERENCES_INFO_CONVERTER.toProto(
+            GENERAL_PREFERENCES_INFO_CONVERTER.fromProto(originalProto));
     assertThat(resProto).isEqualTo(originalProto);
   }
 
@@ -125,7 +125,8 @@
             new com.google.gerrit.extensions.client.MenuItem(
                 " name1 ", " url1 ", " target1 ", " id1 "),
             new com.google.gerrit.extensions.client.MenuItem(null, " url2 ", null, null));
-    UserPreferences.GeneralPreferencesInfo resProto = GeneralPreferencesInfoConverter.toProto(info);
+    UserPreferences.GeneralPreferencesInfo resProto =
+        GENERAL_PREFERENCES_INFO_CONVERTER.toProto(info);
     assertThat(resProto)
         .isEqualTo(
             UserPreferences.GeneralPreferencesInfo.newBuilder()
@@ -155,7 +156,7 @@
                         .build(),
                     MenuItem.newBuilder().setUrl(" url2 ").build()))
             .build();
-    GeneralPreferencesInfo info = GeneralPreferencesInfoConverter.fromProto(originalProto);
+    GeneralPreferencesInfo info = GENERAL_PREFERENCES_INFO_CONVERTER.fromProto(originalProto);
     assertThat(info.my)
         .containsExactly(
             new com.google.gerrit.extensions.client.MenuItem("name1", "url1", "target1", "id1"),
@@ -165,14 +166,14 @@
   @Test
   public void generalPreferencesInfo_emptyJavaToProto() {
     GeneralPreferencesInfo info = new GeneralPreferencesInfo();
-    UserPreferences.GeneralPreferencesInfo res = GeneralPreferencesInfoConverter.toProto(info);
+    UserPreferences.GeneralPreferencesInfo res = GENERAL_PREFERENCES_INFO_CONVERTER.toProto(info);
     assertThat(res).isEqualToDefaultInstance();
   }
 
   @Test
   public void generalPreferencesInfo_defaultJavaToProto() {
     GeneralPreferencesInfo info = GeneralPreferencesInfo.defaults();
-    UserPreferences.GeneralPreferencesInfo res = GeneralPreferencesInfoConverter.toProto(info);
+    UserPreferences.GeneralPreferencesInfo res = GENERAL_PREFERENCES_INFO_CONVERTER.toProto(info);
     assertThat(res)
         .ignoringFieldAbsence()
         .isEqualTo(UserPreferences.GeneralPreferencesInfo.getDefaultInstance());
@@ -182,7 +183,7 @@
   public void generalPreferencesInfo_emptyProtoToJava() {
     UserPreferences.GeneralPreferencesInfo proto =
         UserPreferences.GeneralPreferencesInfo.getDefaultInstance();
-    GeneralPreferencesInfo res = GeneralPreferencesInfoConverter.fromProto(proto);
+    GeneralPreferencesInfo res = GENERAL_PREFERENCES_INFO_CONVERTER.fromProto(proto);
     assertThat(res).isEqualTo(new GeneralPreferencesInfo());
   }
 
@@ -238,21 +239,22 @@
             .setSkipUncommented(false)
             .build();
     UserPreferences.DiffPreferencesInfo resProto =
-        DiffPreferencesInfoConverter.toProto(DiffPreferencesInfoConverter.fromProto(originalProto));
+        DIFF_PREFERENCES_INFO_CONVERTER.toProto(
+            DIFF_PREFERENCES_INFO_CONVERTER.fromProto(originalProto));
     assertThat(resProto).isEqualTo(originalProto);
   }
 
   @Test
   public void diffPreferencesInfo_emptyJavaToProto() {
     DiffPreferencesInfo info = new DiffPreferencesInfo();
-    UserPreferences.DiffPreferencesInfo res = DiffPreferencesInfoConverter.toProto(info);
+    UserPreferences.DiffPreferencesInfo res = DIFF_PREFERENCES_INFO_CONVERTER.toProto(info);
     assertThat(res).isEqualToDefaultInstance();
   }
 
   @Test
   public void diffPreferencesInfo_defaultJavaToProto() {
     DiffPreferencesInfo info = DiffPreferencesInfo.defaults();
-    UserPreferences.DiffPreferencesInfo res = DiffPreferencesInfoConverter.toProto(info);
+    UserPreferences.DiffPreferencesInfo res = DIFF_PREFERENCES_INFO_CONVERTER.toProto(info);
     assertThat(res)
         .ignoringFieldAbsence()
         .isEqualTo(UserPreferences.DiffPreferencesInfo.getDefaultInstance());
@@ -262,7 +264,7 @@
   public void diffPreferencesInfo_emptyProtoToJava() {
     UserPreferences.DiffPreferencesInfo proto =
         UserPreferences.DiffPreferencesInfo.getDefaultInstance();
-    DiffPreferencesInfo res = DiffPreferencesInfoConverter.fromProto(proto);
+    DiffPreferencesInfo res = DIFF_PREFERENCES_INFO_CONVERTER.fromProto(proto);
     assertThat(res).isEqualTo(new DiffPreferencesInfo());
   }
 
@@ -308,21 +310,22 @@
             .setShowBase(false)
             .build();
     UserPreferences.EditPreferencesInfo resProto =
-        EditPreferencesInfoConverter.toProto(EditPreferencesInfoConverter.fromProto(originalProto));
+        EDIT_PREFERENCES_INFO_CONVERTER.toProto(
+            EDIT_PREFERENCES_INFO_CONVERTER.fromProto(originalProto));
     assertThat(resProto).isEqualTo(originalProto);
   }
 
   @Test
   public void editPreferencesInfo_emptyJavaToProto() {
     EditPreferencesInfo info = new EditPreferencesInfo();
-    UserPreferences.EditPreferencesInfo res = EditPreferencesInfoConverter.toProto(info);
+    UserPreferences.EditPreferencesInfo res = EDIT_PREFERENCES_INFO_CONVERTER.toProto(info);
     assertThat(res).isEqualToDefaultInstance();
   }
 
   @Test
   public void editPreferencesInfo_defaultJavaToProto() {
     EditPreferencesInfo info = EditPreferencesInfo.defaults();
-    UserPreferences.EditPreferencesInfo res = EditPreferencesInfoConverter.toProto(info);
+    UserPreferences.EditPreferencesInfo res = EDIT_PREFERENCES_INFO_CONVERTER.toProto(info);
     assertThat(res)
         .ignoringFieldAbsence()
         .isEqualTo(UserPreferences.EditPreferencesInfo.getDefaultInstance());
@@ -332,7 +335,7 @@
   public void editPreferencesInfo_emptyProtoToJava() {
     UserPreferences.EditPreferencesInfo proto =
         UserPreferences.EditPreferencesInfo.getDefaultInstance();
-    EditPreferencesInfo res = EditPreferencesInfoConverter.fromProto(proto);
+    EditPreferencesInfo res = EDIT_PREFERENCES_INFO_CONVERTER.fromProto(proto);
     assertThat(res).isEqualTo(new EditPreferencesInfo());
   }