Merge "Manage attach of ApiModule binding upon plugin reload" into stable-3.9
diff --git a/java/com/google/gerrit/server/plugins/PluginGuiceEnvironment.java b/java/com/google/gerrit/server/plugins/PluginGuiceEnvironment.java
index 89d6f8f..59e3342 100644
--- a/java/com/google/gerrit/server/plugins/PluginGuiceEnvironment.java
+++ b/java/com/google/gerrit/server/plugins/PluginGuiceEnvironment.java
@@ -362,6 +362,23 @@
reattachItem(old, sysItems, newPlugin.getSysInjector(), newPlugin);
reattachItem(old, sshItems, newPlugin.getSshInjector(), newPlugin);
reattachItem(old, httpItems, newPlugin.getHttpInjector(), newPlugin);
+
+ apiInjector = Optional.ofNullable(newPlugin.getApiInjector()).orElse(apiInjector);
+
+ if (apiInjector != null) {
+ apiItems.putAll(dynamicItemsOf(apiInjector));
+ apiSets.putAll(dynamicSetsOf(apiInjector));
+ apiMaps.putAll(dynamicMapsOf(apiInjector));
+
+ List<Injector> allPluginInjectors =
+ listOfInjectors(
+ newPlugin.getSysInjector(),
+ newPlugin.getSshInjector(),
+ newPlugin.getHttpInjector());
+ allPluginInjectors.forEach(i -> reattachItem(old, apiItems, i, newPlugin));
+ allPluginInjectors.forEach(i -> reattachSet(old, apiSets, i, newPlugin));
+ allPluginInjectors.forEach(i -> reattachMap(old, apiMaps, i, newPlugin));
+ }
} finally {
exit(oldContext);
}