third_party/polymer3/bower_components/polymer/lib/mixins/property-effects.js
function runObserverEffect(inst, property, props, oldProps, info) {
  let fn = typeof info.method === "string" ? inst[info.method] : info.method;
  let changedProp = info.property;
  if (fn) {
    fn.call(inst, inst.__data[changedProp], oldProps[changedProp]);
  } else if (!info.dynamicFn) {
    console.warn('observer method `' + info.method + '` not defined');
  }
}
function runObserverEffect(inst, property, props, oldProps, info) {
  let fn = typeof info.method === "string" ? inst[info.method] : info.method;
  let changedProp = info.property;
  if (fn) {
    fn.call(inst, inst.__data[changedProp], oldProps[changedProp]);
  } else if (!info.dynamicFn) {
    console.warn('observer method `' + info.method + '` not defined');
  }
}
function runObserverEffect ( inst , property , props , oldProps , info ) { let fn = typeof info . method === "string" ? inst [ info . method ] : info . method ; let changedProp = info . property ; if ( fn ) { fn . call ( inst , inst . __data [ changedProp ] , oldProps [ changedProp ] ) ; } else if ( ! info . dynamicFn ) { console . warn ( 'observer method `' + info . method + '` not defined' ) ; } }
Implements the "observer" effect.

Calls the method with `info.methodName` on the instance, passing the
new and old values.

@param {!PropertyEffectsType} inst The instance the effect will be run on
@param {string} property Name of property
@param {Object} props Bag of current property changes
@param {Object} oldProps Bag of previous values for changed properties
@param {?} info Effect metadata
@return {void}
@private
Implements the observer effect .