Package com.google.gerrit.server
Class DynamicOptions
java.lang.Object
com.google.gerrit.server.DynamicOptions
- All Implemented Interfaces:
AutoCloseable
Helper class to define and parse options from plugins on ssh and RestAPI commands.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interface
Implement this if your DynamicBean needs an opportunity to act on the Bean directly before or after argument parsing.static interface
static interface
The entity which provided additional options may need a way to receive a reference to the DynamicBean it provided.static interface
To provide additional options to a command in another classloader, bind a ClassNameProvider which provides the name of your DynamicBean in the other classLoader.static interface
To provide additional options, bind a DynamicBean.static interface
To provide additional Guice bindings for options to a command in another classloader, bind a ModulesClassNamesProvider which provides the name of your Modules needed for your DynamicBean in the other classLoader. -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected Object
protected Map<String,
DynamicOptions.DynamicBean> protected DynamicMap<DynamicOptions.DynamicBean>
protected com.google.inject.Injector
protected com.google.gerrit.lifecycle.LifecycleManager
protected static Map<ClassLoader,
Map<ClassLoader, WeakReference<ClassLoader>>> MergedClassloaders allow us to load classes from both plugin classloaders. -
Constructor Summary
ConstructorsConstructorDescriptionDynamicOptions
(com.google.inject.Injector injector, DynamicMap<DynamicOptions.DynamicBean> dynamicBeans) Internal: For Gerrit to include options from DynamicBeans, setup a DynamicMap and instantiate this class so the following methods can be called if desired: -
Method Summary
Modifier and TypeMethodDescriptionvoid
close()
getDynamicBean
(Object bean, DynamicOptions.DynamicBean dynamicBean) protected ClassLoader
getMergedClassLoader
(ClassLoader beanCl, ClassLoader dynamicBeanCl) void
void
void
parseDynamicBeans
(com.google.gerrit.util.cli.CmdLineParser clp) void
void
void
void
-
Field Details
-
mergedClByCls
MergedClassloaders allow us to load classes from both plugin classloaders. Store the merged classloaders in a Map to avoid creating a new classloader for each invocation. Use a WeakHashMap to avoid leaking these MergedClassLoaders once either plugin is unloaded. Since the WeakHashMap only takes care of ensuring the Keys can get garbage collected, use WeakReferences to store the MergedClassloaders in the WeakHashMap.Outter keys are the bean plugin's classloaders (the plugin being extended)
Inner keys are the dynamicBeans plugin's classloaders (the extending plugin)
The value is the MergedClassLoader representing the merging of the outter and inner key classloaders.
-
bean
-
beansByPlugin
-
injector
protected com.google.inject.Injector injector -
dynamicBeans
-
lifecycleManager
protected com.google.gerrit.lifecycle.LifecycleManager lifecycleManager
-
-
Constructor Details
-
DynamicOptions
public DynamicOptions(com.google.inject.Injector injector, DynamicMap<DynamicOptions.DynamicBean> dynamicBeans) Internal: For Gerrit to include options from DynamicBeans, setup a DynamicMap and instantiate this class so the following methods can be called if desired:DynamicOptions pluginOptions = new DynamicOptions(injector, dynamicBeans); pluginOptions.setBean(bean); pluginOptions.startLifecycleListeners(); pluginOptions.parseDynamicBeans(clp); pluginOptions.setDynamicBeans(); pluginOptions.onBeanParseStart(); // parse arguments here: clp.parseArgument(argv); pluginOptions.onBeanParseEnd();
-
-
Method Details
-
setBean
-
getDynamicBean
public DynamicOptions.DynamicBean getDynamicBean(Object bean, DynamicOptions.DynamicBean dynamicBean) -
getMergedClassLoader
-
parseDynamicBeans
public void parseDynamicBeans(com.google.gerrit.util.cli.CmdLineParser clp) -
setDynamicBeans
public void setDynamicBeans() -
startLifecycleListeners
public void startLifecycleListeners() -
stopLifecycleListeners
public void stopLifecycleListeners() -
onBeanParseStart
public void onBeanParseStart() -
onBeanParseEnd
public void onBeanParseEnd() -
close
public void close()- Specified by:
close
in interfaceAutoCloseable
-