ValidatorConfig: Avoid 'stream::iterator'
The method reference stream::iterator is considered unsafe as it's
mapped to the Iterable interface which can be iterated multiple times
whereas a stream may only be iterated once.
I268068f84 did a similar cleanup in core Gerrit. This change improves
the only usage of stream::iterator in the uploadvalidator plugin.
In the specific case of ValidatorConfig, we can safely switch to a
manifestation of an ImmutableList as ValidatorConfig#groupUUID returns
only non-null values and conf.getStringList("skipGroup") already
reads/manifests all values. Hence, there shouldn't be any negative
side-effects when switching to an ImmutableList here.
Change-Id: Ib81ef3b5e0e6e254d4e3189de49abfa37415771d
diff --git a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/ValidatorConfig.java b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/ValidatorConfig.java
index 4aae4d6..aea74a6 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/ValidatorConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/ValidatorConfig.java
@@ -14,9 +14,13 @@
package com.googlesource.gerrit.plugins.uploadvalidator;
+import static com.google.common.collect.ImmutableList.toImmutableList;
+
+import com.google.common.collect.ImmutableList;
import com.google.gerrit.common.Nullable;
import com.google.gerrit.entities.AccessSection;
import com.google.gerrit.entities.AccountGroup;
+import com.google.gerrit.entities.AccountGroup.UUID;
import com.google.gerrit.entities.Project;
import com.google.gerrit.exceptions.StorageException;
import com.google.gerrit.extensions.annotations.Exports;
@@ -33,7 +37,6 @@
import java.util.Arrays;
import java.util.Optional;
import java.util.regex.Pattern;
-import java.util.stream.Stream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -170,9 +173,11 @@
return false;
}
- Stream<AccountGroup.UUID> skipGroups =
- Arrays.stream(conf.getStringList("skipGroup")).map(this::groupUUID);
- return user.asIdentifiedUser().getEffectiveGroups().containsAnyOf(skipGroups::iterator);
+ ImmutableList<UUID> skipGroups =
+ Arrays.stream(conf.getStringList("skipGroup"))
+ .map(this::groupUUID)
+ .collect(toImmutableList());
+ return user.asIdentifiedUser().getEffectiveGroups().containsAnyOf(skipGroups);
}
private AccountGroup.UUID groupUUID(String groupNameOrUUID) {