diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetOwner.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetOwner.java
index de8ccc2..1375f83 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetOwner.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetOwner.java
@@ -55,8 +55,7 @@
     if (owner != null) {
       GroupDescription.Basic group = groups.parseId(owner);
       return Response.<GroupInfo> ok(json.format(group));
-    } else {
-      return Response.none();
     }
+    return Response.none();
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/PutEmail.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/PutEmail.java
index 8a9389e..61897aa 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/PutEmail.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/PutEmail.java
@@ -85,9 +85,8 @@
     if (Strings.emptyToNull(input.email) == null) {
       if (Strings.emptyToNull(email) == null) {
         return Response.none();
-      } else {
-        return deleteEmail.get().apply(rsrc.getUser(), email);
       }
+      return deleteEmail.get().apply(rsrc.getUser(), email);
     } else if (email != null && email.equals(input.email)) {
       return Response.ok(email);
     } else {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ServiceUserMenu.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ServiceUserMenu.java
index 859a773..3c227b3 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ServiceUserMenu.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ServiceUserMenu.java
@@ -60,9 +60,8 @@
       CapabilityControl ctl = userProvider.get().getCapabilities();
       return ctl.canPerform(pluginName + "-" + CreateServiceUserCapability.ID)
           || ctl.canAdministrateServer();
-    } else {
-      return false;
     }
+    return false;
   }
 
   private boolean hasServiceUser() {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ValidateServiceUserCommits.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ValidateServiceUserCommits.java
index c0684e7..0cce823 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ValidateServiceUserCommits.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ValidateServiceUserCommits.java
@@ -59,16 +59,15 @@
               + "all service user owner accounts are inactive.",
               receiveEvent.commit.getId().getName(), committer.getName(),
               committer.getEmailAddress()));
-        } else {
-          AccountState creator = accountCache.get(
-              new Account.Id(serviceUser.createdBy._accountId));
-          if (creator == null || !creator.getAccount().isActive()) {
-            throw new CommitValidationException(String.format(
-                "Commit %s of service user %s (%s) is rejected because "
-                + "the account of the service creator is inactive.",
-                receiveEvent.commit.getId().getName(), committer.getName(),
-                committer.getEmailAddress()));
-          }
+        }
+        AccountState creator = accountCache.get(
+            new Account.Id(serviceUser.createdBy._accountId));
+        if (creator == null || !creator.getAccount().isActive()) {
+          throw new CommitValidationException(String.format(
+              "Commit %s of service user %s (%s) is rejected because "
+              + "the account of the service creator is inactive.",
+              receiveEvent.commit.getId().getName(), committer.getName(),
+              committer.getEmailAddress()));
         }
       }
     } catch (OrmException e) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/client/ServiceUserInfo.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/client/ServiceUserInfo.java
index b412e95..2e058e9 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/client/ServiceUserInfo.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/client/ServiceUserInfo.java
@@ -20,13 +20,11 @@
   public final String getDisplayName() {
     if (created_by().username() != null) {
       return created_by().username();
-    } else {
-      if (created_by()._account_id() != -1) {
-        return Integer.toString(created_by()._account_id());
-      } else {
-        return "N/A";
-      }
     }
+    if (created_by()._account_id() != -1) {
+      return Integer.toString(created_by()._account_id());
+    }
+    return "N/A";
   }
 
   public final native int _account_id() /*-{ return this._account_id || 0; }-*/;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/client/ServiceUserScreen.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/client/ServiceUserScreen.java
index 1886c72..dfcf2ef 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/client/ServiceUserScreen.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/client/ServiceUserScreen.java
@@ -254,9 +254,8 @@
       });
       p.add(generate);
       return p;
-    } else {
-      return new CopyableLabel("");
     }
+    return new CopyableLabel("");
   }
 
   private Widget createOwnerWidget(ServiceUserInfo info, boolean allowOwner) {
@@ -303,13 +302,11 @@
       }
       ownerWidget.setWarning(ownerWarning.toString());
       return ownerWidget;
-    } else {
-      if (info.owner() != null && info.owner().url() != null) {
-        return new Anchor(info.owner().name(), info.owner().url());
-      } else {
-        return new Label(info.owner() != null ? info.owner().name() : "");
-      }
     }
+    if (info.owner() != null && info.owner().url() != null) {
+      return new Anchor(info.owner().name(), info.owner().url());
+    }
+    return new Label(info.owner() != null ? info.owner().name() : "");
   }
 
   private static class MyTable extends FlexTable {
