public class DynamicOptions extends Object
Modifier and Type | Class and Description |
---|---|
static interface |
DynamicOptions.BeanParseListener
Implement this if your DynamicBean needs an opportunity to act on the Bean directly before or
after argument parsing.
|
static interface |
DynamicOptions.BeanReceiver
The entity which provided additional options may need a way to receive a reference to the
DynamicBean it provided.
|
static interface |
DynamicOptions.ClassNameProvider
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 |
DynamicOptions.DynamicBean
To provide additional options, bind a DynamicBean.
|
static interface |
DynamicOptions.ModulesClassNamesProvider
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.
|
Modifier and Type | Field and Description |
---|---|
protected Object |
bean |
protected Map<String,DynamicOptions.DynamicBean> |
beansByPlugin |
protected com.google.inject.Injector |
injector |
protected static Map<ClassLoader,Map<ClassLoader,WeakReference<ClassLoader>>> |
mergedClByCls
MergedClassloaders allow us to load classes from both plugin classloaders.
|
Constructor and Description |
---|
DynamicOptions(Object bean,
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:
|
Modifier and Type | Method and Description |
---|---|
DynamicOptions.DynamicBean |
getDynamicBean(Object bean,
DynamicOptions.DynamicBean dynamicBean) |
protected ClassLoader |
getMergedClassLoader(ClassLoader beanCl,
ClassLoader dynamicBeanCl) |
void |
onBeanParseEnd() |
void |
onBeanParseStart() |
void |
parseDynamicBeans(com.google.gerrit.util.cli.CmdLineParser clp) |
void |
setDynamicBeans() |
protected static Map<ClassLoader,Map<ClassLoader,WeakReference<ClassLoader>>> mergedClByCls
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.
protected Object bean
protected Map<String,DynamicOptions.DynamicBean> beansByPlugin
protected com.google.inject.Injector injector
public DynamicOptions(Object bean, com.google.inject.Injector injector, DynamicMap<DynamicOptions.DynamicBean> dynamicBeans)
DynamicOptions pluginOptions = new DynamicOptions(bean, injector, dynamicBeans); pluginOptions.parseDynamicBeans(clp); pluginOptions.setDynamicBeans(); pluginOptions.onBeanParseStart(); // parse arguments here: clp.parseArgument(argv); pluginOptions.onBeanParseEnd();
public DynamicOptions.DynamicBean getDynamicBean(Object bean, DynamicOptions.DynamicBean dynamicBean)
protected ClassLoader getMergedClassLoader(ClassLoader beanCl, ClassLoader dynamicBeanCl)
public void parseDynamicBeans(com.google.gerrit.util.cli.CmdLineParser clp)
public void setDynamicBeans()
public void onBeanParseStart()
public void onBeanParseEnd()