Merge branch 'stable-2.14' into stable-2.15

* stable-2.14:
  Replace Guava functional constructs with Java native ones
  Remove final qualifiers

Change-Id: I4384458a1e0bc055c50c810684e2f4759f500d69
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/database/DatabaseDeleteHandler.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/database/DatabaseDeleteHandler.java
index b99735b..e6d79b6 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/database/DatabaseDeleteHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/database/DatabaseDeleteHandler.java
@@ -151,7 +151,7 @@
     }
   }
 
-  private final void deleteChanges(ReviewDb db, Project.NameKey project, List<Change.Id> changeIds)
+  private void deleteChanges(ReviewDb db, Project.NameKey project, List<Change.Id> changeIds)
       throws OrmException {
 
     for (Change.Id id : changeIds) {
@@ -181,8 +181,7 @@
     }
   }
 
-  private final void deleteFromPatchSets(ReviewDb db, final ResultSet<PatchSet> patchSets)
-      throws OrmException {
+  private void deleteFromPatchSets(ReviewDb db, ResultSet<PatchSet> patchSets) throws OrmException {
     for (PatchSet patchSet : patchSets) {
       accountPatchReviewStore.get().clearReviewed(patchSet.getId());
       db.patchSets().delete(Collections.singleton(patchSet));
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/projectconfig/ProjectConfigDeleteHandler.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/projectconfig/ProjectConfigDeleteHandler.java
index 271105d..9906c6c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/projectconfig/ProjectConfigDeleteHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/projectconfig/ProjectConfigDeleteHandler.java
@@ -14,9 +14,8 @@
 
 package com.googlesource.gerrit.plugins.deleteproject.projectconfig;
 
-import com.google.common.base.Function;
-import com.google.common.base.Joiner;
-import com.google.common.collect.Iterables;
+import static java.util.stream.Collectors.joining;
+
 import com.google.gerrit.extensions.common.ProjectInfo;
 import com.google.gerrit.server.permissions.PermissionBackendException;
 import com.google.gerrit.server.project.ListChildProjects;
@@ -48,19 +47,9 @@
     try {
       List<ProjectInfo> children = listChildProjectsProvider.get().apply(rsrc);
       if (!children.isEmpty()) {
-        String childrenString =
-            Joiner.on(", ")
-                .join(
-                    Iterables.transform(
-                        children,
-                        new Function<ProjectInfo, String>() {
-                          @Override
-                          public String apply(ProjectInfo info) {
-                            return info.name;
-                          }
-                        }));
         throw new CannotDeleteProjectException(
-            "Cannot delete project because it has children: " + childrenString);
+            "Cannot delete project because it has children: "
+                + children.stream().map(info -> info.name).collect(joining(",")));
       }
     } catch (PermissionBackendException e) {
       throw new CannotDeleteProjectException(