diff --git a/external_plugin_deps.bzl b/external_plugin_deps.bzl
index 3514181..9097a8d 100644
--- a/external_plugin_deps.bzl
+++ b/external_plugin_deps.bzl
@@ -135,14 +135,17 @@
     sha1 = '548d4a1177adad8242fe03a6930c335669d669ad',
   )
 
+  # Lucene version must be aligned with the version in core Gerrit
+  LUCENE_VERS = "5.5.4"
+
   maven_jar(
     name = 'lucene-highlighter',
-    artifact = 'org.apache.lucene:lucene-highlighter:5.5.4',
+    artifact = 'org.apache.lucene:lucene-highlighter:' + LUCENE_VERS,
     sha1 = '433f53f03f1b14337c08d54e507a5410905376fa',
   )
 
   maven_jar(
     name = 'lucene-memory',
-    artifact = 'org.apache.lucene:lucene-memory:5.5.4',
+    artifact = 'org.apache.lucene:lucene-memory:' + LUCENE_VERS,
     sha1 = '4dbdc2e1a24837722294762a9edb479f79092ab9',
   )
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitblit/GerritWicketFilter.java b/src/main/java/com/googlesource/gerrit/plugins/gitblit/GerritWicketFilter.java
index 003b29b..90fd65d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitblit/GerritWicketFilter.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitblit/GerritWicketFilter.java
@@ -24,7 +24,6 @@
 import com.google.common.collect.ImmutableSet;
 import com.google.gerrit.extensions.registration.DynamicItem;
 import com.google.gerrit.httpd.WebSession;
-import com.google.gerrit.server.config.SitePaths;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import com.googlesource.gerrit.plugins.gitblit.auth.GerritAuthFilter;
@@ -63,7 +62,6 @@
       DynamicItem<WebSession> webSession,
       GerritAuthFilter gerritAuthFilter,
       GerritGitBlitContext gerritGitblitContext,
-      SitePaths sitePaths,
       IStoredSettings settings,
       IRuntimeManager runtimeManager,
       IRepositoryManager repositoryManager,
@@ -124,7 +122,7 @@
         httpServletRequest = new StaticHttpServletRequest(httpServletRequest);
       }
       super.doFilter(httpServletRequest, response, chain);
-    } else if (gerritAuthFilter.doFilter(webSession, httpServletRequest, response, chain)) {
+    } else if (gerritAuthFilter.doFilter(webSession, httpServletRequest, response)) {
       super.doFilter(httpServletRequest, response, chain);
     }
   }
@@ -137,9 +135,8 @@
     int requestPathLastDot = requestPathInfo.lastIndexOf('.');
     if (requestPathLastDot < 0) {
       return "";
-    } else {
-      return requestPathInfo.substring(requestPathLastDot + 1);
     }
+    return requestPathInfo.substring(requestPathLastDot + 1);
   }
 
   class CustomFilterConfig implements FilterConfig {
@@ -147,7 +144,7 @@
     private FilterConfig parentFilterConfig;
 
     private HashMap<String, String> getGitblitInitParams() {
-      HashMap<String, String> props = new HashMap<String, String>();
+      HashMap<String, String> props = new HashMap<>();
       props.put("filterMappingUrlPattern", "/*");
       props.put("ignorePaths", "pages/,feed/");
       return props;
@@ -157,20 +154,24 @@
       this.parentFilterConfig = parent;
     }
 
+    @Override
     public String getFilterName() {
       return "gerritWicketFilter";
     }
 
+    @Override
     public ServletContext getServletContext() {
       return parentFilterConfig.getServletContext();
     }
 
+    @Override
     public String getInitParameter(String paramString) {
       return gitBlitParams.get(paramString);
     }
 
+    @Override
     public Enumeration<String> getInitParameterNames() {
-      return new Vector<String>(gitBlitParams.keySet()).elements();
+      return new Vector<>(gitBlitParams.keySet()).elements();
     }
 
     class ParamEnum implements Enumeration<String> {
@@ -182,10 +183,12 @@
         this.iter = this.items.iterator();
       }
 
+      @Override
       public boolean hasMoreElements() {
         return iter.hasNext();
       }
 
+      @Override
       public String nextElement() {
         return iter.next();
       }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitServletModule.java b/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitServletModule.java
index e39e612..91197b7 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitServletModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitServletModule.java
@@ -49,14 +49,11 @@
 import com.gitblit.utils.WorkQueue;
 import com.gitblit.utils.XssFilter;
 import com.google.gerrit.extensions.annotations.PluginName;
-import com.google.gerrit.server.config.GerritServerConfig;
-import com.google.gerrit.server.config.SitePaths;
 import com.google.inject.Inject;
 import com.google.inject.servlet.ServletModule;
 import com.googlesource.gerrit.plugins.gitblit.app.GitBlitSettings;
 import com.googlesource.gerrit.plugins.gitblit.app.ReallyNullTicketService;
 import com.googlesource.gerrit.plugins.gitblit.auth.GerritToGitBlitUserService;
-import org.eclipse.jgit.lib.Config;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -64,8 +61,7 @@
   private static final Logger log = LoggerFactory.getLogger(GitBlitServletModule.class);
 
   @Inject
-  public GitBlitServletModule(
-      @PluginName String name, @GerritServerConfig Config gerritConfig, SitePaths sitePaths) {
+  public GitBlitServletModule(@PluginName String name) {
     log.info("Create GitBlitModule with name='" + name);
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitUrlsConfig.java b/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitUrlsConfig.java
index 166cb9c..e865e03 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitUrlsConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitUrlsConfig.java
@@ -91,9 +91,8 @@
             e);
       }
       return InetAddress.getLocalHost().getCanonicalHostName();
-    } else {
-      return hostname;
     }
+    return hostname;
   }
 
   public String getGitHttpUrl() throws UnknownHostException {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitblit/WrappedPagesFilter.java b/src/main/java/com/googlesource/gerrit/plugins/gitblit/WrappedPagesFilter.java
index 2e2d6a8..d7bb00a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitblit/WrappedPagesFilter.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitblit/WrappedPagesFilter.java
@@ -52,7 +52,7 @@
   @Override
   public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
       throws IOException, ServletException {
-    if (gerritAuthFilter.doFilter(webSession, request, response, chain)) {
+    if (gerritAuthFilter.doFilter(webSession, request, response)) {
       super.doFilter(request, response, chain);
     }
   }
@@ -60,7 +60,9 @@
   @Override
   protected UserModel getUser(HttpServletRequest httpRequest) {
     UserModel userModel = gerritAuthFilter.getUser(httpRequest);
-    if (userModel == null) return super.getUser(httpRequest);
-    else return userModel;
+    if (userModel == null) {
+      return super.getUser(httpRequest);
+    }
+    return userModel;
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitblit/WrappedSyndicationFilter.java b/src/main/java/com/googlesource/gerrit/plugins/gitblit/WrappedSyndicationFilter.java
index bf41417..e3a70ca 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitblit/WrappedSyndicationFilter.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitblit/WrappedSyndicationFilter.java
@@ -65,7 +65,7 @@
   @Override
   public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
       throws IOException, ServletException {
-    if (gerritAuthFilter.doFilter(webSession, request, response, chain)) {
+    if (gerritAuthFilter.doFilter(webSession, request, response)) {
       super.doFilter(
           new SyndicationHttpServletRequest((HttpServletRequest) request), response, chain);
     }
@@ -74,7 +74,9 @@
   @Override
   protected UserModel getUser(HttpServletRequest httpRequest) {
     UserModel userModel = gerritAuthFilter.getUser(httpRequest);
-    if (userModel == null) return super.getUser(httpRequest);
-    else return userModel;
+    if (userModel == null) {
+      return super.getUser(httpRequest);
+    }
+    return userModel;
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitblit/app/GitBlitSettings.java b/src/main/java/com/googlesource/gerrit/plugins/gitblit/app/GitBlitSettings.java
index a36382b..3dcc3d5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitblit/app/GitBlitSettings.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitblit/app/GitBlitSettings.java
@@ -69,8 +69,7 @@
   }
 
   private void load() throws IOException {
-    InputStream resin = openPropertiesFile();
-    try {
+    try (InputStream resin = openPropertiesFile()) {
       properties = new Properties();
       properties.load(resin);
       properties.put("git.repositoriesFolder", getBasePath().getAbsolutePath());
@@ -85,25 +84,20 @@
         properties.put(
             "web.otherUrls", (config.getGitHttpUrl() + " " + config.getGitSshUrl()).trim());
       }
-    } finally {
-      resin.close();
     }
   }
 
   private InputStream openPropertiesFile() {
-    InputStream gitblitPropertiesIn;
     gitblitPropertiesFile = new File(etcDir, GITBLIT_GERRIT_PROPERTIES);
     if (gitblitPropertiesFile.exists()) {
       try {
-        gitblitPropertiesIn = new FileInputStream(gitblitPropertiesFile);
+        return new FileInputStream(gitblitPropertiesFile);
       } catch (FileNotFoundException e) {
         // this would never happen as we checked for file existence before
         throw new IllegalStateException(e);
       }
-    } else {
-      gitblitPropertiesIn = getClass().getResourceAsStream(GITBLIT_GERRIT_PROPERTIES);
     }
-    return gitblitPropertiesIn;
+    return getClass().getResourceAsStream(GITBLIT_GERRIT_PROPERTIES);
   }
 
   public File getBasePath() {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritAuthFilter.java b/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritAuthFilter.java
index c882d1f..c1f8fed 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritAuthFilter.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritAuthFilter.java
@@ -25,8 +25,6 @@
 import com.google.inject.Singleton;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
@@ -70,11 +68,8 @@
   }
 
   public boolean doFilter(
-      DynamicItem<WebSession> webSession,
-      ServletRequest request,
-      ServletResponse response,
-      FilterChain chain)
-      throws IOException, ServletException {
+      DynamicItem<WebSession> webSession, ServletRequest request, ServletResponse response)
+      throws IOException {
     HttpServletRequest httpRequest = (HttpServletRequest) request;
 
     String hdr = httpRequest.getHeader("Authorization");
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserModel.java b/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserModel.java
index d33c48b..f00cefc 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserModel.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserModel.java
@@ -44,8 +44,8 @@
   public String emailAddress;
   public boolean canAdmin;
   public boolean excludeFromFederation;
-  public final Set<String> repositories = new HashSet<String>();
-  public final Set<TeamModel> teams = new HashSet<TeamModel>();
+  public final Set<String> repositories = new HashSet<>();
+  public final Set<TeamModel> teams = new HashSet<>();
 
   private final transient Provider<CurrentUser> userProvider;
   private final transient PermissionBackend permissionBackend;
@@ -97,6 +97,7 @@
         return projectPermissions.testOrFalse(ProjectPermission.RUN_UPLOAD_PACK);
       case PUSH:
         return projectPermissions.testOrFalse(ProjectPermission.RUN_RECEIVE_PACK);
+      case NONE:
       default:
         return true;
     }
@@ -131,6 +132,7 @@
     repositories.remove(name.toLowerCase());
   }
 
+  @Override
   public boolean isTeamMember(String teamname) {
     for (TeamModel team : teams) {
       if (team.name.equalsIgnoreCase(teamname)) {
@@ -140,6 +142,7 @@
     return false;
   }
 
+  @Override
   public TeamModel getTeam(String teamname) {
     if (teams == null) {
       return null;
@@ -157,6 +160,7 @@
     return username;
   }
 
+  @Override
   public String getDisplayName() {
     if (StringUtils.isEmpty(displayName)) {
       return username;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserService.java b/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserService.java
index ed2ac6f..3dd0bfa 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserService.java
@@ -139,9 +139,8 @@
 
     if (Strings.isNullOrEmpty(gerritUsername) || Strings.isNullOrEmpty(gerritToken)) {
       return GerritToGitBlitUserModel.getAnonymous();
-    } else {
-      return authenticateSSO(gerritUsername, gerritToken);
     }
+    return authenticateSSO(gerritUsername, gerritToken);
   }
 
   @Override
