Avoid work in Optional.orElse() calls Any code inside the orElse() will always be called, even if the result isn't used because the optional is present. This is wasteful at a minimum and can be actively harmful (as seen in [1]) because of side effects or performance impacts. Fix that by replacing all orElse() calls that create new instances or do non-constant work with a call to orElseGet(). It would be nice if there were an ErrorProne checker for this, but one doesn't exist yet. [1] https://gerrit-review.googlesource.com/c/gerrit/+/417915/comment/0ea287cd_bfecb7f2/ Release-Notes: skip Change-Id: I2d3d59da88cd04a2e589b7255fc0877719a57432
diff --git a/src/main/java/com/googlesource/gerrit/plugins/manager/repository/CorePluginsRepository.java b/src/main/java/com/googlesource/gerrit/plugins/manager/repository/CorePluginsRepository.java index 21e2a8d..2e175ea 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/manager/repository/CorePluginsRepository.java +++ b/src/main/java/com/googlesource/gerrit/plugins/manager/repository/CorePluginsRepository.java
@@ -77,13 +77,14 @@ "", pluginUrl.toString()); }) - .orElse( - new PluginInfo( - dropSuffix(entryName.getFileName().toString(), ".jar"), - "", - "", - "", - pluginUrl.toString())); + .orElseGet( + () -> + new PluginInfo( + dropSuffix(entryName.getFileName().toString(), ".jar"), + "", + "", + "", + pluginUrl.toString())); } catch (IOException e) { logger.atSevere().withCause(e).log("Unable to open plugin %s", pluginUrl); return null;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/manager/repository/JenkinsCiPluginsRepository.java b/src/main/java/com/googlesource/gerrit/plugins/manager/repository/JenkinsCiPluginsRepository.java index 2260a65..76254a6 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/manager/repository/JenkinsCiPluginsRepository.java +++ b/src/main/java/com/googlesource/gerrit/plugins/manager/repository/JenkinsCiPluginsRepository.java
@@ -119,7 +119,7 @@ Optional<SmartJson> buildExecution = tryGetJson(url + "/api/json"); Optional<JsonArray> artifacts = buildExecution.map(json -> json.get("artifacts").get().getAsJsonArray()); - if (artifacts.orElse(new JsonArray()).size() == 0) { + if (artifacts.orElseGet(() -> new JsonArray()).size() == 0) { return Optional.empty(); }