anchor.diff:  * Error messages become less useful for cases with non-trivial validation
   * There are methods with >20 parameters, at which point this approach becomes unmaintainable and actually degrades performance.
   
  -Thus, we ended up implementing our own input parser equivalent entirely behind the language barrier.
  -
   == Custom InputParser
  +
  +Instead of doing the parsing on the MATLAB side of the API, we decided to implement equivalent parsing functionality that lives entirely behind the Java barrier. 
   
   === varargin
   
  
positive.code: defaultShape = 'rectangle';
  expectedShapes = {'square','rectangle','parallelogram'};
  
  % parse inputs
  p = inputParser;
  p.addRequired('width',@isnumeric);
  p.addOptional('height',defaultHeight,@isnumeric);
  p.addParameter('units',defaultUnits);
  p.addParameter('shape',defaultShape, @(x) any(validatestring(x,expectedShapes)));
  
  p.parse(varargin{:});
  a = p.Results.width .* p.Results.height;
  ----
  
  Once the argument is parsed, the result can be forwarded to an internal method that is implemented with fixed arguments.
  
  [source,matlab]
  ----
  function [out] = myMethod(this, varargin)
      % parse user inputs
      p = inputParser;
      p.parse(varargin{:});
      
      % call backing implementation
  
negative.code: * *Optional* arguments are expected after all required arguments are satisfied. An optional argument is set if its validator returns true. If the validator returns false, the parser will try the validator of the next optional argument.
  * *Parameters* are parsed last and consist of a string-key and a single corresponding value argument. They can be set in any order.
  
  Creating an inputparser looks as shown in the code below.
  
  [source,matlab]
  ----
  