diff --git a/src/main/java/com/googlesource/gerrit/plugins/automerger/AllConfigDownstreamAction.java b/src/main/java/com/googlesource/gerrit/plugins/automerger/AllConfigDownstreamAction.java
index a28c050..ca803d8 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/automerger/AllConfigDownstreamAction.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/automerger/AllConfigDownstreamAction.java
@@ -22,7 +22,6 @@
 import com.google.gerrit.server.project.BranchResource;
 import com.google.inject.Inject;
 import java.io.IOException;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import org.eclipse.jgit.errors.ConfigInvalidException;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/automerger/ConfigLoader.java b/src/main/java/com/googlesource/gerrit/plugins/automerger/ConfigLoader.java
index 1a31d16..703ad75 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/automerger/ConfigLoader.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/automerger/ConfigLoader.java
@@ -215,7 +215,7 @@
 
   public Set<String> getAllDownstreamBranches(String branch, String project)
       throws RestApiException, IOException, ConfigInvalidException {
-    Set<String> downstreamBranches = new HashSet<String>();
+    Set<String> downstreamBranches = new HashSet<>();
     Set<String> immediateDownstreams = getDownstreamBranches(branch, project);
     downstreamBranches.addAll(immediateDownstreams);
     for (String immediateDownstream : immediateDownstreams) {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/automerger/ConfigLoaderIT.java b/src/test/java/com/googlesource/gerrit/plugins/automerger/ConfigLoaderIT.java
index 5c5466f..75de6b4 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/automerger/ConfigLoaderIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/automerger/ConfigLoaderIT.java
@@ -169,7 +169,7 @@
   @Test
   public void getAllDownstreamBranchesTest() throws Exception {
     defaultSetup("automerger.config");
-    Set<String> expectedBranches = new HashSet<String>();
+    Set<String> expectedBranches = new HashSet<>();
     expectedBranches.add("ds_two");
     expectedBranches.add("ds_three");
     assertThat(configLoader.getAllDownstreamBranches("master", "platform/some/project"))
@@ -213,19 +213,19 @@
   @Test
   public void maxAutomergeVoteDisabledTest() throws Exception {
     defaultSetup("automerger.config");
-    assertThat(configLoader.maxAutomergeVoteDisabled()).isEqualTo(false);
+    assertThat(configLoader.maxAutomergeVoteDisabled()).isFalse();
   }
 
   @Test
   public void maxAutomergeVoteDisabledTest_isDisabled() throws Exception {
     defaultSetup("alternate.config");
-    assertThat(configLoader.maxAutomergeVoteDisabled()).isEqualTo(true);
+    assertThat(configLoader.maxAutomergeVoteDisabled()).isTrue();
   }
 
   @Test
   public void minAutomergeVoteDisabledTest() throws Exception {
     defaultSetup("automerger.config");
-    assertThat(configLoader.minAutomergeVoteDisabled()).isEqualTo(false);
+    assertThat(configLoader.minAutomergeVoteDisabled()).isFalse();
   }
 
   private void setupTestRepo(
