Make Polymer gestures library safe for Closure property renaming (take 2). (#5314)

Make Polymer gestures library safe for Closure property renaming.

The issue here was that we were assuming that the method for a given
gesture would always match the string name of that gesture, e.g. that if
the gesture name was "mousedown" that we could call
gestureDefinition.mousedown. In actuality, gestureDefinition.mousedown
could be renamed by Closure, which would throw with "undefined is not a
function".

The fix is to move the GesturesRecognizer type into our externs, which
prevents those methods from being renamed.
This commit is contained in:
Alexander Marks
2018-08-02 14:58:07 -07:00
committed by GitHub
parent db2f3cc71c
commit 6847cf4791
2 changed files with 51 additions and 44 deletions

View File

@@ -164,3 +164,51 @@ function AsyncInterface(){}
AsyncInterface.prototype.run;
/** @type {function(number): void} */
AsyncInterface.prototype.cancel;
/** @record */
let GestureInfo = function(){};
/** @type {string|undefined} */
GestureInfo.prototype.state;
/** @type {boolean|undefined} */
GestureInfo.prototype.started;
/** @type {!Array<?>|undefined} */
GestureInfo.prototype.moves;
/** @type {number|undefined} */
GestureInfo.prototype.x;
/** @type {number|undefined} */
GestureInfo.prototype.y;
/** @type {boolean|undefined} */
GestureInfo.prototype.prevent;
/** @type {function(?): void|undefined} */
GestureInfo.prototype.addMove;
/** @type {null|undefined} */
GestureInfo.prototype.movefn;
/** @type {null|undefined} */
GestureInfo.prototype.upFn;
/** @record */
let GestureRecognizer = function(){};
/** @type {string} */
GestureRecognizer.prototype.name;
/** @type {!Array<string>} */
GestureRecognizer.prototype.deps;
/** @type {function(): void} */
GestureRecognizer.prototype.reset;
/** @type {function(MouseEvent): void | undefined} */
GestureRecognizer.prototype.mousedown;
/** @type {(function(MouseEvent): void | undefined)} */
GestureRecognizer.prototype.mousemove;
/** @type {(function(MouseEvent): void | undefined)} */
GestureRecognizer.prototype.mouseup;
/** @type {(function(TouchEvent): void | undefined)} */
GestureRecognizer.prototype.touchstart;
/** @type {(function(TouchEvent): void | undefined)} */
GestureRecognizer.prototype.touchmove;
/** @type {(function(TouchEvent): void | undefined)} */
GestureRecognizer.prototype.touchend;
/** @type {(function(MouseEvent): void | undefined)} */
GestureRecognizer.prototype.click;
/** @type {!GestureInfo} */
GestureRecognizer.prototype.info;
/** @type {!Array<string>} */
GestureRecognizer.prototype.emits;