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

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

Issue 2610013002: [Devtools] Doctyped Object.js (Closed)
Patch Set: changes Created 3 years, 11 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..9dced11c512b8212e86a17426a33dd1a16c7810e 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)} */
dgozman 2017/01/09 21:46:18 Should be symbol|Emitable
allada 2017/01/09 23:01:54 Done.
+ 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/09 21:46:18 Let's not type here - should be enough in the cons
allada 2017/01/09 23:01:54 Done.
+
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(new:Common.Emitable, ...)} eventType
allada 2017/01/04 22:03:54 Nice little trick here to enforce T to be a Common
luoe 2017/01/09 19:07:00 Acknowledged.
* @param {function(!T)} listener
* @param {!Object=} thisObject
* @return {!Common.EventTarget.TypedEventDescriptor}
+ * @template T
*/
on(eventType, listener, thisObject) {
if (!this._listeners)
- this._listeners = new Map();
+ this._listeners = /** @type {!Map<symbol, !Array<!Common.Object._listenerCallbackTuple>>} */ (new Map());
if (!this._listeners.has(eventType))
this._listeners.set(eventType, []);
luoe 2017/01/09 19:07:00 This looks like the same case as line 49. Should
dgozman 2017/01/09 21:46:18 I'd say we should not type them both. In fact, loo
allada 2017/01/09 23:01:54 Done.
this._listeners.get(eventType).push({thisObject: thisObject, listener: listener});
@@ -109,10 +114,9 @@ Common.Object = class {
}
/**
- * @template T
* @override
- * @param {function(new:T, ...)} eventType
- * @param {function(!T)} listener
+ * @param {function(new:Common.Emitable, ...)} eventType
+ * @param {function(!Common.Emitable)} listener
* @param {!Object=} thisObject
*/
off(eventType, listener, thisObject) {
@@ -128,9 +132,8 @@ Common.Object = class {
}
/**
- * @template T
* @override
- * @param {!T} event
+ * @param {!Common.Emitable} event
*/
emit(event) {
var eventType = event.constructor;
@@ -143,6 +146,17 @@ Common.Object = class {
};
/**
+ * @interface
+ */
+Common.Emitable = function() {};
luoe 2017/01/09 19:07:00 Nit: Since emitter is spelled with 2 "t"s, I think
allada 2017/01/09 23:01:54 Done.
+
+/**
+ * @typedef {!{thisObject: (!Object|undefined), listener: function(!Common.Emitable)}}
+ */
+Common.Object._listenerCallbackTuple;
+
+/**
+ * @implements {Common.Emitable}
* @unrestricted
*/
Common.Event = class {
@@ -160,15 +174,72 @@ Common.Event = class {
Common.EventTarget = function() {};
/**
- * @param {!Array<!Common.EventTarget.EventDescriptor|!Common.EventTarget.TypedEventDescriptor>} eventList
+ * @record
+ * @template T
+ */
+Common.EventTarget.EventDescriptorStruct = class {
+ constructor() {
+ /** @type {!Common.EventTarget} */
+ this.eventTarget;
+ /** @type {!T} */
+ this.eventType;
+ /** @type {(!Object|undefined)} */
+ this.receiver;
+ /** @type {function(!Common.Emitable)} */
+ this.method;
+ }
+};
+
+/**
+ * @implements {Common.EventTarget.EventDescriptorStruct<symbol>}
+ * @unrestricted
+ */
+Common.EventTarget.EventDescriptor = class {
+ /**
+ * @param {!Common.EventTarget} eventTarget
+ * @param {symbol} eventType
+ * @param {(!Object|undefined)} receiver
+ * @param {function(!Common.Event)} method
+ */
+ constructor(eventTarget, eventType, receiver, method) {
+ this.eventTarget = eventTarget;
+ this.eventType = eventType;
+ this.receiver = receiver;
+ this.method = method;
+ }
+};
+
+/**
+ * @implements {Common.EventTarget.EventDescriptorStruct<function(new:Common.Emitable)>}
+ * @unrestricted
+ */
+Common.EventTarget.TypedEventDescriptor = class {
+ /**
+ * @param {!Common.EventTarget} eventTarget
+ * @param {function(new:Common.Emitable, ...)} eventType
+ * @param {(!Object|undefined)} receiver
+ * @param {function(!Common.Emitable)} method
+ */
+ constructor(eventTarget, eventType, receiver, method) {
+ this.eventTarget = eventTarget;
+ this.eventType = eventType;
+ this.receiver = receiver;
+ this.method = method;
+ }
+};
+
+/**
+ * @param {!Array<!Common.EventTarget.EventDescriptorStruct>} eventList
*/
Common.EventTarget.removeEventListeners = function(eventList) {
for (var i = 0; i < eventList.length; ++i) {
- var eventInfo = eventList[i];
- if (eventInfo instanceof Common.EventTarget.EventDescriptor)
+ if (eventList[i] instanceof Common.EventTarget.EventDescriptor) {
+ var eventInfo = /** @type {!Common.EventTarget.EventDescriptor} */ (eventList[i]);
eventInfo.eventTarget.removeEventListener(eventInfo.eventType, eventInfo.method, eventInfo.receiver);
- else
+ } else {
+ var eventInfo = /** @type {!Common.EventTarget.TypedEventDescriptor} */ (eventList[i]);
eventInfo.eventTarget.off(eventInfo.eventType, eventInfo.method, eventInfo.receiver);
+ }
}
// Do not hold references on unused event descriptors.
eventList.splice(0, eventList.length);
@@ -203,62 +274,23 @@ Common.EventTarget.prototype = {
dispatchEventToListeners(eventType, eventData) {},
/**
- * @template T
- * @param {function(new:T, ...)} eventType
+ * @param {function(new:Common.Emitable, ...)} 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 {function(new:Common.Emitable, ...)} eventType
+ * @param {function(!Common.Emitable)} listener
* @param {!Object=} thisObject
*/
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