Use contains() from containsAnyOf() for single groups

Backend implementations might optimize contains() differently than
containsAnyOf(). In the universal backend forward a single group
lookup to contains(), allowing the implementation to always use
the best method for the current call.

Change-Id: I4673f62f4cc1d67746059964b8d47fefcccce976
This commit is contained in:
Shawn Pearce
2013-01-18 11:22:23 -08:00
parent f1b4c30305
commit 40c6517672

View File

@@ -18,6 +18,7 @@ import static com.google.gerrit.server.account.GroupBackends.GROUP_REF_NAME_COMP
import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.common.collect.Multimap; import com.google.common.collect.Multimap;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import com.google.gerrit.common.data.GroupDescription; import com.google.gerrit.common.data.GroupDescription;
@@ -140,9 +141,15 @@ public class UniversalGroupBackend implements GroupBackend {
} }
lookups.put(m, uuid); lookups.put(m, uuid);
} }
for (Map.Entry<GroupMembership, Collection<AccountGroup.UUID>> entry : for (Map.Entry<GroupMembership, Collection<AccountGroup.UUID>> entry
lookups.asMap().entrySet()) { : lookups .asMap().entrySet()) {
if (entry.getKey().containsAnyOf(entry.getValue())) { GroupMembership m = entry.getKey();
Collection<AccountGroup.UUID> ids = entry.getValue();
if (ids.size() == 1) {
if (m.contains(Iterables.getOnlyElement(ids))) {
return true;
}
} else if (m.containsAnyOf(ids)) {
return true; return true;
} }
} }