Merge branch 'stable-2.14' into stable-2.15

* stable-2.14:
  Adapt to changes in Gerrit core
  Adapt to changes in Gerrit core

Change-Id: I5e1cbf15f66668b6992dcda18e961f2988a90bef
diff --git a/BUILD b/BUILD
index d6d4eeb..9ccdae9 100644
--- a/BUILD
+++ b/BUILD
@@ -1,4 +1,5 @@
-load("//tools/bzl:plugin.bzl", "gerrit_plugin")
+load("//tools/bzl:junit.bzl", "junit_tests")
+load("//tools/bzl:plugin.bzl", "gerrit_plugin", "PLUGIN_DEPS", "PLUGIN_TEST_DEPS")
 
 gerrit_plugin(
     name = "singleusergroup",
@@ -9,3 +10,13 @@
     ],
     resources = glob(["src/main/resources/**/*"]),
 )
+
+junit_tests(
+    name = "singleusergroup_tests",
+    srcs = glob(["src/test/java/**/*Test.java"]),
+    tags = ["replication"],
+    visibility = ["//visibility:public"],
+    deps = PLUGIN_TEST_DEPS + PLUGIN_DEPS + [
+        ":singleusergroup__plugin",
+    ],
+)
diff --git a/src/main/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroup.java b/src/main/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroup.java
index a61c851..bfe18c1 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroup.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroup.java
@@ -24,23 +24,25 @@
 import com.google.gerrit.common.data.GroupDescription;
 import com.google.gerrit.common.data.GroupReference;
 import com.google.gerrit.extensions.registration.DynamicSet;
+import com.google.gerrit.index.query.QueryParseException;
 import com.google.gerrit.reviewdb.client.Account;
 import com.google.gerrit.reviewdb.client.AccountGroup;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.account.AbstractGroupBackend;
 import com.google.gerrit.server.account.AccountCache;
 import com.google.gerrit.server.account.AccountState;
-import com.google.gerrit.server.account.ExternalId;
 import com.google.gerrit.server.account.GroupBackend;
 import com.google.gerrit.server.account.GroupMembership;
 import com.google.gerrit.server.account.ListGroupMembership;
-import com.google.gerrit.server.project.ProjectControl;
-import com.google.gerrit.server.query.QueryParseException;
+import com.google.gerrit.server.account.externalids.ExternalId;
+import com.google.gerrit.server.project.ProjectState;
+import com.google.gerrit.server.query.account.AccountPredicates;
 import com.google.gerrit.server.query.account.AccountQueryBuilder;
 import com.google.gerrit.server.query.account.AccountQueryProcessor;
 import com.google.gwtorm.server.OrmException;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
+import com.google.inject.Provider;
 import com.google.inject.Singleton;
 import java.util.Collection;
 import java.util.Collections;
@@ -72,16 +74,16 @@
 
   private final AccountCache accountCache;
   private final AccountQueryBuilder queryBuilder;
-  private final AccountQueryProcessor queryProcessor;
+  private final Provider<AccountQueryProcessor> queryProvider;
 
   @Inject
   SingleUserGroup(
       AccountCache accountCache,
       AccountQueryBuilder queryBuilder,
-      AccountQueryProcessor queryProcessor) {
+      Provider<AccountQueryProcessor> queryProvider) {
     this.accountCache = accountCache;
     this.queryBuilder = queryBuilder;
-    this.queryProcessor = queryProcessor;
+    this.queryProvider = queryProvider;
   }
 
   @Override
@@ -90,7 +92,7 @@
   }
 
   @Override
-  public GroupMembership membershipsOf(final IdentifiedUser user) {
+  public GroupMembership membershipsOf(IdentifiedUser user) {
     ImmutableList.Builder<AccountGroup.UUID> groups = ImmutableList.builder();
     groups.add(uuid(user.getAccountId()));
     if (user.getUserName() != null) {
@@ -100,7 +102,7 @@
   }
 
   @Override
-  public GroupDescription.Basic get(final AccountGroup.UUID uuid) {
+  public GroupDescription.Basic get(AccountGroup.UUID uuid) {
     String ident = username(uuid);
     AccountState state;
     if (ident.matches(ACCOUNT_ID_PATTERN)) {
@@ -141,10 +143,14 @@
   }
 
   @Override
-  public Collection<GroupReference> suggest(String name, @Nullable ProjectControl project) {
+  public Collection<GroupReference> suggest(String name, @Nullable ProjectState project) {
     try {
       return Lists.transform(
-          queryProcessor.setLimit(MAX).query(queryBuilder.defaultQuery(name)).entities(),
+          queryProvider
+              .get()
+              .setUserProvidedLimit(MAX)
+              .query(AccountPredicates.andActive(queryBuilder.defaultQuery(name)))
+              .entities(),
           new Function<AccountState, GroupReference>() {
             @Override
             public GroupReference apply(AccountState state) {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroupTest.java b/src/test/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroupTest.java
new file mode 100644
index 0000000..9bc8859
--- /dev/null
+++ b/src/test/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroupTest.java
@@ -0,0 +1,38 @@
+// 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.singleusergroup;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.gerrit.acceptance.LightweightPluginDaemonTest;
+import com.google.gerrit.acceptance.NoHttpd;
+import com.google.gerrit.acceptance.TestPlugin;
+import com.google.gerrit.extensions.common.GroupInfo;
+import java.util.Map;
+import org.junit.Test;
+
+@NoHttpd
+@TestPlugin(
+    name = "singleusergroup",
+    sysModule = "com.googlesource.gerrit.plugins.singleusergroup.SingleUserGroup$Module")
+public class SingleUserGroupTest extends LightweightPluginDaemonTest {
+  @Test
+  public void testSuggestion() throws Exception {
+    // No ability to modify account and therefore no ACL to see secondary email
+    setApiUser(user);
+    Map<String, GroupInfo> groups = gApi.groups().list().withSuggest("adm").getAsMap();
+    assertThat(groups).containsKey("user/Administrator (admin)");
+  }
+}