Class ArrayFieldSetter

java.lang.Object
org.kohsuke.args4j.spi.ArrayFieldSetter
All Implemented Interfaces:
Getter, Setter

final class ArrayFieldSetter extends Object implements Getter, Setter
Setter that allows multiple values to be stored into one array field.

Because of the CmdLineParser abstractions of allowing incremental parsing of options, this implementation creates a whole new array each time a new value is found. This is also why we don't support a setter method that takes list/array as arguments.

  • Field Details

    • bean

      private final Object bean
    • f

      private final Field f
    • defaultArray

      private Object defaultArray
  • Constructor Details

    • ArrayFieldSetter

      public ArrayFieldSetter(Object bean, Field f)
  • Method Details

    • trySetDefault

      private void trySetDefault(Object bean1) throws IllegalAccessError
      Remember default so we throw away the default when adding user values.
      Throws:
      IllegalAccessError
    • doSetDefault

      private void doSetDefault(Object bean) throws IllegalAccessException
      Throws:
      IllegalAccessException
    • asFieldSetter

      public FieldSetter asFieldSetter()
      Description copied from interface: Setter
      If this setter encapsulates a field, return the direct access to that field as FieldSetter. This method serves two purposes:
      1. This lets OptionHandlers bypass the collection/array handling of fields. This is useful if you're defining an option handler that produces array or collection from a single argument.
      2. The other is to retrieve the current value of the field (via FieldSetter.getValueList()).
      Specified by:
      asFieldSetter in interface Setter
      Returns:
      null if this setter wraps a method.
    • asAnnotatedElement

      public AnnotatedElement asAnnotatedElement()
      Description copied from interface: Setter
      Returns the AnnotatedElement by which you can access annotations written on this setter. This is the same AnnotatedElement that had Option/Argument.

      This enables OptionHandler to further tweak its behavior based on additional annotations.

      Specified by:
      asAnnotatedElement in interface Setter
    • isMultiValued

      public boolean isMultiValued()
      Description copied from interface: Setter
      Whether this setter is intrinsically multi-valued.

      When parsing arguments (instead of options), intrinsically multi-valued setters consume all the remaining arguments. So, if the setter can store multiple values, this method should return true.

      This characteristics of a setter doesn't affect option parsing at all; any options can be specified multiple times. In many cases, this is a no-op--but when your shell script expands multiple environment variables (each of which may contain options), tolerating such redundant options can be useful.

      Specified by:
      isMultiValued in interface Setter
    • getType

      public Class getType()
      Description copied from interface: Setter
      Gets the type of the underlying method/field.
      Specified by:
      getType in interface Setter
    • addValue

      public void addValue(Object value)
      Description copied from interface: Setter
      Adds/sets a value to the property of the option bean.

      A Setter object has an implicit knowledge about the property it's setting, and the instance of the option bean.

      Specified by:
      addValue in interface Setter
    • doAddValue

      private void doAddValue(Object bean, Object value) throws IllegalAccessException
      Throws:
      IllegalAccessException
    • getValueList

      public List<Object> getValueList()
      Description copied from interface: Getter
      Gets the current value of the property.

      A Getter object has an implicit knowledge about the property it's getting, and the instance of the option bean.

      Specified by:
      getValueList in interface Getter
      Returns:
      empty list or null if there's no current value.