code: function createMethodEffect(model, sig, type, effectFn, methodInfo, dynamicFn) {
    dynamicFn = sig.static || (dynamicFn &&
      (typeof dynamicFn !== 'object' || dynamicFn[sig.methodName]));
    let info = {
      methodName: sig.methodName,
      args: sig.args,
      methodInfo,
      dynamicFn
    };
    for (let i=0, arg; (i<sig.args.length) && (arg=sig.args[i]); i++) {
      if (!arg.literal) {
        model._addPropertyEffect(arg.rootProperty, type, {
          fn: effectFn, info: info, trigger: arg
        });
      }
    }
    if (dynamicFn) {
      model._addPropertyEffect(sig.methodName, type, {
        fn: effectFn, info: info
      });
    }
  }
docs: -- for method-based effects (complexObserver & computed) -------------- 
  Adds property effects for each argument in the method signature (and
  optionally, for the method name if `dynamic` is true) that calls the
  provided effect function.
  
  @param {Element | Object} model Prototype or instance
  @param {!MethodSignature} sig Method signature metadata
  @param {string} type Type of property effect to add
  @param {Function} effectFn Function to run when arguments change
  @param {*=} methodInfo Effect-specific information to be included in
  method effect metadata
  @param {boolean|Object=} dynamicFn Boolean or object map indicating whether
  method names should be included as a dependency to the effect. Note,
  defaults to true if the signature is static (sig.static is true).
  @return {void}
  @private