diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/rtc/InitRTC.java b/src/main/java/com/googlesource/gerrit/plugins/its/rtc/InitRTC.java
index f219919..9acc3de 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/rtc/InitRTC.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/rtc/InitRTC.java
@@ -34,7 +34,6 @@
 /** Initialize the GitRepositoryManager configuration section. */
 @Singleton
 class InitRTC extends InitIts {
-  private static final String COMMENT_LINK_SECTION = "commentLink";
   private final String pluginName;
   private final InitFlags flags;
   private Section rtc;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/rtc/RTCItsFacade.java b/src/main/java/com/googlesource/gerrit/plugins/its/rtc/RTCItsFacade.java
index 29bf754..e8526a1 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/rtc/RTCItsFacade.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/rtc/RTCItsFacade.java
@@ -100,7 +100,7 @@
     return "{\"status\"=\"ok\",\"system\"=\"RTC\",}";
   }
 
-  private RTCClient client() throws IOException {
+  private RTCClient client() {
 
     if (client == null) {
       client = injector.getInstance(RTCClient.class);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/rtc/RTCModule.java b/src/main/java/com/googlesource/gerrit/plugins/its/rtc/RTCModule.java
index f910608..92e3789 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/rtc/RTCModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/rtc/RTCModule.java
@@ -14,21 +14,16 @@
 package com.googlesource.gerrit.plugins.its.rtc;
 
 import java.util.Set;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
 
 import org.eclipse.jgit.lib.Config;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.gerrit.common.EventListener;
 import com.google.gerrit.extensions.annotations.Exports;
 import com.google.gerrit.extensions.annotations.PluginName;
-import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.gerrit.server.config.GerritServerConfig;
 import com.google.gerrit.server.config.PluginConfigFactory;
 import com.google.gerrit.server.config.ProjectConfigEntry;
-import com.google.gerrit.server.git.validators.CommitValidationListener;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 
@@ -39,7 +34,6 @@
 public class RTCModule extends AbstractModule {
 
   private static final Logger LOG = LoggerFactory.getLogger(RTCModule.class);
-  private static final int THREAD_POOL_EXECUTORS = 10;
 
   private final String pluginName;
   private final Config gerritConfig;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/rtc/api/RtcObject.java b/src/main/java/com/googlesource/gerrit/plugins/its/rtc/api/RtcObject.java
index 83f8386..76a90b0 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/rtc/api/RtcObject.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/rtc/api/RtcObject.java
@@ -20,11 +20,11 @@
 public class RtcObject {
   private String rdf;
   private String etag;
-  
+
   public RtcObject() {
     this(null, null);
   }
-  
+
   protected RtcObject(String rdf) {
     this(rdf, Transport.etag.get());
   }
@@ -38,11 +38,12 @@
   public String getRdf() {
     return rdf;
   }
-  
+
   public String getEtag() {
     return etag;
   }
-  
+
+  @Override
   public String toString() {
     return new Gson().toJson(this);
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/rtc/network/CachableResourcesFactory.java b/src/main/java/com/googlesource/gerrit/plugins/its/rtc/network/CachableResourcesFactory.java
index fa4a897..3d0229a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/rtc/network/CachableResourcesFactory.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/rtc/network/CachableResourcesFactory.java
@@ -22,12 +22,12 @@
 
   public final Map<Class<?>, InternalFactory<?>> factories;
   private Transport transport;
- 
+
   public CachableResourcesFactory(Transport transport) {
     this.transport = transport;
-    this.factories = new ConcurrentHashMap<Class<?>, InternalFactory<?>>();
+    this.factories = new ConcurrentHashMap<>();
   }
-  
+
   @SuppressWarnings("unchecked")
   public <T> T get(String url, Class<T> clazz) throws IOException {
     return (T) getFactory(clazz).get(url);
@@ -51,19 +51,19 @@
     private InternalFactory(Transport transport, Class<T> clazz) {
       this.transport = transport;
       this.clazz = clazz;
-      this.cache = new ConcurrentHashMap<String, T>();
+      this.cache = new ConcurrentHashMap<>();
     }
-    
+
     private T get(final String url) throws IOException {
       T result = cache.get(url);
       if (result == null) {
         result = streamResourceFrom(url, clazz);
         cache.put(url, result);
       }
-      
+
       return result;
     }
-    
+
     private T streamResourceFrom(final String url, final Class<T> clazz) throws IOException {
       return transport.get(url+".json", clazz);
     }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/rtc/network/RTCClient.java b/src/main/java/com/googlesource/gerrit/plugins/its/rtc/network/RTCClient.java
index cf21e55..0d7ad35 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/rtc/network/RTCClient.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/rtc/network/RTCClient.java
@@ -158,14 +158,17 @@
     try {
       TrustManager[] trustAllCerts =
           new TrustManager[] {new X509TrustManager() {
+            @Override
             public X509Certificate[] getAcceptedIssuers() {
               return new X509Certificate[0];
             }
 
+            @Override
             public void checkClientTrusted(X509Certificate[] certs,
                 String authType) {
             }
 
+            @Override
             public void checkServerTrusted(X509Certificate[] certs,
                 String authType) {
             }
@@ -210,7 +213,7 @@
     return transport;
   }
 
-  public void setLoginCredentials(String rtcUser, String rtcPassword) throws IOException {
+  public void setLoginCredentials(String rtcUser, String rtcPassword) {
     this.rtcUser = rtcUser;
     this.rtcPassword = rtcPassword;
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/rtc/network/RTCHttpParams.java b/src/main/java/com/googlesource/gerrit/plugins/its/rtc/network/RTCHttpParams.java
index c39b56d..4758ede 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/rtc/network/RTCHttpParams.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/rtc/network/RTCHttpParams.java
@@ -74,7 +74,7 @@
   };
 
   private static final HashMap<String, ParameterParser> TYPES =
-      new HashMap<String, RTCHttpParams.ParameterParser>();
+      new HashMap<>();
   static {
 
     TYPES.put(CoreConnectionPNames.SO_TIMEOUT, TYPE_INT);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/rtc/network/Transport.java b/src/main/java/com/googlesource/gerrit/plugins/its/rtc/network/Transport.java
index 58d0e5b..98abcb6 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/rtc/network/Transport.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/rtc/network/Transport.java
@@ -56,7 +56,7 @@
 
   private static final Log log = LogFactory.getLog(Transport.class);
 
-  public static final ThreadLocal<String> etag = new ThreadLocal<String>();
+  public static final ThreadLocal<String> etag = new ThreadLocal<>();
 
   protected HttpClient httpclient;
   protected Gson gson;
@@ -185,7 +185,7 @@
   }
 
   private boolean assertValidContentType(String acceptType,
-      String responseContentTypeString) throws IOException {
+      String responseContentTypeString) {
     if (acceptType == null) {
       return true;
     }
@@ -259,22 +259,21 @@
         etagHeader.getValue().length() - 1);
   }
 
-  private HttpGet newHttpGet(final String path) throws MalformedURLException {
+  private HttpGet newHttpGet(final String path) {
     HttpGet get = new HttpGet(toUri(path));
     get.setParams(httpParams);
     return get;
   }
 
-  private HttpPost newHttpPost(final String path) throws MalformedURLException {
+  private HttpPost newHttpPost(final String path) {
     return new HttpPost(toUri(path));
   }
 
-  private HttpPatch newHttpPatch(final String path)
-      throws MalformedURLException {
+  private HttpPatch newHttpPatch(final String path) {
     return new HttpPatch(toUri(path));
   }
 
-  private String toUri(final String path) throws MalformedURLException {
+  private String toUri(final String path) {
     if (path.startsWith(baseUrl))
       return path;
     else
