Merge branch 'stable-2.16' into stable-3.0

* stable-2.16:
  Make transitive starlark loads explicit
  Format java files with google-java-format
  Create a user-context if not propagated by Gerrit

Change-Id: I61240539c0a6a295147e8f11db55ed90aca66403
diff --git a/WORKSPACE b/WORKSPACE
index d22a85a..6089c79 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,7 +3,7 @@
 load("//:bazlets.bzl", "load_bazlets")
 
 load_bazlets(
-    commit = "b084bd74743f4303971a2a057bcea4f3352ddf4e",
+    commit = "1d381f01c853e2c02ae35430a8e294e485635d62",
     #local_path = "/home/<user>/projects/bazlets",
 )
 
diff --git a/lib/prolog/prolog.bzl b/lib/prolog/prolog.bzl
index ae46601..5ba004b 100644
--- a/lib/prolog/prolog.bzl
+++ b/lib/prolog/prolog.bzl
@@ -1 +1,3 @@
-load("@com_googlesource_gerrit_bazlets//lib/prolog:prolog.bzl", "prolog_cafe_library")
+load("@com_googlesource_gerrit_bazlets//lib/prolog:prolog.bzl", _prolog_cafe_library = "prolog_cafe_library")
+
+prolog_cafe_library = _prolog_cafe_library
diff --git a/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/GitRefListener.java b/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/GitRefListener.java
index 22e3db8..4a34958 100644
--- a/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/GitRefListener.java
+++ b/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/GitRefListener.java
@@ -19,10 +19,12 @@
 import static com.google.gerrit.extensions.client.DiffPreferencesInfo.Whitespace.IGNORE_NONE;
 
 import com.google.common.collect.Sets;
+import com.google.gerrit.exceptions.StorageException;
 import com.google.gerrit.extensions.annotations.Listen;
 import com.google.gerrit.extensions.api.GerritApi;
 import com.google.gerrit.extensions.api.changes.ChangeApi;
 import com.google.gerrit.extensions.api.changes.Changes;
+import com.google.gerrit.extensions.common.AccountInfo;
 import com.google.gerrit.extensions.common.ChangeInfo;
 import com.google.gerrit.extensions.events.GitReferenceUpdatedListener;
 import com.google.gerrit.extensions.restapi.RestApiException;
@@ -30,12 +32,16 @@
 import com.google.gerrit.reviewdb.client.Change;
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.reviewdb.client.RefNames;
+import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.patch.PatchList;
 import com.google.gerrit.server.patch.PatchListCache;
 import com.google.gerrit.server.patch.PatchListKey;
 import com.google.gerrit.server.patch.PatchListNotAvailableException;
+import com.google.gerrit.server.util.ManualRequestContext;
+import com.google.gerrit.server.util.OneOffRequestContext;
 import com.google.inject.Inject;
+import com.google.inject.Provider;
 import java.io.IOException;
 import java.util.Set;
 import org.eclipse.jgit.lib.ObjectId;
@@ -54,22 +60,58 @@
   private final Accounts accounts;
   private final ReviewerManager reviewerManager;
 
+  private final OneOffRequestContext oneOffReqCtx;
+
+  private Provider<CurrentUser> currentUserProvider;
+
   @Inject
   public GitRefListener(
       GerritApi api,
       PatchListCache patchListCache,
       GitRepositoryManager repositoryManager,
       Accounts accounts,
-      ReviewerManager reviewerManager) {
+      ReviewerManager reviewerManager,
+      OneOffRequestContext oneOffReqCtx,
+      Provider<CurrentUser> currentUserProvider) {
     this.api = api;
     this.patchListCache = patchListCache;
     this.repositoryManager = repositoryManager;
     this.accounts = accounts;
     this.reviewerManager = reviewerManager;
+    this.oneOffReqCtx = oneOffReqCtx;
+    this.currentUserProvider = currentUserProvider;
   }
 
   @Override
   public void onGitReferenceUpdated(Event event) {
+    AccountInfo updaterAccountInfo = event.getUpdater();
+    CurrentUser currentUser = currentUserProvider.get();
+    if (currentUser.isIdentifiedUser()) {
+      handleGitReferenceUpdated(event);
+    } else if (updaterAccountInfo != null) {
+      handleGitReferenceUpdatedAsUser(event, new Account.Id(updaterAccountInfo._accountId));
+    } else {
+      handleGitReferenceUpdatedAsServer(event);
+    }
+  }
+
+  private void handleGitReferenceUpdatedAsUser(Event event, Account.Id updaterAccountId) {
+    try (ManualRequestContext ctx = oneOffReqCtx.openAs(updaterAccountId)) {
+      handleGitReferenceUpdated(event);
+    } catch (StorageException e) {
+      logger.warn("Unable to process event {} on project {}", event, event.getProjectName(), e);
+    }
+  }
+
+  private void handleGitReferenceUpdatedAsServer(Event event) {
+    try (ManualRequestContext ctx = oneOffReqCtx.open()) {
+      handleGitReferenceUpdated(event);
+    } catch (StorageException e) {
+      logger.warn("Unable to process event {} on project {}", event, event.getProjectName(), e);
+    }
+  }
+
+  private void handleGitReferenceUpdated(Event event) {
     String projectName = event.getProjectName();
     Repository repository;
     try {
diff --git a/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/GitRefListenerIT.java b/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/GitRefListenerIT.java
index aa6db4f..24c07a3 100644
--- a/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/GitRefListenerIT.java
+++ b/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/GitRefListenerIT.java
@@ -21,7 +21,11 @@
 import com.google.gerrit.acceptance.TestPlugin;
 import com.google.gerrit.extensions.events.GitReferenceUpdatedListener;
 import com.google.gerrit.reviewdb.client.RefNames;
+import com.google.gerrit.server.AnonymousUser;
+import com.google.gerrit.server.util.ManualRequestContext;
+import com.google.gerrit.server.util.ThreadLocalRequestContext;
 import com.google.inject.AbstractModule;
+import com.google.inject.Inject;
 import org.eclipse.jgit.transport.ReceiveCommand.Type;
 import org.junit.Test;
 
@@ -30,6 +34,13 @@
     sysModule = "com.vmware.gerrit.owners.common.GitRefListenerIT$TestModule")
 public class GitRefListenerIT extends LightweightPluginDaemonTest {
 
+  @Inject GitRefListenerTest gitRefListener;
+  @Inject ThreadLocalRequestContext requestContext;
+
+  String aRefChange = RefNames.REFS_CHANGES + "01/01/01";
+  String anOldObjectId = "anOldRef";
+  String aNewObjectId = "aNewRef";
+
   public static class TestModule extends AbstractModule {
     @Override
     protected void configure() {
@@ -39,15 +50,14 @@
 
   @Test
   public void shouldNotProcessNoteDbOnlyRefs() {
-    GitRefListenerTest gitRefListener = getPluginInstance(GitRefListenerTest.class);
-
-    String aRefChange = RefNames.REFS_CHANGES + "01/01" + RefNames.META_SUFFIX;
-    String anOldObjectId = "anOldRef";
-    String aNewObjectId = "aNewRef";
-
     ReferenceUpdatedEventTest refUpdatedEvent =
         new ReferenceUpdatedEventTest(
-            project, aRefChange, anOldObjectId, aNewObjectId, Type.CREATE);
+            project,
+            RefNames.REFS_CHANGES + "01/01" + RefNames.META_SUFFIX,
+            anOldObjectId,
+            aNewObjectId,
+            Type.CREATE,
+            admin.id());
 
     gitRefListener.onGitReferenceUpdated(refUpdatedEvent);
     assertEquals(0, gitRefListener.getProcessedEvents());
@@ -55,21 +65,31 @@
 
   @Test
   public void shouldProcessRefChanges() {
-    GitRefListenerTest gitRefListener = getPluginInstance(GitRefListenerTest.class);
-
-    String aRefChange = RefNames.REFS_CHANGES + "01/01/01";
-    String anOldObjectId = "anOldRef";
-    String aNewObjectId = "aNewRef";
-
-    ReferenceUpdatedEventTest refUpdatedEvent =
-        new ReferenceUpdatedEventTest(
-            project, aRefChange, anOldObjectId, aNewObjectId, Type.CREATE);
-
-    gitRefListener.onGitReferenceUpdated(refUpdatedEvent);
+    gitRefListener.onGitReferenceUpdated(newRefUpdateEvent());
     assertEquals(1, gitRefListener.getProcessedEvents());
   }
 
-  private <T> T getPluginInstance(Class<T> clazz) {
-    return plugin.getSysInjector().getInstance(clazz);
+  @Test
+  public void shouldRetrieveChangeFromAnonymousContext() throws Exception {
+    try (ManualRequestContext ctx = new ManualRequestContext(new AnonymousUser(), requestContext)) {
+      gitRefListener.onGitReferenceUpdated(newRefUpdateEvent());
+      assertEquals(1, gitRefListener.getProcessedEvents());
+    }
+  }
+
+  @Test
+  public void shouldRetrieveChangeFromAnonymousContextWithoutAccountId() throws Exception {
+    ReferenceUpdatedEventTest refUpdateWithoutAccountId =
+        new ReferenceUpdatedEventTest(
+            project, aRefChange, anOldObjectId, aNewObjectId, Type.CREATE, null);
+    try (ManualRequestContext ctx = new ManualRequestContext(new AnonymousUser(), requestContext)) {
+      gitRefListener.onGitReferenceUpdated(refUpdateWithoutAccountId);
+      assertEquals(1, gitRefListener.getProcessedEvents());
+    }
+  }
+
+  private ReferenceUpdatedEventTest newRefUpdateEvent() {
+    return new ReferenceUpdatedEventTest(
+        project, aRefChange, anOldObjectId, aNewObjectId, Type.CREATE, admin.id());
   }
 }
diff --git a/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/GitRefListenerTest.java b/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/GitRefListenerTest.java
index 1052349..e3d4be4 100644
--- a/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/GitRefListenerTest.java
+++ b/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/GitRefListenerTest.java
@@ -16,9 +16,12 @@
 package com.vmware.gerrit.owners.common;
 
 import com.google.gerrit.extensions.api.GerritApi;
+import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.patch.PatchListCache;
+import com.google.gerrit.server.util.OneOffRequestContext;
 import com.google.inject.Inject;
+import com.google.inject.Provider;
 import com.googlesource.gerrit.owners.common.Accounts;
 import com.googlesource.gerrit.owners.common.GitRefListener;
 import com.googlesource.gerrit.owners.common.ReviewerManager;
@@ -31,12 +34,21 @@
 
   @Inject
   public GitRefListenerTest(
-          GerritApi api,
-          PatchListCache patchListCache,
-          GitRepositoryManager repositoryManager,
-          Accounts accounts,
-          ReviewerManager reviewerManager) {
-    super(api, patchListCache, repositoryManager, accounts, reviewerManager);
+      GerritApi api,
+      PatchListCache patchListCache,
+      GitRepositoryManager repositoryManager,
+      Accounts accounts,
+      ReviewerManager reviewerManager,
+      OneOffRequestContext oneOffReqCtx,
+      Provider<CurrentUser> currentUserProvider) {
+    super(
+        api,
+        patchListCache,
+        repositoryManager,
+        accounts,
+        reviewerManager,
+        oneOffReqCtx,
+        currentUserProvider);
   }
 
   @Override
diff --git a/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/ReferenceUpdatedEventTest.java b/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/ReferenceUpdatedEventTest.java
index 446a8bb..9946502 100644
--- a/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/ReferenceUpdatedEventTest.java
+++ b/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/ReferenceUpdatedEventTest.java
@@ -18,6 +18,8 @@
 import com.google.gerrit.extensions.api.changes.NotifyHandling;
 import com.google.gerrit.extensions.common.AccountInfo;
 import com.google.gerrit.extensions.events.GitReferenceUpdatedListener;
+import com.google.gerrit.reviewdb.client.Account;
+import com.google.gerrit.reviewdb.client.Account.Id;
 import com.google.gerrit.reviewdb.client.Project;
 import org.eclipse.jgit.transport.ReceiveCommand;
 import org.junit.Ignore;
@@ -30,18 +32,21 @@
   private final String oldObjectId;
   private final String newObjectId;
   private final ReceiveCommand.Type type;
+  private final Id eventAccountId;
 
   public ReferenceUpdatedEventTest(
       Project.NameKey project,
       String ref,
       String oldObjectId,
       String newObjectId,
-      ReceiveCommand.Type type) {
+      ReceiveCommand.Type type,
+      Account.Id eventAccountId) {
     this.projectName = project.get();
     this.ref = ref;
     this.oldObjectId = oldObjectId;
     this.newObjectId = newObjectId;
     this.type = type;
+    this.eventAccountId = eventAccountId;
   }
 
   @Override
@@ -81,7 +86,11 @@
 
   @Override
   public AccountInfo getUpdater() {
-    return null;
+    if (eventAccountId == null) {
+      return null;
+    }
+
+    return new AccountInfo(eventAccountId.get());
   }
 
   @Override
diff --git a/tools/bzl/classpath.bzl b/tools/bzl/classpath.bzl
index d5764f7..c921d01 100644
--- a/tools/bzl/classpath.bzl
+++ b/tools/bzl/classpath.bzl
@@ -1,4 +1,6 @@
 load(
     "@com_googlesource_gerrit_bazlets//tools:classpath.bzl",
-    "classpath_collector",
+    _classpath_collector = "classpath_collector",
 )
+
+classpath_collector = _classpath_collector
diff --git a/tools/bzl/junit.bzl b/tools/bzl/junit.bzl
index 3af7e58..97307bd 100644
--- a/tools/bzl/junit.bzl
+++ b/tools/bzl/junit.bzl
@@ -1,4 +1,6 @@
 load(
     "@com_googlesource_gerrit_bazlets//tools:junit.bzl",
-    "junit_tests",
+    _junit_tests = "junit_tests",
 )
+
+junit_tests = _junit_tests
diff --git a/tools/bzl/maven_jar.bzl b/tools/bzl/maven_jar.bzl
index 43393b9..ce4730f 100644
--- a/tools/bzl/maven_jar.bzl
+++ b/tools/bzl/maven_jar.bzl
@@ -1 +1,4 @@
-load("@com_googlesource_gerrit_bazlets//tools:maven_jar.bzl", "GERRIT", "maven_jar")
+load("@com_googlesource_gerrit_bazlets//tools:maven_jar.bzl", _GERRIT = "GERRIT", _maven_jar = "maven_jar")
+
+GERRIT = _GERRIT
+maven_jar = _maven_jar
diff --git a/tools/bzl/plugin.bzl b/tools/bzl/plugin.bzl
index d21bdf4..a271493 100644
--- a/tools/bzl/plugin.bzl
+++ b/tools/bzl/plugin.bzl
@@ -1,7 +1,12 @@
 load(
     "@com_googlesource_gerrit_bazlets//:gerrit_plugin.bzl",
-    "PLUGIN_DEPS",
-    "PLUGIN_DEPS_NEVERLINK",
-    "PLUGIN_TEST_DEPS",
-    "gerrit_plugin",
+    _gerrit_plugin = "gerrit_plugin",
+    _plugin_deps = "PLUGIN_DEPS",
+    _plugin_deps_neverlink = "PLUGIN_DEPS_NEVERLINK",
+    _plugin_test_deps = "PLUGIN_TEST_DEPS",
 )
+
+gerrit_plugin = _gerrit_plugin
+PLUGIN_DEPS = _plugin_deps
+PLUGIN_DEPS_NEVERLINK = _plugin_deps_neverlink
+PLUGIN_TEST_DEPS = _plugin_test_deps
diff --git a/tools/genrule2.bzl b/tools/genrule2.bzl
index de66f32..61c4e18 100644
--- a/tools/genrule2.bzl
+++ b/tools/genrule2.bzl
@@ -1 +1,3 @@
-load("@com_googlesource_gerrit_bazlets//tools:genrule2.bzl", "genrule2")
+load("@com_googlesource_gerrit_bazlets//tools:genrule2.bzl", _genrule2 = "genrule2")
+
+genrule2 = _genrule2