Merge branch 'stable-3.1' into stable-3.2

* stable-3.1:
  Update git submodules
  Update git submodules
  UniversalGroupBackend: Fix comparison of boxed Boolean as primitive
  UniversalGroupBackend: Replace repeated log statements with single log
  Fix ModifyCollectionInEnhancedForLoop warning flagged by error prone
  Update git submodules

Change-Id: I1e764dee936f5840061c8a454a84a3e9ce2850bd
diff --git a/java/com/google/gerrit/metrics/dropwizard/BucketedCallback.java b/java/com/google/gerrit/metrics/dropwizard/BucketedCallback.java
index 68f8021..b3860f7 100644
--- a/java/com/google/gerrit/metrics/dropwizard/BucketedCallback.java
+++ b/java/com/google/gerrit/metrics/dropwizard/BucketedCallback.java
@@ -21,8 +21,8 @@
 import com.google.common.collect.Maps;
 import com.google.gerrit.metrics.Description;
 import com.google.gerrit.metrics.Field;
+import java.util.Iterator;
 import java.util.Map;
-import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
 /** Abstract callback metric broken down into buckets. */
@@ -67,10 +67,11 @@
   }
 
   void doPrune() {
-    Set<Map.Entry<Object, BucketedCallback<V>.ValueGauge>> entries = cells.entrySet();
-    for (Map.Entry<Object, ValueGauge> e : entries) {
+    Iterator<Map.Entry<Object, ValueGauge>> it = cells.entrySet().iterator();
+    while (it.hasNext()) {
+      Map.Entry<Object, ValueGauge> e = it.next();
       if (!e.getValue().set) {
-        entries.remove(e);
+        it.remove();
         registry.remove(submetric(e.getKey()));
       }
     }
diff --git a/java/com/google/gerrit/server/account/UniversalGroupBackend.java b/java/com/google/gerrit/server/account/UniversalGroupBackend.java
index e1ee09d..fddbd2b 100644
--- a/java/com/google/gerrit/server/account/UniversalGroupBackend.java
+++ b/java/com/google/gerrit/server/account/UniversalGroupBackend.java
@@ -60,7 +60,7 @@
   private GroupBackend backend(AccountGroup.UUID uuid) {
     if (uuid != null) {
       for (PluginSetEntryContext<GroupBackend> c : backends) {
-        if (c.call(b -> b.handles(uuid))) {
+        if (Boolean.TRUE.equals(c.call(b -> b.handles(uuid)))) {
           return c.get();
         }
       }
@@ -116,6 +116,7 @@
           }
         }
       }
+      logger.atFine().log("Unknown GroupMembership for UUID: %s", uuid);
       return null;
     }
 
@@ -126,7 +127,6 @@
       }
       GroupMembership m = membership(uuid);
       if (m == null) {
-        logger.atFine().log("Unknown GroupMembership for UUID: %s", uuid);
         return false;
       }
       return m.contains(uuid);
@@ -142,7 +142,6 @@
         }
         GroupMembership m = membership(uuid);
         if (m == null) {
-          logger.atFine().log("Unknown GroupMembership for UUID: %s", uuid);
           continue;
         }
         lookups.put(m, uuid);
@@ -198,7 +197,7 @@
   @Override
   public boolean isVisibleToAll(AccountGroup.UUID uuid) {
     for (PluginSetEntryContext<GroupBackend> c : backends) {
-      if (c.call(b -> b.handles(uuid))) {
+      if (Boolean.TRUE.equals(c.call(b -> b.handles(uuid)))) {
         return c.call(b -> b.isVisibleToAll(uuid));
       }
     }