Merge branch 'stable-3.0'

* stable-3.0:
  Bump Bazel version to 2.2.0

Adapt to project cache returning Optional in latest master. Switch to
snapshot API so this builds again.

Change-Id: I0d41d29035384fa6f5d025728f1d8e1f2b602949
diff --git a/.bazelversion b/.bazelversion
index 7ec1d6d..ccbccc3 100644
--- a/.bazelversion
+++ b/.bazelversion
@@ -1 +1 @@
-2.1.0
+2.2.0
diff --git a/WORKSPACE b/WORKSPACE
index 0b9c8b9..872b0e9 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -8,22 +8,22 @@
 )
 
 # Release Plugin API
-load(
-    "@com_googlesource_gerrit_bazlets//:gerrit_api.bzl",
-    "gerrit_api",
-)
-
-# Snapshot Plugin API
 #load(
-#    "@com_googlesource_gerrit_bazlets//:gerrit_api_maven_local.bzl",
-#    "gerrit_api_maven_local",
+#    "@com_googlesource_gerrit_bazlets//:gerrit_api.bzl",
+#    "gerrit_api",
 #)
 
+# Snapshot Plugin API
+load(
+    "@com_googlesource_gerrit_bazlets//:gerrit_api_maven_local.bzl",
+    "gerrit_api_maven_local",
+)
+
 # Load release Plugin API
-gerrit_api()
+#gerrit_api()
 
 # Load snapshot Plugin API
-#gerrit_api_maven_local()
+gerrit_api_maven_local()
 
 load(":external_plugin_deps.bzl", "external_plugin_deps")
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/lfs/LfsApiServlet.java b/src/main/java/com/googlesource/gerrit/plugins/lfs/LfsApiServlet.java
index 772a536..59d4e97 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/lfs/LfsApiServlet.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/lfs/LfsApiServlet.java
@@ -31,6 +31,7 @@
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import com.googlesource.gerrit.plugins.lfs.auth.LfsAuthUserProvider;
+import java.util.Optional;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import org.eclipse.jgit.lfs.errors.LfsException;
@@ -82,13 +83,14 @@
     }
     String projName = matcher.group(1);
     Project.NameKey project = Project.nameKey(ProjectUtil.stripGitSuffix(projName));
-    ProjectState state = projectCache.get(project);
-    if (state == null || state.getProject().getState() == HIDDEN) {
+    Optional<ProjectState> state = projectCache.get(project);
+    if (!state.isPresent() || state.get().getProject().getState() == HIDDEN) {
       throw new LfsRepositoryNotFound(project.get());
     }
-    authorizeUser(userProvider.getUser(auth, projName, request.getOperation()), state, request);
+    authorizeUser(
+        userProvider.getUser(auth, projName, request.getOperation()), state.get(), request);
 
-    if (request.isUpload() && state.getProject().getState() == READ_ONLY) {
+    if (request.isUpload() && state.get().getProject().getState() == READ_ONLY) {
       throw new LfsRepositoryReadOnly(project.get());
     }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/lfs/locks/LfsLocksAction.java b/src/main/java/com/googlesource/gerrit/plugins/lfs/locks/LfsLocksAction.java
index c2d7257..e8d46c2 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/lfs/locks/LfsLocksAction.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/lfs/locks/LfsLocksAction.java
@@ -23,6 +23,7 @@
 
 import com.google.common.flogger.FluentLogger;
 import com.google.gerrit.entities.Project;
+import com.google.gerrit.exceptions.StorageException;
 import com.google.gerrit.extensions.restapi.AuthException;
 import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.ProjectUtil;
@@ -34,6 +35,7 @@
 import com.googlesource.gerrit.plugins.lfs.auth.LfsAuthUserProvider;
 import com.googlesource.gerrit.plugins.lfs.locks.LfsLocksHandler.LfsLockExistsException;
 import java.io.IOException;
+import java.util.Optional;
 import org.eclipse.jgit.lfs.errors.LfsException;
 import org.eclipse.jgit.lfs.errors.LfsRepositoryNotFound;
 import org.eclipse.jgit.lfs.errors.LfsUnauthorized;
@@ -71,9 +73,12 @@
       String name = getProjectName();
       ProjectState project = getProject(name);
       CurrentUser user = getUser(name);
-      ProjectState state = projectCache.checkedGet(project.getNameKey());
+      Optional<ProjectState> state = projectCache.get(project.getNameKey());
+      if (!state.isPresent()) {
+        throw new LfsRepositoryNotFound(project.getNameKey().get());
+      }
       try {
-        authorizeUser(permissionBackend.user(user).project(state.getNameKey()));
+        authorizeUser(permissionBackend.user(user).project(state.get().getNameKey()));
       } catch (AuthException | PermissionBackendException e) {
         throwUnauthorizedOp(getAction(), project, user);
       }
@@ -84,7 +89,7 @@
       context.sendError(SC_NOT_FOUND, e.getMessage());
     } catch (LfsLockExistsException e) {
       context.sendError(SC_CONFLICT, e.error);
-    } catch (LfsException e) {
+    } catch (LfsException | StorageException e) {
       context.sendError(SC_INTERNAL_SERVER_ERROR, e.getMessage());
     }
   }
@@ -101,11 +106,11 @@
 
   protected ProjectState getProject(String name) throws LfsRepositoryNotFound {
     Project.NameKey project = Project.nameKey(ProjectUtil.stripGitSuffix(name));
-    ProjectState state = projectCache.get(project);
-    if (state == null || state.getProject().getState() == HIDDEN) {
+    Optional<ProjectState> state = projectCache.get(project);
+    if (!state.isPresent() || state.get().getProject().getState() == HIDDEN) {
       throw new LfsRepositoryNotFound(project.get());
     }
-    return state;
+    return state.get();
   }
 
   protected CurrentUser getUser(String project) {