summaryrefslogtreecommitdiffstats
path: root/src/main/java/com/beust/jcommander/ParameterDescription.java
diff options
context:
space:
mode:
authorCedric Beust <cedric@beust.com>2012-06-24 15:12:31 -0700
committerCedric Beust <cedric@beust.com>2012-06-24 15:12:31 -0700
commit369d387138b6da9e77e01d82273ef6271580eb47 (patch)
tree1b6467c94e100e86c111b7f1e185d40f7a96a2cd /src/main/java/com/beust/jcommander/ParameterDescription.java
parent0975e46cbf9e8aa7febc03dc38be47c19b408371 (diff)
downloadplatform_external_jcommander-369d387138b6da9e77e01d82273ef6271580eb47.tar.gz
platform_external_jcommander-369d387138b6da9e77e01d82273ef6271580eb47.tar.bz2
platform_external_jcommander-369d387138b6da9e77e01d82273ef6271580eb47.zip
Support for setters on top of fields.
Diffstat (limited to 'src/main/java/com/beust/jcommander/ParameterDescription.java')
-rw-r--r--src/main/java/com/beust/jcommander/ParameterDescription.java81
1 files changed, 37 insertions, 44 deletions
diff --git a/src/main/java/com/beust/jcommander/ParameterDescription.java b/src/main/java/com/beust/jcommander/ParameterDescription.java
index 9299e59..5f4a0a7 100644
--- a/src/main/java/com/beust/jcommander/ParameterDescription.java
+++ b/src/main/java/com/beust/jcommander/ParameterDescription.java
@@ -21,7 +21,6 @@ package com.beust.jcommander;
import com.beust.jcommander.validators.NoValidator;
import com.beust.jcommander.validators.NoValueValidator;
-import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
import java.util.EnumSet;
@@ -42,7 +41,8 @@ public class ParameterDescription {
private Parameter m_parameterAnnotation;
private DynamicParameter m_dynamicParameterAnnotation;
- private Field m_field;
+ /** The field/method */
+ private Parameterized m_parameterized;
/** Keep track of whether a value was added to flag an error */
private boolean m_assigned = false;
private ResourceBundle m_bundle;
@@ -52,23 +52,25 @@ public class ParameterDescription {
/** Longest of the names(), used to present usage() alphabetically */
private String m_longestName = "";
- public ParameterDescription(Object object, DynamicParameter annotation, Field field,
+ public ParameterDescription(Object object, DynamicParameter annotation,
+ Parameterized parameterized,
ResourceBundle bundle, JCommander jc) {
- if (! Map.class.isAssignableFrom(field.getType())) {
- throw new ParameterException("@DynamicParameter " + field.getName() + " should be of type "
- + "Map but is " + field.getType().getName());
+ if (! Map.class.isAssignableFrom(parameterized.getType())) {
+ throw new ParameterException("@DynamicParameter " + parameterized.getName()
+ + " should be of type "
+ + "Map but is " + parameterized.getType().getName());
}
m_dynamicParameterAnnotation = annotation;
m_wrappedParameter = new WrappedParameter(m_dynamicParameterAnnotation);
- init(object, field, bundle, jc);
+ init(object, parameterized, bundle, jc);
}
- public ParameterDescription(Object object, Parameter annotation, Field field,
+ public ParameterDescription(Object object, Parameter annotation, Parameterized parameterized,
ResourceBundle bundle, JCommander jc) {
m_parameterAnnotation = annotation;
m_wrappedParameter = new WrappedParameter(m_parameterAnnotation);
- init(object, field, bundle, jc);
+ init(object, parameterized, bundle, jc);
}
/**
@@ -115,10 +117,10 @@ public class ParameterDescription {
}
@SuppressWarnings("unchecked")
- private void init(Object object, Field field, ResourceBundle bundle,
+ private void init(Object object, Parameterized parameterized, ResourceBundle bundle,
JCommander jCommander) {
m_object = object;
- m_field = field;
+ m_parameterized = parameterized;
m_bundle = bundle;
if (m_bundle == null) {
m_bundle = findResourceBundle(object);
@@ -127,9 +129,9 @@ public class ParameterDescription {
if (m_parameterAnnotation != null) {
String description;
- if (Enum.class.isAssignableFrom(field.getType())
+ if (Enum.class.isAssignableFrom(parameterized.getType())
&& m_parameterAnnotation.description().isEmpty()) {
- description = "Options: " + EnumSet.allOf((Class<? extends Enum>) field.getType());
+ description = "Options: " + EnumSet.allOf((Class<? extends Enum>) parameterized.getType());
}else {
description = m_parameterAnnotation.description();
}
@@ -144,7 +146,7 @@ public class ParameterDescription {
}
try {
- m_default = m_field.get(m_object);
+ m_default = parameterized.get(object);
} catch (Exception e) {
}
@@ -194,18 +196,14 @@ public class ParameterDescription {
return m_wrappedParameter;
}
- public Field getField() {
- return m_field;
+ public Parameterized getParameterized() {
+ return m_parameterized;
}
private boolean isMultiOption() {
- Class<?> fieldType = m_field.getType();
+ Class<?> fieldType = m_parameterized.getType();
return fieldType.equals(List.class) || fieldType.equals(Set.class)
- || isDynamicParameter(m_field);
- }
-
- private boolean isDynamicParameter(Field field) {
- return field.getAnnotation(DynamicParameter.class) != null;
+ || m_parameterized.isDynamicParameter();
}
public void addValue(String value) {
@@ -231,7 +229,7 @@ public class ParameterDescription {
*/
public void addValue(String value, boolean isDefault) {
p("Adding " + (isDefault ? "default " : "") + "value:" + value
- + " to parameter:" + m_field.getName());
+ + " to parameter:" + m_parameterized.getName());
String name = m_wrappedParameter.names()[0];
if (m_assigned && ! isMultiOption()) {
throw new ParameterException("Can only specify option " + name + " once.");
@@ -239,35 +237,30 @@ public class ParameterDescription {
validateParameter(name, value);
- Class<?> type = m_field.getType();
+ Class<?> type = m_parameterized.getType();
Object convertedValue = m_jCommander.convertValue(this, value);
validateValueParameter(name, convertedValue);
boolean isCollection = Collection.class.isAssignableFrom(type);
- try {
- if (isCollection) {
- @SuppressWarnings("unchecked")
- Collection<Object> l = (Collection<Object>) m_field.get(m_object);
- if (l == null || fieldIsSetForTheFirstTime(isDefault)) {
- l = newCollection(type);
- m_field.set(m_object, l);
- }
- if (convertedValue instanceof Collection) {
- l.addAll((Collection) convertedValue);
- } else { // if (isMainParameter || m_parameterAnnotation.arity() > 1) {
- l.add(convertedValue);
+ if (isCollection) {
+ @SuppressWarnings("unchecked")
+ Collection<Object> l = (Collection<Object>) m_parameterized.get(m_object);
+ if (l == null || fieldIsSetForTheFirstTime(isDefault)) {
+ l = newCollection(type);
+ m_parameterized.set(m_object, l);
+ }
+ if (convertedValue instanceof Collection) {
+ l.addAll((Collection) convertedValue);
+ } else { // if (isMainParameter || m_parameterAnnotation.arity() > 1) {
+ l.add(convertedValue);
// } else {
// l.
- }
- } else {
- m_wrappedParameter.addValue(m_field, m_object, convertedValue);
}
- if (! isDefault) m_assigned = true;
- }
- catch(IllegalAccessException ex) {
- ex.printStackTrace();
+ } else {
+ m_wrappedParameter.addValue(m_parameterized, m_object, convertedValue);
}
+ if (! isDefault) m_assigned = true;
}
private void validateParameter(String name, String value) {
@@ -346,7 +339,7 @@ public class ParameterDescription {
@Override
public String toString() {
- return "[ParameterDescription " + m_field.getName() + "]";
+ return "[ParameterDescription " + m_parameterized.getName() + "]";
}
public boolean isDynamicParameter() {