summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAnton Gustafsson <antag99@gmail.com>2015-07-05 10:32:53 +0200
committerAnton Gustafsson <antag99@gmail.com>2015-07-05 10:32:53 +0200
commit632ef58e747976be5b52033bcee6cb61d13eefb6 (patch)
tree441a47491e91789eb97c48872af9170f235f65df /src
parentc399919841b766ffcdb859a13294194a24079419 (diff)
downloadjcommander-632ef58e747976be5b52033bcee6cb61d13eefb6.tar.gz
Fix issue where JCommander could not access private fields/methods
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/beust/jcommander/JCommander.java12
-rw-r--r--src/main/java/com/beust/jcommander/Parameterized.java2
2 files changed, 11 insertions, 3 deletions
diff --git a/src/main/java/com/beust/jcommander/JCommander.java b/src/main/java/com/beust/jcommander/JCommander.java
index 1441352..0ff1c30 100644
--- a/src/main/java/com/beust/jcommander/JCommander.java
+++ b/src/main/java/com/beust/jcommander/JCommander.java
@@ -1309,6 +1309,8 @@ public class JCommander {
throw new ParameterException(e);
} catch (InvocationTargetException e) {
throw new ParameterException(e);
+ } catch (NoSuchMethodException e) {
+ throw new ParameterException(e);
}
return result;
@@ -1320,8 +1322,11 @@ public class JCommander {
*/
private Object convertToList(String value, IStringConverter<?> converter,
Class<? extends IParameterSplitter> splitterClass)
- throws InstantiationException, IllegalAccessException {
- IParameterSplitter splitter = splitterClass.newInstance();
+ throws InstantiationException, IllegalAccessException, NoSuchMethodException,
+ InvocationTargetException {
+ Constructor<? extends IParameterSplitter> constructor = splitterClass.getConstructor(new Class[0]);
+ constructor.setAccessible(true);
+ IParameterSplitter splitter = constructor.newInstance();
List<Object> result = Lists.newArrayList();
for (String param : splitter.split(value)) {
result.add(converter.convert(param));
@@ -1331,13 +1336,14 @@ public class JCommander {
private IStringConverter<?> instantiateConverter(String optionName,
Class<? extends IStringConverter<?>> converterClass)
- throws IllegalArgumentException, InstantiationException, IllegalAccessException,
+ throws InstantiationException, IllegalAccessException,
InvocationTargetException {
Constructor<IStringConverter<?>> ctor = null;
Constructor<IStringConverter<?>> stringCtor = null;
Constructor<IStringConverter<?>>[] ctors
= (Constructor<IStringConverter<?>>[]) converterClass.getDeclaredConstructors();
for (Constructor<IStringConverter<?>> c : ctors) {
+ c.setAccessible(true);
Class<?>[] types = c.getParameterTypes();
if (types.length == 1 && types[0].equals(String.class)) {
stringCtor = c;
diff --git a/src/main/java/com/beust/jcommander/Parameterized.java b/src/main/java/com/beust/jcommander/Parameterized.java
index 6fff1df..b5ecd1b 100644
--- a/src/main/java/com/beust/jcommander/Parameterized.java
+++ b/src/main/java/com/beust/jcommander/Parameterized.java
@@ -41,6 +41,7 @@ public class Parameterized {
Class<? extends Object> cls = arg.getClass();
while (!Object.class.equals(cls)) {
for (Field f : cls.getDeclaredFields()) {
+ f.setAccessible(true);
Annotation annotation = f.getAnnotation(Parameter.class);
Annotation delegateAnnotation = f.getAnnotation(ParametersDelegate.class);
Annotation dynamicParameter = f.getAnnotation(DynamicParameter.class);
@@ -62,6 +63,7 @@ public class Parameterized {
cls = arg.getClass();
while (!Object.class.equals(cls)) {
for (Method m : cls.getDeclaredMethods()) {
+ m.setAccessible(true);
Annotation annotation = m.getAnnotation(Parameter.class);
Annotation delegateAnnotation = m.getAnnotation(ParametersDelegate.class);
Annotation dynamicParameter = m.getAnnotation(DynamicParameter.class);