Avoid using Optionals as method parameters
As per the recommended guidelines [1], using Optional in method
parameters is discouraged. This change replaces such usages with more
appropriate alternatives
[1] https://gerrit-review.googlesource.com/Documentation/dev-crafting-changes.html#:~:text=to%20local%20variables-,Optional,-/%20Nullable
Change-Id: Ib80e35da25d652cdc2329cbf7c719fdb0da402ec
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameCommand.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameCommand.java
index 3e2c796..5ea32f6 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameCommand.java
@@ -32,7 +32,6 @@
import java.io.InputStreamReader;
import java.util.List;
import java.util.NoSuchElementException;
-import java.util.Optional;
import org.kohsuke.args4j.Argument;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -62,11 +61,10 @@
input.name = newProjectName;
ProjectResource rsrc = new ProjectResource(projectState, self.get());
try (CommandProgressMonitor monitor = new CommandProgressMonitor(stdout)) {
- Optional<ProgressMonitor> optionalProgressMonitor = Optional.of(monitor);
- renameProject.assertCanRename(rsrc, input, optionalProgressMonitor);
- List<Change.Id> changeIds = renameProject.getChanges(rsrc, optionalProgressMonitor);
+ renameProject.assertCanRename(rsrc, input, monitor);
+ List<Change.Id> changeIds = renameProject.getChanges(rsrc, monitor);
if (!renameProject.startRename(
- rsrc, input, Optional.of(monitor), continueRename(changeIds, monitor), changeIds)) {
+ rsrc, input, monitor, continueRename(changeIds, monitor), changeIds)) {
stdout.flush();
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameProject.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameProject.java
index b563109..aa85235 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameProject.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameProject.java
@@ -50,14 +50,15 @@
import com.googlesource.gerrit.plugins.renameproject.database.DatabaseRenameHandler;
import com.googlesource.gerrit.plugins.renameproject.database.IndexUpdateHandler;
import com.googlesource.gerrit.plugins.renameproject.fs.FilesystemRenameHandler;
+import com.googlesource.gerrit.plugins.renameproject.monitor.NoopMonitor;
import com.googlesource.gerrit.plugins.renameproject.monitor.ProgressMonitor;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URISyntaxException;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashSet;
import java.util.List;
-import java.util.Optional;
import java.util.Set;
import org.apache.http.auth.AuthenticationException;
import org.eclipse.jgit.errors.ConfigInvalidException;
@@ -77,13 +78,13 @@
InterruptedException,
ConfigInvalidException,
RenameRevertException {
- Optional<ProgressMonitor> optionalProgressMonitor = Optional.empty();
- assertCanRename(resource, input, optionalProgressMonitor);
- List<Id> changeIds = getChanges(resource, optionalProgressMonitor);
+ ProgressMonitor progressMonitor = NoopMonitor.INSTANCE;
+ assertCanRename(resource, input, progressMonitor);
+ List<Id> changeIds = getChanges(resource, progressMonitor);
if (startRename(
resource,
input,
- Optional.empty(),
+ progressMonitor,
(changeIds == null || changeIds.size() <= WARNING_LIMIT || input.continueWithRename),
changeIds)) {
return Response.ok("");
@@ -94,7 +95,7 @@
public boolean startRename(
ProjectResource resource,
Input input,
- Optional<ProgressMonitor> optionalProgressMonitor,
+ ProgressMonitor progressMonitor,
boolean continueRename,
List<Change.Id> changeIds)
throws ResourceConflictException,
@@ -106,13 +107,13 @@
InterruptedException {
if (!isReplica) {
if (continueRename) {
- doRename(Optional.ofNullable(changeIds), resource, input, optionalProgressMonitor);
+ doRename(changeIds, resource, input, progressMonitor);
} else {
log.debug(CANCELLATION_MSG);
return false;
}
} else {
- doRename(Optional.empty(), resource, input, Optional.empty());
+ doRename(Collections.emptyList(), resource, input, NoopMonitor.INSTANCE);
}
return true;
}
@@ -245,10 +246,10 @@
return true;
}
- void assertCanRename(ProjectResource rsrc, Input input, Optional<ProgressMonitor> opm)
+ void assertCanRename(ProjectResource rsrc, Input input, ProgressMonitor pm)
throws ResourceConflictException, BadRequestException, AuthException {
try {
- opm.ifPresent(progressMonitor -> progressMonitor.beginTask("Checking preconditions"));
+ pm.beginTask("Checking preconditions");
assertNewNameNotNull(input);
assertNewNameMatchesRegex(input);
assertRenamePermission(rsrc);
@@ -261,40 +262,36 @@
}
}
- void doRename(
- Optional<List<Change.Id>> opChangeIds,
- ProjectResource rsrc,
- Input input,
- Optional<ProgressMonitor> opm)
+ void doRename(List<Change.Id> changeIds, ProjectResource rsrc, Input input, ProgressMonitor pm)
throws InterruptedException, ConfigInvalidException, IOException, RenameRevertException {
Project.NameKey oldProjectKey = rsrc.getNameKey();
Project.NameKey newProjectKey = Project.nameKey(input.name);
Exception ex = null;
stepsPerformed.clear();
try {
- fsRenameStep(oldProjectKey, newProjectKey, opm);
+ fsRenameStep(oldProjectKey, newProjectKey, pm);
if (!isReplica) {
cacheRenameStep(rsrc.getNameKey(), newProjectKey);
List<Change.Id> updatedChangeIds =
- dbRenameStep(opChangeIds.get(), oldProjectKey, newProjectKey, opm);
+ dbRenameStep(changeIds, oldProjectKey, newProjectKey, pm);
// if the DB update is successful, update the secondary index
- indexRenameStep(updatedChangeIds, oldProjectKey, newProjectKey, opm);
+ indexRenameStep(updatedChangeIds, oldProjectKey, newProjectKey, pm);
// no need to revert this since newProjectKey will be removed from project cache before
lockUnlockProject.unlock(newProjectKey);
log.debug("Unlocked the repo {} after rename operation.", newProjectKey.get());
// flush old changeId -> Project cache for given changeIds
- changeIdProjectCache.invalidateAll(opChangeIds.get());
+ changeIdProjectCache.invalidateAll(changeIds);
pluginEvent.fire(pluginName, pluginName, oldProjectKey.get() + ":" + newProjectKey.get());
// replicate rename-project operation to other replica instances
- replicateRename(sshHelper, httpSession, input, oldProjectKey, opm);
+ replicateRename(sshHelper, httpSession, input, oldProjectKey, pm);
}
} catch (Exception e) {
if (stepsPerformed.isEmpty()) {
@@ -307,7 +304,7 @@
}
try {
revertRenameProject.performRevert(
- stepsPerformed, opChangeIds.get(), oldProjectKey, newProjectKey, opm);
+ stepsPerformed, changeIds, oldProjectKey, newProjectKey, pm);
} catch (Exception revertEx) {
log.error(
"Failed to revert renaming procedure for {}. Exception caught: {}",
@@ -324,9 +321,9 @@
}
void fsRenameStep(
- Project.NameKey oldProjectKey, Project.NameKey newProjectKey, Optional<ProgressMonitor> opm)
+ Project.NameKey oldProjectKey, Project.NameKey newProjectKey, ProgressMonitor pm)
throws IOException {
- fsHandler.rename(oldProjectKey, newProjectKey, opm);
+ fsHandler.rename(oldProjectKey, newProjectKey, pm);
logPerformedStep(Step.FILESYSTEM, newProjectKey, oldProjectKey);
}
@@ -340,9 +337,9 @@
List<Change.Id> changeIds,
Project.NameKey oldProjectKey,
Project.NameKey newProjectKey,
- Optional<ProgressMonitor> opm)
+ ProgressMonitor pm)
throws IOException, ConfigInvalidException, RenameRevertException {
- List<Change.Id> updatedChangeIds = dbHandler.rename(changeIds, newProjectKey, opm);
+ List<Change.Id> updatedChangeIds = dbHandler.rename(changeIds, newProjectKey, pm);
logPerformedStep(Step.DATABASE, newProjectKey, oldProjectKey);
return updatedChangeIds;
}
@@ -351,9 +348,9 @@
List<Change.Id> updatedChangeIds,
Project.NameKey oldProjectKey,
Project.NameKey newProjectKey,
- Optional<ProgressMonitor> opm)
+ ProgressMonitor pm)
throws InterruptedException {
- indexHandler.updateIndex(updatedChangeIds, newProjectKey, opm);
+ indexHandler.updateIndex(updatedChangeIds, newProjectKey, pm);
logPerformedStep(Step.INDEX, newProjectKey, oldProjectKey);
}
@@ -387,9 +384,8 @@
return stepsPerformed;
}
- List<Change.Id> getChanges(ProjectResource rsrc, Optional<ProgressMonitor> opm)
- throws IOException {
- opm.ifPresent(pm -> pm.beginTask("Retrieving the list of changes from DB"));
+ List<Change.Id> getChanges(ProjectResource rsrc, ProgressMonitor pm) throws IOException {
+ pm.beginTask("Retrieving the list of changes from DB");
Project.NameKey oldProjectKey = rsrc.getNameKey();
return dbHandler.getChangeIds(oldProjectKey);
}
@@ -399,12 +395,9 @@
HttpSession httpSession,
Input input,
Project.NameKey oldProjectKey,
- Optional<ProgressMonitor> opm) {
- opm.ifPresent(
- pm ->
- pm.beginTask(
- String.format(
- "Replicating the rename of %s to %s", oldProjectKey.get(), input.name)));
+ ProgressMonitor pm) {
+ pm.beginTask(
+ String.format("Replicating the rename of %s to %s", oldProjectKey.get(), input.name));
Set<String> urls = cfg.getUrls();
int nbRetries = cfg.getRenameReplicationRetries();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProject.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProject.java
index 4dbf637..299bbf7 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProject.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProject.java
@@ -27,7 +27,6 @@
import java.io.IOException;
import java.util.Collections;
import java.util.List;
-import java.util.Optional;
import org.eclipse.jgit.errors.ConfigInvalidException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -57,13 +56,13 @@
List<Id> changeIds,
Project.NameKey oldProjectKey,
Project.NameKey newProjectKey,
- Optional<ProgressMonitor> opm)
+ ProgressMonitor pm)
throws IOException, RenameRevertException, ConfigInvalidException {
- opm.ifPresent(pm -> pm.beginTask("Reverting the rename procedure."));
+ pm.beginTask("Reverting the rename procedure.");
List<Change.Id> updatedChangeIds = Collections.emptyList();
if (stepsPerformed.contains(Step.FILESYSTEM)) {
try {
- fsHandler.rename(newProjectKey, oldProjectKey, opm);
+ fsHandler.rename(newProjectKey, oldProjectKey, pm);
log.debug("Reverted the git repo name to {} successfully.", oldProjectKey.get());
} catch (IOException e) {
log.error(
@@ -77,7 +76,7 @@
}
if (stepsPerformed.contains(Step.DATABASE)) {
try {
- updatedChangeIds = dbHandler.rename(changeIds, newProjectKey, opm);
+ updatedChangeIds = dbHandler.rename(changeIds, newProjectKey, pm);
log.debug(
"Reverted the changes in DB successfully from project {} to project {}.",
newProjectKey.get(),
@@ -93,7 +92,7 @@
}
if (stepsPerformed.contains(Step.INDEX)) {
try {
- indexHandler.updateIndex(updatedChangeIds, oldProjectKey, opm);
+ indexHandler.updateIndex(updatedChangeIds, oldProjectKey, pm);
log.debug(
"Reverted the secondary index successfully from project {} to project {}.",
newProjectKey.get(),
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/DatabaseRenameHandler.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/DatabaseRenameHandler.java
index 87e6ba2..3800875 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/DatabaseRenameHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/DatabaseRenameHandler.java
@@ -39,7 +39,6 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Optional;
import java.util.Set;
import java.util.stream.Stream;
import org.eclipse.jgit.errors.ConfigInvalidException;
@@ -92,9 +91,9 @@
}
public List<Change.Id> rename(
- List<Change.Id> changes, Project.NameKey newProjectKey, Optional<ProgressMonitor> opm)
+ List<Change.Id> changes, Project.NameKey newProjectKey, ProgressMonitor pm)
throws RenameRevertException, IOException, ConfigInvalidException {
- opm.ifPresent(pm -> pm.beginTask("Updating changes in the database"));
+ pm.beginTask("Updating changes in the database");
log.debug("Updating the changes in noteDb related to project {}", oldProjectKey.get());
try {
updateWatchEntries(newProjectKey);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/IndexUpdateHandler.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/IndexUpdateHandler.java
index 81fa156..5b01391 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/IndexUpdateHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/IndexUpdateHandler.java
@@ -24,7 +24,6 @@
import com.googlesource.gerrit.plugins.renameproject.monitor.ProgressMonitor;
import java.util.ArrayList;
import java.util.List;
-import java.util.Optional;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
@@ -47,17 +46,17 @@
}
public void updateIndex(
- List<Change.Id> changeIds, Project.NameKey newProjectKey, Optional<ProgressMonitor> opm)
+ List<Change.Id> changeIds, Project.NameKey newProjectKey, ProgressMonitor pm)
throws InterruptedException {
log.debug("Starting to index {} change(s).", changeIds.size());
ExecutorService executor =
Executors.newFixedThreadPool(
config.getIndexThreads(),
new ThreadFactoryBuilder().setNameFormat("Rename-Index-%d").build());
- opm.ifPresent(pm -> pm.beginTask("Indexing changes", changeIds.size()));
+ pm.beginTask("Indexing changes", changeIds.size());
List<Callable<Boolean>> callableTasks = new ArrayList<>(changeIds.size());
for (Change.Id id : changeIds) {
- callableTasks.add(new IndexTask(id, newProjectKey, opm));
+ callableTasks.add(new IndexTask(id, newProjectKey, pm));
}
List<Future<Boolean>> tasksCompleted = executor.invokeAll(callableTasks);
executor.shutdown();
@@ -84,10 +83,9 @@
private Change.Id changeId;
private Project.NameKey newProjectKey;
- private Optional<ProgressMonitor> monitor;
+ private ProgressMonitor monitor;
- IndexTask(
- Change.Id changeId, Project.NameKey newProjectKey, Optional<ProgressMonitor> monitor) {
+ IndexTask(Change.Id changeId, Project.NameKey newProjectKey, ProgressMonitor monitor) {
this.changeId = changeId;
this.newProjectKey = newProjectKey;
this.monitor = monitor;
@@ -96,7 +94,7 @@
@Override
public Boolean call() throws Exception {
indexer.index(newProjectKey, changeId);
- monitor.ifPresent(monitor -> monitor.update(1));
+ monitor.update(1);
return Boolean.TRUE;
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/fs/FilesystemRenameHandler.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/fs/FilesystemRenameHandler.java
index aeff091..8b0b8db 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/fs/FilesystemRenameHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/fs/FilesystemRenameHandler.java
@@ -26,7 +26,6 @@
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.util.Comparator;
-import java.util.Optional;
import java.util.stream.Stream;
import org.eclipse.jgit.errors.RepositoryNotFoundException;
import org.eclipse.jgit.lib.Repository;
@@ -46,12 +45,12 @@
}
public void rename(
- Project.NameKey oldProjectKey, Project.NameKey newProjectKey, Optional<ProgressMonitor> opm)
+ Project.NameKey oldProjectKey, Project.NameKey newProjectKey, ProgressMonitor pm)
throws IOException, RepositoryNotFoundException {
try (Repository repository = repoManager.openRepository(oldProjectKey)) {
File repoFile = repository.getDirectory();
RepositoryCache.close(repository);
- opm.ifPresent(pm -> pm.beginTask("Renaming git repository"));
+ pm.beginTask("Renaming git repository");
renameGitRepository(repoFile, newProjectKey, oldProjectKey);
}
}
diff --git a/src/test/java/com/googlesource/gerrit/plugins/renameproject/RenameIT.java b/src/test/java/com/googlesource/gerrit/plugins/renameproject/RenameIT.java
index 60bff28..ae91162 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/renameproject/RenameIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/renameproject/RenameIT.java
@@ -44,6 +44,7 @@
import com.google.gerrit.server.project.ProjectState;
import com.google.inject.Inject;
import com.googlesource.gerrit.plugins.renameproject.RenameProject.Input;
+import com.googlesource.gerrit.plugins.renameproject.monitor.NoopMonitor;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
@@ -240,8 +241,7 @@
when(sshHelper.newErrorBufferStream()).thenReturn(errStream);
when(errStream.toString()).thenReturn("");
-
- renameProject.replicateRename(sshHelper, httpSession, input, project, Optional.empty());
+ renameProject.replicateRename(sshHelper, httpSession, input, project, NoopMonitor.INSTANCE);
verify(sshHelper, atMostOnce())
.executeRemoteSsh(eq(new URIish(URL)), eq(expectedCommand), eq(errStream));
}
@@ -260,7 +260,7 @@
Input input = new Input();
input.name = NEW_PROJECT_NAME;
when(sshHelper.connect(eq(urish))).thenReturn(session);
- renameProject.replicateRename(sshHelper, httpSession, input, project, Optional.empty());
+ renameProject.replicateRename(sshHelper, httpSession, input, project, NoopMonitor.INSTANCE);
String expectedCommand = PLUGIN_NAME + " " + project.get() + " " + NEW_PROJECT_NAME;
verify(sshHelper, times(3)).executeRemoteSsh(eq(urish), eq(expectedCommand), eq(errStream));
}
@@ -280,7 +280,7 @@
when(sshHelper.newErrorBufferStream()).thenReturn(errStream);
when(errStream.toString()).thenReturn("");
- renameProject.replicateRename(sshHelper, httpSession, input, project, Optional.empty());
+ renameProject.replicateRename(sshHelper, httpSession, input, project, NoopMonitor.INSTANCE);
verify(sshHelper, never())
.executeRemoteSsh(eq(new URIish(URL)), eq(expectedCommand), eq(errStream));
}
diff --git a/src/test/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProjectTest.java b/src/test/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProjectTest.java
index 8330748..b7d4ebd 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProjectTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProjectTest.java
@@ -46,7 +46,7 @@
private RevertRenameProject revertRenameProject;
private Project.NameKey oldProjectKey;
private Project.NameKey newProjectKey;
- private Optional<ProgressMonitor> pm;
+ private ProgressMonitor pm;
private ProjectResource oldRsrc;
@Before
@@ -57,7 +57,7 @@
oldProjectKey = project;
newProjectKey = Project.nameKey(NEW_PROJECT_NAME);
- pm = Optional.of(Mockito.mock(ProgressMonitor.class));
+ pm = Mockito.mock(ProgressMonitor.class);
oldRsrc = Mockito.mock(ProjectResource.class);
when(oldRsrc.getNameKey()).thenReturn(oldProjectKey);