Remove GWT UI

This partially reverts I9e97987428 that split reviewers plugin in two
artifacts: backend only and regular one with GWT UI. Now that the GWT
UI is removed, we can merge those artifacts together.

Also adapt the tests to changes in the plugin API.

Change-Id: Iae4531794a124180cbe203b7a9ca2b48ecbff462
diff --git a/BUILD b/BUILD
index fc5a471..6d4d0c5 100644
--- a/BUILD
+++ b/BUILD
@@ -6,37 +6,14 @@
     "gerrit_plugin",
 )
 
-SRC = "src/main/java/com/googlesource/gerrit/plugins/reviewers/"
-
-BACKEND_SRCS = glob([
-    SRC + "common/*.java",
-    SRC + "server/*.java",
-])
-
-gerrit_plugin(
-    name = "reviewers-backend",
-    srcs = BACKEND_SRCS,
-    dir_name = "reviewers",
-    manifest_entries = [
-        # Different jar name, but use same plugin name in manifest so REST API is compatible.
-        "Gerrit-PluginName: reviewers",
-        "Gerrit-Module: com.googlesource.gerrit.plugins.reviewers.server.BackendModule",
-    ],
-    resources = glob(["src/main/resources/**/*"]),
-)
-
 gerrit_plugin(
     name = "reviewers",
-    srcs = BACKEND_SRCS + glob([
-        SRC + "*.java",
-        SRC + "client/*.java",
-    ]),
-    gwt_module = "com.googlesource.gerrit.plugins.reviewers.ReviewersForm",
+    srcs = glob(["src/main/java/**/*.java"]),
     manifest_entries = [
         "Gerrit-PluginName: reviewers",
         "Gerrit-Module: com.googlesource.gerrit.plugins.reviewers.Module",
     ],
-    resources = glob(["src/main/**/*"]),
+    resources = glob(["src/main/resources/**/*"]),
 )
 
 junit_tests(
diff --git a/WORKSPACE b/WORKSPACE
index 8b54e88..dd933f5 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,30 +3,24 @@
 load("//:bazlets.bzl", "load_bazlets")
 
 load_bazlets(
-    commit = "c2227415d5044f8439bd47edffb0f052f8da2ac5",
+    commit = "60bb597a9b8b0700334f8845ca61a7abc604ffcc",
     #local_path = "/home/<user>/projects/bazlets",
 )
 
 # Release Plugin API
-load(
-    "@com_googlesource_gerrit_bazlets//:gerrit_api.bzl",
-    "gerrit_api",
-)
+#load(
+#    "@com_googlesource_gerrit_bazlets//:gerrit_api.bzl",
+#    "gerrit_api",
+#)
 
 # Snapshot Plugin API
-#load(
-#    "@com_googlesource_gerrit_bazlets//:gerrit_api_maven_local.bzl",
-#    "gerrit_api_maven_local",
-#)
 load(
-    "@com_googlesource_gerrit_bazlets//:gerrit_gwt.bzl",
-    "gerrit_gwt",
+    "@com_googlesource_gerrit_bazlets//:gerrit_api_maven_local.bzl",
+    "gerrit_api_maven_local",
 )
 
 # Load release Plugin API
-gerrit_api()
+#gerrit_api()
 
 # Load snapshot Plugin API
-#gerrit_api_maven_local()
-
-gerrit_gwt()
+gerrit_api_maven_local()
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/common/Action.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/Action.java
similarity index 91%
rename from src/main/java/com/googlesource/gerrit/plugins/reviewers/common/Action.java
rename to src/main/java/com/googlesource/gerrit/plugins/reviewers/Action.java
index ebda5e1..04a15fc 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/common/Action.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/Action.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.reviewers.common;
+package com.googlesource.gerrit.plugins.reviewers;
 
 public enum Action {
   ADD,
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/AddReviewers.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/AddReviewers.java
similarity index 98%
rename from src/main/java/com/googlesource/gerrit/plugins/reviewers/server/AddReviewers.java
rename to src/main/java/com/googlesource/gerrit/plugins/reviewers/AddReviewers.java
index 54d1552..ad6e9d5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/AddReviewers.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/AddReviewers.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.reviewers.server;
+package com.googlesource.gerrit.plugins.reviewers;
 
 import com.google.common.flogger.FluentLogger;
 import com.google.gerrit.extensions.api.GerritApi;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/AddReviewersByConfiguration.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/AddReviewersByConfiguration.java
similarity index 96%
rename from src/main/java/com/googlesource/gerrit/plugins/reviewers/server/AddReviewersByConfiguration.java
rename to src/main/java/com/googlesource/gerrit/plugins/reviewers/AddReviewersByConfiguration.java
index 1ef93f2..a03c035 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/AddReviewersByConfiguration.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/AddReviewersByConfiguration.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.reviewers.server;
+package com.googlesource.gerrit.plugins.reviewers;
 
 import com.google.gerrit.extensions.api.GerritApi;
 import com.google.gerrit.extensions.common.ChangeInfo;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/ClientModule.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/ClientModule.java
deleted file mode 100644
index 4aac38f..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/ClientModule.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (C) 2013 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.plugins.reviewers;
-
-import com.google.gerrit.extensions.registration.DynamicSet;
-import com.google.gerrit.extensions.webui.GwtPlugin;
-import com.google.gerrit.extensions.webui.TopMenu;
-import com.google.gerrit.extensions.webui.WebUiPlugin;
-import com.google.inject.AbstractModule;
-
-public class ClientModule extends AbstractModule {
-  @Override
-  protected void configure() {
-    DynamicSet.bind(binder(), TopMenu.class).to(ReviewersTopMenu.class);
-    DynamicSet.bind(binder(), WebUiPlugin.class).toInstance(new GwtPlugin("reviewers"));
-  }
-}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/GetReviewers.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/GetReviewers.java
similarity index 95%
rename from src/main/java/com/googlesource/gerrit/plugins/reviewers/server/GetReviewers.java
rename to src/main/java/com/googlesource/gerrit/plugins/reviewers/GetReviewers.java
index d8ce0ca..7ee4c83 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/GetReviewers.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/GetReviewers.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.reviewers.server;
+package com.googlesource.gerrit.plugins.reviewers;
 
 import com.google.gerrit.extensions.restapi.RestApiException;
 import com.google.gerrit.extensions.restapi.RestReadView;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/ModifyReviewersConfigCapability.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/ModifyReviewersConfigCapability.java
similarity index 93%
rename from src/main/java/com/googlesource/gerrit/plugins/reviewers/server/ModifyReviewersConfigCapability.java
rename to src/main/java/com/googlesource/gerrit/plugins/reviewers/ModifyReviewersConfigCapability.java
index b97e422..4c6cb9a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/ModifyReviewersConfigCapability.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/ModifyReviewersConfigCapability.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.reviewers.server;
+package com.googlesource.gerrit.plugins.reviewers;
 
 import com.google.gerrit.extensions.config.CapabilityDefinition;
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/Module.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/Module.java
index 55b663c..076040b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/Module.java
@@ -14,22 +14,69 @@
 
 package com.googlesource.gerrit.plugins.reviewers;
 
+import static com.google.gerrit.server.project.ProjectResource.PROJECT_KIND;
+import static com.googlesource.gerrit.plugins.reviewers.ModifyReviewersConfigCapability.MODIFY_REVIEWERS_CONFIG;
+
+import com.google.gerrit.extensions.annotations.Exports;
+import com.google.gerrit.extensions.config.CapabilityDefinition;
+import com.google.gerrit.extensions.config.FactoryModule;
+import com.google.gerrit.extensions.events.PrivateStateChangedListener;
+import com.google.gerrit.extensions.events.RevisionCreatedListener;
+import com.google.gerrit.extensions.events.WorkInProgressStateChangedListener;
+import com.google.gerrit.extensions.registration.DynamicSet;
+import com.google.gerrit.extensions.restapi.RestApiModule;
+import com.google.gerrit.server.change.ReviewerSuggestion;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
-import com.googlesource.gerrit.plugins.reviewers.server.BackendModule;
-import com.googlesource.gerrit.plugins.reviewers.server.ReviewersConfig;
 
-public class Module extends AbstractModule {
-  private final ReviewersConfig cfg;
+public class Module extends FactoryModule {
+  private final boolean enableREST;
+  private final boolean suggestOnly;
 
   @Inject
   public Module(ReviewersConfig cfg) {
-    this.cfg = cfg;
+    this(cfg.enableREST(), cfg.suggestOnly());
+  }
+
+  public Module(boolean enableREST, boolean suggestOnly) {
+    this.enableREST = enableREST;
+    this.suggestOnly = suggestOnly;
   }
 
   @Override
   protected void configure() {
-    install(new BackendModule(cfg.enableREST(), cfg.suggestOnly()));
-    install(new ClientModule());
+    bind(CapabilityDefinition.class)
+        .annotatedWith(Exports.named(MODIFY_REVIEWERS_CONFIG))
+        .to(ModifyReviewersConfigCapability.class);
+
+    if (suggestOnly) {
+      install(
+          new AbstractModule() {
+            @Override
+            protected void configure() {
+              bind(ReviewerSuggestion.class)
+                  .annotatedWith(Exports.named("reviewer-suggest"))
+                  .to(Reviewers.class);
+            }
+          });
+    } else {
+      DynamicSet.bind(binder(), RevisionCreatedListener.class).to(Reviewers.class);
+      DynamicSet.bind(binder(), WorkInProgressStateChangedListener.class).to(Reviewers.class);
+      DynamicSet.bind(binder(), PrivateStateChangedListener.class).to(Reviewers.class);
+    }
+
+    factory(AddReviewersByConfiguration.Factory.class);
+
+    if (enableREST) {
+      install(
+          new RestApiModule() {
+            @Override
+            protected void configure() {
+              get(PROJECT_KIND, "reviewers").to(GetReviewers.class);
+              put(PROJECT_KIND, "reviewers").to(PutReviewers.class);
+              get(PROJECT_KIND, "suggest_reviewers").to(SuggestProjectReviewers.class);
+            }
+          });
+    }
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/PutReviewers.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/PutReviewers.java
similarity index 95%
rename from src/main/java/com/googlesource/gerrit/plugins/reviewers/server/PutReviewers.java
rename to src/main/java/com/googlesource/gerrit/plugins/reviewers/PutReviewers.java
index cc985df..ead5c24 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/PutReviewers.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/PutReviewers.java
@@ -12,9 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.reviewers.server;
+package com.googlesource.gerrit.plugins.reviewers;
 
-import static com.googlesource.gerrit.plugins.reviewers.server.ModifyReviewersConfigCapability.MODIFY_REVIEWERS_CONFIG;
+import static com.googlesource.gerrit.plugins.reviewers.ModifyReviewersConfigCapability.MODIFY_REVIEWERS_CONFIG;
 
 import com.google.common.flogger.FluentLogger;
 import com.google.gerrit.extensions.annotations.PluginName;
@@ -39,8 +39,7 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
-import com.googlesource.gerrit.plugins.reviewers.common.Action;
-import com.googlesource.gerrit.plugins.reviewers.server.PutReviewers.Input;
+import com.googlesource.gerrit.plugins.reviewers.PutReviewers.Input;
 import java.io.IOException;
 import java.util.List;
 import org.eclipse.jgit.errors.ConfigInvalidException;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/ReviewerFilterSection.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewerFilterSection.java
similarity index 95%
rename from src/main/java/com/googlesource/gerrit/plugins/reviewers/server/ReviewerFilterSection.java
rename to src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewerFilterSection.java
index 7f0000a..06e7387 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/ReviewerFilterSection.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewerFilterSection.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.reviewers.server;
+package com.googlesource.gerrit.plugins.reviewers;
 
 import java.util.Objects;
 import java.util.Set;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/Reviewers.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/Reviewers.java
similarity index 97%
rename from src/main/java/com/googlesource/gerrit/plugins/reviewers/server/Reviewers.java
rename to src/main/java/com/googlesource/gerrit/plugins/reviewers/Reviewers.java
index f033407..a3441c0 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/Reviewers.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/Reviewers.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.reviewers.server;
+package com.googlesource.gerrit.plugins.reviewers;
 
 import static java.util.stream.Collectors.toSet;
 
@@ -51,7 +51,7 @@
         PrivateStateChangedListener,
         WorkInProgressStateChangedListener,
         ReviewerSuggestion {
-	  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 
   private final ReviewersResolver resolver;
   private final AddReviewersByConfiguration.Factory byConfigFactory;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/ReviewersConfig.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewersConfig.java
similarity index 98%
rename from src/main/java/com/googlesource/gerrit/plugins/reviewers/server/ReviewersConfig.java
rename to src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewersConfig.java
index fe06aa3..b277d62 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/ReviewersConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewersConfig.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.reviewers.server;
+package com.googlesource.gerrit.plugins.reviewers;
 
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableList;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewersForm.gwt.xml b/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewersForm.gwt.xml
deleted file mode 100644
index 1ea6083..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewersForm.gwt.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2014 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.
--->
-<module rename-to="reviewers">
-  <!-- Inherit the core Web Toolkit stuff.                        -->
-  <inherits name="com.google.gwt.user.User"/>
-  <!-- Other module inherits                                      -->
-  <inherits name="com.google.gerrit.Plugin"/>
-  <inherits name="com.google.gwt.http.HTTP"/>
-  <inherits name="com.google.gwt.json.JSON"/>
-  <inherits name="com.google.gwtexpui.globalkey.GlobalKey"/>
-  <!-- Using GWT built-in themes adds a number of static          -->
-  <!-- resources to the plugin. No theme inherits lines were      -->
-  <!-- added in order to make this plugin as simple as possible   -->
-  <!-- Specify the app entry point class.                         -->
-  <entry-point class="com.googlesource.gerrit.plugins.reviewers.client.ReviewersPlugin"/>
-  <stylesheet src="reviewers.css"/>
-</module>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/ReviewersResolver.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewersResolver.java
similarity index 96%
rename from src/main/java/com/googlesource/gerrit/plugins/reviewers/server/ReviewersResolver.java
rename to src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewersResolver.java
index 10785f2..53a571d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/ReviewersResolver.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewersResolver.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.reviewers.server;
+package com.googlesource.gerrit.plugins.reviewers;
 
 import static java.util.stream.Collectors.toSet;
 
@@ -120,7 +120,8 @@
       String group) {
     try {
       Set<Account.Id> accounts =
-          groupMembers.listAccounts(groupResolver.get().parse(group).getGroupUUID(), project)
+          groupMembers
+              .listAccounts(groupResolver.get().parse(group).getGroupUUID(), project)
               .stream()
               .filter(Account::isActive)
               .map(Account::getId)
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewersTopMenu.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewersTopMenu.java
deleted file mode 100644
index 2c839a0..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewersTopMenu.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (C) 2014 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.plugins.reviewers;
-
-import com.google.common.collect.Lists;
-import com.google.gerrit.extensions.annotations.PluginName;
-import com.google.gerrit.extensions.client.MenuItem;
-import com.google.gerrit.extensions.webui.TopMenu;
-import com.google.inject.Inject;
-import java.util.Collections;
-import java.util.List;
-
-public class ReviewersTopMenu implements TopMenu {
-  private final List<MenuEntry> menuEntries;
-
-  @Inject
-  ReviewersTopMenu(@PluginName String pluginName) {
-    menuEntries = Lists.newArrayList();
-    menuEntries.add(
-        new MenuEntry(
-            "Projects",
-            Collections.singletonList(
-                new MenuItem("Reviewers", "#/x/" + pluginName + "/p/${projectName}", "_self"))));
-  }
-
-  @Override
-  public List<MenuEntry> getEntries() {
-    return this.menuEntries;
-  }
-}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/SuggestProjectReviewers.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/SuggestProjectReviewers.java
similarity index 97%
rename from src/main/java/com/googlesource/gerrit/plugins/reviewers/server/SuggestProjectReviewers.java
rename to src/main/java/com/googlesource/gerrit/plugins/reviewers/SuggestProjectReviewers.java
index 35619c1..a07b06e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/SuggestProjectReviewers.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/SuggestProjectReviewers.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.reviewers.server;
+package com.googlesource.gerrit.plugins.reviewers;
 
 import com.google.gerrit.extensions.common.AccountVisibility;
 import com.google.gerrit.extensions.common.SuggestedReviewerInfo;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/client/AccountCapabilities.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/client/AccountCapabilities.java
deleted file mode 100644
index 397ffcb..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/client/AccountCapabilities.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (C) 2018 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.plugins.reviewers.client;
-
-import com.google.gerrit.plugin.client.rpc.RestApi;
-import com.google.gwt.core.client.JavaScriptObject;
-import com.google.gwt.user.client.rpc.AsyncCallback;
-
-public class AccountCapabilities extends JavaScriptObject {
-  static String MODIFY_REVIEWERS_CONFIG = "reviewers-modifyReviewersConfig";
-
-  public static void queryPluginCapability(AsyncCallback<AccountCapabilities> cb) {
-    new RestApi("/accounts/self/capabilities").addParameter("q", MODIFY_REVIEWERS_CONFIG).get(cb);
-  }
-
-  protected AccountCapabilities() {}
-
-  public final native boolean canPerform(String name) /*-{ return this[name] ? true : false; }-*/;
-}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/client/Action.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/client/Action.java
deleted file mode 100644
index 96ebd14..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/client/Action.java
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (C) 2014 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.plugins.reviewers.client;
-
-public enum Action {
-  ADD,
-  REMOVE
-}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/client/ChangeReviewersInput.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/client/ChangeReviewersInput.java
deleted file mode 100644
index 9560feb..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/client/ChangeReviewersInput.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (C) 2014 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.plugins.reviewers.client;
-
-import com.google.gwt.core.client.JavaScriptObject;
-
-public class ChangeReviewersInput extends JavaScriptObject {
-  public static ChangeReviewersInput create() {
-    return (ChangeReviewersInput) createObject();
-  }
-
-  protected ChangeReviewersInput() {}
-
-  final void setAction(Action a) {
-    setActionRaw(a.name());
-  }
-
-  final native void setActionRaw(String a) /*-{ if(a)this.action=a; }-*/;
-
-  final native void setFilter(String f) /*-{ if(f)this.filter=f; }-*/;
-
-  final native void setReviewer(String r) /*-{ if(r)this.reviewer=r; }-*/;
-}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/client/ProjectAccessInfo.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/client/ProjectAccessInfo.java
deleted file mode 100644
index 48010ed..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/client/ProjectAccessInfo.java
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (C) 2014 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.plugins.reviewers.client;
-
-import com.google.gwt.core.client.JavaScriptObject;
-
-public class ProjectAccessInfo extends JavaScriptObject {
-  public final native boolean isOwner() /*-{ return this.is_owner ? true : false; }-*/;
-
-  protected ProjectAccessInfo() {}
-}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/client/ReviewerFilterSection.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/client/ReviewerFilterSection.java
deleted file mode 100644
index eed5448..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/client/ReviewerFilterSection.java
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (C) 2014 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.plugins.reviewers.client;
-
-import com.google.gwt.core.client.JavaScriptObject;
-import com.google.gwt.core.client.JsArrayString;
-
-public class ReviewerFilterSection extends JavaScriptObject {
-  public final native String filter() /*-{ return this.filter; }-*/;
-
-  public final native JsArrayString reviewers() /*-{ return this.reviewers; }-*/;
-
-  protected ReviewerFilterSection() {}
-}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/client/ReviewerSuggestOracle.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/client/ReviewerSuggestOracle.java
deleted file mode 100644
index 8bb7556..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/client/ReviewerSuggestOracle.java
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright (C) 2016 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.plugins.reviewers.client;
-
-import com.google.gerrit.client.rpc.NativeMap;
-import com.google.gerrit.client.rpc.Natives;
-import com.google.gerrit.client.ui.HighlightSuggestion;
-import com.google.gerrit.plugin.client.rpc.RestApi;
-import com.google.gwt.core.client.JavaScriptObject;
-import com.google.gwt.user.client.rpc.AsyncCallback;
-import com.google.gwt.user.client.ui.SuggestOracle;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-
-/** A {@code SuggestOracle} for reviewers. */
-public class ReviewerSuggestOracle extends SuggestOracle {
-  private static final String ACCOUNT_KEY = "account";
-  private static final String GROUP_KEY = "group";
-  private static final String NAME_KEY = "name";
-  private static final String EMAIL_KEY = "email";
-  private static final String ACCOUNT_ID_KEY = "_account_id";
-
-  private final int chars;
-  private final String projectName;
-
-  /**
-   * @param chars minimum chars to start suggesting.
-   * @param projectName the name of the project to check visibility
-   */
-  public ReviewerSuggestOracle(int chars, String projectName) {
-    this.chars = chars;
-    this.projectName = projectName;
-  }
-
-  @Override
-  public boolean isDisplayStringHTML() {
-    return true;
-  }
-
-  private class ReviewerSuggestion extends HighlightSuggestion {
-    private final String name;
-
-    ReviewerSuggestion(String query, String groupName) {
-      super(query, groupName + " (group)");
-      this.name = groupName;
-    }
-
-    ReviewerSuggestion(String query, String fullname, String email, String accountId) {
-      super(query, fullname + ((!email.isEmpty()) ? " <" + email + ">" : " (" + accountId + ")"));
-      this.name = fullname;
-    }
-
-    @Override
-    public String getReplacementString() {
-      return name;
-    }
-  }
-
-  @Override
-  public void requestSuggestions(final Request req, final Callback done) {
-    if (req.getQuery().length() < chars) {
-      responseEmptySuggestion(req, done);
-      return;
-    }
-    RestApi rest = new RestApi("/projects/").id(projectName).view("suggest_reviewers");
-    rest.addParameter("q", req.getQuery());
-    if (req.getLimit() > 0) {
-      rest.addParameter("n", req.getLimit());
-    }
-    rest.get(
-        new AsyncCallback<NativeMap<JavaScriptObject>>() {
-          @Override
-          public void onSuccess(NativeMap<JavaScriptObject> result) {
-            List<String> keys0 = result.sortedKeys();
-            List<Suggestion> suggestions = new ArrayList<>(keys0.size());
-            for (String key0 : keys0) {
-              Set<String> keys1 = Natives.keys(result.get(key0));
-              NativeMap<JavaScriptObject> map1 = result.get(key0).cast();
-              for (String key1 : keys1) {
-                NativeMap<JavaScriptObject> map2 = map1.get(key1).cast();
-                if (ACCOUNT_KEY.equals(key1)) {
-                  String name = map2.get(NAME_KEY).toString();
-                  String email =
-                      (map2.containsKey(EMAIL_KEY)) ? map2.get(EMAIL_KEY).toString() : "";
-                  String accountId = map2.get(ACCOUNT_ID_KEY).toString();
-                  suggestions.add(new ReviewerSuggestion(req.getQuery(), name, email, accountId));
-                } else if (GROUP_KEY.equals(key1)) {
-                  String name = map2.get(NAME_KEY).toString();
-                  suggestions.add(new ReviewerSuggestion(req.getQuery(), name));
-                }
-              }
-            }
-            done.onSuggestionsReady(req, new Response(suggestions));
-          }
-
-          @Override
-          public void onFailure(Throwable caught) {
-            responseEmptySuggestion(req, done);
-          }
-        });
-  }
-
-  private static void responseEmptySuggestion(Request req, Callback done) {
-    List<Suggestion> empty = Collections.emptyList();
-    done.onSuggestionsReady(req, new Response(empty));
-  }
-}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/client/ReviewersPlugin.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/client/ReviewersPlugin.java
deleted file mode 100644
index 29aecf5..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/client/ReviewersPlugin.java
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (C) 2014 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.plugins.reviewers.client;
-
-import com.google.gerrit.plugin.client.Plugin;
-import com.google.gerrit.plugin.client.PluginEntryPoint;
-
-public class ReviewersPlugin extends PluginEntryPoint {
-  @Override
-  public void onPluginLoad() {
-    Plugin.get().screenRegex("p/(.*)", new ReviewersScreen.Factory());
-  }
-}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/client/ReviewersScreen.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/client/ReviewersScreen.java
deleted file mode 100644
index 47bedd7..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/client/ReviewersScreen.java
+++ /dev/null
@@ -1,254 +0,0 @@
-// Copyright (C) 2014 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.plugins.reviewers.client;
-
-import static com.googlesource.gerrit.plugins.reviewers.client.AccountCapabilities.MODIFY_REVIEWERS_CONFIG;
-
-import com.google.gerrit.client.rpc.NativeMap;
-import com.google.gerrit.client.rpc.Natives;
-import com.google.gerrit.plugin.client.rpc.RestApi;
-import com.google.gerrit.plugin.client.screen.Screen;
-import com.google.gwt.core.client.JsArray;
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
-import com.google.gwt.http.client.URL;
-import com.google.gwt.user.client.rpc.AsyncCallback;
-import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.Grid;
-import com.google.gwt.user.client.ui.HorizontalPanel;
-import com.google.gwt.user.client.ui.Image;
-import com.google.gwt.user.client.ui.Label;
-import com.google.gwt.user.client.ui.Panel;
-import com.google.gwt.user.client.ui.SuggestBox;
-import com.google.gwt.user.client.ui.VerticalPanel;
-import com.google.gwtexpui.globalkey.client.NpTextBox;
-import java.util.HashSet;
-import java.util.Objects;
-import java.util.Set;
-
-public class ReviewersScreen extends HorizontalPanel {
-  private static final String REMOVE_BUTTON_IMG = "plugins/reviewers/static/remove_reviewer.png";
-
-  static class Factory implements Screen.EntryPoint {
-    @Override
-    public void onLoad(Screen screen) {
-      screen.setPageTitle("Reviewers");
-      screen.show(new ReviewersScreen(URL.decodeQueryString(screen.getToken(1))));
-    }
-  }
-
-  private boolean isOwner;
-  private boolean hasModifyReviewersConfigCapability;
-  private String projectName;
-  private Set<ReviewerEntry> rEntries;
-
-  ReviewersScreen(String projectName) {
-    setStyleName("reviewers-panel");
-    this.projectName = projectName;
-    this.rEntries = new HashSet<>();
-
-    new RestApi("access/")
-        .addParameter("project", projectName)
-        .get(
-            new AsyncCallback<NativeMap<ProjectAccessInfo>>() {
-
-              @Override
-              public void onSuccess(NativeMap<ProjectAccessInfo> result) {
-                isOwner = result.get(projectName).isOwner();
-                if (isOwner) {
-                  display();
-                } else {
-                  // TODO(davido): Find a way to run above and below requests in parallel
-                  AccountCapabilities.queryPluginCapability(
-                      new AsyncCallback<AccountCapabilities>() {
-
-                        @Override
-                        public void onSuccess(AccountCapabilities result) {
-                          hasModifyReviewersConfigCapability =
-                              result.canPerform(MODIFY_REVIEWERS_CONFIG);
-                          display();
-                        }
-
-                        @Override
-                        public void onFailure(Throwable caught) {}
-                      });
-                }
-              }
-
-              @Override
-              public void onFailure(Throwable caught) {}
-            });
-  }
-
-  void display() {
-    new RestApi("projects")
-        .id(projectName)
-        .view("reviewers")
-        .get(
-            new AsyncCallback<JsArray<ReviewerFilterSection>>() {
-
-              @Override
-              public void onSuccess(JsArray<ReviewerFilterSection> result) {
-                display(result);
-              }
-
-              @Override
-              public void onFailure(Throwable caught) {}
-            });
-  }
-
-  void display(JsArray<ReviewerFilterSection> sections) {
-    add(createEntriesPanel(sections));
-    add(createInputPanel());
-  }
-
-  Panel createEntriesPanel(JsArray<ReviewerFilterSection> sections) {
-    Panel p = new VerticalPanel();
-    for (ReviewerFilterSection section : Natives.asList(sections)) {
-      Label filter = new Label(section.filter());
-      filter.addStyleName("reviewers-filterLabel");
-      p.add(filter);
-      for (String reviewer : Natives.asList(section.reviewers())) {
-        ReviewerEntry rEntry = new ReviewerEntry(section.filter(), reviewer);
-        rEntries.add(rEntry);
-        p.add(createOneEntry(rEntry));
-      }
-    }
-    return p;
-  }
-
-  Panel createOneEntry(final ReviewerEntry e) {
-    Label l = new Label(e.reviewer);
-    l.setStyleName("reviewers-reviewerLabel");
-
-    Image img = new Image(REMOVE_BUTTON_IMG);
-    Button removeButton = Button.wrap(img.getElement());
-    removeButton.setStyleName("reviewers-removeButton");
-    removeButton.setTitle("remove reviewer");
-    removeButton.addClickHandler(
-        new ClickHandler() {
-          @Override
-          public void onClick(final ClickEvent event) {
-            doSave(Action.REMOVE, e);
-          }
-        });
-    removeButton.setVisible(isModifiable());
-
-    HorizontalPanel p = new HorizontalPanel();
-    p.add(l);
-    p.add(removeButton);
-    return p;
-  }
-
-  Panel createInputPanel() {
-    Grid inputGrid = new Grid(2, 2);
-
-    final NpTextBox filterBox = new NpTextBox();
-    filterBox.getElement().setPropertyString("placeholder", "filter");
-    inputGrid.setText(0, 0, "Filter: ");
-    inputGrid.setWidget(0, 1, filterBox);
-
-    // TODO(davido): Remove hard coded start suggest char 3
-    final ReviewerSuggestOracle oracle = new ReviewerSuggestOracle(3, projectName);
-    final SuggestBox reviewerBox = new SuggestBox(oracle, new NpTextBox());
-    reviewerBox.getElement().setPropertyString("placeholder", "reviewer");
-    inputGrid.setText(1, 0, "Reviewer: ");
-    inputGrid.setWidget(1, 1, reviewerBox);
-
-    Button addButton = new Button("Add");
-    addButton.setStyleName("reviewers-addButton");
-    addButton.addClickHandler(
-        new ClickHandler() {
-          @Override
-          public void onClick(final ClickEvent event) {
-            ReviewerEntry e = new ReviewerEntry(filterBox.getValue(), reviewerBox.getValue());
-            if (!rEntries.contains(e) && !e.filter.isEmpty() && !e.reviewer.isEmpty()) {
-              doSave(Action.ADD, e);
-            }
-            filterBox.setText("");
-            reviewerBox.setText("");
-          }
-        });
-    filterBox.setEnabled(isModifiable());
-    reviewerBox.setEnabled(isModifiable());
-    addButton.setEnabled(isModifiable());
-
-    Panel p = new VerticalPanel();
-    p.setStyleName("reviewers-inputPanel");
-    p.add(inputGrid);
-    p.add(addButton);
-    return p;
-  }
-
-  boolean isModifiable() {
-    return isOwner || hasModifyReviewersConfigCapability;
-  }
-
-  void doSave(Action action, ReviewerEntry entry) {
-    ChangeReviewersInput in = ChangeReviewersInput.create();
-    in.setAction(action);
-    in.setFilter(entry.filter);
-    in.setReviewer(entry.reviewer);
-    reset();
-
-    new RestApi("projects")
-        .id(projectName)
-        .view("reviewers")
-        .put(
-            in,
-            new AsyncCallback<JsArray<ReviewerFilterSection>>() {
-
-              @Override
-              public void onSuccess(JsArray<ReviewerFilterSection> result) {
-                display(result);
-              }
-
-              @Override
-              public void onFailure(Throwable caught) {}
-            });
-  }
-
-  void reset() {
-    clear();
-    rEntries = new HashSet<>();
-  }
-
-  static class ReviewerEntry {
-    private String filter;
-    private String reviewer;
-
-    ReviewerEntry(String filter, String reviewer) {
-      this.filter = filter;
-      this.reviewer = reviewer;
-    }
-
-    @Override
-    public int hashCode() {
-      return Objects.hash(filter, reviewer);
-    }
-
-    @Override
-    public boolean equals(Object o) {
-      if (o == null || !(o instanceof ReviewerEntry)) {
-        return false;
-      }
-      ReviewerEntry other = (ReviewerEntry) o;
-      if (!this.filter.equals(other.filter) || !this.reviewer.equals(other.reviewer)) {
-        return false;
-      }
-      return true;
-    }
-  }
-}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/public/reviewers.css b/src/main/java/com/googlesource/gerrit/plugins/reviewers/public/reviewers.css
deleted file mode 100644
index 8a09264..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/public/reviewers.css
+++ /dev/null
@@ -1,28 +0,0 @@
-.reviewers-panel {
-  border-spacing: 10px 10px;
-}
-
-.reviewers-addButton {
-  float: right;
-  margin-right: 5px;
-}
-
-.reviewers-inputPanel {
-  margin-left: 15px;
-}
-
-.reviewers-filterLabel {
-  font-size: 14px;
-  font-weight: bold;
-}
-
-.reviewers-reviewerLabel {
-  font-size: 14px;
-  margin-left: 15px;
-}
-
-.reviewers-removeButton {
-  margin-left: 10px;
-  vertical-align: middle;
-  cursor: pointer;
-}
\ No newline at end of file
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/BackendModule.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/BackendModule.java
deleted file mode 100644
index fc98943..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/BackendModule.java
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright (C) 2018 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.plugins.reviewers.server;
-
-import static com.google.gerrit.server.project.ProjectResource.PROJECT_KIND;
-import static com.googlesource.gerrit.plugins.reviewers.server.ModifyReviewersConfigCapability.MODIFY_REVIEWERS_CONFIG;
-
-import com.google.gerrit.extensions.annotations.Exports;
-import com.google.gerrit.extensions.config.CapabilityDefinition;
-import com.google.gerrit.extensions.config.FactoryModule;
-import com.google.gerrit.extensions.events.PrivateStateChangedListener;
-import com.google.gerrit.extensions.events.RevisionCreatedListener;
-import com.google.gerrit.extensions.events.WorkInProgressStateChangedListener;
-import com.google.gerrit.extensions.registration.DynamicSet;
-import com.google.gerrit.extensions.restapi.RestApiModule;
-import com.google.gerrit.server.change.ReviewerSuggestion;
-import com.google.inject.AbstractModule;
-import com.google.inject.Inject;
-
-public class BackendModule extends FactoryModule {
-  private final boolean enableREST;
-  private final boolean suggestOnly;
-
-  @Inject
-  public BackendModule(ReviewersConfig cfg) {
-    this(cfg.enableREST(), cfg.suggestOnly());
-  }
-
-  public BackendModule(boolean enableREST, boolean suggestOnly) {
-    this.enableREST = enableREST;
-    this.suggestOnly = suggestOnly;
-  }
-
-  @Override
-  protected void configure() {
-    bind(CapabilityDefinition.class)
-        .annotatedWith(Exports.named(MODIFY_REVIEWERS_CONFIG))
-        .to(ModifyReviewersConfigCapability.class);
-
-    if (suggestOnly) {
-      install(
-          new AbstractModule() {
-            @Override
-            protected void configure() {
-              bind(ReviewerSuggestion.class)
-                  .annotatedWith(Exports.named("reviewer-suggest"))
-                  .to(Reviewers.class);
-            }
-          });
-    } else {
-      DynamicSet.bind(binder(), RevisionCreatedListener.class).to(Reviewers.class);
-      DynamicSet.bind(binder(), WorkInProgressStateChangedListener.class).to(Reviewers.class);
-      DynamicSet.bind(binder(), PrivateStateChangedListener.class).to(Reviewers.class);
-    }
-
-    factory(AddReviewersByConfiguration.Factory.class);
-
-    if (enableREST) {
-      install(
-          new RestApiModule() {
-            @Override
-            protected void configure() {
-              get(PROJECT_KIND, "reviewers").to(GetReviewers.class);
-              put(PROJECT_KIND, "reviewers").to(PutReviewers.class);
-              get(PROJECT_KIND, "suggest_reviewers").to(SuggestProjectReviewers.class);
-            }
-          });
-    }
-  }
-}
diff --git a/src/main/resources/Documentation/build.md b/src/main/resources/Documentation/build.md
index 1aac8d5..87a846e 100644
--- a/src/main/resources/Documentation/build.md
+++ b/src/main/resources/Documentation/build.md
@@ -57,13 +57,5 @@
   ./tools/eclipse/project.py
 ```
 
-### Backend-only
-
-There are two separate plugin targets, one containing UI components
-(`reviewers`), and one with only backend components (`reviewers-backend`). The
-UI plugin is only compatible with the GWT UI, and does not work with PolyGerrit.
-Both build instructions will work with either `reviewers` or
-`reviewers-backend`.
-
 How to build the Gerrit Plugin API is described in the [Gerrit
 documentation](../../../Documentation/dev-bazel.html#_extension_and_plugin_api_jar_files).
diff --git a/src/main/resources/static/remove_reviewer.png b/src/main/resources/static/remove_reviewer.png
deleted file mode 100644
index 5a3e6f0..0000000
--- a/src/main/resources/static/remove_reviewer.png
+++ /dev/null
Binary files differ
diff --git a/src/test/java/com/googlesource/gerrit/plugins/reviewers/server/ReviewersConfigIT.java b/src/test/java/com/googlesource/gerrit/plugins/reviewers/ReviewersConfigIT.java
similarity index 92%
rename from src/test/java/com/googlesource/gerrit/plugins/reviewers/server/ReviewersConfigIT.java
rename to src/test/java/com/googlesource/gerrit/plugins/reviewers/ReviewersConfigIT.java
index 32b2243..1ed69b5 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/reviewers/server/ReviewersConfigIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/reviewers/ReviewersConfigIT.java
@@ -12,13 +12,13 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.reviewers.server;
+package com.googlesource.gerrit.plugins.reviewers;
 
 import static com.google.common.truth.Truth.assertThat;
 import static com.google.gerrit.acceptance.GitUtil.fetch;
-import static com.googlesource.gerrit.plugins.reviewers.server.ReviewersConfig.FILENAME;
-import static com.googlesource.gerrit.plugins.reviewers.server.ReviewersConfig.KEY_REVIEWER;
-import static com.googlesource.gerrit.plugins.reviewers.server.ReviewersConfig.SECTION_FILTER;
+import static com.googlesource.gerrit.plugins.reviewers.ReviewersConfig.FILENAME;
+import static com.googlesource.gerrit.plugins.reviewers.ReviewersConfig.KEY_REVIEWER;
+import static com.googlesource.gerrit.plugins.reviewers.ReviewersConfig.SECTION_FILTER;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
diff --git a/src/test/java/com/googlesource/gerrit/plugins/reviewers/server/ReviewersIT.java b/src/test/java/com/googlesource/gerrit/plugins/reviewers/ReviewersIT.java
similarity index 94%
rename from src/test/java/com/googlesource/gerrit/plugins/reviewers/server/ReviewersIT.java
rename to src/test/java/com/googlesource/gerrit/plugins/reviewers/ReviewersIT.java
index 5c5f478..0a9b257 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/reviewers/server/ReviewersIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/reviewers/ReviewersIT.java
@@ -12,15 +12,15 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.reviewers.server;
+package com.googlesource.gerrit.plugins.reviewers;
 
 import static com.google.common.truth.Truth.assertThat;
 import static com.google.common.truth.Truth.assert_;
 import static com.google.gerrit.acceptance.GitUtil.fetch;
 import static com.google.gerrit.extensions.client.ReviewerState.REVIEWER;
-import static com.googlesource.gerrit.plugins.reviewers.server.ReviewersConfig.FILENAME;
-import static com.googlesource.gerrit.plugins.reviewers.server.ReviewersConfig.KEY_REVIEWER;
-import static com.googlesource.gerrit.plugins.reviewers.server.ReviewersConfig.SECTION_FILTER;
+import static com.googlesource.gerrit.plugins.reviewers.ReviewersConfig.FILENAME;
+import static com.googlesource.gerrit.plugins.reviewers.ReviewersConfig.KEY_REVIEWER;
+import static com.googlesource.gerrit.plugins.reviewers.ReviewersConfig.SECTION_FILTER;
 import static java.util.stream.Collectors.toSet;
 
 import com.google.common.collect.ImmutableList;
diff --git a/src/test/java/com/googlesource/gerrit/plugins/reviewers/server/ReviewersResolverIT.java b/src/test/java/com/googlesource/gerrit/plugins/reviewers/ReviewersResolverIT.java
similarity index 88%
rename from src/test/java/com/googlesource/gerrit/plugins/reviewers/server/ReviewersResolverIT.java
rename to src/test/java/com/googlesource/gerrit/plugins/reviewers/ReviewersResolverIT.java
index c893a6c..4784b2c 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/reviewers/server/ReviewersResolverIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/reviewers/ReviewersResolverIT.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.reviewers.server;
+package com.googlesource.gerrit.plugins.reviewers;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -20,6 +20,7 @@
 import com.google.gerrit.acceptance.AbstractDaemonTest;
 import com.google.gerrit.acceptance.NoHttpd;
 import com.google.gerrit.acceptance.TestAccount;
+import com.google.gerrit.acceptance.testsuite.group.GroupOperations;
 import com.google.gerrit.reviewdb.client.Account;
 import com.google.inject.Inject;
 import java.util.Collections;
@@ -30,6 +31,7 @@
 @NoHttpd
 public class ReviewersResolverIT extends AbstractDaemonTest {
 
+  @Inject private GroupOperations groupOperations;
   @Inject private ReviewersResolver resolver;
   private int change;
 
@@ -62,11 +64,13 @@
 
   @Test
   public void testAccountGroupResolve() throws Exception {
-    String group1 = createGroup("group1");
+    String group1 = "group1";
+    groupOperations.newGroup().name(group1).create();
     TestAccount foo = createTestAccount("foo", group1);
     TestAccount bar = createTestAccount("bar", group1);
 
-    String group2 = createGroup("group2");
+    String group2 = "group2";
+    groupOperations.newGroup().name(group2).create();
     TestAccount baz = createTestAccount("baz", group2);
     TestAccount qux = createTestAccount("qux", group2);
 
diff --git a/tools/bzl/plugin.bzl b/tools/bzl/plugin.bzl
index a08b049..0b25d23 100644
--- a/tools/bzl/plugin.bzl
+++ b/tools/bzl/plugin.bzl
@@ -1,6 +1,5 @@
 load(
     "@com_googlesource_gerrit_bazlets//:gerrit_plugin.bzl",
-    "GWT_PLUGIN_DEPS",
     "PLUGIN_DEPS",
     "PLUGIN_TEST_DEPS",
     "gerrit_plugin",
diff --git a/tools/eclipse/BUILD b/tools/eclipse/BUILD
index a06bb85..b51010e 100644
--- a/tools/eclipse/BUILD
+++ b/tools/eclipse/BUILD
@@ -1,15 +1,7 @@
-load(
-    "//tools/bzl:plugin.bzl",
-    "GWT_PLUGIN_DEPS",
-)
 load("//tools/bzl:classpath.bzl", "classpath_collector")
 
 classpath_collector(
     name = "main_classpath_collect",
     testonly = 1,
-    deps = GWT_PLUGIN_DEPS + [
-        "//external:gwt-dev",
-        "//external:gwt-user",
-        "//:reviewers__plugin_test_deps",
-    ],
+    deps = ["//:reviewers__plugin_test_deps"],
 )