code: @Override public Object invokeMethod(final String name, final Object arguments) {
      if (GantState.dryRun) {
        if (GantState.verbosity > GantState.SILENT) {
          final StringBuilder sb = new StringBuilder();
          int padding = 9 - name.length();
          if (padding < 0) { padding = 0; }
          sb.append("         ".substring(0, padding) + '[' + name + "] ");
          final Object[] args = (Object[]) arguments;
          if (args[0] instanceof Map<?,?>) {
            //////////////////////////////////////////////////////////////////////////////////////////////////////////
            // Eclipse and IntelliJ IDEA warn that (Map) is not a proper cast but using the
            // cast (Map<?,?>) causes a type check error due to the capture algorithm.
            //
            //  TODO : Fix this rather than use a SuppressWarnings.
            //////////////////////////////////////////////////////////////////////////////////////////////////////////
            @SuppressWarnings({ "unchecked", "rawtypes" } ) final Iterator<Map.Entry<?,?>> i =((Map) args[0]).entrySet().iterator();
            while (i.hasNext()) {
              final Map.Entry<?,?> e = i.next();
              sb.append(e.getKey() + " : '" + e.getValue() + '\'');
              if (i.hasNext()) { sb.append(", "); }
            }
            sb.append('\n');
            getProject().log(sb.toString());
            if (args.length == 2) {((Closure<?>) args[1]).call(); }
          }
          else if (args[0] instanceof Closure) { ((Closure<?>) args[0]).call(); }
          else { throw new RuntimeException("Unexpected type of parameter to method " + name); }
        }
        return null;
      }
      return super.invokeMethod(name, arguments);
    }
docs: Invoke a method.
  
  @param name The name of the method to invoke.
  @param arguments The parameters to the method call.
  @return The value returned by the method call or null if no value is returned.