Merge "REST API documentation: Add missing spaces in JSON examples"
diff --git a/Documentation/dev-contributing.txt b/Documentation/dev-contributing.txt
index 366e216..e40af24 100644
--- a/Documentation/dev-contributing.txt
+++ b/Documentation/dev-contributing.txt
@@ -164,7 +164,7 @@
To format Java source code, Gerrit uses the
link:https://github.com/google/google-java-format[`google-java-format`]
-tool (version 1.6), and to format Bazel BUILD, WORKSPACE and .bzl files the
+tool (version 1.7), and to format Bazel BUILD, WORKSPACE and .bzl files the
link:https://github.com/bazelbuild/buildtools/tree/master/buildifier[`buildifier`]
tool (version 0.20.0).
These tools automatically apply format according to the style guides; this
diff --git a/Documentation/dev-eclipse.txt b/Documentation/dev-eclipse.txt
index 35073d6..67ced54 100644
--- a/Documentation/dev-eclipse.txt
+++ b/Documentation/dev-eclipse.txt
@@ -66,7 +66,7 @@
To format source code, Gerrit uses the
link:https://github.com/google/google-java-format[`google-java-format`]
-tool (version 1.3), which automatically formats code to follow the
+tool (version 1.7), which automatically formats code to follow the
style guide. See link:dev-contributing.html#style[Code Style] for the
instruction how to set up command line tool that uses this formatter.
The Eclipse plugin is provided that allows to format with the same
diff --git a/Documentation/metrics.txt b/Documentation/metrics.txt
index 6864c68..064859d 100644
--- a/Documentation/metrics.txt
+++ b/Documentation/metrics.txt
@@ -23,10 +23,12 @@
=== Pushes
* `receivecommits/changes`: histogram of number of changes processed
-in a single upload, split up by update type (new change created,
-existing changed updated, change autoclosed).
+in a single upload, split up by update type (change created/updated,
+change autoclosed).
* `receivecommits/latency`: latency per change for processing a push,
split up by update type (create+replace, and autoclose)
+* `receivecommits/push_latency`: total latency for processing a push,
+split up by update type (create+replace, autoclose, normal)
* `receivecommits/timeout`: number of timeouts during push processing.
=== Process
diff --git a/java/com/google/gerrit/acceptance/AbstractNotificationTest.java b/java/com/google/gerrit/acceptance/AbstractNotificationTest.java
index 33b3e91..1a6ed37 100644
--- a/java/com/google/gerrit/acceptance/AbstractNotificationTest.java
+++ b/java/com/google/gerrit/acceptance/AbstractNotificationTest.java
@@ -121,9 +121,7 @@
recipients.put(CC, parseAddresses(message, "Cc"));
recipients.put(
BCC,
- message
- .rcpt()
- .stream()
+ message.rcpt().stream()
.map(Address::getEmail)
.filter(e -> !recipients.get(TO).contains(e) && !recipients.get(CC).contains(e))
.collect(toList()));
diff --git a/java/com/google/gerrit/acceptance/HttpResponse.java b/java/com/google/gerrit/acceptance/HttpResponse.java
index 8132c32..88079a4 100644
--- a/java/com/google/gerrit/acceptance/HttpResponse.java
+++ b/java/com/google/gerrit/acceptance/HttpResponse.java
@@ -65,8 +65,7 @@
}
public ImmutableList<String> getHeaders(String name) {
- return Arrays.asList(response.getHeaders(name))
- .stream()
+ return Arrays.asList(response.getHeaders(name)).stream()
.map(Header::getValue)
.collect(toImmutableList());
}
diff --git a/java/com/google/gerrit/acceptance/ProjectResetter.java b/java/com/google/gerrit/acceptance/ProjectResetter.java
index 7d0a59c..cc263c6 100644
--- a/java/com/google/gerrit/acceptance/ProjectResetter.java
+++ b/java/com/google/gerrit/acceptance/ProjectResetter.java
@@ -260,9 +260,7 @@
refsPatternByProject.asMap().entrySet()) {
try (Repository repo = repoManager.openRepository(e.getKey())) {
Collection<Ref> nonRestoredRefs =
- repo.getRefDatabase()
- .getRefs()
- .stream()
+ repo.getRefDatabase().getRefs().stream()
.filter(
r ->
!keptRefsByProject.containsEntry(e.getKey(), r.getName())
@@ -315,9 +313,7 @@
private Set<Project.NameKey> projectsWithConfigChanges(
Multimap<Project.NameKey, String> projects) {
- return projects
- .entries()
- .stream()
+ return projects.entries().stream()
.filter(e -> e.getValue().equals(RefNames.REFS_CONFIG))
.map(Map.Entry::getKey)
.collect(toSet());
diff --git a/java/com/google/gerrit/acceptance/ReindexProjectsAtStartup.java b/java/com/google/gerrit/acceptance/ReindexProjectsAtStartup.java
index 4893efa..f585f81 100644
--- a/java/com/google/gerrit/acceptance/ReindexProjectsAtStartup.java
+++ b/java/com/google/gerrit/acceptance/ReindexProjectsAtStartup.java
@@ -42,9 +42,7 @@
@Override
public void start() {
- repoMgr
- .list()
- .stream()
+ repoMgr.list().stream()
.forEach(
projectName -> {
try {
diff --git a/java/com/google/gerrit/common/FileUtil.java b/java/com/google/gerrit/common/FileUtil.java
index 24e3808..04288bc 100644
--- a/java/com/google/gerrit/common/FileUtil.java
+++ b/java/com/google/gerrit/common/FileUtil.java
@@ -14,7 +14,6 @@
package com.google.gerrit.common;
-import com.google.common.annotations.GwtIncompatible;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
@@ -25,7 +24,6 @@
import org.eclipse.jgit.storage.file.FileBasedConfig;
import org.eclipse.jgit.util.IO;
-@GwtIncompatible("Unemulated classes in java.io, java.nio and JGit")
public class FileUtil {
public static boolean modified(FileBasedConfig cfg) throws IOException {
byte[] curVers;
diff --git a/java/com/google/gerrit/common/FooterConstants.java b/java/com/google/gerrit/common/FooterConstants.java
index d76c92b..3ec809c 100644
--- a/java/com/google/gerrit/common/FooterConstants.java
+++ b/java/com/google/gerrit/common/FooterConstants.java
@@ -14,10 +14,8 @@
package com.google.gerrit.common;
-import com.google.common.annotations.GwtIncompatible;
import org.eclipse.jgit.revwalk.FooterKey;
-@GwtIncompatible("Unemulated com.google.gerrit.common.FooterConstants")
public class FooterConstants {
/** The change ID as used to track patch sets. */
public static final FooterKey CHANGE_ID = new FooterKey("Change-Id");
diff --git a/java/com/google/gerrit/common/IoUtil.java b/java/com/google/gerrit/common/IoUtil.java
index 526e88b..37f6c2c 100644
--- a/java/com/google/gerrit/common/IoUtil.java
+++ b/java/com/google/gerrit/common/IoUtil.java
@@ -14,7 +14,6 @@
package com.google.gerrit.common;
-import com.google.common.annotations.GwtIncompatible;
import com.google.common.collect.Sets;
import java.io.IOException;
import java.io.InputStream;
@@ -30,7 +29,6 @@
import java.util.Collections;
import java.util.Set;
-@GwtIncompatible("Unemulated methods in Class and OutputStream")
public final class IoUtil {
public static void copyWithThread(InputStream src, OutputStream dst) {
new Thread("IoUtil-Copy") {
diff --git a/java/com/google/gerrit/common/PluginData.java b/java/com/google/gerrit/common/PluginData.java
index b14543d..c440de1 100644
--- a/java/com/google/gerrit/common/PluginData.java
+++ b/java/com/google/gerrit/common/PluginData.java
@@ -14,11 +14,9 @@
package com.google.gerrit.common;
-import com.google.common.annotations.GwtIncompatible;
import java.nio.file.Path;
import java.util.Objects;
-@GwtIncompatible("Unemulated java.nio.file.Path")
public class PluginData {
public final String name;
public final String version;
diff --git a/java/com/google/gerrit/common/RawInputUtil.java b/java/com/google/gerrit/common/RawInputUtil.java
index e102eab..4a676e6 100644
--- a/java/com/google/gerrit/common/RawInputUtil.java
+++ b/java/com/google/gerrit/common/RawInputUtil.java
@@ -18,14 +18,12 @@
import static java.nio.charset.StandardCharsets.UTF_8;
import static java.util.Objects.requireNonNull;
-import com.google.common.annotations.GwtIncompatible;
import com.google.gerrit.extensions.restapi.RawInput;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.http.HttpServletRequest;
-@GwtIncompatible("Unemulated classes in java.io and javax.servlet")
public class RawInputUtil {
public static RawInput create(String content) {
return create(content.getBytes(UTF_8));
diff --git a/java/com/google/gerrit/common/SiteLibraryLoaderUtil.java b/java/com/google/gerrit/common/SiteLibraryLoaderUtil.java
index be8c16e..fa9b139 100644
--- a/java/com/google/gerrit/common/SiteLibraryLoaderUtil.java
+++ b/java/com/google/gerrit/common/SiteLibraryLoaderUtil.java
@@ -18,7 +18,6 @@
import static com.google.gerrit.common.FileUtil.lastModified;
import static java.util.stream.Collectors.joining;
-import com.google.common.annotations.GwtIncompatible;
import com.google.common.collect.ComparisonChain;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Ordering;
@@ -30,7 +29,6 @@
import java.nio.file.Path;
import java.util.List;
-@GwtIncompatible("Unemulated classes in java.nio and Guava")
public final class SiteLibraryLoaderUtil {
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
diff --git a/java/com/google/gerrit/common/UsedAt.java b/java/com/google/gerrit/common/UsedAt.java
index cfbe835..1be6353 100644
--- a/java/com/google/gerrit/common/UsedAt.java
+++ b/java/com/google/gerrit/common/UsedAt.java
@@ -18,7 +18,6 @@
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import com.google.common.annotations.GwtCompatible;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@@ -28,7 +27,6 @@
*/
@Target({METHOD, TYPE})
@Retention(RUNTIME)
-@GwtCompatible
public @interface UsedAt {
/** Enumeration of projects that call a method that would otherwise be private. */
enum Project {
diff --git a/java/com/google/gerrit/common/Version.java b/java/com/google/gerrit/common/Version.java
index b8d3b67..6197be5 100644
--- a/java/com/google/gerrit/common/Version.java
+++ b/java/com/google/gerrit/common/Version.java
@@ -16,7 +16,6 @@
import static java.nio.charset.StandardCharsets.UTF_8;
-import com.google.common.annotations.GwtIncompatible;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.flogger.FluentLogger;
import java.io.BufferedReader;
@@ -24,7 +23,6 @@
import java.io.InputStream;
import java.io.InputStreamReader;
-@GwtIncompatible("Unemulated com.google.gerrit.common.Version")
public class Version {
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
diff --git a/java/com/google/gerrit/common/data/SubmitRecord.java b/java/com/google/gerrit/common/data/SubmitRecord.java
index 8638d6d..22861b2 100644
--- a/java/com/google/gerrit/common/data/SubmitRecord.java
+++ b/java/com/google/gerrit/common/data/SubmitRecord.java
@@ -14,7 +14,6 @@
package com.google.gerrit.common.data;
-import com.google.common.annotations.GwtIncompatible;
import com.google.gerrit.reviewdb.client.Account;
import java.util.Collection;
import java.util.List;
@@ -65,7 +64,7 @@
public Status status;
public List<Label> labels;
- @GwtIncompatible public List<SubmitRequirement> requirements;
+ public List<SubmitRequirement> requirements;
public String errorMessage;
public static class Label {
@@ -136,7 +135,6 @@
}
}
- @GwtIncompatible
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
@@ -164,7 +162,6 @@
return sb.toString();
}
- @GwtIncompatible
@Override
public boolean equals(Object o) {
if (o instanceof SubmitRecord) {
@@ -177,7 +174,6 @@
return false;
}
- @GwtIncompatible
@Override
public int hashCode() {
return Objects.hash(status, labels, errorMessage, requirements);
diff --git a/java/com/google/gerrit/common/data/SubmitRequirement.java b/java/com/google/gerrit/common/data/SubmitRequirement.java
index 0c978ca..66e647d 100644
--- a/java/com/google/gerrit/common/data/SubmitRequirement.java
+++ b/java/com/google/gerrit/common/data/SubmitRequirement.java
@@ -17,13 +17,11 @@
import static com.google.common.base.Preconditions.checkState;
import com.google.auto.value.AutoValue;
-import com.google.common.annotations.GwtIncompatible;
import com.google.common.base.CharMatcher;
import com.google.common.collect.ImmutableMap;
import java.util.Map;
/** Describes a requirement to submit a change. */
-@GwtIncompatible
@AutoValue
@AutoValue.CopyAnnotations
public abstract class SubmitRequirement {
diff --git a/java/com/google/gerrit/common/data/SubscribeSection.java b/java/com/google/gerrit/common/data/SubscribeSection.java
index a3468d7..aaf0798 100644
--- a/java/com/google/gerrit/common/data/SubscribeSection.java
+++ b/java/com/google/gerrit/common/data/SubscribeSection.java
@@ -14,7 +14,6 @@
package com.google.gerrit.common.data;
-import com.google.common.annotations.GwtIncompatible;
import com.google.gerrit.reviewdb.client.Branch;
import com.google.gerrit.reviewdb.client.Project;
import java.util.ArrayList;
@@ -24,7 +23,6 @@
import org.eclipse.jgit.transport.RefSpec;
/** Portion of a {@link Project} describing superproject subscription rules. */
-@GwtIncompatible("Unemulated org.eclipse.jgit.transport.RefSpec")
public class SubscribeSection {
private final List<RefSpec> multiMatchRefSpecs;
diff --git a/java/com/google/gerrit/elasticsearch/ElasticIndexVersionDiscovery.java b/java/com/google/gerrit/elasticsearch/ElasticIndexVersionDiscovery.java
index a777f47..100022a 100644
--- a/java/com/google/gerrit/elasticsearch/ElasticIndexVersionDiscovery.java
+++ b/java/com/google/gerrit/elasticsearch/ElasticIndexVersionDiscovery.java
@@ -54,11 +54,8 @@
}
return new JsonParser()
- .parse(AbstractElasticIndex.getContent(response))
- .getAsJsonObject()
- .entrySet()
- .stream()
- .map(e -> e.getKey().replace(name, ""))
- .collect(toList());
+ .parse(AbstractElasticIndex.getContent(response)).getAsJsonObject().entrySet().stream()
+ .map(e -> e.getKey().replace(name, ""))
+ .collect(toList());
}
}
diff --git a/java/com/google/gerrit/extensions/api/access/CoreOrPluginProjectPermission.java b/java/com/google/gerrit/extensions/api/access/CoreOrPluginProjectPermission.java
new file mode 100644
index 0000000..de68987
--- /dev/null
+++ b/java/com/google/gerrit/extensions/api/access/CoreOrPluginProjectPermission.java
@@ -0,0 +1,18 @@
+// Copyright (C) 2019 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.google.gerrit.extensions.api.access;
+
+/** A repository permission either defined in Gerrit core or a plugin. */
+public interface CoreOrPluginProjectPermission extends GerritPermission {}
diff --git a/java/com/google/gerrit/extensions/api/access/PluginProjectPermission.java b/java/com/google/gerrit/extensions/api/access/PluginProjectPermission.java
new file mode 100644
index 0000000..a62fc63
--- /dev/null
+++ b/java/com/google/gerrit/extensions/api/access/PluginProjectPermission.java
@@ -0,0 +1,87 @@
+// Copyright (C) 2019 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.google.gerrit.extensions.api.access;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.base.MoreObjects;
+import java.util.Objects;
+import java.util.regex.Pattern;
+
+/** Repository permissions defined by plugins. */
+public final class PluginProjectPermission implements CoreOrPluginProjectPermission {
+ public static final String PLUGIN_PERMISSION_NAME_PATTERN_STRING = "[a-zA-Z]+";
+ private static final Pattern PLUGIN_PERMISSION_PATTERN =
+ Pattern.compile("^" + PLUGIN_PERMISSION_NAME_PATTERN_STRING + "$");
+
+ private final String pluginName;
+ private final String permission;
+
+ public PluginProjectPermission(String pluginName, String permission) {
+ requireNonNull(pluginName, "pluginName");
+ requireNonNull(permission, "permission");
+ checkArgument(
+ isValidPluginPermissionName(permission), "invalid plugin permission name: ", permission);
+
+ this.pluginName = pluginName;
+ this.permission = permission;
+ }
+
+ public String pluginName() {
+ return pluginName;
+ }
+
+ public String permission() {
+ return permission;
+ }
+
+ @Override
+ public String describeForException() {
+ return permission + " for plugin " + pluginName;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(pluginName, permission);
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (other instanceof PluginProjectPermission) {
+ PluginProjectPermission b = (PluginProjectPermission) other;
+ return pluginName.equals(b.pluginName) && permission.equals(b.permission);
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("pluginName", pluginName)
+ .add("permission", permission)
+ .toString();
+ }
+
+ /**
+ * Checks if a given name is valid to be used for plugin permissions.
+ *
+ * @param name a name string.
+ * @return whether the name is valid as a plugin permission.
+ */
+ private static boolean isValidPluginPermissionName(String name) {
+ return PLUGIN_PERMISSION_PATTERN.matcher(name).matches();
+ }
+}
diff --git a/java/com/google/gerrit/extensions/client/ListAccountsOption.java b/java/com/google/gerrit/extensions/client/ListAccountsOption.java
index b5e9004..2274d5d 100644
--- a/java/com/google/gerrit/extensions/client/ListAccountsOption.java
+++ b/java/com/google/gerrit/extensions/client/ListAccountsOption.java
@@ -14,11 +14,8 @@
package com.google.gerrit.extensions.client;
-import java.util.EnumSet;
-import java.util.Set;
-
/** Output options available for retrieval of account details. */
-public enum ListAccountsOption {
+public enum ListAccountsOption implements ListOption {
/** Return detailed account properties. */
DETAILS(0),
@@ -31,32 +28,8 @@
this.value = v;
}
+ @Override
public int getValue() {
return value;
}
-
- public static EnumSet<ListAccountsOption> fromBits(int v) {
- EnumSet<ListAccountsOption> r = EnumSet.noneOf(ListAccountsOption.class);
- for (ListAccountsOption o : ListAccountsOption.values()) {
- if ((v & (1 << o.value)) != 0) {
- r.add(o);
- v &= ~(1 << o.value);
- }
- if (v == 0) {
- return r;
- }
- }
- if (v != 0) {
- throw new IllegalArgumentException("unknown " + Integer.toHexString(v));
- }
- return r;
- }
-
- public static int toBits(Set<ListAccountsOption> set) {
- int r = 0;
- for (ListAccountsOption o : set) {
- r |= 1 << o.value;
- }
- return r;
- }
}
diff --git a/java/com/google/gerrit/extensions/client/ListChangesOption.java b/java/com/google/gerrit/extensions/client/ListChangesOption.java
index 5e4a3a7..c842adc 100644
--- a/java/com/google/gerrit/extensions/client/ListChangesOption.java
+++ b/java/com/google/gerrit/extensions/client/ListChangesOption.java
@@ -14,11 +14,8 @@
package com.google.gerrit.extensions.client;
-import java.util.EnumSet;
-import java.util.Set;
-
/** Output options available for retrieval of change details. */
-public enum ListChangesOption {
+public enum ListChangesOption implements ListOption {
LABELS(0),
DETAILED_LABELS(8),
@@ -86,32 +83,8 @@
this.value = v;
}
+ @Override
public int getValue() {
return value;
}
-
- public static EnumSet<ListChangesOption> fromBits(int v) {
- EnumSet<ListChangesOption> r = EnumSet.noneOf(ListChangesOption.class);
- for (ListChangesOption o : ListChangesOption.values()) {
- if ((v & (1 << o.value)) != 0) {
- r.add(o);
- v &= ~(1 << o.value);
- }
- if (v == 0) {
- return r;
- }
- }
- if (v != 0) {
- throw new IllegalArgumentException("unknown " + Integer.toHexString(v));
- }
- return r;
- }
-
- public static int toBits(Set<ListChangesOption> set) {
- int r = 0;
- for (ListChangesOption o : set) {
- r |= 1 << o.value;
- }
- return r;
- }
}
diff --git a/java/com/google/gerrit/extensions/client/ListGroupsOption.java b/java/com/google/gerrit/extensions/client/ListGroupsOption.java
index e95570f..a971226 100644
--- a/java/com/google/gerrit/extensions/client/ListGroupsOption.java
+++ b/java/com/google/gerrit/extensions/client/ListGroupsOption.java
@@ -14,10 +14,8 @@
package com.google.gerrit.extensions.client;
-import java.util.EnumSet;
-
/** Output options available when using {@code /groups/} RPCs. */
-public enum ListGroupsOption {
+public enum ListGroupsOption implements ListOption {
/** Return information on the direct group members. */
MEMBERS(0),
@@ -30,32 +28,8 @@
this.value = v;
}
+ @Override
public int getValue() {
return value;
}
-
- public static EnumSet<ListGroupsOption> fromBits(int v) {
- EnumSet<ListGroupsOption> r = EnumSet.noneOf(ListGroupsOption.class);
- for (ListGroupsOption o : ListGroupsOption.values()) {
- if ((v & (1 << o.value)) != 0) {
- r.add(o);
- v &= ~(1 << o.value);
- }
- if (v == 0) {
- return r;
- }
- }
- if (v != 0) {
- throw new IllegalArgumentException("unknown " + Integer.toHexString(v));
- }
- return r;
- }
-
- public static int toBits(EnumSet<ListGroupsOption> set) {
- int r = 0;
- for (ListGroupsOption o : set) {
- r |= 1 << o.value;
- }
- return r;
- }
}
diff --git a/java/com/google/gerrit/extensions/client/ListOption.java b/java/com/google/gerrit/extensions/client/ListOption.java
new file mode 100644
index 0000000..e694c0e
--- /dev/null
+++ b/java/com/google/gerrit/extensions/client/ListOption.java
@@ -0,0 +1,49 @@
+// Copyright (C) 2019 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.google.gerrit.extensions.client;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.EnumSet;
+
+/** Enum that can be expressed as a bitset in query parameters. */
+public interface ListOption {
+ int getValue();
+
+ static <T extends Enum<T> & ListOption> EnumSet<T> fromBits(Class<T> clazz, int v) {
+ EnumSet<T> r = EnumSet.noneOf(clazz);
+ T[] values;
+ try {
+ @SuppressWarnings("unchecked")
+ T[] tmp = (T[]) clazz.getMethod("values").invoke(null);
+ values = tmp;
+ } catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
+ throw new IllegalStateException(e);
+ }
+ for (T o : values) {
+ if ((v & (1 << o.getValue())) != 0) {
+ r.add(o);
+ v &= ~(1 << o.getValue());
+ }
+ if (v == 0) {
+ return r;
+ }
+ }
+ if (v != 0) {
+ throw new IllegalArgumentException(
+ "unknown " + clazz.getName() + ": " + Integer.toHexString(v));
+ }
+ return r;
+ }
+}
diff --git a/java/com/google/gerrit/extensions/registration/DynamicSet.java b/java/com/google/gerrit/extensions/registration/DynamicSet.java
index 4d803b6..3f64ddb 100644
--- a/java/com/google/gerrit/extensions/registration/DynamicSet.java
+++ b/java/com/google/gerrit/extensions/registration/DynamicSet.java
@@ -222,8 +222,7 @@
* @return sorted set of active plugins that supply at least one item.
*/
public ImmutableSortedSet<String> plugins() {
- return items
- .stream()
+ return items.stream()
.map(i -> i.get().getPluginName())
.collect(toImmutableSortedSet(naturalOrder()));
}
@@ -235,8 +234,7 @@
* @return items exported by a plugin.
*/
public ImmutableSet<Provider<T>> byPlugin(String pluginName) {
- return items
- .stream()
+ return items.stream()
.filter(i -> i.get().getPluginName().equals(pluginName))
.map(i -> i.get().getProvider())
.collect(toImmutableSet());
diff --git a/java/com/google/gerrit/git/LockFailureException.java b/java/com/google/gerrit/git/LockFailureException.java
index b249749..9e67d70 100644
--- a/java/com/google/gerrit/git/LockFailureException.java
+++ b/java/com/google/gerrit/git/LockFailureException.java
@@ -36,9 +36,7 @@
public LockFailureException(String message, BatchRefUpdate batchRefUpdate) {
super(message);
refs =
- batchRefUpdate
- .getCommands()
- .stream()
+ batchRefUpdate.getCommands().stream()
.filter(c -> c.getResult() == ReceiveCommand.Result.LOCK_FAILURE)
.map(ReceiveCommand::getRefName)
.collect(toImmutableList());
diff --git a/java/com/google/gerrit/index/project/ProjectField.java b/java/com/google/gerrit/index/project/ProjectField.java
index 53624f2..119980c 100644
--- a/java/com/google/gerrit/index/project/ProjectField.java
+++ b/java/com/google/gerrit/index/project/ProjectField.java
@@ -61,9 +61,7 @@
storedOnly("ref_state")
.buildRepeatable(
projectData ->
- projectData
- .tree()
- .stream()
+ projectData.tree().stream()
.filter(p -> p.getProject().getConfigRefState() != null)
.map(p -> toRefState(p.getProject()))
.collect(toImmutableList()));
diff --git a/java/com/google/gerrit/index/query/QueryProcessor.java b/java/com/google/gerrit/index/query/QueryProcessor.java
index ac96c5c..c68f674 100644
--- a/java/com/google/gerrit/index/query/QueryProcessor.java
+++ b/java/com/google/gerrit/index/query/QueryProcessor.java
@@ -380,8 +380,7 @@
}
private static Optional<QueryParseException> findQueryParseException(Throwable t) {
- return Throwables.getCausalChain(t)
- .stream()
+ return Throwables.getCausalChain(t).stream()
.filter(c -> c instanceof QueryParseException)
.map(QueryParseException.class::cast)
.findFirst();
diff --git a/java/com/google/gerrit/launcher/GerritLauncher.java b/java/com/google/gerrit/launcher/GerritLauncher.java
index 30d4e15..dec077a 100644
--- a/java/com/google/gerrit/launcher/GerritLauncher.java
+++ b/java/com/google/gerrit/launcher/GerritLauncher.java
@@ -625,9 +625,7 @@
* @return true if any thread has a stack frame in {@code org.eclipse.jdt}.
*/
public static boolean isRunningInEclipse() {
- return Thread.getAllStackTraces()
- .values()
- .stream()
+ return Thread.getAllStackTraces().values().stream()
.flatMap(Arrays::stream)
.anyMatch(e -> e.getClassName().startsWith("org.eclipse.jdt."));
}
diff --git a/java/com/google/gerrit/lucene/LuceneChangeIndex.java b/java/com/google/gerrit/lucene/LuceneChangeIndex.java
index 381adcb..0e34c93 100644
--- a/java/com/google/gerrit/lucene/LuceneChangeIndex.java
+++ b/java/com/google/gerrit/lucene/LuceneChangeIndex.java
@@ -652,8 +652,7 @@
private static <T> List<T> decodeProtos(
ListMultimap<String, IndexableField> doc, String fieldName, ProtoConverter<?, T> converter) {
- return doc.get(fieldName)
- .stream()
+ return doc.get(fieldName).stream()
.map(IndexableField::binaryValue)
.map(bytesRef -> parseProtoFrom(bytesRef, converter))
.collect(toImmutableList());
@@ -668,8 +667,7 @@
}
private static List<byte[]> copyAsBytes(Collection<IndexableField> fields) {
- return fields
- .stream()
+ return fields.stream()
.map(
f -> {
BytesRef ref = f.binaryValue();
diff --git a/java/com/google/gerrit/mail/HtmlParser.java b/java/com/google/gerrit/mail/HtmlParser.java
index 9821599..265c412 100644
--- a/java/com/google/gerrit/mail/HtmlParser.java
+++ b/java/com/google/gerrit/mail/HtmlParser.java
@@ -78,8 +78,7 @@
for (Element e : d.body().getAllElements()) {
String elementName = e.tagName();
boolean isInBlockQuote =
- e.parents()
- .stream()
+ e.parents().stream()
.anyMatch(
p ->
p.tagName().equals("blockquote")
diff --git a/java/com/google/gerrit/mail/RawMailParser.java b/java/com/google/gerrit/mail/RawMailParser.java
index 00754d3..b7e2030 100644
--- a/java/com/google/gerrit/mail/RawMailParser.java
+++ b/java/com/google/gerrit/mail/RawMailParser.java
@@ -85,10 +85,7 @@
}
// Add additional headers
- mimeMessage
- .getHeader()
- .getFields()
- .stream()
+ mimeMessage.getHeader().getFields().stream()
.filter(f -> !MAIN_HEADERS.contains(f.getName().toLowerCase()))
.forEach(f -> messageBuilder.addAdditionalHeader(f.getName() + ": " + f.getBody()));
diff --git a/java/com/google/gerrit/pgm/init/InitLogging.java b/java/com/google/gerrit/pgm/init/InitLogging.java
index 52d0d2f..b6d25bc 100644
--- a/java/com/google/gerrit/pgm/init/InitLogging.java
+++ b/java/com/google/gerrit/pgm/init/InitLogging.java
@@ -53,8 +53,7 @@
}
private static boolean isSet(List<String> javaOptions, String javaOptionName) {
- return javaOptions
- .stream()
+ return javaOptions.stream()
.anyMatch(
o ->
o.startsWith("-D" + javaOptionName + "=")
diff --git a/java/com/google/gerrit/proto/testing/SerializedClassSubject.java b/java/com/google/gerrit/proto/testing/SerializedClassSubject.java
index 9ca6c9b..a5cf3ca 100644
--- a/java/com/google/gerrit/proto/testing/SerializedClassSubject.java
+++ b/java/com/google/gerrit/proto/testing/SerializedClassSubject.java
@@ -82,8 +82,7 @@
public void hasFields(Map<String, Type> expectedFields) {
isConcrete();
assertThat(
- FieldUtils.getAllFieldsList(actual())
- .stream()
+ FieldUtils.getAllFieldsList(actual()).stream()
.filter(f -> !Modifier.isStatic(f.getModifiers()))
.collect(toImmutableMap(Field::getName, Field::getGenericType)))
.containsExactlyEntriesIn(expectedFields);
diff --git a/java/com/google/gerrit/server/ChangeUtil.java b/java/com/google/gerrit/server/ChangeUtil.java
index 7a6d3e6..b8a00f4 100644
--- a/java/com/google/gerrit/server/ChangeUtil.java
+++ b/java/com/google/gerrit/server/ChangeUtil.java
@@ -116,9 +116,7 @@
*/
public static PatchSet.Id nextPatchSetId(Repository git, PatchSet.Id id) throws IOException {
return nextPatchSetIdFromChangeRefs(
- git.getRefDatabase()
- .getRefsByPrefix(id.getParentKey().toRefPrefix())
- .stream()
+ git.getRefDatabase().getRefsByPrefix(id.getParentKey().toRefPrefix()).stream()
.map(Ref::getName),
id);
}
diff --git a/java/com/google/gerrit/server/CommentsUtil.java b/java/com/google/gerrit/server/CommentsUtil.java
index b3812a0..39df152 100644
--- a/java/com/google/gerrit/server/CommentsUtil.java
+++ b/java/com/google/gerrit/server/CommentsUtil.java
@@ -185,8 +185,7 @@
public Optional<Comment> getDraft(ChangeNotes notes, IdentifiedUser user, Comment.Key key)
throws OrmException {
- return draftByChangeAuthor(notes, user.getAccountId())
- .stream()
+ return draftByChangeAuthor(notes, user.getAccountId()).stream()
.filter(c -> key.equals(c.key))
.findFirst();
}
diff --git a/java/com/google/gerrit/server/CreateGroupPermissionSyncer.java b/java/com/google/gerrit/server/CreateGroupPermissionSyncer.java
index 94ce924..e6c46df 100644
--- a/java/com/google/gerrit/server/CreateGroupPermissionSyncer.java
+++ b/java/com/google/gerrit/server/CreateGroupPermissionSyncer.java
@@ -110,9 +110,7 @@
config.getAccessSection(RefNames.REFS_GROUPS + "*", true);
if (createGroupsGlobal.isEmpty()) {
createGroupAccessSection.setPermissions(
- createGroupAccessSection
- .getPermissions()
- .stream()
+ createGroupAccessSection.getPermissions().stream()
.filter(p -> !Permission.CREATE.equals(p.getName()))
.collect(toList()));
config.replace(createGroupAccessSection);
diff --git a/java/com/google/gerrit/server/ModuleOverloader.java b/java/com/google/gerrit/server/ModuleOverloader.java
index 7083e6d..9a8fe84 100644
--- a/java/com/google/gerrit/server/ModuleOverloader.java
+++ b/java/com/google/gerrit/server/ModuleOverloader.java
@@ -27,8 +27,7 @@
// group candidates by annotation existence
Map<Boolean, List<Module>> grouped =
- overrideCandidates
- .stream()
+ overrideCandidates.stream()
.collect(
Collectors.groupingBy(m -> m.getClass().getAnnotation(ModuleImpl.class) != null));
@@ -44,16 +43,14 @@
}
// swipe cache implementation with alternative provided in lib
- return modules
- .stream()
+ return modules.stream()
.map(
m -> {
ModuleImpl a = m.getClass().getAnnotation(ModuleImpl.class);
if (a == null) {
return m;
}
- return overrides
- .stream()
+ return overrides.stream()
.filter(
o ->
o.getClass()
diff --git a/java/com/google/gerrit/server/StarredChangesUtil.java b/java/com/google/gerrit/server/StarredChangesUtil.java
index ea3cf37..e6d6be1 100644
--- a/java/com/google/gerrit/server/StarredChangesUtil.java
+++ b/java/com/google/gerrit/server/StarredChangesUtil.java
@@ -294,9 +294,7 @@
private static Set<String> getRefNames(Repository repo, String prefix) throws IOException {
RefDatabase refDb = repo.getRefDatabase();
- return refDb
- .getRefsByPrefix(prefix)
- .stream()
+ return refDb.getRefsByPrefix(prefix).stream()
.map(r -> r.getName().substring(prefix.length()))
.collect(toSet());
}
@@ -421,8 +419,7 @@
}
public static Set<Integer> getStarredPatchSets(Set<String> labels, String label) {
- return labels
- .stream()
+ return labels.stream()
.filter(l -> l.startsWith(label + "/"))
.filter(l -> Ints.tryParse(l.substring(label.length() + 1)) != null)
.map(l -> Integer.valueOf(l.substring(label.length() + 1)))
diff --git a/java/com/google/gerrit/server/account/AccountControl.java b/java/com/google/gerrit/server/account/AccountControl.java
index 89c4df8..f17f387 100644
--- a/java/com/google/gerrit/server/account/AccountControl.java
+++ b/java/com/google/gerrit/server/account/AccountControl.java
@@ -204,9 +204,7 @@
}
private Set<AccountGroup.UUID> groupsOf(IdentifiedUser user) {
- return user.getEffectiveGroups()
- .getKnownGroups()
- .stream()
+ return user.getEffectiveGroups().getKnownGroups().stream()
.filter(a -> !SystemGroupBackend.isSystemGroup(a))
.collect(toSet());
}
diff --git a/java/com/google/gerrit/server/account/AccountManager.java b/java/com/google/gerrit/server/account/AccountManager.java
index 6534f0f..d97ff7b 100644
--- a/java/com/google/gerrit/server/account/AccountManager.java
+++ b/java/com/google/gerrit/server/account/AccountManager.java
@@ -456,8 +456,7 @@
}
if (filteredExtIdsByScheme.size() > 1
- || !filteredExtIdsByScheme
- .stream()
+ || !filteredExtIdsByScheme.stream()
.anyMatch(e -> e.key().equals(who.getExternalIdKey()))) {
u.deleteExternalIds(filteredExtIdsByScheme);
}
@@ -514,8 +513,7 @@
(a, u) -> {
u.deleteExternalIds(extIds);
if (a.getAccount().getPreferredEmail() != null
- && extIds
- .stream()
+ && extIds.stream()
.anyMatch(e -> a.getAccount().getPreferredEmail().equals(e.email()))) {
u.setPreferredEmail(null);
}
diff --git a/java/com/google/gerrit/server/account/AccountResolver.java b/java/com/google/gerrit/server/account/AccountResolver.java
index 9b4952b..14f4a38 100644
--- a/java/com/google/gerrit/server/account/AccountResolver.java
+++ b/java/com/google/gerrit/server/account/AccountResolver.java
@@ -96,9 +96,7 @@
if (result.filteredInactive().isEmpty()) {
return "Account '" + result.input() + "' not found";
}
- return result
- .filteredInactive()
- .stream()
+ return result.filteredInactive().stream()
.map(a -> formatForException(result, a))
.collect(
joining(
@@ -110,9 +108,7 @@
""));
}
- return result
- .asList()
- .stream()
+ return result.asList().stream()
.map(a -> formatForException(result, a))
.collect(joining("\n", "Account '" + result.input() + "' is ambiguous:\n", ""));
}
@@ -353,8 +349,7 @@
// subset. Otherwise, all are equally non-matching, so return the full set.
String name = nameOrEmail.substring(0, lt - 1);
ImmutableList<AccountState> nameMatches =
- allMatches
- .stream()
+ allMatches.stream()
.filter(a -> name.equals(a.getAccount().getFullName()))
.collect(toImmutableList());
return !nameMatches.isEmpty() ? nameMatches.stream() : allMatches.stream();
diff --git a/java/com/google/gerrit/server/account/Accounts.java b/java/com/google/gerrit/server/account/Accounts.java
index 1a61c02..f3758bf 100644
--- a/java/com/google/gerrit/server/account/Accounts.java
+++ b/java/com/google/gerrit/server/account/Accounts.java
@@ -140,9 +140,7 @@
}
public static Stream<Account.Id> readUserRefs(Repository repo) throws IOException {
- return repo.getRefDatabase()
- .getRefsByPrefix(RefNames.REFS_USERS)
- .stream()
+ return repo.getRefDatabase().getRefsByPrefix(RefNames.REFS_USERS).stream()
.map(r -> Account.Id.fromRef(r.getName()))
.filter(Objects::nonNull);
}
diff --git a/java/com/google/gerrit/server/account/AccountsConsistencyChecker.java b/java/com/google/gerrit/server/account/AccountsConsistencyChecker.java
index 0b63927..6873f92 100644
--- a/java/com/google/gerrit/server/account/AccountsConsistencyChecker.java
+++ b/java/com/google/gerrit/server/account/AccountsConsistencyChecker.java
@@ -37,9 +37,7 @@
for (AccountState accountState : accounts.all()) {
Account account = accountState.getAccount();
if (account.getPreferredEmail() != null) {
- if (!accountState
- .getExternalIds()
- .stream()
+ if (!accountState.getExternalIds().stream()
.anyMatch(e -> account.getPreferredEmail().equals(e.email()))) {
addError(
String.format(
diff --git a/java/com/google/gerrit/server/account/AccountsUpdate.java b/java/com/google/gerrit/server/account/AccountsUpdate.java
index 3239415..b862793 100644
--- a/java/com/google/gerrit/server/account/AccountsUpdate.java
+++ b/java/com/google/gerrit/server/account/AccountsUpdate.java
@@ -495,9 +495,7 @@
}
private static Set<Account.Id> getUpdatedAccounts(BatchRefUpdate batchRefUpdate) {
- return batchRefUpdate
- .getCommands()
- .stream()
+ return batchRefUpdate.getCommands().stream()
.map(c -> Account.Id.fromRef(c.getRefName()))
.filter(Objects::nonNull)
.collect(toSet());
diff --git a/java/com/google/gerrit/server/account/Emails.java b/java/com/google/gerrit/server/account/Emails.java
index e91ce49..7c798ca 100644
--- a/java/com/google/gerrit/server/account/Emails.java
+++ b/java/com/google/gerrit/server/account/Emails.java
@@ -85,10 +85,7 @@
public ImmutableSetMultimap<String, Account.Id> getAccountsFor(String... emails)
throws IOException, OrmException {
ImmutableSetMultimap.Builder<String, Account.Id> builder = ImmutableSetMultimap.builder();
- externalIds
- .byEmails(emails)
- .entries()
- .stream()
+ externalIds.byEmails(emails).entries().stream()
.forEach(e -> builder.put(e.getKey(), e.getValue().accountId()));
executeIndexQuery(() -> queryProvider.get().byPreferredEmail(emails).entries().stream())
.forEach(e -> builder.put(e.getKey(), e.getValue().getAccount().getId()));
diff --git a/java/com/google/gerrit/server/account/GroupIncludeCacheImpl.java b/java/com/google/gerrit/server/account/GroupIncludeCacheImpl.java
index 58eaf21..a089d9e 100644
--- a/java/com/google/gerrit/server/account/GroupIncludeCacheImpl.java
+++ b/java/com/google/gerrit/server/account/GroupIncludeCacheImpl.java
@@ -154,10 +154,7 @@
@Override
public ImmutableSet<AccountGroup.UUID> load(Account.Id memberId) throws OrmException {
try (TraceTimer timer = TraceContext.newTimer("Loading groups with member %s", memberId)) {
- return groupQueryProvider
- .get()
- .byMember(memberId)
- .stream()
+ return groupQueryProvider.get().byMember(memberId).stream()
.map(InternalGroup::getGroupUUID)
.collect(toImmutableSet());
}
@@ -176,10 +173,7 @@
@Override
public ImmutableList<AccountGroup.UUID> load(AccountGroup.UUID key) throws OrmException {
try (TraceTimer timer = TraceContext.newTimer("Loading parent groups of %s", key)) {
- return groupQueryProvider
- .get()
- .bySubgroup(key)
- .stream()
+ return groupQueryProvider.get().bySubgroup(key).stream()
.map(InternalGroup::getGroupUUID)
.collect(toImmutableList());
}
diff --git a/java/com/google/gerrit/server/account/GroupMembers.java b/java/com/google/gerrit/server/account/GroupMembers.java
index 375b3a1..d7e97ba 100644
--- a/java/com/google/gerrit/server/account/GroupMembers.java
+++ b/java/com/google/gerrit/server/account/GroupMembers.java
@@ -127,9 +127,7 @@
GroupControl groupControl = groupControlFactory.controlFor(new InternalGroupDescription(group));
Set<Account> directMembers =
- group
- .getMembers()
- .stream()
+ group.getMembers().stream()
.filter(groupControl::canSeeMember)
.map(accountCache::get)
.flatMap(Streams::stream)
diff --git a/java/com/google/gerrit/server/account/ProjectWatches.java b/java/com/google/gerrit/server/account/ProjectWatches.java
index cc913e5..8b3e1b3 100644
--- a/java/com/google/gerrit/server/account/ProjectWatches.java
+++ b/java/com/google/gerrit/server/account/ProjectWatches.java
@@ -202,9 +202,7 @@
private static ImmutableMap<ProjectWatchKey, ImmutableSet<NotifyType>> immutableCopyOf(
Map<ProjectWatchKey, Set<NotifyType>> projectWatches) {
ImmutableMap.Builder<ProjectWatchKey, ImmutableSet<NotifyType>> b = ImmutableMap.builder();
- projectWatches
- .entrySet()
- .stream()
+ projectWatches.entrySet().stream()
.forEach(e -> b.put(e.getKey(), ImmutableSet.copyOf(e.getValue())));
return b.build();
}
diff --git a/java/com/google/gerrit/server/account/UniversalGroupBackend.java b/java/com/google/gerrit/server/account/UniversalGroupBackend.java
index e7b3c91..50a5e9f 100644
--- a/java/com/google/gerrit/server/account/UniversalGroupBackend.java
+++ b/java/com/google/gerrit/server/account/UniversalGroupBackend.java
@@ -218,8 +218,7 @@
@Override
public void check() throws StartupException {
String invalid =
- cfg.getSubsections("groups")
- .stream()
+ cfg.getSubsections("groups").stream()
.filter(
sub -> {
AccountGroup.UUID uuid = new AccountGroup.UUID(sub);
diff --git a/java/com/google/gerrit/server/account/externalids/AllExternalIds.java b/java/com/google/gerrit/server/account/externalids/AllExternalIds.java
index 4e91e0b..5d12ae1 100644
--- a/java/com/google/gerrit/server/account/externalids/AllExternalIds.java
+++ b/java/com/google/gerrit/server/account/externalids/AllExternalIds.java
@@ -45,8 +45,7 @@
private static ImmutableSetMultimap<String, ExternalId> byEmailCopy(
Collection<ExternalId> externalIds) {
- return externalIds
- .stream()
+ return externalIds.stream()
.filter(e -> !Strings.isNullOrEmpty(e.email()))
.collect(toImmutableSetMultimap(ExternalId::email, e -> e));
}
@@ -62,10 +61,7 @@
public byte[] serialize(AllExternalIds object) {
ObjectIdConverter idConverter = ObjectIdConverter.create();
AllExternalIdsProto.Builder allBuilder = AllExternalIdsProto.newBuilder();
- object
- .byAccount()
- .values()
- .stream()
+ object.byAccount().values().stream()
.map(extId -> toProto(idConverter, extId))
.forEach(allBuilder::addExternalId);
return Protos.toByteArray(allBuilder.build());
@@ -92,9 +88,7 @@
public AllExternalIds deserialize(byte[] in) {
ObjectIdConverter idConverter = ObjectIdConverter.create();
return create(
- Protos.parseUnchecked(AllExternalIdsProto.parser(), in)
- .getExternalIdList()
- .stream()
+ Protos.parseUnchecked(AllExternalIdsProto.parser(), in).getExternalIdList().stream()
.map(proto -> toExternalId(idConverter, proto))
.collect(toList()));
}
diff --git a/java/com/google/gerrit/server/account/externalids/ExternalId.java b/java/com/google/gerrit/server/account/externalids/ExternalId.java
index 22a6ee4..c363b5b 100644
--- a/java/com/google/gerrit/server/account/externalids/ExternalId.java
+++ b/java/com/google/gerrit/server/account/externalids/ExternalId.java
@@ -82,8 +82,7 @@
* ExternalId#SCHEME_USERNAME} scheme
*/
public static Optional<String> getUserName(Collection<ExternalId> extIds) {
- return extIds
- .stream()
+ return extIds.stream()
.filter(e -> e.isScheme(SCHEME_USERNAME))
.map(e -> e.key().id())
.filter(u -> !Strings.isNullOrEmpty(u))
diff --git a/java/com/google/gerrit/server/account/externalids/ExternalIdNotes.java b/java/com/google/gerrit/server/account/externalids/ExternalIdNotes.java
index 5acf63c..76e7f81 100644
--- a/java/com/google/gerrit/server/account/externalids/ExternalIdNotes.java
+++ b/java/com/google/gerrit/server/account/externalids/ExternalIdNotes.java
@@ -762,8 +762,7 @@
noteMapUpdates.clear();
if (!footers.isEmpty()) {
commit.setMessage(
- footers
- .stream()
+ footers.stream()
.sorted()
.collect(joining("\n", commit.getMessage().trim() + "\n\n", "")));
}
diff --git a/java/com/google/gerrit/server/account/externalids/ExternalIds.java b/java/com/google/gerrit/server/account/externalids/ExternalIds.java
index b1a59b1..9098630 100644
--- a/java/com/google/gerrit/server/account/externalids/ExternalIds.java
+++ b/java/com/google/gerrit/server/account/externalids/ExternalIds.java
@@ -71,8 +71,7 @@
/** Returns the external IDs of the specified account that have the given scheme. */
public Set<ExternalId> byAccount(Account.Id accountId, String scheme) throws IOException {
- return byAccount(accountId)
- .stream()
+ return byAccount(accountId).stream()
.filter(e -> e.key().isScheme(scheme))
.collect(toImmutableSet());
}
@@ -85,8 +84,7 @@
/** Returns the external IDs of the specified account that have the given scheme. */
public Set<ExternalId> byAccount(Account.Id accountId, String scheme, ObjectId rev)
throws IOException {
- return byAccount(accountId, rev)
- .stream()
+ return byAccount(accountId, rev).stream()
.filter(e -> e.key().isScheme(scheme))
.collect(toImmutableSet());
}
diff --git a/java/com/google/gerrit/server/account/externalids/ExternalIdsConsistencyChecker.java b/java/com/google/gerrit/server/account/externalids/ExternalIdsConsistencyChecker.java
index 14ead2f..fe7cc48 100644
--- a/java/com/google/gerrit/server/account/externalids/ExternalIdsConsistencyChecker.java
+++ b/java/com/google/gerrit/server/account/externalids/ExternalIdsConsistencyChecker.java
@@ -93,10 +93,7 @@
}
}
- emails
- .asMap()
- .entrySet()
- .stream()
+ emails.asMap().entrySet().stream()
.filter(e -> e.getValue().size() > 1)
.forEach(
e ->
@@ -104,8 +101,7 @@
String.format(
"Email '%s' is not unique, it's used by the following external IDs: %s",
e.getKey(),
- e.getValue()
- .stream()
+ e.getValue().stream()
.map(k -> "'" + k.get() + "'")
.sorted()
.collect(joining(", "))),
diff --git a/java/com/google/gerrit/server/cache/h2/H2CacheImpl.java b/java/com/google/gerrit/server/cache/h2/H2CacheImpl.java
index a8fb53b..3732e37 100644
--- a/java/com/google/gerrit/server/cache/h2/H2CacheImpl.java
+++ b/java/com/google/gerrit/server/cache/h2/H2CacheImpl.java
@@ -345,8 +345,7 @@
}
}
} catch (Exception e) {
- if (Throwables.getCausalChain(e)
- .stream()
+ if (Throwables.getCausalChain(e).stream()
.anyMatch(InvalidClassException.class::isInstance)) {
// If deserialization failed using default Java serialization, this means we are using
// the old serialVersionUID-based invalidation strategy. In that case, authors are
diff --git a/java/com/google/gerrit/server/change/AddReviewersOp.java b/java/com/google/gerrit/server/change/AddReviewersOp.java
index 4a97c30..46d57b5 100644
--- a/java/com/google/gerrit/server/change/AddReviewersOp.java
+++ b/java/com/google/gerrit/server/change/AddReviewersOp.java
@@ -250,8 +250,7 @@
}
if (!addedReviewers.isEmpty()) {
List<AccountState> reviewers =
- addedReviewers
- .stream()
+ addedReviewers.stream()
.map(r -> accountCache.get(r.getAccountId()))
.flatMap(Streams::stream)
.collect(toList());
diff --git a/java/com/google/gerrit/server/change/ChangeInserter.java b/java/com/google/gerrit/server/change/ChangeInserter.java
index 544edcc..5371908 100644
--- a/java/com/google/gerrit/server/change/ChangeInserter.java
+++ b/java/com/google/gerrit/server/change/ChangeInserter.java
@@ -454,9 +454,7 @@
cm.setPatchSet(patchSet, patchSetInfo);
cm.setNotify(notify);
cm.addReviewers(
- reviewerAdditions
- .flattenResults(AddReviewersOp.Result::addedReviewers)
- .stream()
+ reviewerAdditions.flattenResults(AddReviewersOp.Result::addedReviewers).stream()
.map(PatchSetApproval::getAccountId)
.collect(toImmutableSet()));
cm.addReviewersByEmail(
diff --git a/java/com/google/gerrit/server/change/ChangeJson.java b/java/com/google/gerrit/server/change/ChangeJson.java
index f9e015e..e975c3d 100644
--- a/java/com/google/gerrit/server/change/ChangeJson.java
+++ b/java/com/google/gerrit/server/change/ChangeJson.java
@@ -615,8 +615,7 @@
if (has(TRACKING_IDS)) {
ListMultimap<String, String> set = trackingFooters.extract(cd.commitFooters());
out.trackingIds =
- set.entries()
- .stream()
+ set.entries().stream()
.map(e -> new TrackingIdInfo(e.getKey(), e.getValue()))
.collect(toList());
}
@@ -756,16 +755,14 @@
}
private Collection<AccountInfo> toAccountInfo(Collection<Account.Id> accounts) {
- return accounts
- .stream()
+ return accounts.stream()
.map(accountLoader::get)
.sorted(AccountInfoComparator.ORDER_NULLS_FIRST)
.collect(toList());
}
private Collection<AccountInfo> toAccountInfoByEmail(Collection<Address> addresses) {
- return addresses
- .stream()
+ return addresses.stream()
.map(a -> new AccountInfo(a.getName(), a.getEmail()))
.sorted(AccountInfoComparator.ORDER_NULLS_FIRST)
.collect(toList());
diff --git a/java/com/google/gerrit/server/change/ConsistencyChecker.java b/java/com/google/gerrit/server/change/ConsistencyChecker.java
index b6df374..83c7387 100644
--- a/java/com/google/gerrit/server/change/ConsistencyChecker.java
+++ b/java/com/google/gerrit/server/change/ConsistencyChecker.java
@@ -470,8 +470,7 @@
String.format(
"Multiple patch sets for expected merged commit %s: %s",
commit.name(),
- thisCommitPsIds
- .stream()
+ thisCommitPsIds.stream()
.sorted(comparing(PatchSet.Id::get))
.collect(toImmutableList())));
break;
diff --git a/java/com/google/gerrit/server/change/IncludedInResolver.java b/java/com/google/gerrit/server/change/IncludedInResolver.java
index 62e9454..09ca258 100644
--- a/java/com/google/gerrit/server/change/IncludedInResolver.java
+++ b/java/com/google/gerrit/server/change/IncludedInResolver.java
@@ -173,8 +173,7 @@
*/
private static ImmutableSortedSet<String> getMatchingRefNames(
Set<String> matchingRefs, Collection<Ref> allRefs) {
- return allRefs
- .stream()
+ return allRefs.stream()
.map(Ref::getName)
.filter(matchingRefs::contains)
.map(Repository::shortenRefName)
diff --git a/java/com/google/gerrit/server/change/LabelsJson.java b/java/com/google/gerrit/server/change/LabelsJson.java
index 9d8f3a8..01ac37b 100644
--- a/java/com/google/gerrit/server/change/LabelsJson.java
+++ b/java/com/google/gerrit/server/change/LabelsJson.java
@@ -320,9 +320,7 @@
}
if (detailed) {
- labels
- .entrySet()
- .stream()
+ labels.entrySet().stream()
.filter(e -> labelTypes.byLabel(e.getKey()) != null)
.forEach(e -> setLabelValues(labelTypes.byLabel(e.getKey()), e.getValue()));
}
@@ -519,9 +517,7 @@
Maps.newHashMapWithExpectedSize(permittedLabels.size());
for (String label : permittedLabels.keySet()) {
List<Integer> permittedVotingRange =
- permittedLabels
- .get(label)
- .stream()
+ permittedLabels.get(label).stream()
.map(this::parseRangeValue)
.filter(java.util.Objects::nonNull)
.sorted()
diff --git a/java/com/google/gerrit/server/change/ReviewerAdder.java b/java/com/google/gerrit/server/change/ReviewerAdder.java
index 6dd0db8..21fc03c 100644
--- a/java/com/google/gerrit/server/change/ReviewerAdder.java
+++ b/java/com/google/gerrit/server/change/ReviewerAdder.java
@@ -550,8 +550,7 @@
}
public ImmutableList<ReviewerAddition> getFailures() {
- return additions
- .stream()
+ return additions.stream()
.filter(a -> a.isFailure() && !a.isIgnorableFailure())
.collect(toImmutableList());
}
@@ -581,8 +580,7 @@
a ->
checkArgument(
a.op != null && a.op.getResult() != null, "missing result on %s", a));
- return additions()
- .stream()
+ return additions().stream()
.map(a -> a.op.getResult())
.map(func)
.flatMap(Collection::stream)
@@ -590,8 +588,7 @@
}
private ImmutableList<ReviewerAddition> additions() {
- return additions
- .stream()
+ return additions.stream()
.filter(
a -> {
if (a.isFailure()) {
diff --git a/java/com/google/gerrit/server/change/RevisionResource.java b/java/com/google/gerrit/server/change/RevisionResource.java
index deb5022..caafe24 100644
--- a/java/com/google/gerrit/server/change/RevisionResource.java
+++ b/java/com/google/gerrit/server/change/RevisionResource.java
@@ -34,7 +34,7 @@
public static final TypeLiteral<RestView<RevisionResource>> REVISION_KIND =
new TypeLiteral<RestView<RevisionResource>>() {};
- public static RevisionResource createNonCachable(ChangeResource change, PatchSet ps) {
+ public static RevisionResource createNonCacheable(ChangeResource change, PatchSet ps) {
return new RevisionResource(change, ps, Optional.empty(), false);
}
@@ -52,11 +52,11 @@
}
private RevisionResource(
- ChangeResource change, PatchSet ps, Optional<ChangeEdit> edit, boolean cachable) {
+ ChangeResource change, PatchSet ps, Optional<ChangeEdit> edit, boolean cacheable) {
this.change = change;
this.ps = ps;
this.edit = edit;
- this.cacheable = cachable;
+ this.cacheable = cacheable;
}
public boolean isCacheable() {
diff --git a/java/com/google/gerrit/server/config/ConfigResource.java b/java/com/google/gerrit/server/config/ConfigResource.java
index 4275dc4..f2b7c8e 100644
--- a/java/com/google/gerrit/server/config/ConfigResource.java
+++ b/java/com/google/gerrit/server/config/ConfigResource.java
@@ -26,7 +26,7 @@
/**
* Default cache control that gets set on the 'Cache-Control' header for responses on this
- * resource that are cachable.
+ * resource that are cacheable.
*
* <p>Not all resources are cacheable and in fact the vast majority might not be. Caching is a
* trade-off between the freshness of data and the number of QPS that the web UI sends.
diff --git a/java/com/google/gerrit/server/config/ConfigUpdatedEvent.java b/java/com/google/gerrit/server/config/ConfigUpdatedEvent.java
index 600ce10..b37e489 100644
--- a/java/com/google/gerrit/server/config/ConfigUpdatedEvent.java
+++ b/java/com/google/gerrit/server/config/ConfigUpdatedEvent.java
@@ -97,8 +97,7 @@
private Multimap<UpdateResult, ConfigUpdateEntry> createUpdate(
Set<ConfigKey> entries, UpdateResult updateResult) {
Multimap<UpdateResult, ConfigUpdateEntry> updates = ArrayListMultimap.create();
- entries
- .stream()
+ entries.stream()
.filter(this::isValueUpdated)
.map(e -> new ConfigUpdateEntry(e, getString(e, oldConfig), getString(e, newConfig)))
.forEach(e -> updates.put(updateResult, e));
diff --git a/java/com/google/gerrit/server/config/RepositoryConfig.java b/java/com/google/gerrit/server/config/RepositoryConfig.java
index a52c076..d8c8468 100644
--- a/java/com/google/gerrit/server/config/RepositoryConfig.java
+++ b/java/com/google/gerrit/server/config/RepositoryConfig.java
@@ -61,8 +61,7 @@
}
public ImmutableList<Path> getAllBasePaths() {
- return cfg.getSubsections(SECTION_NAME)
- .stream()
+ return cfg.getSubsections(SECTION_NAME).stream()
.map(sub -> cfg.getString(SECTION_NAME, sub, BASE_PATH_NAME))
.filter(Objects::nonNull)
.map(Paths::get)
@@ -90,8 +89,7 @@
*/
@Nullable
private String findSubSection(String project) {
- return cfg.getSubsections(SECTION_NAME)
- .stream()
+ return cfg.getSubsections(SECTION_NAME).stream()
.filter(ss -> isMatch(ss, project))
.max(comparing(String::length))
.orElse(null);
diff --git a/java/com/google/gerrit/server/git/HookUtil.java b/java/com/google/gerrit/server/git/HookUtil.java
index 27c6e1e..6e8f27c 100644
--- a/java/com/google/gerrit/server/git/HookUtil.java
+++ b/java/com/google/gerrit/server/git/HookUtil.java
@@ -40,10 +40,7 @@
}
try {
refs =
- rp.getRepository()
- .getRefDatabase()
- .getRefs()
- .stream()
+ rp.getRepository().getRefDatabase().getRefs().stream()
.collect(toMap(Ref::getName, r -> r));
} catch (ServiceMayNotContinueException e) {
throw e;
diff --git a/java/com/google/gerrit/server/git/MergeUtil.java b/java/com/google/gerrit/server/git/MergeUtil.java
index 208dafb..5d7a27b 100644
--- a/java/com/google/gerrit/server/git/MergeUtil.java
+++ b/java/com/google/gerrit/server/git/MergeUtil.java
@@ -294,9 +294,7 @@
((ResolveMerger) m).getMergeResults();
filesWithGitConflicts =
- mergeResults
- .entrySet()
- .stream()
+ mergeResults.entrySet().stream()
.filter(e -> e.getValue().containsConflicts())
.map(Map.Entry::getKey)
.collect(toImmutableSet());
diff --git a/java/com/google/gerrit/server/git/receive/AsyncReceiveCommits.java b/java/com/google/gerrit/server/git/receive/AsyncReceiveCommits.java
index f0077cd..1f3f001 100644
--- a/java/com/google/gerrit/server/git/receive/AsyncReceiveCommits.java
+++ b/java/com/google/gerrit/server/git/receive/AsyncReceiveCommits.java
@@ -175,29 +175,45 @@
}
}
+ private enum PushType {
+ CREATE_REPLACE,
+ NORMAL,
+ AUTOCLOSE,
+ };
+
@Singleton
private static class Metrics {
- private final Histogram1<ResultChangeIds.Key> changes;
- private final Timer1<String> latencyPerChange;
+ private final Histogram1<PushType> changes;
+ private final Timer1<PushType> latencyPerChange;
+ private final Timer1<PushType> latencyPerPush;
private final Counter0 timeouts;
@Inject
Metrics(MetricMaker metricMaker) {
changes =
metricMaker.newHistogram(
- "receivecommits/changes",
+ "receivecommits/changes_per_push",
new Description("number of changes uploaded in a single push.").setCumulative(),
- Field.ofEnum(
- ResultChangeIds.Key.class,
- "type",
- "type of update (replace, create, autoclose)"));
+ Field.ofEnum(PushType.class, "type", "type of push (create/replace, autoclose)"));
+
latencyPerChange =
metricMaker.newTimer(
- "receivecommits/latency",
- new Description("average delay per updated change")
+ "receivecommits/latency_per_push_per_change",
+ new Description(
+ "Processing delay per push divided by the number of changes in said push. "
+ + "(Only includes pushes which contain changes.)")
.setUnit(Units.MILLISECONDS)
.setCumulative(),
- Field.ofString("type", "type of update (create/replace, autoclose)"));
+ Field.ofEnum(PushType.class, "type", "type of push (create/replace, autoclose)"));
+
+ latencyPerPush =
+ metricMaker.newTimer(
+ "receivecommits/latency_per_push",
+ new Description("processing delay for a processing single push")
+ .setUnit(Units.MILLISECONDS)
+ .setCumulative(),
+ Field.ofEnum(
+ PushType.class, "type", "type of push (create/replace, autoclose, normal)"));
timeouts =
metricMaker.newCounter(
@@ -342,24 +358,29 @@
long deltaNanos = System.nanoTime() - startNanos;
int totalChanges = 0;
+ PushType pushType;
if (resultChangeIds.isMagicPush()) {
+ pushType = PushType.CREATE_REPLACE;
List<Change.Id> created = resultChangeIds.get(ResultChangeIds.Key.CREATED);
- metrics.changes.record(ResultChangeIds.Key.CREATED, created.size());
List<Change.Id> replaced = resultChangeIds.get(ResultChangeIds.Key.REPLACED);
- metrics.changes.record(ResultChangeIds.Key.REPLACED, replaced.size());
- totalChanges += replaced.size() + created.size();
+ metrics.changes.record(pushType, created.size() + replaced.size());
+ totalChanges = replaced.size() + created.size();
} else {
List<Change.Id> autoclosed = resultChangeIds.get(ResultChangeIds.Key.AUTOCLOSED);
- metrics.changes.record(ResultChangeIds.Key.AUTOCLOSED, autoclosed.size());
- totalChanges += autoclosed.size();
+ if (!autoclosed.isEmpty()) {
+ pushType = PushType.AUTOCLOSE;
+ metrics.changes.record(pushType, autoclosed.size());
+ totalChanges = autoclosed.size();
+ } else {
+ pushType = PushType.NORMAL;
+ }
}
if (totalChanges > 0) {
- metrics.latencyPerChange.record(
- resultChangeIds.isMagicPush() ? "CREATE_REPLACE" : ResultChangeIds.Key.AUTOCLOSED.name(),
- deltaNanos / totalChanges,
- NANOSECONDS);
+ metrics.latencyPerChange.record(pushType, deltaNanos / totalChanges, NANOSECONDS);
}
+
+ metrics.latencyPerPush.record(pushType, deltaNanos, NANOSECONDS);
}
/** Returns the Change.Ids that were processed in onPreReceive */
diff --git a/java/com/google/gerrit/server/git/receive/HackPushNegotiateHook.java b/java/com/google/gerrit/server/git/receive/HackPushNegotiateHook.java
index c6c4819..9bad21d 100644
--- a/java/com/google/gerrit/server/git/receive/HackPushNegotiateHook.java
+++ b/java/com/google/gerrit/server/git/receive/HackPushNegotiateHook.java
@@ -79,10 +79,7 @@
if (r == null) {
try {
r =
- rp.getRepository()
- .getRefDatabase()
- .getRefs()
- .stream()
+ rp.getRepository().getRefDatabase().getRefs().stream()
.collect(toMap(Ref::getName, x -> x));
} catch (ServiceMayNotContinueException e) {
throw e;
diff --git a/java/com/google/gerrit/server/git/receive/ReceiveCommits.java b/java/com/google/gerrit/server/git/receive/ReceiveCommits.java
index 79dd5b5..103edd8 100644
--- a/java/com/google/gerrit/server/git/receive/ReceiveCommits.java
+++ b/java/com/google/gerrit/server/git/receive/ReceiveCommits.java
@@ -734,14 +734,11 @@
Collections.reverse(orderedCommits);
Map<String, CreateRequest> created =
- newChanges
- .stream()
+ newChanges.stream()
.filter(r -> r.change != null)
.collect(Collectors.toMap(r -> r.commit.name(), r -> r));
Map<String, ReplaceRequest> updated =
- replaceByChange
- .values()
- .stream()
+ replaceByChange.values().stream()
.filter(r -> r.inputCommand.getResult() == OK)
.collect(Collectors.toMap(r -> r.newCommitId.name(), r -> r));
@@ -861,12 +858,9 @@
throw INSERT_EXCEPTION.apply(e);
}
- replaceByChange
- .values()
- .stream()
+ replaceByChange.values().stream()
.forEach(req -> resultChangeIds.add(ResultChangeIds.Key.REPLACED, req.ontoChange));
- newChanges
- .stream()
+ newChanges.stream()
.forEach(req -> resultChangeIds.add(ResultChangeIds.Key.CREATED, req.changeId));
if (magicBranchCmd != null) {
diff --git a/java/com/google/gerrit/server/git/receive/ReplaceOp.java b/java/com/google/gerrit/server/git/receive/ReplaceOp.java
index 4acde28..6636b1f 100644
--- a/java/com/google/gerrit/server/git/receive/ReplaceOp.java
+++ b/java/com/google/gerrit/server/git/receive/ReplaceOp.java
@@ -364,13 +364,9 @@
inputs =
Streams.concat(
inputs,
- magicBranch
- .getCombinedReviewers(fromFooters)
- .stream()
+ magicBranch.getCombinedReviewers(fromFooters).stream()
.map(r -> newAddReviewerInput(r, ReviewerState.REVIEWER)),
- magicBranch
- .getCombinedCcs(fromFooters)
- .stream()
+ magicBranch.getCombinedCcs(fromFooters).stream()
.map(r -> newAddReviewerInput(r, ReviewerState.CC)));
}
return inputs.collect(toImmutableList());
@@ -557,9 +553,7 @@
cm.addReviewers(
Streams.concat(
oldRecipients.getReviewers().stream(),
- reviewerAdditions
- .flattenResults(AddReviewersOp.Result::addedReviewers)
- .stream()
+ reviewerAdditions.flattenResults(AddReviewersOp.Result::addedReviewers).stream()
.map(PatchSetApproval::getAccountId))
.collect(toImmutableSet()));
cm.addExtraCC(
diff --git a/java/com/google/gerrit/server/git/validators/AccountValidator.java b/java/com/google/gerrit/server/git/validators/AccountValidator.java
index e9fe562..08870d3 100644
--- a/java/com/google/gerrit/server/git/validators/AccountValidator.java
+++ b/java/com/google/gerrit/server/git/validators/AccountValidator.java
@@ -114,9 +114,7 @@
accountConfig.load(allUsersName, rw, commit);
if (messages != null) {
messages.addAll(
- accountConfig
- .getValidationErrors()
- .stream()
+ accountConfig.getValidationErrors().stream()
.map(ValidationError::getMessage)
.collect(toSet()));
}
diff --git a/java/com/google/gerrit/server/git/validators/CommitValidators.java b/java/com/google/gerrit/server/git/validators/CommitValidators.java
index 36561d8..1897d62 100644
--- a/java/com/google/gerrit/server/git/validators/CommitValidators.java
+++ b/java/com/google/gerrit/server/git/validators/CommitValidators.java
@@ -705,8 +705,7 @@
List<ConsistencyProblemInfo> problems =
externalIdsConsistencyChecker.check(receiveEvent.commit);
List<CommitValidationMessage> msgs =
- problems
- .stream()
+ problems.stream()
.map(
p ->
new CommitValidationMessage(
@@ -772,8 +771,7 @@
if (!errorMessages.isEmpty()) {
throw new CommitValidationException(
"invalid account configuration",
- errorMessages
- .stream()
+ errorMessages.stream()
.map(m -> new CommitValidationMessage(m, Type.ERROR))
.collect(toList()));
}
diff --git a/java/com/google/gerrit/server/group/PeriodicGroupIndexer.java b/java/com/google/gerrit/server/group/PeriodicGroupIndexer.java
index dbbc3f6..2a9538d 100644
--- a/java/com/google/gerrit/server/group/PeriodicGroupIndexer.java
+++ b/java/com/google/gerrit/server/group/PeriodicGroupIndexer.java
@@ -125,8 +125,7 @@
public synchronized void run() {
try (Repository allUsers = repoManager.openRepository(allUsersName)) {
ImmutableSet<AccountGroup.UUID> newGroupUuids =
- GroupNameNotes.loadAllGroups(allUsers)
- .stream()
+ GroupNameNotes.loadAllGroups(allUsers).stream()
.map(GroupReference::getUUID)
.collect(toImmutableSet());
GroupIndexer groupIndexer = groupIndexerProvider.get();
diff --git a/java/com/google/gerrit/server/group/db/GroupConfigCommitMessage.java b/java/com/google/gerrit/server/group/db/GroupConfigCommitMessage.java
index 62cc20d..5627154 100644
--- a/java/com/google/gerrit/server/group/db/GroupConfigCommitMessage.java
+++ b/java/com/google/gerrit/server/group/db/GroupConfigCommitMessage.java
@@ -107,13 +107,11 @@
Function<T, String> toString = element -> toParsableString.apply(auditLogFormatter, element);
Stream<String> removedElements =
- Sets.difference(oldElements, newElements)
- .stream()
+ Sets.difference(oldElements, newElements).stream()
.map(toString)
.map((removalFooterKey.getName() + ": ")::concat);
Stream<String> addedElements =
- Sets.difference(newElements, oldElements)
- .stream()
+ Sets.difference(newElements, oldElements).stream()
.map(toString)
.map((additionFooterKey.getName() + ": ")::concat);
return Stream.concat(removedElements, addedElements);
diff --git a/java/com/google/gerrit/server/group/db/GroupNameNotes.java b/java/com/google/gerrit/server/group/db/GroupNameNotes.java
index 6c21dc4..e95e91f 100644
--- a/java/com/google/gerrit/server/group/db/GroupNameNotes.java
+++ b/java/com/google/gerrit/server/group/db/GroupNameNotes.java
@@ -295,8 +295,7 @@
private static ImmutableBiMap<AccountGroup.UUID, String> toBiMap(
Collection<GroupReference> groupReferences) {
try {
- return groupReferences
- .stream()
+ return groupReferences.stream()
.collect(toImmutableBiMap(GroupReference::getUUID, GroupReference::getName));
} catch (IllegalArgumentException e) {
throw new IllegalArgumentException(UNIQUE_REF_ERROR, e);
diff --git a/java/com/google/gerrit/server/group/db/Groups.java b/java/com/google/gerrit/server/group/db/Groups.java
index f2289d4..37de011 100644
--- a/java/com/google/gerrit/server/group/db/Groups.java
+++ b/java/com/google/gerrit/server/group/db/Groups.java
@@ -124,9 +124,7 @@
getGroupFromNoteDb(allUsersName, allUsersRepo, internalGroup.getUUID());
group.map(InternalGroup::getSubgroups).ifPresent(allSubgroups::addAll);
}
- return allSubgroups
- .build()
- .stream()
+ return allSubgroups.build().stream()
.filter(groupUuid -> !AccountGroup.isInternalGroup(groupUuid));
}
diff --git a/java/com/google/gerrit/server/index/account/AccountField.java b/java/com/google/gerrit/server/index/account/AccountField.java
index 111991c..f67a41d 100644
--- a/java/com/google/gerrit/server/index/account/AccountField.java
+++ b/java/com/google/gerrit/server/index/account/AccountField.java
@@ -157,8 +157,7 @@
storedOnly("external_id_state")
.buildRepeatable(
a ->
- a.getExternalIds()
- .stream()
+ a.getExternalIds().stream()
.filter(e -> e.blobId() != null)
.map(ExternalId::toByteArray)
.collect(toSet()));
diff --git a/java/com/google/gerrit/server/index/change/AllChangesIndexer.java b/java/com/google/gerrit/server/index/change/AllChangesIndexer.java
index 78e14e4..577c255 100644
--- a/java/com/google/gerrit/server/index/change/AllChangesIndexer.java
+++ b/java/com/google/gerrit/server/index/change/AllChangesIndexer.java
@@ -130,9 +130,7 @@
// Estimate size based on IDs that show up in ref names. This is not perfect, since patch set
// refs may exist for changes whose metadata was never successfully stored. But that's ok, as
// the estimate is just used as a heuristic for sorting projects.
- return repo.getRefDatabase()
- .getRefsByPrefix(RefNames.REFS_CHANGES)
- .stream()
+ return repo.getRefDatabase().getRefsByPrefix(RefNames.REFS_CHANGES).stream()
.map(r -> Change.Id.fromRef(r.getName()))
.filter(Objects::nonNull)
.distinct()
diff --git a/java/com/google/gerrit/server/index/change/ChangeField.java b/java/com/google/gerrit/server/index/change/ChangeField.java
index 593fb85..50b38d3 100644
--- a/java/com/google/gerrit/server/index/change/ChangeField.java
+++ b/java/com/google/gerrit/server/index/change/ChangeField.java
@@ -216,8 +216,7 @@
*/
private static Stream<String> extensions(ChangeData cd) throws OrmException {
try {
- return cd.currentFilePaths()
- .stream()
+ return cd.currentFilePaths().stream()
// Use case-insensitive file extensions even though other file fields are case-sensitive.
// If we want to find "all Java files", we want to match both .java and .JAVA, even if we
// normally care about case sensitivity. (Whether we should change the existing file/path
@@ -234,8 +233,7 @@
public static Set<String> getFooters(ChangeData cd) throws OrmException {
try {
- return cd.commitFooters()
- .stream()
+ return cd.commitFooters().stream()
.map(f -> f.toString().toLowerCase(Locale.US))
.collect(toSet());
} catch (IOException e) {
@@ -843,8 +841,7 @@
@VisibleForTesting
static List<SubmitRecord> parseSubmitRecords(Collection<String> values) {
- return values
- .stream()
+ return values.stream()
.map(v -> GSON.fromJson(v, StoredSubmitRecord.class).toSubmitRecord())
.collect(toList());
}
diff --git a/java/com/google/gerrit/server/index/project/StalenessChecker.java b/java/com/google/gerrit/server/index/project/StalenessChecker.java
index 25cc5fa..733e486 100644
--- a/java/com/google/gerrit/server/index/project/StalenessChecker.java
+++ b/java/com/google/gerrit/server/index/project/StalenessChecker.java
@@ -66,9 +66,7 @@
SetMultimap<Project.NameKey, RefState> currentRefStates =
MultimapBuilder.hashKeys().hashSetValues().build();
- projectData
- .tree()
- .stream()
+ projectData.tree().stream()
.filter(p -> p.getProject().getConfigRefState() != null)
.forEach(
p ->
diff --git a/java/com/google/gerrit/server/logging/CallerFinder.java b/java/com/google/gerrit/server/logging/CallerFinder.java
index 62f2bbc..c27dbbb 100644
--- a/java/com/google/gerrit/server/logging/CallerFinder.java
+++ b/java/com/google/gerrit/server/logging/CallerFinder.java
@@ -170,8 +170,7 @@
public LazyArg<String> findCaller() {
return lazy(
() ->
- targets()
- .stream()
+ targets().stream()
.map(t -> findCallerOf(t, skip() + 1))
.filter(Optional::isPresent)
.findFirst()
diff --git a/java/com/google/gerrit/server/logging/TraceContext.java b/java/com/google/gerrit/server/logging/TraceContext.java
index 76968d5..ded34d0 100644
--- a/java/com/google/gerrit/server/logging/TraceContext.java
+++ b/java/com/google/gerrit/server/logging/TraceContext.java
@@ -134,10 +134,7 @@
}
Optional<String> existingTraceId =
- LoggingContext.getInstance()
- .getTagsAsMap()
- .get(RequestId.Type.TRACE_ID.name())
- .stream()
+ LoggingContext.getInstance().getTagsAsMap().get(RequestId.Type.TRACE_ID.name()).stream()
.findAny();
if (existingTraceId.isPresent()) {
// request tracing was already started, no need to generate a new trace ID
diff --git a/java/com/google/gerrit/server/mail/receive/MailProcessor.java b/java/com/google/gerrit/server/mail/receive/MailProcessor.java
index 79a915c..39cd9c3 100644
--- a/java/com/google/gerrit/server/mail/receive/MailProcessor.java
+++ b/java/com/google/gerrit/server/mail/receive/MailProcessor.java
@@ -231,8 +231,7 @@
// comments from the outbound email.
// TODO(hiesel) Also filter by original comment author.
Collection<Comment> comments =
- cd.publishedComments()
- .stream()
+ cd.publishedComments().stream()
.filter(c -> (c.writtenOn.getTime() / 1000) == (metadata.timestamp.getTime() / 1000))
.sorted(CommentsUtil.COMMENT_ORDER)
.collect(toList());
@@ -415,8 +414,7 @@
private Set<String> existingMessageIds(ChangeData cd) throws OrmException {
Set<String> existingMessageIds = new HashSet<>();
- cd.messages()
- .stream()
+ cd.messages().stream()
.forEach(
m -> {
String messageId = CommentsUtil.extractMessageId(m.getTag());
@@ -424,8 +422,7 @@
existingMessageIds.add(messageId);
}
});
- cd.publishedComments()
- .stream()
+ cd.publishedComments().stream()
.forEach(
c -> {
String messageId = CommentsUtil.extractMessageId(c.tag);
diff --git a/java/com/google/gerrit/server/mail/send/CommentSender.java b/java/com/google/gerrit/server/mail/send/CommentSender.java
index e2a7d92..0f55366 100644
--- a/java/com/google/gerrit/server/mail/send/CommentSender.java
+++ b/java/com/google/gerrit/server/mail/send/CommentSender.java
@@ -458,8 +458,7 @@
}
private List<Map<String, Object>> commentBlocksToSoyData(List<CommentFormatter.Block> blocks) {
- return blocks
- .stream()
+ return blocks.stream()
.map(
b -> {
Map<String, Object> map = new HashMap<>();
diff --git a/java/com/google/gerrit/server/notedb/ChangeNotesState.java b/java/com/google/gerrit/server/notedb/ChangeNotesState.java
index 4467401..fd260e7 100644
--- a/java/com/google/gerrit/server/notedb/ChangeNotesState.java
+++ b/java/com/google/gerrit/server/notedb/ChangeNotesState.java
@@ -543,23 +543,17 @@
.changeId(changeId)
.columns(toChangeColumns(changeId, proto.getColumns()))
.pastAssignees(
- proto
- .getPastAssigneeList()
- .stream()
+ proto.getPastAssigneeList().stream()
.map(Account.Id::new)
.collect(toImmutableSet()))
.hashtags(proto.getHashtagList())
.patchSets(
- proto
- .getPatchSetList()
- .stream()
+ proto.getPatchSetList().stream()
.map(bytes -> parseProtoFrom(PatchSetProtoConverter.INSTANCE, bytes))
.map(ps -> Maps.immutableEntry(ps.getId(), ps))
.collect(toImmutableList()))
.approvals(
- proto
- .getApprovalList()
- .stream()
+ proto.getApprovalList().stream()
.map(bytes -> parseProtoFrom(PatchSetApprovalProtoConverter.INSTANCE, bytes))
.map(a -> Maps.immutableEntry(a.getPatchSetId(), a))
.collect(toImmutableList()))
@@ -568,28 +562,20 @@
.pendingReviewers(toReviewerSet(proto.getPendingReviewerList()))
.pendingReviewersByEmail(toReviewerByEmailSet(proto.getPendingReviewerByEmailList()))
.allPastReviewers(
- proto
- .getPastReviewerList()
- .stream()
+ proto.getPastReviewerList().stream()
.map(Account.Id::new)
.collect(toImmutableList()))
.reviewerUpdates(toReviewerStatusUpdateList(proto.getReviewerUpdateList()))
.submitRecords(
- proto
- .getSubmitRecordList()
- .stream()
+ proto.getSubmitRecordList().stream()
.map(r -> GSON.fromJson(r, StoredSubmitRecord.class).toSubmitRecord())
.collect(toImmutableList()))
.changeMessages(
- proto
- .getChangeMessageList()
- .stream()
+ proto.getChangeMessageList().stream()
.map(bytes -> parseProtoFrom(ChangeMessageProtoConverter.INSTANCE, bytes))
.collect(toImmutableList()))
.publishedComments(
- proto
- .getPublishedCommentList()
- .stream()
+ proto.getPublishedCommentList().stream()
.map(r -> GSON.fromJson(r, Comment.class))
.collect(toImmutableListMultimap(c -> new RevId(c.revId), c -> c)));
return b.build();
diff --git a/java/com/google/gerrit/server/notedb/DeleteCommentRewriter.java b/java/com/google/gerrit/server/notedb/DeleteCommentRewriter.java
index cce7540..4f1a5d0 100644
--- a/java/com/google/gerrit/server/notedb/DeleteCommentRewriter.java
+++ b/java/com/google/gerrit/server/notedb/DeleteCommentRewriter.java
@@ -141,9 +141,7 @@
throws IOException, ConfigInvalidException {
return RevisionNoteMap.parse(
changeNoteJson, legacyChangeNoteRead, changeId, reader, noteMap, PUBLISHED)
- .revisionNotes
- .values()
- .stream()
+ .revisionNotes.values().stream()
.flatMap(n -> n.getEntities().stream())
.collect(toMap(c -> c.key.uuid, Function.identity()));
}
@@ -189,9 +187,7 @@
*/
private List<Comment> getDeletedComments(
Map<String, Comment> parMap, Map<String, Comment> curMap) {
- return parMap
- .entrySet()
- .stream()
+ return parMap.entrySet().stream()
.filter(c -> !curMap.containsKey(c.getKey()))
.map(Map.Entry::getValue)
.collect(toList());
diff --git a/java/com/google/gerrit/server/patch/EditTransformer.java b/java/com/google/gerrit/server/patch/EditTransformer.java
index 9083ede..90f442e 100644
--- a/java/com/google/gerrit/server/patch/EditTransformer.java
+++ b/java/com/google/gerrit/server/patch/EditTransformer.java
@@ -89,8 +89,7 @@
* @return the transformed edits per file path
*/
public Multimap<String, ContextAwareEdit> getEditsPerFilePath() {
- return edits
- .stream()
+ return edits.stream()
.collect(
toMultimap(
ContextAwareEdit::getNewFilePath, Function.identity(), ArrayListMultimap::create));
@@ -112,9 +111,7 @@
transformingEntries.stream().collect(groupingBy(EditTransformer::getOldFilePath));
edits =
- editsPerFilePath
- .entrySet()
- .stream()
+ editsPerFilePath.entrySet().stream()
.flatMap(
pathAndEdits -> {
List<PatchListEntry> transEntries =
@@ -137,12 +134,11 @@
}
// TODO(aliceks): Find a way to prevent an explosion of the number of entries.
- return transformingEntries
- .stream()
+ return transformingEntries.stream()
.flatMap(
transEntry ->
transformEdits(
- sideStrategy, originalEdits, transEntry.getEdits(), transEntry.getNewName())
+ sideStrategy, originalEdits, transEntry.getEdits(), transEntry.getNewName())
.stream());
}
diff --git a/java/com/google/gerrit/server/patch/PatchListLoader.java b/java/com/google/gerrit/server/patch/PatchListLoader.java
index 074e344..08de537 100644
--- a/java/com/google/gerrit/server/patch/PatchListLoader.java
+++ b/java/com/google/gerrit/server/patch/PatchListLoader.java
@@ -287,8 +287,7 @@
}
List<DiffEntry> relevantDiffEntries =
- diffEntries
- .stream()
+ diffEntries.stream()
.filter(diffEntry -> isTouched(touchedFilePaths, diffEntry))
.collect(toImmutableList());
@@ -397,8 +396,7 @@
}
private static Set<Edit> getContentEdits(Set<ContextAwareEdit> editsDueToRebase) {
- return editsDueToRebase
- .stream()
+ return editsDueToRebase.stream()
.map(ContextAwareEdit::toEdit)
.filter(Optional::isPresent)
.map(Optional::get)
diff --git a/java/com/google/gerrit/server/permissions/DefaultPermissionBackend.java b/java/com/google/gerrit/server/permissions/DefaultPermissionBackend.java
index b3b45d9..b23c85f 100644
--- a/java/com/google/gerrit/server/permissions/DefaultPermissionBackend.java
+++ b/java/com/google/gerrit/server/permissions/DefaultPermissionBackend.java
@@ -40,7 +40,6 @@
import com.google.inject.Provider;
import com.google.inject.Singleton;
import java.util.Collection;
-import java.util.EnumSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
@@ -128,7 +127,7 @@
@Override
public <T extends GlobalOrPluginPermission> Set<T> test(Collection<T> permSet)
throws PermissionBackendException {
- Set<T> ok = newSet(permSet);
+ Set<T> ok = Sets.newHashSetWithExpectedSize(permSet.size());
for (T perm : permSet) {
if (can(perm)) {
ok.add(perm);
@@ -147,7 +146,7 @@
return can((GlobalPermission) perm);
} else if (perm instanceof PluginPermission) {
PluginPermission pluginPermission = (PluginPermission) perm;
- return has(DefaultPermissionMappings.pluginPermissionName(pluginPermission))
+ return has(DefaultPermissionMappings.pluginCapabilityName(pluginPermission))
|| (pluginPermission.fallBackToAdmin() && isAdmin());
}
throw new PermissionBackendException(perm + " unsupported");
@@ -252,8 +251,7 @@
private boolean allow(Collection<PermissionRule> rules) {
return user.getEffectiveGroups()
.containsAnyOf(
- rules
- .stream()
+ rules.stream()
.filter(r -> r.getAction() == Action.ALLOW)
.map(r -> r.getGroup().getUUID())
.collect(toSet()));
@@ -261,22 +259,11 @@
private boolean notDenied(Collection<PermissionRule> rules) {
Set<AccountGroup.UUID> denied =
- rules
- .stream()
+ rules.stream()
.filter(r -> r.getAction() != Action.ALLOW)
.map(r -> r.getGroup().getUUID())
.collect(toSet());
return denied.isEmpty() || !user.getEffectiveGroups().containsAnyOf(denied);
}
}
-
- private static <T extends GlobalOrPluginPermission> Set<T> newSet(Collection<T> permSet) {
- if (permSet instanceof EnumSet) {
- @SuppressWarnings({"unchecked", "rawtypes"})
- Set<T> s = ((EnumSet) permSet).clone();
- s.clear();
- return s;
- }
- return Sets.newHashSetWithExpectedSize(permSet.size());
- }
}
diff --git a/java/com/google/gerrit/server/permissions/DefaultPermissionMappings.java b/java/com/google/gerrit/server/permissions/DefaultPermissionMappings.java
index d56bc78..8215083 100644
--- a/java/com/google/gerrit/server/permissions/DefaultPermissionMappings.java
+++ b/java/com/google/gerrit/server/permissions/DefaultPermissionMappings.java
@@ -23,6 +23,7 @@
import com.google.gerrit.common.data.Permission;
import com.google.gerrit.extensions.api.access.GlobalOrPluginPermission;
import com.google.gerrit.extensions.api.access.PluginPermission;
+import com.google.gerrit.extensions.api.access.PluginProjectPermission;
import com.google.gerrit.server.permissions.LabelPermission.ForUser;
import java.util.EnumSet;
import java.util.Optional;
@@ -120,14 +121,18 @@
return Optional.ofNullable(CAPABILITIES.inverse().get(capabilityName));
}
- public static String pluginPermissionName(PluginPermission pluginPermission) {
+ public static String pluginCapabilityName(PluginPermission pluginPermission) {
return pluginPermission.pluginName() + '-' + pluginPermission.capability();
}
+ public static String pluginProjectPermissionName(PluginProjectPermission pluginPermission) {
+ return "plugin-" + pluginPermission.pluginName() + '-' + pluginPermission.permission();
+ }
+
public static String globalOrPluginPermissionName(GlobalOrPluginPermission permission) {
return permission instanceof GlobalPermission
? globalPermissionName((GlobalPermission) permission)
- : pluginPermissionName((PluginPermission) permission);
+ : pluginCapabilityName((PluginPermission) permission);
}
public static Optional<String> projectPermissionName(ProjectPermission projectPermission) {
diff --git a/java/com/google/gerrit/server/permissions/DefaultRefFilter.java b/java/com/google/gerrit/server/permissions/DefaultRefFilter.java
index c189f33..913921f 100644
--- a/java/com/google/gerrit/server/permissions/DefaultRefFilter.java
+++ b/java/com/google/gerrit/server/permissions/DefaultRefFilter.java
@@ -301,9 +301,7 @@
private static Map<String, Ref> getTaggableRefsMap(Repository repo)
throws PermissionBackendException {
try {
- return repo.getRefDatabase()
- .getRefs()
- .stream()
+ return repo.getRefDatabase().getRefs().stream()
.filter(
r ->
!RefNames.isGerritRef(r.getName())
diff --git a/java/com/google/gerrit/server/permissions/FailedPermissionBackend.java b/java/com/google/gerrit/server/permissions/FailedPermissionBackend.java
index 4affc0b..5c7ee0d 100644
--- a/java/com/google/gerrit/server/permissions/FailedPermissionBackend.java
+++ b/java/com/google/gerrit/server/permissions/FailedPermissionBackend.java
@@ -14,6 +14,7 @@
package com.google.gerrit.server.permissions;
+import com.google.gerrit.extensions.api.access.CoreOrPluginProjectPermission;
import com.google.gerrit.extensions.api.access.GlobalOrPluginPermission;
import com.google.gerrit.extensions.conditions.BooleanCondition;
import com.google.gerrit.reviewdb.client.Project;
@@ -124,18 +125,18 @@
}
@Override
- public void check(ProjectPermission perm) throws PermissionBackendException {
+ public void check(CoreOrPluginProjectPermission perm) throws PermissionBackendException {
throw new PermissionBackendException(message, cause);
}
@Override
- public Set<ProjectPermission> test(Collection<ProjectPermission> permSet)
+ public <T extends CoreOrPluginProjectPermission> Set<T> test(Collection<T> permSet)
throws PermissionBackendException {
throw new PermissionBackendException(message, cause);
}
@Override
- public BooleanCondition testCond(ProjectPermission perm) {
+ public BooleanCondition testCond(CoreOrPluginProjectPermission perm) {
throw new UnsupportedOperationException(
"FailedPermissionBackend does not support conditions");
}
diff --git a/java/com/google/gerrit/server/permissions/PermissionBackend.java b/java/com/google/gerrit/server/permissions/PermissionBackend.java
index 80fb35b..3ac294a 100644
--- a/java/com/google/gerrit/server/permissions/PermissionBackend.java
+++ b/java/com/google/gerrit/server/permissions/PermissionBackend.java
@@ -23,6 +23,7 @@
import com.google.common.collect.Sets;
import com.google.common.flogger.FluentLogger;
import com.google.gerrit.common.data.LabelType;
+import com.google.gerrit.extensions.api.access.CoreOrPluginProjectPermission;
import com.google.gerrit.extensions.api.access.GlobalOrPluginPermission;
import com.google.gerrit.extensions.conditions.BooleanCondition;
import com.google.gerrit.extensions.restapi.AuthException;
@@ -300,18 +301,23 @@
}
/** Verify scoped user can {@code perm}, throwing if denied. */
- public abstract void check(ProjectPermission perm)
+ public abstract void check(CoreOrPluginProjectPermission perm)
throws AuthException, PermissionBackendException;
/** Filter {@code permSet} to permissions scoped user might be able to perform. */
- public abstract Set<ProjectPermission> test(Collection<ProjectPermission> permSet)
+ public abstract <T extends CoreOrPluginProjectPermission> Set<T> test(Collection<T> permSet)
throws PermissionBackendException;
- public boolean test(ProjectPermission perm) throws PermissionBackendException {
- return test(EnumSet.of(perm)).contains(perm);
+ public boolean test(CoreOrPluginProjectPermission perm) throws PermissionBackendException {
+ if (perm instanceof ProjectPermission) {
+ return test(EnumSet.of((ProjectPermission) perm)).contains(perm);
+ }
+
+ // TODO(xchangcheng): implement for plugin defined project permissions.
+ return false;
}
- public boolean testOrFalse(ProjectPermission perm) {
+ public boolean testOrFalse(CoreOrPluginProjectPermission perm) {
try {
return test(perm);
} catch (PermissionBackendException e) {
@@ -320,7 +326,7 @@
}
}
- public abstract BooleanCondition testCond(ProjectPermission perm);
+ public abstract BooleanCondition testCond(CoreOrPluginProjectPermission perm);
/**
* Filter a map of references by visibility.
@@ -499,9 +505,7 @@
}
private static Set<LabelPermission.WithValue> valuesOf(LabelType label) {
- return label
- .getValues()
- .stream()
+ return label.getValues().stream()
.map((v) -> new LabelPermission.WithValue(label, v))
.collect(toSet());
}
diff --git a/java/com/google/gerrit/server/permissions/PermissionBackendCondition.java b/java/com/google/gerrit/server/permissions/PermissionBackendCondition.java
index 1b6b087..a92e504 100644
--- a/java/com/google/gerrit/server/permissions/PermissionBackendCondition.java
+++ b/java/com/google/gerrit/server/permissions/PermissionBackendCondition.java
@@ -14,6 +14,7 @@
package com.google.gerrit.server.permissions;
+import com.google.gerrit.extensions.api.access.CoreOrPluginProjectPermission;
import com.google.gerrit.extensions.api.access.GlobalOrPluginPermission;
import com.google.gerrit.extensions.conditions.BooleanCondition;
import com.google.gerrit.extensions.conditions.PrivateInternals_BooleanCondition;
@@ -100,10 +101,11 @@
public static class ForProject extends PermissionBackendCondition {
private final PermissionBackend.ForProject impl;
- private final ProjectPermission perm;
+ private final CoreOrPluginProjectPermission perm;
private final CurrentUser user;
- public ForProject(PermissionBackend.ForProject impl, ProjectPermission perm, CurrentUser user) {
+ public ForProject(
+ PermissionBackend.ForProject impl, CoreOrPluginProjectPermission perm, CurrentUser user) {
this.impl = impl;
this.perm = perm;
this.user = user;
@@ -113,7 +115,7 @@
return impl;
}
- public ProjectPermission permission() {
+ public CoreOrPluginProjectPermission permission() {
return perm;
}
diff --git a/java/com/google/gerrit/server/permissions/PermissionCollection.java b/java/com/google/gerrit/server/permissions/PermissionCollection.java
index b419698..1a3198d 100644
--- a/java/com/google/gerrit/server/permissions/PermissionCollection.java
+++ b/java/com/google/gerrit/server/permissions/PermissionCollection.java
@@ -151,8 +151,7 @@
Lists.reverse(Lists.newArrayList(sectionToProject.entrySet()));
Map<Project.NameKey, List<AccessSection>> accessByProject =
- accessDescending
- .stream()
+ accessDescending.stream()
.collect(
Collectors.groupingBy(
Map.Entry::getValue,
diff --git a/java/com/google/gerrit/server/permissions/PluginPermissionsUtil.java b/java/com/google/gerrit/server/permissions/PluginPermissionsUtil.java
index a837ed7..b147926 100644
--- a/java/com/google/gerrit/server/permissions/PluginPermissionsUtil.java
+++ b/java/com/google/gerrit/server/permissions/PluginPermissionsUtil.java
@@ -14,6 +14,8 @@
package com.google.gerrit.server.permissions;
+import static com.google.gerrit.extensions.api.access.PluginProjectPermission.PLUGIN_PERMISSION_NAME_PATTERN_STRING;
+
import com.google.common.collect.ImmutableMap;
import com.google.common.flogger.FluentLogger;
import com.google.gerrit.extensions.config.CapabilityDefinition;
@@ -41,7 +43,12 @@
* enough for this purpose since some core permissions, e.g. "label-", also contain "-".
*/
private static final Pattern PLUGIN_PERMISSION_NAME_IN_CONFIG_PATTERN =
- Pattern.compile("^plugin-" + PLUGIN_NAME_PATTERN_STRING + "-[a-zA-Z]+$");
+ Pattern.compile(
+ "^plugin-"
+ + PLUGIN_NAME_PATTERN_STRING
+ + "-"
+ + PLUGIN_PERMISSION_NAME_PATTERN_STRING
+ + "$");
/** Name pattern for a Gerrit plugin. */
private static final Pattern PLUGIN_NAME_PATTERN =
@@ -104,7 +111,7 @@
* @param name a config name which may stand for a plugin permission.
* @return whether the name matches the plugin permission name pattern for configs.
*/
- public static boolean isPluginPermission(String name) {
+ public static boolean isValidPluginPermission(String name) {
return PLUGIN_PERMISSION_NAME_IN_CONFIG_PATTERN.matcher(name).matches();
}
}
diff --git a/java/com/google/gerrit/server/permissions/ProjectControl.java b/java/com/google/gerrit/server/permissions/ProjectControl.java
index e1e7047..144519a 100644
--- a/java/com/google/gerrit/server/permissions/ProjectControl.java
+++ b/java/com/google/gerrit/server/permissions/ProjectControl.java
@@ -17,9 +17,12 @@
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.gerrit.reviewdb.client.RefNames.REFS_TAGS;
+import com.google.common.collect.Sets;
import com.google.gerrit.common.data.AccessSection;
import com.google.gerrit.common.data.Permission;
import com.google.gerrit.common.data.PermissionRule;
+import com.google.gerrit.extensions.api.access.CoreOrPluginProjectPermission;
+import com.google.gerrit.extensions.api.access.PluginProjectPermission;
import com.google.gerrit.extensions.conditions.BooleanCondition;
import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.reviewdb.client.AccountGroup;
@@ -45,7 +48,6 @@
import com.google.inject.assistedinject.Assisted;
import java.util.Collection;
import java.util.Collections;
-import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -372,17 +374,18 @@
}
@Override
- public void check(ProjectPermission perm) throws AuthException, PermissionBackendException {
+ public void check(CoreOrPluginProjectPermission perm)
+ throws AuthException, PermissionBackendException {
if (!can(perm)) {
throw new AuthException(perm.describeForException() + " not permitted");
}
}
@Override
- public Set<ProjectPermission> test(Collection<ProjectPermission> permSet)
+ public <T extends CoreOrPluginProjectPermission> Set<T> test(Collection<T> permSet)
throws PermissionBackendException {
- EnumSet<ProjectPermission> ok = EnumSet.noneOf(ProjectPermission.class);
- for (ProjectPermission perm : permSet) {
+ Set<T> ok = Sets.newHashSetWithExpectedSize(permSet.size());
+ for (T perm : permSet) {
if (can(perm)) {
ok.add(perm);
}
@@ -391,7 +394,7 @@
}
@Override
- public BooleanCondition testCond(ProjectPermission perm) {
+ public BooleanCondition testCond(CoreOrPluginProjectPermission perm) {
return new PermissionBackendCondition.ForProject(this, perm, getUser());
}
@@ -404,6 +407,17 @@
return refFilter.filter(refs, repo, opts);
}
+ private boolean can(CoreOrPluginProjectPermission perm) throws PermissionBackendException {
+ if (perm instanceof ProjectPermission) {
+ return can((ProjectPermission) perm);
+ } else if (perm instanceof PluginProjectPermission) {
+ // TODO(xchangcheng): implement for plugin defined project permissions.
+ return false;
+ }
+
+ throw new PermissionBackendException(perm.describeForException() + " unsupported");
+ }
+
private boolean can(ProjectPermission perm) throws PermissionBackendException {
switch (perm) {
case ACCESS:
diff --git a/java/com/google/gerrit/server/permissions/ProjectPermission.java b/java/com/google/gerrit/server/permissions/ProjectPermission.java
index ca04f3b..653303a 100644
--- a/java/com/google/gerrit/server/permissions/ProjectPermission.java
+++ b/java/com/google/gerrit/server/permissions/ProjectPermission.java
@@ -16,10 +16,11 @@
import static java.util.Objects.requireNonNull;
+import com.google.gerrit.extensions.api.access.CoreOrPluginProjectPermission;
import com.google.gerrit.extensions.api.access.GerritPermission;
import com.google.gerrit.reviewdb.client.RefNames;
-public enum ProjectPermission implements GerritPermission {
+public enum ProjectPermission implements CoreOrPluginProjectPermission {
/**
* Can access at least one reference or change within the repository.
*
diff --git a/java/com/google/gerrit/server/project/ChildProjects.java b/java/com/google/gerrit/server/project/ChildProjects.java
index 868d0af..ce9992e 100644
--- a/java/com/google/gerrit/server/project/ChildProjects.java
+++ b/java/com/google/gerrit/server/project/ChildProjects.java
@@ -93,8 +93,7 @@
Project.NameKey parent)
throws PermissionBackendException {
List<Project.NameKey> canSee =
- perm.filter(ProjectPermission.ACCESS, children.get(parent))
- .stream()
+ perm.filter(ProjectPermission.ACCESS, children.get(parent)).stream()
.sorted()
.collect(toList());
children.removeAll(parent); // removing all entries prevents cycles.
diff --git a/java/com/google/gerrit/server/project/ProjectCacheImpl.java b/java/com/google/gerrit/server/project/ProjectCacheImpl.java
index cc8fbe8..4a85554 100644
--- a/java/com/google/gerrit/server/project/ProjectCacheImpl.java
+++ b/java/com/google/gerrit/server/project/ProjectCacheImpl.java
@@ -249,8 +249,7 @@
@Override
public Set<AccountGroup.UUID> guessRelevantGroupUUIDs() {
try (Timer0.Context ignored = guessRelevantGroupsLatency.start()) {
- return all()
- .stream()
+ return all().stream()
.map(n -> byName.getIfPresent(n.get()))
.filter(Objects::nonNull)
.flatMap(p -> p.getConfig().getAllGroupUUIDs().stream())
diff --git a/java/com/google/gerrit/server/project/ProjectConfig.java b/java/com/google/gerrit/server/project/ProjectConfig.java
index 439e7c0..6dd697f 100644
--- a/java/com/google/gerrit/server/project/ProjectConfig.java
+++ b/java/com/google/gerrit/server/project/ProjectConfig.java
@@ -18,7 +18,7 @@
import static com.google.common.collect.ImmutableList.toImmutableList;
import static com.google.gerrit.common.data.Permission.isPermission;
import static com.google.gerrit.reviewdb.client.Project.DEFAULT_SUBMIT_TYPE;
-import static com.google.gerrit.server.permissions.PluginPermissionsUtil.isPluginPermission;
+import static com.google.gerrit.server.permissions.PluginPermissionsUtil.isValidPluginPermission;
import static java.util.stream.Collectors.toList;
import com.google.common.base.CharMatcher;
@@ -788,7 +788,7 @@
private boolean isCoreOrPluginPermission(String permission) {
// Since plugins are loaded dynamically, here we can't load all plugin permissions and verify
// their existence.
- return isPermission(permission) || isPluginPermission(permission);
+ return isPermission(permission) || isValidPluginPermission(permission);
}
private boolean isValidRegex(String refPattern) {
@@ -1248,14 +1248,12 @@
private void saveNotifySections(Config rc, Set<AccountGroup.UUID> keepGroups) {
for (NotifyConfig nc : sort(notifySections.values())) {
- nc.getGroups()
- .stream()
+ nc.getGroups().stream()
.map(GroupReference::getUUID)
.filter(Objects::nonNull)
.forEach(keepGroups::add);
List<String> email =
- nc.getGroups()
- .stream()
+ nc.getGroups().stream()
.map(gr -> new PermissionRule(gr).asString(false))
.sorted()
.collect(toList());
diff --git a/java/com/google/gerrit/server/project/ProjectState.java b/java/com/google/gerrit/server/project/ProjectState.java
index 73c222d..8d6923b 100644
--- a/java/com/google/gerrit/server/project/ProjectState.java
+++ b/java/com/google/gerrit/server/project/ProjectState.java
@@ -204,8 +204,7 @@
}
// If not, we check the parents.
- return parents()
- .stream()
+ return parents().stream()
.map(ProjectState::getConfig)
.map(ProjectConfig::getRulesId)
.anyMatch(Objects::nonNull);
diff --git a/java/com/google/gerrit/server/project/ProjectsConsistencyChecker.java b/java/com/google/gerrit/server/project/ProjectsConsistencyChecker.java
index e61c5df..894037d 100644
--- a/java/com/google/gerrit/server/project/ProjectsConsistencyChecker.java
+++ b/java/com/google/gerrit/server/project/ProjectsConsistencyChecker.java
@@ -296,9 +296,7 @@
// Auto-close by commit
for (ObjectId patchSetSha1 :
- autoCloseableChange
- .patchSets()
- .stream()
+ autoCloseableChange.patchSets().stream()
.map(ps -> ObjectId.fromString(ps.getRevision().get()))
.collect(toSet())) {
if (mergedSha1s.contains(patchSetSha1)) {
diff --git a/java/com/google/gerrit/server/project/SuggestParentCandidates.java b/java/com/google/gerrit/server/project/SuggestParentCandidates.java
index 99833af..d3dfdcd 100644
--- a/java/com/google/gerrit/server/project/SuggestParentCandidates.java
+++ b/java/com/google/gerrit/server/project/SuggestParentCandidates.java
@@ -42,9 +42,7 @@
}
public List<Project.NameKey> getNameKeys() throws PermissionBackendException {
- return permissionBackend
- .currentUser()
- .filter(ProjectPermission.ACCESS, readableParents())
+ return permissionBackend.currentUser().filter(ProjectPermission.ACCESS, readableParents())
.stream()
.sorted()
.collect(toList());
diff --git a/java/com/google/gerrit/server/query/account/InternalAccountQuery.java b/java/com/google/gerrit/server/query/account/InternalAccountQuery.java
index 6f3194e..61a9690 100644
--- a/java/com/google/gerrit/server/query/account/InternalAccountQuery.java
+++ b/java/com/google/gerrit/server/query/account/InternalAccountQuery.java
@@ -83,8 +83,7 @@
return ImmutableList.of();
}
- return query(AccountPredicates.preferredEmail(email))
- .stream()
+ return query(AccountPredicates.preferredEmail(email)).stream()
.filter(a -> a.getAccount().getPreferredEmail().equals(email))
.collect(toList());
}
@@ -120,8 +119,7 @@
for (int i = 0; i < emailList.size(); i++) {
String email = emailList.get(i);
Set<AccountState> matchingAccounts =
- r.get(i)
- .stream()
+ r.get(i).stream()
.filter(a -> a.getAccount().getPreferredEmail().equals(email))
.collect(toSet());
accountsByEmail.putAll(email, matchingAccounts);
diff --git a/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java b/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java
index 93ece2b..ab0c947 100644
--- a/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java
+++ b/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java
@@ -957,8 +957,7 @@
}
try {
return Predicate.or(
- parseAccount(who)
- .stream()
+ parseAccount(who).stream()
.map(a -> visibleto(args.userFactory.create(a)))
.collect(toImmutableList()));
} catch (QueryParseException e) {
@@ -1401,8 +1400,7 @@
if (!forDefaultField || accounts.size() <= MAX_ACCOUNTS_PER_DEFAULT_FIELD) {
reviewerPredicate =
Predicate.or(
- accounts
- .stream()
+ accounts.stream()
.map(id -> ReviewerPredicate.forState(id, state))
.collect(toList()));
}
diff --git a/java/com/google/gerrit/server/query/change/FileExtensionListPredicate.java b/java/com/google/gerrit/server/query/change/FileExtensionListPredicate.java
index 3399338..fc33b65 100644
--- a/java/com/google/gerrit/server/query/change/FileExtensionListPredicate.java
+++ b/java/com/google/gerrit/server/query/change/FileExtensionListPredicate.java
@@ -22,9 +22,7 @@
public class FileExtensionListPredicate extends ChangeIndexPredicate {
private static String clean(String extList) {
- return Splitter.on(',')
- .splitToList(extList)
- .stream()
+ return Splitter.on(',').splitToList(extList).stream()
.map(FileExtensionPredicate::clean)
.distinct()
.sorted()
diff --git a/java/com/google/gerrit/server/query/change/SubmitRecordPredicate.java b/java/com/google/gerrit/server/query/change/SubmitRecordPredicate.java
index 17034df..6a81ff6 100644
--- a/java/com/google/gerrit/server/query/change/SubmitRecordPredicate.java
+++ b/java/com/google/gerrit/server/query/change/SubmitRecordPredicate.java
@@ -31,8 +31,7 @@
return new SubmitRecordPredicate(status.name() + ',' + lowerLabel);
}
return Predicate.or(
- accounts
- .stream()
+ accounts.stream()
.map(a -> new SubmitRecordPredicate(status.name() + ',' + lowerLabel + ',' + a.get()))
.collect(toList()));
}
diff --git a/java/com/google/gerrit/server/query/change/SubmittablePredicate.java b/java/com/google/gerrit/server/query/change/SubmittablePredicate.java
index df78315..8a2c889 100644
--- a/java/com/google/gerrit/server/query/change/SubmittablePredicate.java
+++ b/java/com/google/gerrit/server/query/change/SubmittablePredicate.java
@@ -28,8 +28,7 @@
@Override
public boolean match(ChangeData cd) throws OrmException {
- return cd.submitRecords(ChangeField.SUBMIT_RULE_OPTIONS_STRICT)
- .stream()
+ return cd.submitRecords(ChangeField.SUBMIT_RULE_OPTIONS_STRICT).stream()
.anyMatch(r -> r.status == status);
}
diff --git a/java/com/google/gerrit/server/quota/QuotaResponse.java b/java/com/google/gerrit/server/quota/QuotaResponse.java
index 9a8a515..99a7c1d 100644
--- a/java/com/google/gerrit/server/quota/QuotaResponse.java
+++ b/java/com/google/gerrit/server/quota/QuotaResponse.java
@@ -101,8 +101,7 @@
}
public String errorMessage() {
- return error()
- .stream()
+ return error().stream()
.map(QuotaResponse::message)
.flatMap(Streams::stream)
.collect(Collectors.joining(", "));
diff --git a/java/com/google/gerrit/server/restapi/account/DeleteEmail.java b/java/com/google/gerrit/server/restapi/account/DeleteEmail.java
index f0269f1..6bacde2 100644
--- a/java/com/google/gerrit/server/restapi/account/DeleteEmail.java
+++ b/java/com/google/gerrit/server/restapi/account/DeleteEmail.java
@@ -85,9 +85,7 @@
}
Set<ExternalId> extIds =
- externalIds
- .byAccount(user.getAccountId())
- .stream()
+ externalIds.byAccount(user.getAccountId()).stream()
.filter(e -> email.equals(e.email()))
.collect(toSet());
if (extIds.isEmpty()) {
diff --git a/java/com/google/gerrit/server/restapi/account/DeleteExternalIds.java b/java/com/google/gerrit/server/restapi/account/DeleteExternalIds.java
index 05b1771..9fb535c 100644
--- a/java/com/google/gerrit/server/restapi/account/DeleteExternalIds.java
+++ b/java/com/google/gerrit/server/restapi/account/DeleteExternalIds.java
@@ -77,9 +77,7 @@
}
Map<ExternalId.Key, ExternalId> externalIdMap =
- externalIds
- .byAccount(resource.getUser().getAccountId())
- .stream()
+ externalIds.byAccount(resource.getUser().getAccountId()).stream()
.collect(toMap(ExternalId::key, Function.identity()));
List<ExternalId> toDelete = new ArrayList<>();
diff --git a/java/com/google/gerrit/server/restapi/account/DeleteWatchedProjects.java b/java/com/google/gerrit/server/restapi/account/DeleteWatchedProjects.java
index 0e2edb9..deb70fe 100644
--- a/java/com/google/gerrit/server/restapi/account/DeleteWatchedProjects.java
+++ b/java/com/google/gerrit/server/restapi/account/DeleteWatchedProjects.java
@@ -76,8 +76,7 @@
accountId,
u ->
u.deleteProjectWatches(
- input
- .stream()
+ input.stream()
.filter(Objects::nonNull)
.map(w -> ProjectWatchKey.create(new Project.NameKey(w.project), w.filter))
.collect(toList())));
diff --git a/java/com/google/gerrit/server/restapi/account/GetCapabilities.java b/java/com/google/gerrit/server/restapi/account/GetCapabilities.java
index 9de4a00..77f1668 100644
--- a/java/com/google/gerrit/server/restapi/account/GetCapabilities.java
+++ b/java/com/google/gerrit/server/restapi/account/GetCapabilities.java
@@ -17,7 +17,7 @@
import static com.google.gerrit.common.data.GlobalCapability.PRIORITY;
import static com.google.gerrit.server.permissions.DefaultPermissionMappings.globalOrPluginPermissionName;
import static com.google.gerrit.server.permissions.DefaultPermissionMappings.globalPermissionName;
-import static com.google.gerrit.server.permissions.DefaultPermissionMappings.pluginPermissionName;
+import static com.google.gerrit.server.permissions.DefaultPermissionMappings.pluginCapabilityName;
import com.google.common.collect.Iterables;
import com.google.gerrit.common.data.GlobalCapability;
@@ -113,7 +113,7 @@
for (String pluginName : pluginCapabilities.plugins()) {
for (String capability : pluginCapabilities.byPlugin(pluginName).keySet()) {
PluginPermission p = new PluginPermission(pluginName, capability);
- if (want(pluginPermissionName(p))) {
+ if (want(pluginCapabilityName(p))) {
toTest.add(p);
}
}
diff --git a/java/com/google/gerrit/server/restapi/account/GetEmails.java b/java/com/google/gerrit/server/restapi/account/GetEmails.java
index ed3347f..8c21536 100644
--- a/java/com/google/gerrit/server/restapi/account/GetEmails.java
+++ b/java/com/google/gerrit/server/restapi/account/GetEmails.java
@@ -48,9 +48,7 @@
if (!self.get().hasSameAccountId(rsrc.getUser())) {
permissionBackend.currentUser().check(GlobalPermission.MODIFY_ACCOUNT);
}
- return rsrc.getUser()
- .getEmailAddresses()
- .stream()
+ return rsrc.getUser().getEmailAddresses().stream()
.filter(Objects::nonNull)
.map(e -> toEmailInfo(rsrc, e))
.sorted(comparing((EmailInfo e) -> e.email))
diff --git a/java/com/google/gerrit/server/restapi/account/GetWatchedProjects.java b/java/com/google/gerrit/server/restapi/account/GetWatchedProjects.java
index 61021be..ba8c72a 100644
--- a/java/com/google/gerrit/server/restapi/account/GetWatchedProjects.java
+++ b/java/com/google/gerrit/server/restapi/account/GetWatchedProjects.java
@@ -65,10 +65,7 @@
Account.Id accountId = rsrc.getUser().getAccountId();
AccountState account = accounts.get(accountId).orElseThrow(ResourceNotFoundException::new);
- return account
- .getProjectWatches()
- .entrySet()
- .stream()
+ return account.getProjectWatches().entrySet().stream()
.map(e -> toProjectWatchInfo(e.getKey(), e.getValue()))
.sorted(
comparing((ProjectWatchInfo pwi) -> pwi.project)
diff --git a/java/com/google/gerrit/server/restapi/account/PutPreferred.java b/java/com/google/gerrit/server/restapi/account/PutPreferred.java
index a828987..265bf53 100644
--- a/java/com/google/gerrit/server/restapi/account/PutPreferred.java
+++ b/java/com/google/gerrit/server/restapi/account/PutPreferred.java
@@ -93,8 +93,7 @@
// check if the user has a matching email
String matchingEmail = null;
for (String email :
- a.getExternalIds()
- .stream()
+ a.getExternalIds().stream()
.map(ExternalId::email)
.filter(Objects::nonNull)
.collect(toSet())) {
@@ -121,8 +120,7 @@
+ " by the following account(s): %s",
preferredEmail,
user.getAccountId(),
- existingExtIdsWithThisEmail
- .stream()
+ existingExtIdsWithThisEmail.stream()
.map(ExternalId::accountId)
.collect(toList()));
exception.set(
diff --git a/java/com/google/gerrit/server/restapi/account/QueryAccounts.java b/java/com/google/gerrit/server/restapi/account/QueryAccounts.java
index 2c0512c..f527ba4 100644
--- a/java/com/google/gerrit/server/restapi/account/QueryAccounts.java
+++ b/java/com/google/gerrit/server/restapi/account/QueryAccounts.java
@@ -17,6 +17,7 @@
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.gerrit.extensions.client.ListAccountsOption;
+import com.google.gerrit.extensions.client.ListOption;
import com.google.gerrit.extensions.common.AccountInfo;
import com.google.gerrit.extensions.common.AccountVisibility;
import com.google.gerrit.extensions.restapi.AuthException;
@@ -97,7 +98,7 @@
@Option(name = "-O", usage = "Output option flags, in hex")
void setOptionFlagsHex(String hex) {
- options.addAll(ListAccountsOption.fromBits(Integer.parseInt(hex, 16)));
+ options.addAll(ListOption.fromBits(ListAccountsOption.class, Integer.parseInt(hex, 16)));
}
@Option(
diff --git a/java/com/google/gerrit/server/restapi/change/CherryPickChange.java b/java/com/google/gerrit/server/restapi/change/CherryPickChange.java
index 4cd93e3..52334ed 100644
--- a/java/com/google/gerrit/server/restapi/change/CherryPickChange.java
+++ b/java/com/google/gerrit/server/restapi/change/CherryPickChange.java
@@ -383,9 +383,7 @@
if (!cherryPickCommit.getFilesWithGitConflicts().isEmpty()) {
stringBuilder.append("\n\nThe following files contain Git conflicts:\n");
- cherryPickCommit
- .getFilesWithGitConflicts()
- .stream()
+ cherryPickCommit.getFilesWithGitConflicts().stream()
.sorted()
.forEach(filePath -> stringBuilder.append("* ").append(filePath).append("\n"));
}
diff --git a/java/com/google/gerrit/server/restapi/change/GetChange.java b/java/com/google/gerrit/server/restapi/change/GetChange.java
index a8f8bbb..2decb4e 100644
--- a/java/com/google/gerrit/server/restapi/change/GetChange.java
+++ b/java/com/google/gerrit/server/restapi/change/GetChange.java
@@ -15,6 +15,7 @@
package com.google.gerrit.server.restapi.change;
import com.google.gerrit.extensions.client.ListChangesOption;
+import com.google.gerrit.extensions.client.ListOption;
import com.google.gerrit.extensions.common.ChangeInfo;
import com.google.gerrit.extensions.restapi.Response;
import com.google.gerrit.extensions.restapi.RestReadView;
@@ -37,7 +38,7 @@
@Option(name = "-O", usage = "Output option flags, in hex")
void setOptionFlagsHex(String hex) {
- options.addAll(ListChangesOption.fromBits(Integer.parseInt(hex, 16)));
+ options.addAll(ListOption.fromBits(ListChangesOption.class, Integer.parseInt(hex, 16)));
}
@Inject
diff --git a/java/com/google/gerrit/server/restapi/change/ListChangeMessages.java b/java/com/google/gerrit/server/restapi/change/ListChangeMessages.java
index ba09281..c658fc4 100644
--- a/java/com/google/gerrit/server/restapi/change/ListChangeMessages.java
+++ b/java/com/google/gerrit/server/restapi/change/ListChangeMessages.java
@@ -46,8 +46,7 @@
throws OrmException, PermissionBackendException {
List<ChangeMessage> messages = changeMessagesUtil.byChange(resource.getNotes());
List<ChangeMessageInfo> messageInfos =
- messages
- .stream()
+ messages.stream()
.map(m -> createChangeMessageInfo(m, accountLoader))
.collect(Collectors.toList());
accountLoader.fill();
diff --git a/java/com/google/gerrit/server/restapi/change/PostReview.java b/java/com/google/gerrit/server/restapi/change/PostReview.java
index ff27bfa..7658f34 100644
--- a/java/com/google/gerrit/server/restapi/change/PostReview.java
+++ b/java/com/google/gerrit/server/restapi/change/PostReview.java
@@ -775,8 +775,7 @@
private static void ensureRangesDoNotOverlap(
String commentPath, List<FixReplacementInfo> fixReplacementInfos) throws BadRequestException {
List<Range> sortedRanges =
- fixReplacementInfos
- .stream()
+ fixReplacementInfos.stream()
.map(fixReplacementInfo -> fixReplacementInfo.range)
.sorted()
.collect(toList());
@@ -1033,17 +1032,13 @@
}
private Set<CommentSetEntry> readExistingComments(ChangeContext ctx) throws OrmException {
- return commentsUtil
- .publishedByChange(ctx.getNotes())
- .stream()
+ return commentsUtil.publishedByChange(ctx.getNotes()).stream()
.map(CommentSetEntry::create)
.collect(toSet());
}
private Set<CommentSetEntry> readExistingRobotComments(ChangeContext ctx) throws OrmException {
- return commentsUtil
- .robotCommentsByChange(ctx.getNotes())
- .stream()
+ return commentsUtil.robotCommentsByChange(ctx.getNotes()).stream()
.map(CommentSetEntry::create)
.collect(toSet());
}
@@ -1255,8 +1250,7 @@
if (!reduced.isEmpty()) {
throw new ResourceConflictException(
"Cannot reduce vote on labels for closed change: "
- + reduced
- .stream()
+ + reduced.stream()
.map(PatchSetApproval::getLabel)
.distinct()
.sorted()
diff --git a/java/com/google/gerrit/server/restapi/change/QueryChanges.java b/java/com/google/gerrit/server/restapi/change/QueryChanges.java
index 9fedfd6..23b3011 100644
--- a/java/com/google/gerrit/server/restapi/change/QueryChanges.java
+++ b/java/com/google/gerrit/server/restapi/change/QueryChanges.java
@@ -17,6 +17,7 @@
import com.google.common.collect.Iterables;
import com.google.common.flogger.FluentLogger;
import com.google.gerrit.extensions.client.ListChangesOption;
+import com.google.gerrit.extensions.client.ListOption;
import com.google.gerrit.extensions.common.ChangeInfo;
import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.BadRequestException;
@@ -70,7 +71,7 @@
@Option(name = "-O", usage = "Output option flags, in hex")
void setOptionFlagsHex(String hex) {
- options.addAll(ListChangesOption.fromBits(Integer.parseInt(hex, 16)));
+ options.addAll(ListOption.fromBits(ListChangesOption.class, Integer.parseInt(hex, 16)));
}
@Option(
diff --git a/java/com/google/gerrit/server/restapi/change/ReviewerRecommender.java b/java/com/google/gerrit/server/restapi/change/ReviewerRecommender.java
index b2cbe80..1d4d4dd 100644
--- a/java/com/google/gerrit/server/restapi/change/ReviewerRecommender.java
+++ b/java/com/google/gerrit/server/restapi/change/ReviewerRecommender.java
@@ -190,9 +190,7 @@
// Sort results
Stream<Map.Entry<Account.Id, MutableDouble>> sorted =
- reviewerScores
- .entrySet()
- .stream()
+ reviewerScores.entrySet().stream()
.sorted(Collections.reverseOrder(Map.Entry.comparingByValue()));
List<Account.Id> sortedSuggestions = sorted.map(Map.Entry::getKey).collect(toList());
logger.atFine().log("Sorted suggestions: %s", sortedSuggestions);
diff --git a/java/com/google/gerrit/server/restapi/change/ReviewersUtil.java b/java/com/google/gerrit/server/restapi/change/ReviewersUtil.java
index 75710c4..343afc3 100644
--- a/java/com/google/gerrit/server/restapi/change/ReviewersUtil.java
+++ b/java/com/google/gerrit/server/restapi/change/ReviewersUtil.java
@@ -247,9 +247,7 @@
ImmutableSet.of(AccountField.ID.getName())))
.readRaw();
List<Account.Id> matches =
- result
- .toList()
- .stream()
+ result.toList().stream()
.map(f -> new Account.Id(f.getValue(AccountField.ID).intValue()))
.collect(toList());
logger.atFine().log("Matches: %s", matches);
@@ -310,8 +308,7 @@
try (Timer0.Context ctx = metrics.loadAccountsLatency.start()) {
List<SuggestedReviewerInfo> reviewer =
- accountIds
- .stream()
+ accountIds.stream()
.map(accountLoader::get)
.filter(Objects::nonNull)
.map(
@@ -432,8 +429,7 @@
}
private static String formatSuggestedReviewers(List<SuggestedReviewerInfo> suggestedReviewers) {
- return suggestedReviewers
- .stream()
+ return suggestedReviewers.stream()
.map(
r -> {
if (r.account != null) {
diff --git a/java/com/google/gerrit/server/restapi/change/Revisions.java b/java/com/google/gerrit/server/restapi/change/Revisions.java
index 4edd741..84257e9 100644
--- a/java/com/google/gerrit/server/restapi/change/Revisions.java
+++ b/java/com/google/gerrit/server/restapi/change/Revisions.java
@@ -82,7 +82,7 @@
if (id.get().equals("current")) {
PatchSet ps = psUtil.current(change.getNotes());
if (ps != null && visible(change)) {
- return RevisionResource.createNonCachable(change, ps);
+ return RevisionResource.createNonCacheable(change, ps);
}
throw new ResourceNotFoundException(id);
}
diff --git a/java/com/google/gerrit/server/restapi/config/ListCapabilities.java b/java/com/google/gerrit/server/restapi/config/ListCapabilities.java
index 9bb2e6d..cacbbf5 100644
--- a/java/com/google/gerrit/server/restapi/config/ListCapabilities.java
+++ b/java/com/google/gerrit/server/restapi/config/ListCapabilities.java
@@ -58,9 +58,7 @@
private static ImmutableMap<String, CapabilityInfo> convertToPermissionInfos(
ImmutableMap<String, String> permissionIdNames) {
- return permissionIdNames
- .entrySet()
- .stream()
+ return permissionIdNames.entrySet().stream()
.collect(
toImmutableMap(Map.Entry::getKey, e -> new CapabilityInfo(e.getKey(), e.getValue())));
}
diff --git a/java/com/google/gerrit/server/restapi/config/ListTasks.java b/java/com/google/gerrit/server/restapi/config/ListTasks.java
index f77cda4..7402c15 100644
--- a/java/com/google/gerrit/server/restapi/config/ListTasks.java
+++ b/java/com/google/gerrit/server/restapi/config/ListTasks.java
@@ -106,9 +106,7 @@
}
private List<TaskInfo> getTasks() {
- return workQueue
- .getTaskInfos(TaskInfo::new)
- .stream()
+ return workQueue.getTaskInfos(TaskInfo::new).stream()
.sorted(
comparing((TaskInfo t) -> t.state.ordinal())
.thenComparing(t -> t.delay)
diff --git a/java/com/google/gerrit/server/restapi/config/ReloadConfig.java b/java/com/google/gerrit/server/restapi/config/ReloadConfig.java
index cab07e3..0685a58 100644
--- a/java/com/google/gerrit/server/restapi/config/ReloadConfig.java
+++ b/java/com/google/gerrit/server/restapi/config/ReloadConfig.java
@@ -54,10 +54,7 @@
if (updates.isEmpty()) {
return Collections.emptyMap();
}
- return updates
- .asMap()
- .entrySet()
- .stream()
+ return updates.asMap().entrySet().stream()
.collect(
Collectors.toMap(
e -> e.getKey().name().toLowerCase(), e -> toEntryInfos(e.getValue())));
@@ -65,8 +62,7 @@
private static List<ConfigUpdateEntryInfo> toEntryInfos(
Collection<ConfigUpdateEntry> updateEntries) {
- return updateEntries
- .stream()
+ return updateEntries.stream()
.map(ReloadConfig::toConfigUpdateEntryInfo)
.collect(toImmutableList());
}
diff --git a/java/com/google/gerrit/server/restapi/group/ListGroups.java b/java/com/google/gerrit/server/restapi/group/ListGroups.java
index 968a7dd..600379c 100644
--- a/java/com/google/gerrit/server/restapi/group/ListGroups.java
+++ b/java/com/google/gerrit/server/restapi/group/ListGroups.java
@@ -25,6 +25,7 @@
import com.google.gerrit.common.data.GroupReference;
import com.google.gerrit.common.errors.NoSuchGroupException;
import com.google.gerrit.extensions.client.ListGroupsOption;
+import com.google.gerrit.extensions.client.ListOption;
import com.google.gerrit.extensions.common.GroupInfo;
import com.google.gerrit.extensions.restapi.BadRequestException;
import com.google.gerrit.extensions.restapi.RestApiException;
@@ -202,7 +203,7 @@
@Option(name = "-O", usage = "Output option flags, in hex")
void setOptionFlagsHex(String hex) {
- options.addAll(ListGroupsOption.fromBits(Integer.parseInt(hex, 16)));
+ options.addAll(ListOption.fromBits(ListGroupsOption.class, Integer.parseInt(hex, 16)));
}
@Option(name = "--owned-by", usage = "list groups owned by the given group uuid")
@@ -308,8 +309,7 @@
private Stream<GroupReference> getAllExistingGroups() throws IOException, ConfigInvalidException {
if (!projects.isEmpty()) {
- return projects
- .stream()
+ return projects.stream()
.map(ProjectState::getAllGroups)
.flatMap(Collection::stream)
.distinct();
diff --git a/java/com/google/gerrit/server/restapi/group/QueryGroups.java b/java/com/google/gerrit/server/restapi/group/QueryGroups.java
index fa9285d..6a7262b 100644
--- a/java/com/google/gerrit/server/restapi/group/QueryGroups.java
+++ b/java/com/google/gerrit/server/restapi/group/QueryGroups.java
@@ -17,6 +17,7 @@
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.gerrit.extensions.client.ListGroupsOption;
+import com.google.gerrit.extensions.client.ListOption;
import com.google.gerrit.extensions.common.GroupInfo;
import com.google.gerrit.extensions.restapi.BadRequestException;
import com.google.gerrit.extensions.restapi.MethodNotAllowedException;
@@ -82,7 +83,7 @@
@Option(name = "-O", usage = "Output option flags, in hex")
public void setOptionFlagsHex(String hex) {
- options.addAll(ListGroupsOption.fromBits(Integer.parseInt(hex, 16)));
+ options.addAll(ListOption.fromBits(ListGroupsOption.class, Integer.parseInt(hex, 16)));
}
@Inject
diff --git a/java/com/google/gerrit/server/restapi/project/CommitsCollection.java b/java/com/google/gerrit/server/restapi/project/CommitsCollection.java
index 66559f7..e8a12bc 100644
--- a/java/com/google/gerrit/server/restapi/project/CommitsCollection.java
+++ b/java/com/google/gerrit/server/restapi/project/CommitsCollection.java
@@ -125,9 +125,7 @@
// If we have already checked change refs using the change index, spare any further checks for
// changes.
List<Ref> refs =
- repo.getRefDatabase()
- .getRefs()
- .stream()
+ repo.getRefDatabase().getRefs().stream()
.filter(r -> !r.getName().startsWith(RefNames.REFS_CHANGES))
.collect(toImmutableList());
return reachable.fromRefs(project, repo, commit, refs);
diff --git a/java/com/google/gerrit/server/restapi/project/DeleteRef.java b/java/com/google/gerrit/server/restapi/project/DeleteRef.java
index 9a9ead3..5df102c 100644
--- a/java/com/google/gerrit/server/restapi/project/DeleteRef.java
+++ b/java/com/google/gerrit/server/restapi/project/DeleteRef.java
@@ -204,8 +204,7 @@
ImmutableSet<String> refs =
prefix == null
? refsToDelete
- : refsToDelete
- .stream()
+ : refsToDelete.stream()
.map(ref -> ref.startsWith(R_REFS) ? ref : prefix + ref)
.collect(toImmutableSet());
for (String ref : refs) {
diff --git a/java/com/google/gerrit/server/restapi/project/GetAccess.java b/java/com/google/gerrit/server/restapi/project/GetAccess.java
index 0f46535..559e8e1 100644
--- a/java/com/google/gerrit/server/restapi/project/GetAccess.java
+++ b/java/com/google/gerrit/server/restapi/project/GetAccess.java
@@ -272,9 +272,7 @@
info.configVisible = canReadConfig || canWriteConfig;
info.groups =
- groups
- .entrySet()
- .stream()
+ groups.entrySet().stream()
.filter(e -> e.getValue() != null)
.collect(toMap(e -> e.getKey().get(), Map.Entry::getValue));
diff --git a/java/com/google/gerrit/server/restapi/project/ListChildProjects.java b/java/com/google/gerrit/server/restapi/project/ListChildProjects.java
index cfeec5a..ea54a4a 100644
--- a/java/com/google/gerrit/server/restapi/project/ListChildProjects.java
+++ b/java/com/google/gerrit/server/restapi/project/ListChildProjects.java
@@ -85,12 +85,7 @@
private List<ProjectInfo> directChildProjects(Project.NameKey parent)
throws OrmException, RestApiException {
PermissionBackend.WithUser currentUser = permissionBackend.currentUser();
- return queryProvider
- .get()
- .withQuery("parent:" + parent.get())
- .withLimit(limit)
- .apply()
- .stream()
+ return queryProvider.get().withQuery("parent:" + parent.get()).withLimit(limit).apply().stream()
.filter(
p ->
currentUser
diff --git a/java/com/google/gerrit/server/restapi/project/ListProjects.java b/java/com/google/gerrit/server/restapi/project/ListProjects.java
index 4c55ff5..dc7e537 100644
--- a/java/com/google/gerrit/server/restapi/project/ListProjects.java
+++ b/java/com/google/gerrit/server/restapi/project/ListProjects.java
@@ -353,12 +353,7 @@
private SortedMap<String, ProjectInfo> applyAsQuery(String query) throws BadRequestException {
try {
- return queryProjectsProvider
- .get()
- .withQuery(query)
- .withStart(start)
- .withLimit(limit)
- .apply()
+ return queryProjectsProvider.get().withQuery(query).withStart(start).withLimit(limit).apply()
.stream()
.collect(
ImmutableSortedMap.toImmutableSortedMap(
@@ -657,9 +652,7 @@
return projectCache.byName(matchPrefix).stream();
} else if (matchSubstring != null) {
checkMatchOptions(matchPrefix == null && matchRegex == null);
- return projectCache
- .all()
- .stream()
+ return projectCache.all().stream()
.filter(
p -> p.get().toLowerCase(Locale.US).contains(matchSubstring.toLowerCase(Locale.US)));
} else if (matchRegex != null) {
diff --git a/java/com/google/gerrit/server/rules/DefaultSubmitRule.java b/java/com/google/gerrit/server/rules/DefaultSubmitRule.java
index 65ac88f..b70858d 100644
--- a/java/com/google/gerrit/server/rules/DefaultSubmitRule.java
+++ b/java/com/google/gerrit/server/rules/DefaultSubmitRule.java
@@ -124,8 +124,7 @@
private static List<PatchSetApproval> getApprovalsForLabel(
List<PatchSetApproval> approvals, LabelType t) {
- return approvals
- .stream()
+ return approvals.stream()
.filter(input -> input.getLabel().equals(t.getLabelId().get()))
.collect(toImmutableList());
}
diff --git a/java/com/google/gerrit/server/rules/IgnoreSelfApprovalRule.java b/java/com/google/gerrit/server/rules/IgnoreSelfApprovalRule.java
index 4a7eea7..f4b7254 100644
--- a/java/com/google/gerrit/server/rules/IgnoreSelfApprovalRule.java
+++ b/java/com/google/gerrit/server/rules/IgnoreSelfApprovalRule.java
@@ -154,8 +154,7 @@
@VisibleForTesting
static Collection<PatchSetApproval> filterOutPositiveApprovalsOfUser(
Collection<PatchSetApproval> approvals, Account.Id user) {
- return approvals
- .stream()
+ return approvals.stream()
.filter(input -> input.getValue() < 0 || !input.getAccountId().equals(user))
.collect(toImmutableList());
}
@@ -163,8 +162,7 @@
@VisibleForTesting
static Collection<PatchSetApproval> filterApprovalsByLabel(
Collection<PatchSetApproval> approvals, LabelType t) {
- return approvals
- .stream()
+ return approvals.stream()
.filter(input -> input.getLabelId().get().equals(t.getLabelId().get()))
.collect(toImmutableList());
}
diff --git a/java/com/google/gerrit/server/submit/CommitMergeStatus.java b/java/com/google/gerrit/server/submit/CommitMergeStatus.java
index b101898..5ac7c98 100644
--- a/java/com/google/gerrit/server/submit/CommitMergeStatus.java
+++ b/java/com/google/gerrit/server/submit/CommitMergeStatus.java
@@ -110,8 +110,7 @@
commit, otherCommit, cd.getId().get());
}
Optional<PatchSet> patchSet =
- cd.patchSets()
- .stream()
+ cd.patchSets().stream()
.filter(ps -> ps.getRevision().get().equals(otherCommit))
.findAny();
if (patchSet.isPresent()) {
diff --git a/java/com/google/gerrit/server/submit/MergeOp.java b/java/com/google/gerrit/server/submit/MergeOp.java
index f41e776..8b93ce8 100644
--- a/java/com/google/gerrit/server/submit/MergeOp.java
+++ b/java/com/google/gerrit/server/submit/MergeOp.java
@@ -338,9 +338,7 @@
blockingConditions.add(describeLabels(cd, record.labels));
}
if (record.requirements != null) {
- record
- .requirements
- .stream()
+ record.requirements.stream()
.map(SubmitRequirement::fallbackText)
.forEach(blockingConditions::add);
}
diff --git a/java/com/google/gerrit/server/submit/SubmoduleOp.java b/java/com/google/gerrit/server/submit/SubmoduleOp.java
index ffa1fe5..9b418db 100644
--- a/java/com/google/gerrit/server/submit/SubmoduleOp.java
+++ b/java/com/google/gerrit/server/submit/SubmoduleOp.java
@@ -444,9 +444,7 @@
int count = 0;
List<SubmoduleSubscription> subscriptions =
- targets
- .get(subscriber)
- .stream()
+ targets.get(subscriber).stream()
.sorted(comparing(SubmoduleSubscription::getPath))
.collect(toList());
for (SubmoduleSubscription s : subscriptions) {
diff --git a/java/com/google/gerrit/server/update/BatchUpdate.java b/java/com/google/gerrit/server/update/BatchUpdate.java
index 8cf302b..27a6aee 100644
--- a/java/com/google/gerrit/server/update/BatchUpdate.java
+++ b/java/com/google/gerrit/server/update/BatchUpdate.java
@@ -154,8 +154,7 @@
// Fire ref update events only after all mutations are finished, since callers may assume a
// patch set ref being created means the change was created, or a branch advancing meaning
// some changes were closed.
- updates
- .stream()
+ updates.stream()
.filter(u -> u.batchRefUpdate != null)
.forEach(
u -> u.gitRefUpdated.fire(u.project, u.batchRefUpdate, u.getAccount().orElse(null)));
diff --git a/java/com/google/gerrit/server/update/RepoView.java b/java/com/google/gerrit/server/update/RepoView.java
index 23853ee..73dd12f 100644
--- a/java/com/google/gerrit/server/update/RepoView.java
+++ b/java/com/google/gerrit/server/update/RepoView.java
@@ -136,9 +136,7 @@
*/
public Map<String, ObjectId> getRefs(String prefix) throws IOException {
Map<String, ObjectId> result =
- repo.getRefDatabase()
- .getRefsByPrefix(prefix)
- .stream()
+ repo.getRefDatabase().getRefsByPrefix(prefix).stream()
.collect(toMap(r -> r.getName().substring(prefix.length()), Ref::getObjectId));
// First, overwrite any cached reads from the underlying RepoRefCache. If any of these differ,
diff --git a/java/com/google/gerrit/sshd/commands/SetMembersCommand.java b/java/com/google/gerrit/sshd/commands/SetMembersCommand.java
index 9d7f2d9..324257b 100644
--- a/java/com/google/gerrit/sshd/commands/SetMembersCommand.java
+++ b/java/com/google/gerrit/sshd/commands/SetMembersCommand.java
@@ -132,8 +132,7 @@
String action, GroupResource group, List<Account.Id> accountIdList)
throws UnsupportedEncodingException, IOException {
String names =
- accountIdList
- .stream()
+ accountIdList.stream()
.map(
accountId -> {
Optional<AccountState> accountState = accountCache.get(accountId);
@@ -152,8 +151,7 @@
String action, GroupResource group, List<AccountGroup.UUID> groupUuidList)
throws UnsupportedEncodingException, IOException {
String names =
- groupUuidList
- .stream()
+ groupUuidList.stream()
.map(uuid -> groupCache.get(uuid).map(InternalGroup::getName))
.flatMap(Streams::stream)
.collect(joining(", "));
diff --git a/java/com/google/gerrit/sshd/commands/ShowConnections.java b/java/com/google/gerrit/sshd/commands/ShowConnections.java
index 0faf803..d579ef6 100644
--- a/java/com/google/gerrit/sshd/commands/ShowConnections.java
+++ b/java/com/google/gerrit/sshd/commands/ShowConnections.java
@@ -91,10 +91,7 @@
}
final ImmutableList<IoSession> list =
- acceptor
- .getManagedSessions()
- .values()
- .stream()
+ acceptor.getManagedSessions().values().stream()
.sorted(
(arg0, arg1) -> {
if (arg0 instanceof MinaSession) {
diff --git a/java/com/google/gerrit/testing/FakeEmailSender.java b/java/com/google/gerrit/testing/FakeEmailSender.java
index bbfd9b1..4977cb3 100644
--- a/java/com/google/gerrit/testing/FakeEmailSender.java
+++ b/java/com/google/gerrit/testing/FakeEmailSender.java
@@ -150,8 +150,7 @@
public List<Message> getMessages(String changeId, String type) {
final String idFooter = "\n" + MailHeader.CHANGE_ID.withDelimiter() + changeId + "\n";
final String typeFooter = "\n" + MailHeader.MESSAGE_TYPE.withDelimiter() + type + "\n";
- return getMessages()
- .stream()
+ return getMessages().stream()
.filter(in -> in.body().contains(idFooter) && in.body().contains(typeFooter))
.collect(toList());
}
diff --git a/java/com/google/gerrit/testing/IndexVersions.java b/java/com/google/gerrit/testing/IndexVersions.java
index fde93b2..3281ffc 100644
--- a/java/com/google/gerrit/testing/IndexVersions.java
+++ b/java/com/google/gerrit/testing/IndexVersions.java
@@ -131,8 +131,7 @@
List<Integer> schemaVersions,
String testSuiteNamePrefix,
Config baseConfig) {
- return schemaVersions
- .stream()
+ return schemaVersions.stream()
.collect(
toMap(
i -> testSuiteNamePrefix + i,
diff --git a/javatests/com/google/gerrit/acceptance/api/accounts/AccountIT.java b/javatests/com/google/gerrit/acceptance/api/accounts/AccountIT.java
index d723a0f..37b4559 100644
--- a/javatests/com/google/gerrit/acceptance/api/accounts/AccountIT.java
+++ b/javatests/com/google/gerrit/acceptance/api/accounts/AccountIT.java
@@ -922,10 +922,7 @@
gApi.accounts().id(foo.id.hashCode()).addEmail(input);
assertThat(
- gApi.accounts()
- .id(foo.id.get())
- .getEmails()
- .stream()
+ gApi.accounts().id(foo.id.get()).getEmails().stream()
.map(e -> e.email)
.collect(toSet()))
.containsExactly(email, secondaryEmail);
@@ -2474,10 +2471,7 @@
assertThat(bgCounterA1.get()).isEqualTo(0);
assertThat(bgCounterA2.get()).isEqualTo(0);
assertThat(
- gApi.accounts()
- .id(accountId.get())
- .getExternalIds()
- .stream()
+ gApi.accounts().id(accountId.get()).getExternalIds().stream()
.map(i -> i.identity)
.collect(toSet()))
.containsExactly(extIdA1.key().get());
@@ -2507,10 +2501,7 @@
assertThat(updatedAccount.get().getExternalIds()).containsExactly(extIdB2);
assertThat(accounts.get(accountId).get().getExternalIds()).containsExactly(extIdB2);
assertThat(
- gApi.accounts()
- .id(accountId.get())
- .getExternalIds()
- .stream()
+ gApi.accounts().id(accountId.get()).getExternalIds().stream()
.map(i -> i.identity)
.collect(toSet()))
.containsExactly(extIdB2.key().get());
@@ -2737,11 +2728,7 @@
requestScopeOperations.setApiUser(testAccount.getId());
for (ChangeInfo changeInfo : gApi.changes().query("has:draft").get()) {
for (CommentInfo c :
- gApi.changes()
- .id(changeInfo.id)
- .drafts()
- .values()
- .stream()
+ gApi.changes().id(changeInfo.id).drafts().values().stream()
.flatMap(List::stream)
.collect(toImmutableList())) {
gApi.changes().id(changeInfo.id).revision(c.patchSet).draft(c.id).delete();
@@ -2829,9 +2816,7 @@
Iterable<String> expectedFps =
expected.transform(k -> BaseEncoding.base16().encode(k.getPublicKey().getFingerprint()));
Iterable<String> actualFps =
- externalIds
- .byAccount(currAccountId, SCHEME_GPGKEY)
- .stream()
+ externalIds.byAccount(currAccountId, SCHEME_GPGKEY).stream()
.map(e -> e.key().id())
.collect(toSet());
assertThat(actualFps).named("external IDs in database").containsExactlyElementsIn(expectedFps);
diff --git a/javatests/com/google/gerrit/acceptance/api/change/ChangeIT.java b/javatests/com/google/gerrit/acceptance/api/change/ChangeIT.java
index 4d1f62f..d7083bc 100644
--- a/javatests/com/google/gerrit/acceptance/api/change/ChangeIT.java
+++ b/javatests/com/google/gerrit/acceptance/api/change/ChangeIT.java
@@ -3884,9 +3884,7 @@
throws Exception {
ChangeInfo c = gApi.changes().id(changeId).get(DETAILED_LABELS);
Set<ReviewerState> states =
- c.reviewers
- .entrySet()
- .stream()
+ c.reviewers.entrySet().stream()
.filter(e -> e.getValue().stream().anyMatch(a -> a._accountId == accountId.get()))
.map(Map.Entry::getKey)
.collect(toSet());
diff --git a/javatests/com/google/gerrit/acceptance/api/project/CheckProjectIT.java b/javatests/com/google/gerrit/acceptance/api/project/CheckProjectIT.java
index 6c6ad3d..3b2df79 100644
--- a/javatests/com/google/gerrit/acceptance/api/project/CheckProjectIT.java
+++ b/javatests/com/google/gerrit/acceptance/api/project/CheckProjectIT.java
@@ -78,10 +78,7 @@
CheckProjectResultInfo checkResult =
gApi.projects().name(project.get()).check(checkProjectInputForAutoCloseableCheck(branch));
assertThat(
- checkResult
- .autoCloseableChangesCheckResult
- .autoCloseableChanges
- .stream()
+ checkResult.autoCloseableChangesCheckResult.autoCloseableChanges.stream()
.map(i -> i._number)
.collect(toList()))
.containsExactly(change._number);
@@ -106,10 +103,7 @@
input.autoCloseableChangesCheck.fix = true;
CheckProjectResultInfo checkResult = gApi.projects().name(project.get()).check(input);
assertThat(
- checkResult
- .autoCloseableChangesCheckResult
- .autoCloseableChanges
- .stream()
+ checkResult.autoCloseableChangesCheckResult.autoCloseableChanges.stream()
.map(i -> i._number)
.collect(toSet()))
.containsExactly(change._number);
@@ -132,10 +126,7 @@
CheckProjectResultInfo checkResult =
gApi.projects().name(project.get()).check(checkProjectInputForAutoCloseableCheck(branch));
assertThat(
- checkResult
- .autoCloseableChangesCheckResult
- .autoCloseableChanges
- .stream()
+ checkResult.autoCloseableChangesCheckResult.autoCloseableChanges.stream()
.map(i -> i._number)
.collect(toSet()))
.containsExactly(r.getChange().getId().get());
@@ -159,10 +150,7 @@
input.autoCloseableChangesCheck.fix = true;
CheckProjectResultInfo checkResult = gApi.projects().name(project.get()).check(input);
assertThat(
- checkResult
- .autoCloseableChangesCheckResult
- .autoCloseableChanges
- .stream()
+ checkResult.autoCloseableChangesCheckResult.autoCloseableChanges.stream()
.map(i -> i._number)
.collect(toSet()))
.containsExactly(r.getChange().getId().get());
@@ -196,10 +184,7 @@
input.autoCloseableChangesCheck.maxCommits = 2;
checkResult = gApi.projects().name(project.get()).check(input);
assertThat(
- checkResult
- .autoCloseableChangesCheckResult
- .autoCloseableChanges
- .stream()
+ checkResult.autoCloseableChangesCheckResult.autoCloseableChanges.stream()
.map(i -> i._number)
.collect(toSet()))
.containsExactly(r.getChange().getId().get());
@@ -233,10 +218,7 @@
input.autoCloseableChangesCheck.skipCommits = 1;
checkResult = gApi.projects().name(project.get()).check(input);
assertThat(
- checkResult
- .autoCloseableChangesCheckResult
- .autoCloseableChanges
- .stream()
+ checkResult.autoCloseableChangesCheckResult.autoCloseableChanges.stream()
.map(i -> i._number)
.collect(toSet()))
.containsExactly(r.getChange().getId().get());
diff --git a/javatests/com/google/gerrit/acceptance/api/revision/RevisionIT.java b/javatests/com/google/gerrit/acceptance/api/revision/RevisionIT.java
index 9538e59..7a0fff8 100644
--- a/javatests/com/google/gerrit/acceptance/api/revision/RevisionIT.java
+++ b/javatests/com/google/gerrit/acceptance/api/revision/RevisionIT.java
@@ -227,11 +227,7 @@
requestScopeOperations.setApiUser(admin.getId());
gApi.changes().id(changeId).reviewer(user.username).deleteVote("Code-Review");
Optional<ApprovalInfo> crUser =
- get(changeId, DETAILED_LABELS)
- .labels
- .get("Code-Review")
- .all
- .stream()
+ get(changeId, DETAILED_LABELS).labels.get("Code-Review").all.stream()
.filter(a -> a._accountId == user.id.get())
.findFirst();
assertThat(crUser).isPresent();
@@ -246,13 +242,7 @@
revision(r).review(in);
ApprovalInfo cr =
- gApi.changes()
- .id(changeId)
- .get(DETAILED_LABELS)
- .labels
- .get("Code-Review")
- .all
- .stream()
+ gApi.changes().id(changeId).get(DETAILED_LABELS).labels.get("Code-Review").all.stream()
.filter(a -> a._accountId == user.getId().get())
.findFirst()
.get();
diff --git a/javatests/com/google/gerrit/acceptance/api/revision/RobotCommentsIT.java b/javatests/com/google/gerrit/acceptance/api/revision/RobotCommentsIT.java
index b00837d..2f23123 100644
--- a/javatests/com/google/gerrit/acceptance/api/revision/RobotCommentsIT.java
+++ b/javatests/com/google/gerrit/acceptance/api/revision/RobotCommentsIT.java
@@ -1024,8 +1024,7 @@
private static List<String> getFixIds(List<RobotCommentInfo> robotComments) {
assertThatList(robotComments).isNotNull();
- return robotComments
- .stream()
+ return robotComments.stream()
.map(robotCommentInfo -> robotCommentInfo.fixSuggestions)
.filter(Objects::nonNull)
.flatMap(List::stream)
diff --git a/javatests/com/google/gerrit/acceptance/git/AbstractPushForReview.java b/javatests/com/google/gerrit/acceptance/git/AbstractPushForReview.java
index 93aaf1f..ede450a 100644
--- a/javatests/com/google/gerrit/acceptance/git/AbstractPushForReview.java
+++ b/javatests/com/google/gerrit/acceptance/git/AbstractPushForReview.java
@@ -643,8 +643,7 @@
ChangeInfo ci = get(r.getChangeId(), DETAILED_LABELS);
ImmutableList<AccountInfo> ccs =
- firstNonNull(ci.reviewers.get(ReviewerState.CC), ImmutableList.<AccountInfo>of())
- .stream()
+ firstNonNull(ci.reviewers.get(ReviewerState.CC), ImmutableList.<AccountInfo>of()).stream()
.sorted(comparing((AccountInfo a) -> a.email))
.collect(toImmutableList());
assertThat(ccs).hasSize(2);
@@ -2058,9 +2057,7 @@
assertThat(getLastMessage(r.getChangeId())).isEqualTo("Uploaded patch set 3.\n\n(3 comments)");
List<String> messages =
- sender
- .getMessages()
- .stream()
+ sender.getMessages().stream()
.map(Message::body)
.sorted(Comparator.comparingInt(m -> m.contains("reexamine") ? 0 : 1))
.collect(toList());
@@ -2494,11 +2491,7 @@
}
private Collection<CommentInfo> getPublishedComments(String changeId) throws Exception {
- return gApi.changes()
- .id(changeId)
- .comments()
- .values()
- .stream()
+ return gApi.changes().id(changeId).comments().values().stream()
.flatMap(Collection::stream)
.collect(toList());
}
diff --git a/javatests/com/google/gerrit/acceptance/git/PushPermissionsIT.java b/javatests/com/google/gerrit/acceptance/git/PushPermissionsIT.java
index 61f40f7..dd0a5cb 100644
--- a/javatests/com/google/gerrit/acceptance/git/PushPermissionsIT.java
+++ b/javatests/com/google/gerrit/acceptance/git/PushPermissionsIT.java
@@ -344,8 +344,7 @@
}
private static void removeAllBranchPermissions(ProjectConfig cfg, String... permissions) {
- cfg.getAccessSections()
- .stream()
+ cfg.getAccessSections().stream()
.filter(
s ->
s.getName().startsWith("refs/heads/")
diff --git a/javatests/com/google/gerrit/acceptance/git/RefAdvertisementIT.java b/javatests/com/google/gerrit/acceptance/git/RefAdvertisementIT.java
index ce8327b..ff4a423 100644
--- a/javatests/com/google/gerrit/acceptance/git/RefAdvertisementIT.java
+++ b/javatests/com/google/gerrit/acceptance/git/RefAdvertisementIT.java
@@ -794,9 +794,7 @@
}
private static Map<String, Ref> getAllRefs(Repository repo) throws IOException {
- return repo.getRefDatabase()
- .getRefs()
- .stream()
+ return repo.getRefDatabase().getRefs().stream()
.collect(toMap(Ref::getName, Function.identity()));
}
}
diff --git a/javatests/com/google/gerrit/acceptance/pgm/AbstractReindexTests.java b/javatests/com/google/gerrit/acceptance/pgm/AbstractReindexTests.java
index c166acfb..c07d512 100644
--- a/javatests/com/google/gerrit/acceptance/pgm/AbstractReindexTests.java
+++ b/javatests/com/google/gerrit/acceptance/pgm/AbstractReindexTests.java
@@ -76,11 +76,7 @@
.containsExactly(adminId.get());
// Query group index
assertThat(
- gApi.groups()
- .query("Group")
- .withOption(MEMBERS)
- .get()
- .stream()
+ gApi.groups().query("Group").withOption(MEMBERS).get().stream()
.flatMap(g -> g.members.stream())
.map(a -> a._accountId))
.containsExactly(adminId.get());
@@ -271,10 +267,7 @@
private void assertWriteVersions(ServerContext ctx, Integer... expected) {
assertThat(
- ctx.getInjector()
- .getInstance(ChangeIndexCollection.class)
- .getWriteIndexes()
- .stream()
+ ctx.getInjector().getInstance(ChangeIndexCollection.class).getWriteIndexes().stream()
.map(i -> i.getSchema().getVersion()))
.named("write versions")
.containsExactlyElementsIn(ImmutableSet.copyOf(expected));
diff --git a/javatests/com/google/gerrit/acceptance/rest/binding/ChangesRestApiBindingsIT.java b/javatests/com/google/gerrit/acceptance/rest/binding/ChangesRestApiBindingsIT.java
index db5dfab..6addf51 100644
--- a/javatests/com/google/gerrit/acceptance/rest/binding/ChangesRestApiBindingsIT.java
+++ b/javatests/com/google/gerrit/acceptance/rest/binding/ChangesRestApiBindingsIT.java
@@ -488,8 +488,7 @@
private static List<String> getFixIds(List<RobotCommentInfo> robotComments) {
assertThatList(robotComments).isNotNull();
- return robotComments
- .stream()
+ return robotComments.stream()
.map(robotCommentInfo -> robotCommentInfo.fixSuggestions)
.filter(Objects::nonNull)
.flatMap(List::stream)
diff --git a/javatests/com/google/gerrit/acceptance/rest/binding/ConfigRestApiBindingsIT.java b/javatests/com/google/gerrit/acceptance/rest/binding/ConfigRestApiBindingsIT.java
index f187094..02c44ef 100644
--- a/javatests/com/google/gerrit/acceptance/rest/binding/ConfigRestApiBindingsIT.java
+++ b/javatests/com/google/gerrit/acceptance/rest/binding/ConfigRestApiBindingsIT.java
@@ -101,8 +101,7 @@
r.consume();
Optional<String> id =
- result
- .stream()
+ result.stream()
.filter(t -> "Log File Compressor".equals(t.command))
.map(t -> t.id)
.findFirst();
diff --git a/javatests/com/google/gerrit/acceptance/rest/change/SuggestReviewersIT.java b/javatests/com/google/gerrit/acceptance/rest/change/SuggestReviewersIT.java
index 919b2fd..13321d0 100644
--- a/javatests/com/google/gerrit/acceptance/rest/change/SuggestReviewersIT.java
+++ b/javatests/com/google/gerrit/acceptance/rest/change/SuggestReviewersIT.java
@@ -577,8 +577,7 @@
List<TestAccount> expectedUsers,
List<AccountGroup.UUID> expectedGroups) {
List<Integer> actualAccountIds =
- actual
- .stream()
+ actual.stream()
.filter(i -> i.account != null)
.map(i -> i.account._accountId)
.collect(toList());
diff --git a/javatests/com/google/gerrit/acceptance/rest/config/KillTaskIT.java b/javatests/com/google/gerrit/acceptance/rest/config/KillTaskIT.java
index c19f5d0..2a891aa 100644
--- a/javatests/com/google/gerrit/acceptance/rest/config/KillTaskIT.java
+++ b/javatests/com/google/gerrit/acceptance/rest/config/KillTaskIT.java
@@ -36,8 +36,7 @@
r.consume();
Optional<String> id =
- result
- .stream()
+ result.stream()
.filter(t -> "Log File Compressor".equals(t.command))
.map(t -> t.id)
.findFirst();
diff --git a/javatests/com/google/gerrit/acceptance/server/change/CommentsIT.java b/javatests/com/google/gerrit/acceptance/server/change/CommentsIT.java
index 8a5fddd..2a7cadc 100644
--- a/javatests/com/google/gerrit/acceptance/server/change/CommentsIT.java
+++ b/javatests/com/google/gerrit/acceptance/server/change/CommentsIT.java
@@ -942,9 +942,7 @@
}
private List<CommentInfo> getRevisionComments(String changeId, String revId) throws Exception {
- return getPublishedComments(changeId, revId)
- .values()
- .stream()
+ return getPublishedComments(changeId, revId).values().stream()
.flatMap(List::stream)
.collect(toList());
}
diff --git a/javatests/com/google/gerrit/acceptance/server/change/PatchListCacheIT.java b/javatests/com/google/gerrit/acceptance/server/change/PatchListCacheIT.java
index 580b5de..1892566 100644
--- a/javatests/com/google/gerrit/acceptance/server/change/PatchListCacheIT.java
+++ b/javatests/com/google/gerrit/acceptance/server/change/PatchListCacheIT.java
@@ -296,9 +296,7 @@
private static PatchListEntry getEntryFor(PatchList patchList, String filePath) {
Optional<PatchListEntry> patchListEntry =
- patchList
- .getPatches()
- .stream()
+ patchList.getPatches().stream()
.filter(entry -> entry.getNewName().equals(filePath))
.findAny();
return patchListEntry.orElseThrow(
diff --git a/javatests/com/google/gerrit/acceptance/server/notedb/NoteDbOnlyIT.java b/javatests/com/google/gerrit/acceptance/server/notedb/NoteDbOnlyIT.java
index a61b7a6..1ea64ca 100644
--- a/javatests/com/google/gerrit/acceptance/server/notedb/NoteDbOnlyIT.java
+++ b/javatests/com/google/gerrit/acceptance/server/notedb/NoteDbOnlyIT.java
@@ -286,11 +286,7 @@
}
private List<String> getMessages(Change.Id id) throws Exception {
- return gApi.changes()
- .id(id.get())
- .get(MESSAGES)
- .messages
- .stream()
+ return gApi.changes().id(id.get()).get(MESSAGES).messages.stream()
.map(m -> m.message)
.collect(toList());
}
diff --git a/javatests/com/google/gerrit/extensions/BUILD b/javatests/com/google/gerrit/extensions/BUILD
index adf696d..94e433c 100644
--- a/javatests/com/google/gerrit/extensions/BUILD
+++ b/javatests/com/google/gerrit/extensions/BUILD
@@ -8,6 +8,7 @@
"//java/com/google/gerrit/extensions:api",
"//java/com/google/gerrit/extensions/common/testing:common-test-util",
"//java/com/google/gerrit/testing:gerrit-test-util",
+ "//lib:guava",
"//lib/guice",
"//lib/truth",
],
diff --git a/javatests/com/google/gerrit/extensions/client/ListOptionTest.java b/javatests/com/google/gerrit/extensions/client/ListOptionTest.java
new file mode 100644
index 0000000..4bb9107
--- /dev/null
+++ b/javatests/com/google/gerrit/extensions/client/ListOptionTest.java
@@ -0,0 +1,72 @@
+// Copyright (C) 2019 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.google.gerrit.extensions.client;
+
+import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
+import static com.google.gerrit.extensions.client.ListOptionTest.MyOption.BAR;
+import static com.google.gerrit.extensions.client.ListOptionTest.MyOption.BAZ;
+import static com.google.gerrit.extensions.client.ListOptionTest.MyOption.FOO;
+
+import com.google.common.math.IntMath;
+import com.google.gerrit.testing.GerritBaseTests;
+import java.util.EnumSet;
+import org.junit.Test;
+
+public class ListOptionTest extends GerritBaseTests {
+ enum MyOption implements ListOption {
+ FOO(0),
+ BAR(1),
+ BAZ(17);
+
+ private final int value;
+
+ MyOption(int value) {
+ this.value = value;
+ }
+
+ @Override
+ public int getValue() {
+ return value;
+ }
+ }
+
+ @Test
+ public void fromBits() {
+ assertThat(IntMath.pow(2, BAZ.getValue())).isEqualTo(131072);
+ assertThat(ListOption.fromBits(MyOption.class, 0)).isEmpty();
+ assertThat(ListOption.fromBits(MyOption.class, 1)).containsExactly(FOO);
+ assertThat(ListOption.fromBits(MyOption.class, 2)).containsExactly(BAR);
+ assertThat(ListOption.fromBits(MyOption.class, 131072)).containsExactly(BAZ);
+ assertThat(ListOption.fromBits(MyOption.class, 3)).containsExactly(FOO, BAR);
+ assertThat(ListOption.fromBits(MyOption.class, 131073)).containsExactly(FOO, BAZ);
+ assertThat(ListOption.fromBits(MyOption.class, 131074)).containsExactly(BAR, BAZ);
+ assertThat(ListOption.fromBits(MyOption.class, 131075)).containsExactly(FOO, BAR, BAZ);
+
+ assertFromBitsFails(4);
+ assertFromBitsFails(8);
+ assertFromBitsFails(16);
+ assertFromBitsFails(250);
+ }
+
+ private void assertFromBitsFails(int v) {
+ try {
+ EnumSet<MyOption> opts = ListOption.fromBits(MyOption.class, v);
+ assertWithMessage("expected RuntimeException for fromBits(%s), got: %s", v, opts).fail();
+ } catch (RuntimeException e) {
+ // Expected.
+ }
+ }
+}
diff --git a/javatests/com/google/gerrit/server/account/AccountResolverTest.java b/javatests/com/google/gerrit/server/account/AccountResolverTest.java
index fefbc2f..5f662e9 100644
--- a/javatests/com/google/gerrit/server/account/AccountResolverTest.java
+++ b/javatests/com/google/gerrit/server/account/AccountResolverTest.java
@@ -85,8 +85,7 @@
@Override
public String toString() {
- return accounts
- .stream()
+ return accounts.stream()
.map(a -> a.getAccount().getId().toString())
.collect(joining(",", pattern + "(", ")"));
}
@@ -358,9 +357,7 @@
}
private static ImmutableSet<Account.Id> filteredInactiveIds(Result result) {
- return result
- .filteredInactive()
- .stream()
+ return result.filteredInactive().stream()
.map(a -> a.getAccount().getId())
.collect(toImmutableSet());
}
diff --git a/javatests/com/google/gerrit/server/extensions/webui/UiActionsTest.java b/javatests/com/google/gerrit/server/extensions/webui/UiActionsTest.java
index 6c5c5b0..4a1f47c 100644
--- a/javatests/com/google/gerrit/server/extensions/webui/UiActionsTest.java
+++ b/javatests/com/google/gerrit/server/extensions/webui/UiActionsTest.java
@@ -18,6 +18,8 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
+import com.google.gerrit.extensions.api.access.CoreOrPluginProjectPermission;
import com.google.gerrit.extensions.conditions.BooleanCondition;
import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.reviewdb.client.Account;
@@ -55,19 +57,29 @@
}
@Override
- public void check(ProjectPermission perm) throws AuthException, PermissionBackendException {
+ public void check(CoreOrPluginProjectPermission perm)
+ throws AuthException, PermissionBackendException {
throw new UnsupportedOperationException("not implemented");
}
@Override
- public Set<ProjectPermission> test(Collection<ProjectPermission> permSet)
+ public <T extends CoreOrPluginProjectPermission> Set<T> test(Collection<T> permSet)
throws PermissionBackendException {
assertThat(allowValueQueries).isTrue();
- return ImmutableSet.of(ProjectPermission.READ);
+ Set<T> ok = Sets.newHashSetWithExpectedSize(permSet.size());
+ for (T perm : permSet) {
+ // Allow ProjectPermission.READ, if it was requested in the input permSet. This implies
+ // that permSet has type Collection<ProjectPermission>, otherwise no permission would
+ // compare equal to READ.
+ if (perm.equals(ProjectPermission.READ)) {
+ ok.add(perm);
+ }
+ }
+ return ok;
}
@Override
- public BooleanCondition testCond(ProjectPermission perm) {
+ public BooleanCondition testCond(CoreOrPluginProjectPermission perm) {
return new PermissionBackendCondition.ForProject(this, perm, fakeUser());
}
diff --git a/javatests/com/google/gerrit/server/index/change/ChangeFieldTest.java b/javatests/com/google/gerrit/server/index/change/ChangeFieldTest.java
index d3792b7..758c304 100644
--- a/javatests/com/google/gerrit/server/index/change/ChangeFieldTest.java
+++ b/javatests/com/google/gerrit/server/index/change/ChangeFieldTest.java
@@ -150,8 +150,7 @@
private static void assertStoredRecordRoundTrip(SubmitRecord... records) {
List<SubmitRecord> recordList = ImmutableList.copyOf(records);
List<String> stored =
- ChangeField.storedSubmitRecords(recordList)
- .stream()
+ ChangeField.storedSubmitRecords(recordList).stream()
.map(s -> new String(s, UTF_8))
.collect(toList());
assertThat(ChangeField.parseSubmitRecords(stored))
diff --git a/javatests/com/google/gerrit/server/notedb/ChangeNotesTest.java b/javatests/com/google/gerrit/server/notedb/ChangeNotesTest.java
index 8892e84..1da4121 100644
--- a/javatests/com/google/gerrit/server/notedb/ChangeNotesTest.java
+++ b/javatests/com/google/gerrit/server/notedb/ChangeNotesTest.java
@@ -407,10 +407,7 @@
ChangeNotes notes = newNotes(c);
ImmutableList<PatchSetApproval> approvals =
- notes
- .getApprovals()
- .get(c.currentPatchSetId())
- .stream()
+ notes.getApprovals().get(c.currentPatchSetId()).stream()
.sorted(comparing(a -> a.getAccountId().get()))
.collect(toImmutableList());
assertThat(approvals).hasSize(2);
diff --git a/javatests/com/google/gerrit/server/notedb/CommentJsonMigratorTest.java b/javatests/com/google/gerrit/server/notedb/CommentJsonMigratorTest.java
index 80634f5..8440d9f 100644
--- a/javatests/com/google/gerrit/server/notedb/CommentJsonMigratorTest.java
+++ b/javatests/com/google/gerrit/server/notedb/CommentJsonMigratorTest.java
@@ -478,10 +478,7 @@
reader,
noteMap,
status);
- return revNoteMap
- .revisionNotes
- .values()
- .stream()
+ return revNoteMap.revisionNotes.values().stream()
.flatMap(crn -> crn.getEntities().stream())
.collect(toImmutableMap(c -> c.key, c -> c.legacyFormat));
}
diff --git a/javatests/com/google/gerrit/server/permissions/PluginPermissionsUtilTest.java b/javatests/com/google/gerrit/server/permissions/PluginPermissionsUtilTest.java
index 85d85fb..f40c3bc 100644
--- a/javatests/com/google/gerrit/server/permissions/PluginPermissionsUtilTest.java
+++ b/javatests/com/google/gerrit/server/permissions/PluginPermissionsUtilTest.java
@@ -15,7 +15,7 @@
package com.google.gerrit.server.permissions;
import static com.google.common.truth.Truth.assertThat;
-import static com.google.gerrit.server.permissions.PluginPermissionsUtil.isPluginPermission;
+import static com.google.gerrit.server.permissions.PluginPermissionsUtil.isValidPluginPermission;
import com.google.common.collect.ImmutableList;
import org.junit.Test;
@@ -30,7 +30,7 @@
ImmutableList.of("plugin-foo-a", "plugin-foo-a-b");
for (String permission : validPluginPermissions) {
- assertThat(isPluginPermission(permission))
+ assertThat(isValidPluginPermission(permission))
.named("valid plugin permission: %s", permission)
.isTrue();
}
@@ -38,7 +38,7 @@
@Test
public void isPluginPermissionReturnsFalseForInvalidName() {
- ImmutableList<String> inValidPluginPermissions =
+ ImmutableList<String> invalidPluginPermissions =
ImmutableList.of(
"create",
"label-Code-Review",
@@ -47,8 +47,8 @@
"plugin-foo-a-",
"plugin-foo-a1");
- for (String permission : inValidPluginPermissions) {
- assertThat(isPluginPermission(permission))
+ for (String permission : invalidPluginPermissions) {
+ assertThat(isValidPluginPermission(permission))
.named("invalid plugin permission: %s", permission)
.isFalse();
}
diff --git a/javatests/com/google/gerrit/server/project/CommitsCollectionTest.java b/javatests/com/google/gerrit/server/project/CommitsCollectionTest.java
index 79c620a..cf6d50f 100644
--- a/javatests/com/google/gerrit/server/project/CommitsCollectionTest.java
+++ b/javatests/com/google/gerrit/server/project/CommitsCollectionTest.java
@@ -222,9 +222,7 @@
.getAccessSection(AccessSection.GLOBAL_CAPABILITIES)
.getPermission(GlobalCapability.ADMINISTRATE_SERVER);
- return adminPermission
- .getRules()
- .stream()
+ return adminPermission.getRules().stream()
.map(PermissionRule::getGroup)
.map(GroupReference::getUUID)
.collect(ImmutableList.toImmutableList());
diff --git a/javatests/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java b/javatests/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java
index 100c25e..fd81507 100644
--- a/javatests/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java
+++ b/javatests/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java
@@ -528,8 +528,7 @@
// Convert AccountInfos to strings, either account ID or email.
List<String> reviewerIds =
- reviewers
- .stream()
+ reviewers.stream()
.map(
ai -> {
if (ai._accountId != null) {
@@ -2235,10 +2234,7 @@
gApi.groups().id(group).addMembers(user2.toString(), user3.toString());
List<String> members =
- gApi.groups()
- .id(group)
- .members()
- .stream()
+ gApi.groups().id(group).members().stream()
.map(a -> a._accountId.toString())
.collect(toList());
assertThat(members).contains(user2.toString());
@@ -3337,10 +3333,7 @@
protected void assertQuery(Predicate<ChangeData> predicate, Change... changes) throws Exception {
ImmutableList<Change.Id> actualIds =
- queryProvider
- .get()
- .query(predicate)
- .stream()
+ queryProvider.get().query(predicate).stream()
.map(ChangeData::getId)
.collect(toImmutableList());
Change.Id[] expectedIds = Arrays.stream(changes).map(Change::getId).toArray(Change.Id[]::new);
diff --git a/javatests/com/google/gerrit/server/query/project/AbstractQueryProjectsTest.java b/javatests/com/google/gerrit/server/query/project/AbstractQueryProjectsTest.java
index d3c7809..08ef2b0 100644
--- a/javatests/com/google/gerrit/server/query/project/AbstractQueryProjectsTest.java
+++ b/javatests/com/google/gerrit/server/query/project/AbstractQueryProjectsTest.java
@@ -177,10 +177,7 @@
public void byParentOfAllProjects() throws Exception {
Set<String> excludedProjects = ImmutableSet.of(allProjects.get(), allUsers.get());
ProjectInfo[] projects =
- gApi.projects()
- .list()
- .get()
- .stream()
+ gApi.projects().list().get().stream()
.filter(p -> !excludedProjects.contains(p.name))
.toArray(s -> new ProjectInfo[s]);
assertQuery("parent:" + allProjects.get(), projects);
diff --git a/javatests/com/google/gerrit/server/schema/NoteDbSchemaVersionsTest.java b/javatests/com/google/gerrit/server/schema/NoteDbSchemaVersionsTest.java
index 530010f..7bc3848 100644
--- a/javatests/com/google/gerrit/server/schema/NoteDbSchemaVersionsTest.java
+++ b/javatests/com/google/gerrit/server/schema/NoteDbSchemaVersionsTest.java
@@ -53,8 +53,7 @@
int minNoteDbVersion = 180;
ImmutableList<Integer> allSchemaVersions =
ClassPath.from(getClass().getClassLoader())
- .getTopLevelClasses(getClass().getPackage().getName())
- .stream()
+ .getTopLevelClasses(getClass().getPackage().getName()).stream()
.map(ClassInfo::load)
.map(NoteDbSchemaVersions::guessVersion)
.flatMap(Streams::stream)
diff --git a/plugins/codemirror-editor b/plugins/codemirror-editor
index 0ffcc1c..65f3cba 160000
--- a/plugins/codemirror-editor
+++ b/plugins/codemirror-editor
@@ -1 +1 @@
-Subproject commit 0ffcc1c5865bbfecb811d8631e010251fae04317
+Subproject commit 65f3cbac2174c7aad65a3d7c9325a66871ae5752
diff --git a/plugins/delete-project b/plugins/delete-project
index 231197b..53311c0 160000
--- a/plugins/delete-project
+++ b/plugins/delete-project
@@ -1 +1 @@
-Subproject commit 231197b040ed3f11b997195de021f7f073877070
+Subproject commit 53311c006635e83faaa7a1b68039edebe0fe8e43
diff --git a/plugins/download-commands b/plugins/download-commands
index 22495f7..697ca37 160000
--- a/plugins/download-commands
+++ b/plugins/download-commands
@@ -1 +1 @@
-Subproject commit 22495f7aaa9f91b55c0482cefe27bb117d1869c9
+Subproject commit 697ca3783add1c8fa406d60f7821ab6db7c1bfec
diff --git a/plugins/gitiles b/plugins/gitiles
index 623105f..dcd8d7f 160000
--- a/plugins/gitiles
+++ b/plugins/gitiles
@@ -1 +1 @@
-Subproject commit 623105f14dca02cb294ed94a952f5e8ce0e96683
+Subproject commit dcd8d7f93ebe21e60688e65fa1261a836a82eb32
diff --git a/plugins/replication b/plugins/replication
index 9ad16da..a4bae3f 160000
--- a/plugins/replication
+++ b/plugins/replication
@@ -1 +1 @@
-Subproject commit 9ad16dabdaf49757d67b3ebcf5dd9b1bc30fb277
+Subproject commit a4bae3f491bb3f693e2407d353d3a81ce2a5c8be
diff --git a/plugins/singleusergroup b/plugins/singleusergroup
index 17f5d01..ff77708 160000
--- a/plugins/singleusergroup
+++ b/plugins/singleusergroup
@@ -1 +1 @@
-Subproject commit 17f5d016b8c9e76cdbf467a004ba22d4c46311fa
+Subproject commit ff777080a881e85060ab446ae3f00612bcfb5ae1
diff --git a/plugins/webhooks b/plugins/webhooks
index f228264..064ae07 160000
--- a/plugins/webhooks
+++ b/plugins/webhooks
@@ -1 +1 @@
-Subproject commit f2282644c9da0e0fe1a9e106f26ddcb3ad42358d
+Subproject commit 064ae07f55710034062ef2a36cd030abeee93265
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.html b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.html
index 32b1152..472a187 100644
--- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.html
+++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.html
@@ -356,6 +356,9 @@
min-width: initial;
width: 100vw;
}
+ #replyOverlay {
+ z-index: var(--reply-overlay-z-index);
+ }
}
</style>
<div class="container loading" hidden$="[[!_loading]]">Loading...</div>
diff --git a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_test.html b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_test.html
index 8428da3..83e5216 100644
--- a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_test.html
+++ b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_test.html
@@ -1410,6 +1410,7 @@
ignore_whitespace: 'IGNORE_NONE',
};
diff._diff = mock.diffResponse;
+ diff.$.diff.flushDebouncer('renderDiffTable');
};
const renderAndGetNewDiffs = function(index) {
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-builder/gr-diff-builder.html b/polygerrit-ui/app/elements/diff/gr-diff-builder/gr-diff-builder.html
index 29cc3b9..9646b06 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-builder/gr-diff-builder.html
+++ b/polygerrit-ui/app/elements/diff/gr-diff-builder/gr-diff-builder.html
@@ -38,6 +38,7 @@
<gr-reporting id="reporting"></gr-reporting>
<gr-js-api-interface id="jsAPI"></gr-js-api-interface>
</template>
+ <script src="../../../scripts/util.js"></script>
<script src="../gr-diff/gr-diff-line.js"></script>
<script src="../gr-diff/gr-diff-group.js"></script>
<script src="../gr-diff-highlight/gr-annotation.js"></script>
@@ -108,6 +109,13 @@
type: Array,
value: () => [],
},
+ /**
+ * The promise last returned from `render()` while the asynchronous
+ * rendering is running - `null` otherwise. Provides a `cancel()`
+ * method that rejects it with `{isCancelled: true}`.
+ * @type {?Object}
+ */
+ _cancelableRenderPromise: Object,
},
get diffElement() {
@@ -146,25 +154,32 @@
reporting.time(TimingLabel.TOTAL);
reporting.time(TimingLabel.CONTENT);
this.dispatchEvent(new CustomEvent('render-start', {bubbles: true}));
- return this.$.processor.process(this.diff.content, isBinary)
- .then(() => {
- if (this.isImageDiff) {
- this._builder.renderDiff();
- }
- this.dispatchEvent(new CustomEvent('render-content',
- {bubbles: true}));
+ this._cancelableRenderPromise = util.makeCancelable(
+ this.$.processor.process(this.diff.content, isBinary)
+ .then(() => {
+ if (this.isImageDiff) {
+ this._builder.renderDiff();
+ }
+ this.dispatchEvent(new CustomEvent('render-content',
+ {bubbles: true}));
- if (this._diffTooLargeForSyntax()) {
- this.$.syntaxLayer.enabled = false;
- }
+ if (this._diffTooLargeForSyntax()) {
+ this.$.syntaxLayer.enabled = false;
+ }
- reporting.timeEnd(TimingLabel.CONTENT);
- reporting.time(TimingLabel.SYNTAX);
- return this.$.syntaxLayer.process().then(() => {
- reporting.timeEnd(TimingLabel.SYNTAX);
- reporting.timeEnd(TimingLabel.TOTAL);
- });
- });
+ reporting.timeEnd(TimingLabel.CONTENT);
+ reporting.time(TimingLabel.SYNTAX);
+ return this.$.syntaxLayer.process().then(() => {
+ reporting.timeEnd(TimingLabel.SYNTAX);
+ reporting.timeEnd(TimingLabel.TOTAL);
+ });
+ }));
+ return this._cancelableRenderPromise
+ .finally(() => { this._cancelableRenderPromise = null; })
+ // Mocca testing does not like uncaught rejections, so we catch
+ // the cancels which are expected and should not throw errors in
+ // tests.
+ .catch(e => { if (!e.isCanceled) return Promise.reject(e); });
},
_setupAnnotationLayers() {
@@ -259,6 +274,10 @@
cancel() {
this.$.processor.cancel();
this.$.syntaxLayer.cancel();
+ if (this._cancelableRenderPromise) {
+ this._cancelableRenderPromise.cancel();
+ this._cancelableRenderPromise = null;
+ }
},
_handlePreferenceError(pref) {
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.html b/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.html
index baa8bba..663cf25 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.html
+++ b/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.html
@@ -20,5 +20,7 @@
<dom-module id="gr-diff-processor">
<script src="../gr-diff/gr-diff-line.js"></script>
<script src="../gr-diff/gr-diff-group.js"></script>
+
+ <script src="../../../scripts/util.js"></script>
<script src="gr-diff-processor.js"></script>
</dom-module>
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.js b/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.js
index dead8d7..a9268a7 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.js
@@ -80,8 +80,18 @@
value: 64,
},
- /** @type {number|undefined} */
+ /** @type {?number} */
_nextStepHandle: Number,
+ /**
+ * The promise last returned from `process()` while the asynchronous
+ * processing is running - `null` otherwise. Provides a `cancel()`
+ * method that rejects it with `{isCancelled: true}`.
+ * @type {?Object}
+ */
+ _processPromise: {
+ type: Object,
+ value: null,
+ },
_isScrolling: Boolean,
},
@@ -108,6 +118,10 @@
* processed.
*/
process(content, isBinary) {
+ // Cancel any still running process() calls, because they append to the
+ // same groups field.
+ this.cancel();
+
this.groups = [];
this.push('groups', this._makeFileComments());
@@ -115,57 +129,64 @@
// so finish processing.
if (isBinary) { return Promise.resolve(); }
- return new Promise(resolve => {
- const state = {
- lineNums: {left: 0, right: 0},
- sectionIndex: 0,
- };
- content = this._splitCommonGroupsWithComments(content);
+ this._processPromise = util.makeCancelable(
+ new Promise(resolve => {
+ const state = {
+ lineNums: {left: 0, right: 0},
+ sectionIndex: 0,
+ };
- let currentBatch = 0;
- const nextStep = () => {
- if (this._isScrolling) {
- this.async(nextStep, 100);
- return;
- }
- // If we are done, resolve the promise.
- if (state.sectionIndex >= content.length) {
- resolve(this.groups);
- this._nextStepHandle = undefined;
- return;
- }
+ content = this._splitCommonGroupsWithComments(content);
- // Process the next section and incorporate the result.
- const result = this._processNext(state, content);
- for (const group of result.groups) {
- this.push('groups', group);
- currentBatch += group.lines.length;
- }
- state.lineNums.left += result.lineDelta.left;
- state.lineNums.right += result.lineDelta.right;
+ let currentBatch = 0;
+ const nextStep = () => {
+ if (this._isScrolling) {
+ this.async(nextStep, 100);
+ return;
+ }
+ // If we are done, resolve the promise.
+ if (state.sectionIndex >= content.length) {
+ resolve(this.groups);
+ this._nextStepHandle = null;
+ return;
+ }
- // Increment the index and recurse.
- state.sectionIndex++;
- if (currentBatch >= this._asyncThreshold) {
- currentBatch = 0;
- this._nextStepHandle = this.async(nextStep, 1);
- } else {
+ // Process the next section and incorporate the result.
+ const result = this._processNext(state, content);
+ for (const group of result.groups) {
+ this.push('groups', group);
+ currentBatch += group.lines.length;
+ }
+ state.lineNums.left += result.lineDelta.left;
+ state.lineNums.right += result.lineDelta.right;
+
+ // Increment the index and recurse.
+ state.sectionIndex++;
+ if (currentBatch >= this._asyncThreshold) {
+ currentBatch = 0;
+ this._nextStepHandle = this.async(nextStep, 1);
+ } else {
+ nextStep.call(this);
+ }
+ };
+
nextStep.call(this);
- }
- };
-
- nextStep.call(this);
- });
+ }));
+ return this._processPromise
+ .finally(() => { this._processPromise = null; });
},
/**
* Cancel any jobs that are running.
*/
cancel() {
- if (this._nextStepHandle !== undefined) {
+ if (this._nextStepHandle != null) {
this.cancelAsync(this._nextStepHandle);
- this._nextStepHandle = undefined;
+ this._nextStepHandle = null;
+ }
+ if (this._processPromise) {
+ this._processPromise.cancel();
}
},
diff --git a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.js b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.js
index 5ecc2fc3..1c018de 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.js
@@ -102,6 +102,8 @@
*/
const COMMIT_MSG_LINE_LENGTH = 72;
+ const RENDER_DIFF_TABLE_DEBOUNCE_NAME = 'renderDiffTable';
+
Polymer({
is: 'gr-diff',
@@ -392,6 +394,7 @@
/** Cancel any remaining diff builder rendering work. */
cancel() {
this.$.diffBuilder.cancel();
+ this.cancelDebouncer(RENDER_DIFF_TABLE_DEBOUNCE_NAME);
},
/** @return {!Array<!HTMLElement>} */
@@ -679,17 +682,32 @@
this.updateStyles(stylesToUpdate);
if (this.diff && !this.noRenderOnPrefsChange) {
- this._renderDiffTable();
+ this._debounceRenderDiffTable();
}
},
_diffChanged(newValue) {
if (newValue) {
this._diffLength = this.$.diffBuilder.getDiffLength();
- this._renderDiffTable();
+ this._debounceRenderDiffTable();
}
},
+ /**
+ * When called multiple times from the same microtask, will call
+ * _renderDiffTable only once, in the next microtask, unless it is cancelled
+ * before that microtask runs.
+ *
+ * This should be used instead of calling _renderDiffTable directly to
+ * render the diff in response to an input change, because there may be
+ * multiple inputs changing in the same microtask, but we only want to
+ * render once.
+ */
+ _debounceRenderDiffTable() {
+ this.debounce(
+ RENDER_DIFF_TABLE_DEBOUNCE_NAME, () => this._renderDiffTable());
+ },
+
_renderDiffTable() {
this._unobserveIncrementalNodes();
if (!this.prefs) {
@@ -791,12 +809,12 @@
_handleFullBypass() {
this._safetyBypass = FULL_CONTEXT;
- this._renderDiffTable();
+ this._debounceRenderDiffTable();
},
_handleLimitedBypass() {
this._safetyBypass = LIMITED_CONTEXT;
- this._renderDiffTable();
+ this._debounceRenderDiffTable();
},
/** @return {string} */
diff --git a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff_test.html b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff_test.html
index 849ad0d..42f098b 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff_test.html
+++ b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff_test.html
@@ -40,6 +40,8 @@
let element;
let sandbox;
+ const MINIMAL_PREFS = {tab_size: 2, line_length: 80};
+
setup(() => {
sandbox = sinon.sandbox.create();
});
@@ -81,14 +83,14 @@
test('line limit with line_wrapping', () => {
element = fixture('basic');
- element.prefs = {line_wrapping: true, line_length: 80, tab_size: 2};
+ element.prefs = Object.assign({}, MINIMAL_PREFS, {line_wrapping: true});
flushAsynchronousOperations();
assert.equal(element.customStyle['--line-limit'], '80ch');
});
test('line limit without line_wrapping', () => {
element = fixture('basic');
- element.prefs = {line_wrapping: false, line_length: 80, tab_size: 2};
+ element.prefs = Object.assign({}, MINIMAL_PREFS, {line_wrapping: false});
flushAsynchronousOperations();
assert.isNotOk(element.customStyle['--line-limit']);
});
@@ -225,7 +227,7 @@
const mock = document.createElement('mock-diff-response');
element.$.diffBuilder._builder = element.$.diffBuilder._getDiffBuilder(
- mock.diffResponse, {tab_size: 2, line_length: 80});
+ mock.diffResponse, Object.assign({}, MINIMAL_PREFS));
// No thread groups.
assert.isNotOk(element._getThreadGroupForLine(contentEl));
@@ -448,7 +450,7 @@
binary: true,
};
- element.addEventListener('render', () => {
+ function rendered() {
// Recognizes that it should be an image diff.
assert.isTrue(element.isImageDiff);
assert.instanceOf(
@@ -460,7 +462,9 @@
assert.isNotOk(leftImage);
assert.isOk(rightImage);
done();
- });
+ element.removeEventListener('render', rendered);
+ }
+ element.addEventListener('render', rendered);
element.revisionImage = mockFile2;
element.diff = mockDiff;
@@ -483,7 +487,7 @@
binary: true,
};
- element.addEventListener('render', () => {
+ function rendered() {
// Recognizes that it should be an image diff.
assert.isTrue(element.isImageDiff);
assert.instanceOf(
@@ -495,7 +499,9 @@
assert.isOk(leftImage);
assert.isNotOk(rightImage);
done();
- });
+ element.removeEventListener('render', rendered);
+ }
+ element.addEventListener('render', rendered);
element.baseImage = mockFile1;
element.diff = mockDiff;
@@ -519,7 +525,7 @@
};
mockFile1.type = 'image/jpeg-evil';
- element.addEventListener('render', () => {
+ function rendered() {
// Recognizes that it should be an image diff.
assert.isTrue(element.isImageDiff);
assert.instanceOf(
@@ -527,7 +533,9 @@
const leftImage = element.$.diffTable.querySelector('td.left img');
assert.isNotOk(leftImage);
done();
- });
+ element.removeEventListener('render', rendered);
+ }
+ element.addEventListener('render', rendered);
element.baseImage = mockFile1;
element.diff = mockDiff;
@@ -679,12 +687,14 @@
change_type: 'MODIFIED',
content: [{skip: 66}],
};
+ element.flushDebouncer('renderDiffTable');
});
test('change in preferences re-renders diff', () => {
sandbox.stub(element, '_renderDiffTable');
- element.prefs = {};
- element.prefs = {time_format: 'HHMM_12'};
+ element.prefs = Object.assign(
+ {}, MINIMAL_PREFS, {time_format: 'HHMM_12'});
+ element.flushDebouncer('renderDiffTable');
assert.isTrue(element._renderDiffTable.called);
});
@@ -692,8 +702,9 @@
'noRenderOnPrefsChange', () => {
sandbox.stub(element, '_renderDiffTable');
element.noRenderOnPrefsChange = true;
- element.prefs = {};
- element.prefs = {time_format: 'HHMM_12'};
+ element.prefs = Object.assign(
+ {}, MINIMAL_PREFS, {time_format: 'HHMM_12'});
+ element.flushDebouncer('renderDiffTable');
assert.isFalse(element._renderDiffTable.called);
});
});
@@ -760,33 +771,39 @@
});
test('large render w/ context = 10', done => {
- element.prefs = {context: 10};
- element.addEventListener('render', () => {
+ element.prefs = Object.assign({}, MINIMAL_PREFS, {context: 10});
+ function rendered() {
assert.isTrue(renderStub.called);
assert.isFalse(element._showWarning);
done();
- });
+ element.removeEventListener('render', rendered);
+ }
+ element.addEventListener('render', rendered);
element._renderDiffTable();
});
test('large render w/ whole file and bypass', done => {
- element.prefs = {context: -1};
+ element.prefs = Object.assign({}, MINIMAL_PREFS, {context: -1});
element._safetyBypass = 10;
- element.addEventListener('render', () => {
+ function rendered() {
assert.isTrue(renderStub.called);
assert.isFalse(element._showWarning);
done();
- });
+ element.removeEventListener('render', rendered);
+ }
+ element.addEventListener('render', rendered);
element._renderDiffTable();
});
test('large render w/ whole file and no bypass', done => {
- element.prefs = {context: -1};
- element.addEventListener('render', () => {
+ element.prefs = Object.assign({}, MINIMAL_PREFS, {context: -1});
+ function rendered() {
assert.isFalse(renderStub.called);
assert.isTrue(element._showWarning);
done();
- });
+ element.removeEventListener('render', rendered);
+ }
+ element.addEventListener('render', rendered);
element._renderDiffTable();
});
});
diff --git a/polygerrit-ui/app/elements/diff/gr-syntax-layer/gr-syntax-layer.html b/polygerrit-ui/app/elements/diff/gr-syntax-layer/gr-syntax-layer.html
index 017cd5d..67c32bb 100644
--- a/polygerrit-ui/app/elements/diff/gr-syntax-layer/gr-syntax-layer.html
+++ b/polygerrit-ui/app/elements/diff/gr-syntax-layer/gr-syntax-layer.html
@@ -21,6 +21,7 @@
<template>
<gr-lib-loader id="libLoader"></gr-lib-loader>
</template>
+ <script src="../../../scripts/util.js"></script>
<script src="../gr-diff/gr-diff-line.js"></script>
<script src="../gr-diff-highlight/gr-annotation.js"></script>
<script src="gr-syntax-layer.js"></script>
diff --git a/polygerrit-ui/app/elements/diff/gr-syntax-layer/gr-syntax-layer.js b/polygerrit-ui/app/elements/diff/gr-syntax-layer/gr-syntax-layer.js
index a7e7377..32eb969 100644
--- a/polygerrit-ui/app/elements/diff/gr-syntax-layer/gr-syntax-layer.js
+++ b/polygerrit-ui/app/elements/diff/gr-syntax-layer/gr-syntax-layer.js
@@ -155,6 +155,16 @@
},
/** @type {?number} */
_processHandle: Number,
+ /**
+ * The promise last returned from `process()` while the asynchronous
+ * processing is running - `null` otherwise. Provides a `cancel()`
+ * method that rejects it with `{isCancelled: true}`.
+ * @type {?Object}
+ */
+ _processPromise: {
+ type: Object,
+ value: null,
+ },
_hljs: Object,
},
@@ -212,6 +222,10 @@
* @return {Promise}
*/
process() {
+ // Cancel any still running process() calls, because they append to the
+ // same _baseRanges and _revisionRanges fields.
+ this.cancel();
+
// Discard existing ranges.
this._baseRanges = [];
this._revisionRanges = [];
@@ -220,8 +234,6 @@
return Promise.resolve();
}
- this.cancel();
-
if (this.diff.meta_a) {
this._baseLanguage = this._getLanguage(this.diff.meta_a);
}
@@ -241,49 +253,55 @@
lastNotify: {left: 1, right: 1},
};
- return this._loadHLJS().then(() => {
- return new Promise(resolve => {
- const nextStep = () => {
- this._processHandle = null;
- this._processNextLine(state);
+ this._processPromise = util.makeCancelable(this._loadHLJS()
+ .then(() => {
+ return new Promise(resolve => {
+ const nextStep = () => {
+ this._processHandle = null;
+ this._processNextLine(state);
- // Move to the next line in the section.
- state.lineIndex++;
+ // Move to the next line in the section.
+ state.lineIndex++;
- // If the section has been exhausted, move to the next one.
- if (this._isSectionDone(state)) {
- state.lineIndex = 0;
- state.sectionIndex++;
- }
+ // If the section has been exhausted, move to the next one.
+ if (this._isSectionDone(state)) {
+ state.lineIndex = 0;
+ state.sectionIndex++;
+ }
- // If all sections have been exhausted, finish.
- if (state.sectionIndex >= this.diff.content.length) {
- resolve();
- this._notify(state);
- return;
- }
+ // If all sections have been exhausted, finish.
+ if (state.sectionIndex >= this.diff.content.length) {
+ resolve();
+ this._notify(state);
+ return;
+ }
- if (state.lineIndex % 100 === 0) {
- this._notify(state);
- this._processHandle = this.async(nextStep, ASYNC_DELAY);
- } else {
- nextStep.call(this);
- }
- };
+ if (state.lineIndex % 100 === 0) {
+ this._notify(state);
+ this._processHandle = this.async(nextStep, ASYNC_DELAY);
+ } else {
+ nextStep.call(this);
+ }
+ };
- this._processHandle = this.async(nextStep, 1);
- });
- });
+ this._processHandle = this.async(nextStep, 1);
+ });
+ }));
+ return this._processPromise
+ .finally(() => { this._processPromise = null; });
},
/**
* Cancel any asynchronous syntax processing jobs.
*/
cancel() {
- if (this._processHandle) {
+ if (this._processHandle != null) {
this.cancelAsync(this._processHandle);
this._processHandle = null;
}
+ if (this._processPromise) {
+ this._processPromise.cancel();
+ }
},
_diffChanged() {
diff --git a/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface.js b/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface.js
index ec14af5..849972f 100644
--- a/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface.js
+++ b/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface.js
@@ -353,7 +353,7 @@
/**
* @param {string} url
- * @param {?Object=} opt_params URL params, key-value hash.
+ * @param {?Object|string=} opt_params URL params, key-value hash.
* @return {string}
*/
_urlWithParams(url, opt_params) {
@@ -1352,30 +1352,32 @@
* @param {function()=} opt_cancelCondition
*/
getDiffChangeDetail(changeNum, opt_errFn, opt_cancelCondition) {
- const params = this.listChangesOptionsToHex(
+ const optionsHex = this.listChangesOptionsToHex(
this.ListChangesOption.ALL_COMMITS,
this.ListChangesOption.ALL_REVISIONS,
this.ListChangesOption.SKIP_MERGEABLE
);
- return this._getChangeDetail(changeNum, params, opt_errFn,
+ return this._getChangeDetail(changeNum, optionsHex, opt_errFn,
opt_cancelCondition);
},
/**
* @param {number|string} changeNum
+ * @param {string|undefined} optionsHex list changes options in hex
* @param {function(?Response, string=)=} opt_errFn
* @param {function()=} opt_cancelCondition
*/
- _getChangeDetail(changeNum, params, opt_errFn, opt_cancelCondition) {
+ _getChangeDetail(changeNum, optionsHex, opt_errFn, opt_cancelCondition) {
return this.getChangeActionURL(changeNum, null, '/detail').then(url => {
- const urlWithParams = this._urlWithParams(url, params);
+ const urlWithParams = this._urlWithParams(url, optionsHex);
+ const params = {O: optionsHex};
const req = {
url,
errFn: opt_errFn,
cancelCondition: opt_cancelCondition,
- params: {O: params},
+ params,
fetchOptions: this._etags.getOptions(urlWithParams),
- anonymizedUrl: '/changes/*~*/detail?O=' + params,
+ anonymizedUrl: '/changes/*~*/detail?O=' + optionsHex,
};
return this._fetchRawJSON(req).then(response => {
if (response && response.status === 304) {
diff --git a/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface_test.html b/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface_test.html
index 4ab1e04..ef4e401 100644
--- a/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface_test.html
+++ b/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface_test.html
@@ -1151,12 +1151,12 @@
test('_getChangeDetail passes params to ETags decorator', () => {
const changeNum = 4321;
element._projectLookup[changeNum] = 'test';
- const params = {foo: 'bar'};
const expectedUrl =
- window.CANONICAL_PATH + '/changes/test~4321/detail?foo=bar';
+ window.CANONICAL_PATH + '/changes/test~4321/detail?'+
+ '0=5&1=1&2=6&3=7&4=1&5=4';
sandbox.stub(element._etags, 'getOptions');
sandbox.stub(element._etags, 'collect');
- return element._getChangeDetail(changeNum, params).then(() => {
+ return element._getChangeDetail(changeNum, '516714').then(() => {
assert.isTrue(element._etags.getOptions.calledWithExactly(
expectedUrl));
assert.equal(element._etags.collect.lastCall.args[0], expectedUrl);
@@ -1169,7 +1169,7 @@
.returns(Promise.resolve(''));
sandbox.stub(element, '_fetchRawJSON')
.returns(Promise.resolve({ok: false, status: 500}));
- return element._getChangeDetail(123, {}, errFn).then(() => {
+ return element._getChangeDetail(123, '516714', errFn).then(() => {
assert.isTrue(errFn.called);
});
});
@@ -1185,7 +1185,7 @@
parsed: mockResponse,
raw: JSON.stringify(mockResponse),
}));
- return element._getChangeDetail(1).then(() => {
+ return element._getChangeDetail(1, '516714').then(() => {
assert.equal(Object.keys(element._projectLookup).length, 1);
assert.equal(element._projectLookup[1], 'test');
});
@@ -1216,7 +1216,7 @@
ok: true,
}));
- return element._getChangeDetail(123, {}).then(detail => {
+ return element._getChangeDetail(123, '516714').then(detail => {
assert.isFalse(getPayloadSpy.called);
assert.isTrue(collectSpy.calledOnce);
const cachedResponse = element._etags.getCachedPayload(requestUrl);
diff --git a/polygerrit-ui/app/scripts/util.js b/polygerrit-ui/app/scripts/util.js
index b4ab21a..624992b 100644
--- a/polygerrit-ui/app/scripts/util.js
+++ b/polygerrit-ui/app/scripts/util.js
@@ -41,5 +41,39 @@
}
return '';
};
+
+ /**
+ * Make the promise cancelable.
+ *
+ * Returns a promise with a `cancel()` method wrapped around `promise`.
+ * Calling `cancel()` will reject the returned promise with
+ * {isCancelled: true} synchronously. If the inner promise for a cancelled
+ * promise resolves or rejects this is ignored.
+ */
+ util.makeCancelable = promise => {
+ // True if the promise is either resolved or reject (possibly cancelled)
+ let isDone = false;
+
+ let rejectPromise;
+
+ const wrappedPromise = new Promise((resolve, reject) => {
+ rejectPromise = reject;
+ promise.then(val => {
+ if (!isDone) resolve(val);
+ isDone = true;
+ }, error => {
+ if (!isDone) reject(error);
+ isDone = true;
+ });
+ });
+
+ wrappedPromise.cancel = () => {
+ if (isDone) return;
+ rejectPromise({isCanceled: true});
+ isDone = true;
+ };
+ return wrappedPromise;
+ };
+
window.util = util;
})(window);
diff --git a/polygerrit-ui/app/styles/themes/app-theme.html b/polygerrit-ui/app/styles/themes/app-theme.html
index ec445ae..e326e97 100644
--- a/polygerrit-ui/app/styles/themes/app-theme.html
+++ b/polygerrit-ui/app/styles/themes/app-theme.html
@@ -133,6 +133,8 @@
--syntax-selector-attr-color: #FA8602;
--syntax-template-tag-color: #FA8602;
--syntax-param-color: var(--primary-text-color);
+
+ --reply-overlay-z-index: 1000;
}
@media screen and (max-width: 50em) {
:root {
diff --git a/polygerrit-ui/app/styles/themes/dark-theme.html b/polygerrit-ui/app/styles/themes/dark-theme.html
index 6037a88..f22ec5d 100644
--- a/polygerrit-ui/app/styles/themes/dark-theme.html
+++ b/polygerrit-ui/app/styles/themes/dark-theme.html
@@ -80,6 +80,8 @@
--syntax-selector-attr-color: #80CBBF;
--syntax-template-tag-color: #C792EA;
+ --reply-overlay-z-index: 1000;
+
background-color: var(--view-background-color);
}
</style>
diff --git a/tools/setup_gjf.sh b/tools/setup_gjf.sh
index c450811..119f9af 100755
--- a/tools/setup_gjf.sh
+++ b/tools/setup_gjf.sh
@@ -17,7 +17,7 @@
set -eu
# Keep this version in sync with dev-contributing.txt.
-VERSION=${1:-1.6}
+VERSION=${1:-1.7}
case "$VERSION" in
1.3)