Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(649)

Unified Diff: third_party/WebKit/Source/devtools/front_end/common/Object.js

Issue 2610013002: [Devtools] Doctyped Object.js (Closed)
Patch Set: [Devtools] Doctyped Object.js Created 3 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | third_party/WebKit/Source/devtools/front_end/resources/DatabaseModel.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/devtools/front_end/common/Object.js
diff --git a/third_party/WebKit/Source/devtools/front_end/common/Object.js b/third_party/WebKit/Source/devtools/front_end/common/Object.js
index 6f5d793c827a6d14ee94043e1b8a9248b4074a63..ed576c4e50204da6bb19cfc193a458e88f0e682d 100644
--- a/third_party/WebKit/Source/devtools/front_end/common/Object.js
+++ b/third_party/WebKit/Source/devtools/front_end/common/Object.js
@@ -27,6 +27,10 @@
* @unrestricted
*/
Common.Object = class {
+ constructor() {
+ /** @type {(!Map<symbol, !Array<!Common.Object._listenerCallbackTuple>>|undefined)} */
+ this._listeners;
+ }
/**
* @override
* @param {symbol} eventType
@@ -39,9 +43,10 @@ Common.Object = class {
console.assert(false);
if (!this._listeners)
- this._listeners = new Map();
+ this._listeners = /** @type {!Map<symbol, !Array<!Common.Object._listenerCallbackTuple>>} */ (new Map());
dgozman 2017/01/04 18:07:53 I'm surprised you have to cast here.
allada 2017/01/04 21:47:25 There are no side affects, but closure silently do
+
if (!this._listeners.has(eventType))
- this._listeners.set(eventType, []);
+ this._listeners.set(eventType, /** @type {!Array<!Common.Object._listenerCallbackTuple>} */ ([]));
this._listeners.get(eventType).push({thisObject: thisObject, listener: listener});
return new Common.EventTarget.EventDescriptor(this, eventType, thisObject, listener);
}
@@ -73,7 +78,7 @@ Common.Object = class {
* @return {boolean}
*/
hasEventListeners(eventType) {
- return this._listeners && this._listeners.has(eventType);
+ return !!(this._listeners && this._listeners.has(eventType));
}
/**
@@ -92,16 +97,16 @@ Common.Object = class {
}
/**
- * @template T
* @override
* @param {function(new:T, ...)} eventType
* @param {function(!T)} listener
* @param {!Object=} thisObject
* @return {!Common.EventTarget.TypedEventDescriptor}
+ * @template T
*/
on(eventType, listener, thisObject) {
if (!this._listeners)
dgozman 2017/01/04 18:07:53 Let's add a line here var emitableListener = /** @
allada 2017/01/04 21:47:25 Done.
- this._listeners = new Map();
+ this._listeners = /** @type {!Map<symbol, !Array<!Common.Object._listenerCallbackTuple>>} */ (new Map());
if (!this._listeners.has(eventType))
this._listeners.set(eventType, []);
this._listeners.get(eventType).push({thisObject: thisObject, listener: listener});
@@ -109,11 +114,11 @@ Common.Object = class {
}
/**
- * @template T
* @override
* @param {function(new:T, ...)} eventType
* @param {function(!T)} listener
* @param {!Object=} thisObject
+ * @template T
*/
off(eventType, listener, thisObject) {
dgozman 2017/01/04 18:07:53 ditto
allada 2017/01/04 21:47:25 Done.
if (!this._listeners || !this._listeners.has(eventType))
@@ -128,9 +133,8 @@ Common.Object = class {
}
/**
- * @template T
* @override
- * @param {!T} event
+ * @param {!Common.Emitable} event
*/
emit(event) {
var eventType = event.constructor;
@@ -143,6 +147,17 @@ Common.Object = class {
};
/**
+ * @interface
+ */
+Common.Emitable = function() {};
+
+/**
+ * @typedef {!{thisObject: (!Object|undefined), listener: function(!Common.Emitable)}}
+ */
+Common.Object._listenerCallbackTuple;
+
+/**
+ * @implements {Common.Emitable}
* @unrestricted
*/
Common.Event = class {
@@ -160,15 +175,49 @@ Common.Event = class {
Common.EventTarget = function() {};
/**
- * @param {!Array<!Common.EventTarget.EventDescriptor|!Common.EventTarget.TypedEventDescriptor>} eventList
+ * @unrestricted
+ */
+Common.EventTarget.EventDescriptor = class {
+ /**
+ * @param {!Common.EventTarget} eventTarget
+ * @param {symbol} eventType
+ * @param {(!Object|undefined)} receiver
+ * @param {function(?):?} method
+ */
+ constructor(eventTarget, eventType, receiver, method) {
+ this.eventTarget = eventTarget;
+ this.eventType = eventType;
+ this.receiver = receiver;
+ this.method = method;
+ }
+};
+
+/**
+ * @template T
+ * @unrestricted
+ */
+Common.EventTarget.TypedEventDescriptor = class {
+ /**
+ * @param {!Common.EventTarget} eventTarget
+ * @param {function(new:T, ...)} eventType
+ * @param {(!Object|undefined)} receiver
+ * @param {function(!T)} method
+ */
+ constructor(eventTarget, eventType, receiver, method) {
+ this.eventTarget = eventTarget;
+ this.eventType = eventType;
+ this.receiver = receiver;
+ this.method = method;
+ }
+};
+
+/**
+ * @param {!Array<!Common.EventTarget.EventDescriptor>} eventList
*/
Common.EventTarget.removeEventListeners = function(eventList) {
for (var i = 0; i < eventList.length; ++i) {
var eventInfo = eventList[i];
- if (eventInfo instanceof Common.EventTarget.EventDescriptor)
- eventInfo.eventTarget.removeEventListener(eventInfo.eventType, eventInfo.method, eventInfo.receiver);
- else
- eventInfo.eventTarget.off(eventInfo.eventType, eventInfo.method, eventInfo.receiver);
dgozman 2017/01/04 18:07:53 Removing this is incorrect.
+ eventInfo.eventTarget.removeEventListener(eventInfo.eventType, eventInfo.method, eventInfo.receiver);
}
// Do not hold references on unused event descriptors.
eventList.splice(0, eventList.length);
@@ -203,62 +252,24 @@ Common.EventTarget.prototype = {
dispatchEventToListeners(eventType, eventData) {},
/**
- * @template T
* @param {function(new:T, ...)} eventType
* @param {function(!T)} listener
* @param {!Object=} thisObject
* @return {!Common.EventTarget.TypedEventDescriptor}
+ * @template T
*/
on(eventType, listener, thisObject) {},
/**
- * @template T
* @param {function(new:T, ...)} eventType
* @param {function(!T)} listener
* @param {!Object=} thisObject
+ * @template T
*/
off(eventType, listener, thisObject) {},
/**
- * @template T
- * @param {!T} event
+ * @param {!Common.Emitable} event
*/
emit(event) {},
};
-
-/**
- * @unrestricted
- */
-Common.EventTarget.EventDescriptor = class {
- /**
- * @param {!Common.EventTarget} eventTarget
- * @param {symbol} eventType
- * @param {(!Object|undefined)} receiver
- * @param {function(?):?} method
- */
- constructor(eventTarget, eventType, receiver, method) {
- this.eventTarget = eventTarget;
- this.eventType = eventType;
- this.receiver = receiver;
- this.method = method;
- }
-};
-
-/**
- * @template T
- * @unrestricted
- */
-Common.EventTarget.TypedEventDescriptor = class {
- /**
- * @param {!Common.EventTarget} eventTarget
- * @param {function(new:T, ...)} eventType
- * @param {(!Object|undefined)} receiver
- * @param {function(!T)} method
- */
- constructor(eventTarget, eventType, receiver, method) {
- this.eventTarget = eventTarget;
- this.eventType = eventType;
- this.receiver = receiver;
- this.method = method;
- }
-};
« no previous file with comments | « no previous file | third_party/WebKit/Source/devtools/front_end/resources/DatabaseModel.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698