diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/ImagareMenu.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/ImagareMenu.java
index 63f4689..804538e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/ImagareMenu.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/ImagareMenu.java
@@ -27,7 +27,7 @@
 
   @Inject
   public ImagareMenu(@PluginName String pluginName) {
-    menuEntries = new ArrayList<TopMenu.MenuEntry>();
+    menuEntries = new ArrayList<>();
     menuEntries.add(new MenuEntry("Tools", Collections
         .singletonList(new MenuItem("Image Upload", "#/x/" + pluginName + "/upload", ""))));
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/PostImage.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/PostImage.java
index 5d9eb8c..c41e75a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/PostImage.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/PostImage.java
@@ -144,7 +144,7 @@
         if (!receivedMimeType.equals(mimeType.toString())) {
           throw new BadRequestException("incorrect mime type");
         }
-        return new ImageInfo(storeImage(pc, mimeType, content, fileName));
+        return new ImageInfo(storeImage(pc, content, fileName));
       } else {
         throw new MethodNotAllowedException("unsupported encoding");
       }
@@ -153,9 +153,8 @@
     }
   }
 
-  private String storeImage(ProjectControl pc, MimeType mimeType,
-      byte[] content, String fileName) throws AuthException, IOException,
-      ResourceConflictException {
+  private String storeImage(ProjectControl pc, byte[] content, String fileName)
+      throws AuthException, IOException, ResourceConflictException {
     long maxSize = getEffectiveMaxObjectSizeLimit(pc.getProjectState());
     // maxSize == 0 means that there is no limit
     if (maxSize > 0 && content.length > maxSize) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/PutConfig.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/PutConfig.java
index 1df30b0..026d7aa 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/PutConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/PutConfig.java
@@ -52,8 +52,7 @@
 
   @Inject
   PutConfig(PluginConfigFactory cfgFactory, SitePaths sitePaths,
-      @PluginName String pluginName, ProjectCache projectCache)
-      throws IOException, ConfigInvalidException {
+      @PluginName String pluginName, ProjectCache projectCache) {
     this.cfgFactory = cfgFactory;
     this.sitePaths = sitePaths;
     this.pluginName = pluginName;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/client/ImageUploadScreen.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/client/ImageUploadScreen.java
index 94545c6..ab9668a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/client/ImageUploadScreen.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/client/ImageUploadScreen.java
@@ -111,7 +111,7 @@
   }
 
   private static Map<String, List<String>> getParameters() {
-    Map<String, List<String>> parameter = new HashMap<String, List<String>>();
+    Map<String, List<String>> parameter = new HashMap<>();
 
     if (!Window.Location.getHash().contains("?")) {
       return parameter;
@@ -128,7 +128,7 @@
 
       List<String> values = parameter.get(kv[0]);
       if (values == null) {
-        values = new ArrayList<String>();
+        values = new ArrayList<>();
         parameter.put(kv[0], values);
       }
       values.add(kv.length > 1 ? URL.decodeQueryString(kv[1]) : "");
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/client/OnEditEnabler.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/client/OnEditEnabler.java
index c0de2ee..60816e8 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/client/OnEditEnabler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/client/OnEditEnabler.java
@@ -46,11 +46,11 @@
    MouseUpHandler, ChangeHandler, ValueChangeHandler<Object> {
 
   private final FocusWidget widget;
-  private Map<TextBoxBase, String> strings = new HashMap<TextBoxBase, String>();
+  private Map<TextBoxBase, String> strings = new HashMap<>();
   private String originalValue;
 
 
-  // The first parameter to the contructors must be the FocusWidget to enable,
+  // The first parameter to the constructors must be the FocusWidget to enable,
   // subsequent parameters are widgets to listenTo.
 
   public OnEditEnabler(final FocusWidget w, final TextBoxBase tb) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/client/UploadByFileSelection.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/client/UploadByFileSelection.java
index b202cd0..516644b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/client/UploadByFileSelection.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/client/UploadByFileSelection.java
@@ -20,10 +20,6 @@
 
 public class UploadByFileSelection extends HorizontalPanel {
   UploadByFileSelection() {
-    this("All-Projects");
-  }
-
-  UploadByFileSelection(String project) {
     init0();
 
     FormPanel form = new FormPanel();
