| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2014 Google Inc. All rights reserved. | 2 * Copyright (C) 2014 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 this._cachedTypeClasses = {}; | 53 this._cachedTypeClasses = {}; |
| 54 | 54 |
| 55 /** | 55 /** |
| 56 * @type {!Object.<string, !WebInspector.ModuleManager.ModuleDescriptor>} | 56 * @type {!Object.<string, !WebInspector.ModuleManager.ModuleDescriptor>} |
| 57 */ | 57 */ |
| 58 this._descriptorsMap = {}; | 58 this._descriptorsMap = {}; |
| 59 for (var i = 0; i < descriptors.length; ++i) | 59 for (var i = 0; i < descriptors.length; ++i) |
| 60 this._descriptorsMap[descriptors[i]["name"]] = descriptors[i]; | 60 this._descriptorsMap[descriptors[i]["name"]] = descriptors[i]; |
| 61 } | 61 } |
| 62 | 62 |
| 63 /** | |
| 64 * @param {!WebInspector.ModuleManager.Extension} extension | |
| 65 * @param {?function(!Function):boolean} predicate | |
| 66 */ | |
| 67 WebInspector.ModuleManager._checkExtensionApplicability = function(extension, pr
edicate) | |
| 68 { | |
| 69 if (!predicate) | |
| 70 return false; | |
| 71 var contextTypes = /** @type {!Array.<string>|undefined} */ (extension.descr
iptor().contextTypes); | |
| 72 if (!contextTypes) | |
| 73 return true; | |
| 74 for (var i = 0; i < contextTypes.length; ++i) { | |
| 75 var contextType = /** @type {!Function} */ (window.eval(contextTypes[i])
); | |
| 76 var isMatching = predicate(contextType); | |
| 77 if (isMatching) | |
| 78 return true; | |
| 79 } | |
| 80 return false; | |
| 81 } | |
| 82 | |
| 83 /** | |
| 84 * @param {!WebInspector.ModuleManager.Extension} extension | |
| 85 * @param {?Object} context | |
| 86 * @return {boolean} | |
| 87 */ | |
| 88 WebInspector.ModuleManager.isExtensionApplicableToContext = function(extension,
context) | |
| 89 { | |
| 90 if (!context) | |
| 91 return true; | |
| 92 return WebInspector.ModuleManager._checkExtensionApplicability(extension, is
InstanceOf); | |
| 93 | |
| 94 /** | |
| 95 * @param {!Function} targetType | |
| 96 * @return {boolean} | |
| 97 */ | |
| 98 function isInstanceOf(targetType) | |
| 99 { | |
| 100 return context instanceof targetType; | |
| 101 } | |
| 102 } | |
| 103 | |
| 104 /** | |
| 105 * @param {!WebInspector.ModuleManager.Extension} extension | |
| 106 * @param {!Set.<!Function>=} currentContextTypes | |
| 107 * @return {boolean} | |
| 108 */ | |
| 109 WebInspector.ModuleManager.isExtensionApplicableToContextTypes = function(extens
ion, currentContextTypes) | |
| 110 { | |
| 111 if (!extension.descriptor().contextTypes) | |
| 112 return true; | |
| 113 | |
| 114 return WebInspector.ModuleManager._checkExtensionApplicability(extension, cu
rrentContextTypes ? isContextTypeKnown : null); | |
| 115 | |
| 116 /** | |
| 117 * @param {!Function} targetType | |
| 118 * @return {boolean} | |
| 119 */ | |
| 120 function isContextTypeKnown(targetType) | |
| 121 { | |
| 122 return currentContextTypes.contains(targetType); | |
| 123 } | |
| 124 } | |
| 125 | |
| 126 WebInspector.ModuleManager.prototype = { | 63 WebInspector.ModuleManager.prototype = { |
| 127 /** | 64 /** |
| 128 * @param {!Array.<string>} configuration | 65 * @param {!Array.<string>} configuration |
| 129 */ | 66 */ |
| 130 registerModules: function(configuration) | 67 registerModules: function(configuration) |
| 131 { | 68 { |
| 132 for (var i = 0; i < configuration.length; ++i) | 69 for (var i = 0; i < configuration.length; ++i) |
| 133 this.registerModule(configuration[i]); | 70 this.registerModule(configuration[i]); |
| 134 }, | 71 }, |
| 135 | 72 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 153 | 90 |
| 154 /** | 91 /** |
| 155 * @param {string} moduleName | 92 * @param {string} moduleName |
| 156 */ | 93 */ |
| 157 loadModule: function(moduleName) | 94 loadModule: function(moduleName) |
| 158 { | 95 { |
| 159 this._modulesMap[moduleName]._load(); | 96 this._modulesMap[moduleName]._load(); |
| 160 }, | 97 }, |
| 161 | 98 |
| 162 /** | 99 /** |
| 100 * @param {!WebInspector.ModuleManager.Extension} extension |
| 101 * @param {?function(function(new:Object)):boolean} predicate |
| 102 * @return {boolean} |
| 103 */ |
| 104 _checkExtensionApplicability: function(extension, predicate) |
| 105 { |
| 106 if (!predicate) |
| 107 return false; |
| 108 var contextTypes = /** @type {!Array.<string>|undefined} */ (extension.d
escriptor().contextTypes); |
| 109 if (!contextTypes) |
| 110 return true; |
| 111 for (var i = 0; i < contextTypes.length; ++i) { |
| 112 var contextType = this._resolve(contextTypes[i]); |
| 113 var isMatching = !!contextType && predicate(contextType); |
| 114 if (isMatching) |
| 115 return true; |
| 116 } |
| 117 return false; |
| 118 }, |
| 119 |
| 120 /** |
| 121 * @param {!WebInspector.ModuleManager.Extension} extension |
| 122 * @param {?Object} context |
| 123 * @return {boolean} |
| 124 */ |
| 125 isExtensionApplicableToContext: function(extension, context) |
| 126 { |
| 127 if (!context) |
| 128 return true; |
| 129 return this._checkExtensionApplicability(extension, isInstanceOf); |
| 130 |
| 131 /** |
| 132 * @param {!Function} targetType |
| 133 * @return {boolean} |
| 134 */ |
| 135 function isInstanceOf(targetType) |
| 136 { |
| 137 return context instanceof targetType; |
| 138 } |
| 139 }, |
| 140 |
| 141 /** |
| 142 * @param {!WebInspector.ModuleManager.Extension} extension |
| 143 * @param {!Set.<!Function>=} currentContextTypes |
| 144 * @return {boolean} |
| 145 */ |
| 146 isExtensionApplicableToContextTypes: function(extension, currentContextTypes
) |
| 147 { |
| 148 if (!extension.descriptor().contextTypes) |
| 149 return true; |
| 150 |
| 151 return this._checkExtensionApplicability(extension, currentContextTypes
? isContextTypeKnown : null); |
| 152 |
| 153 /** |
| 154 * @param {!Function} targetType |
| 155 * @return {boolean} |
| 156 */ |
| 157 function isContextTypeKnown(targetType) |
| 158 { |
| 159 return currentContextTypes.contains(targetType); |
| 160 } |
| 161 }, |
| 162 |
| 163 /** |
| 163 * @param {string|!Function} type | 164 * @param {string|!Function} type |
| 164 * @param {?Object=} context | 165 * @param {?Object=} context |
| 165 * @return {!Array.<!WebInspector.ModuleManager.Extension>} | 166 * @return {!Array.<!WebInspector.ModuleManager.Extension>} |
| 166 */ | 167 */ |
| 167 extensions: function(type, context) | 168 extensions: function(type, context) |
| 168 { | 169 { |
| 169 /** | 170 /** |
| 170 * @param {!WebInspector.ModuleManager.Extension} extension | 171 * @param {!WebInspector.ModuleManager.Extension} extension |
| 171 * @return {boolean} | 172 * @return {boolean} |
| 172 */ | 173 */ |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 246 if (name2 in orderForName) | 247 if (name2 in orderForName) |
| 247 return 1; | 248 return 1; |
| 248 return name1.compareTo(name2); | 249 return name1.compareTo(name2); |
| 249 } | 250 } |
| 250 return result; | 251 return result; |
| 251 }, | 252 }, |
| 252 | 253 |
| 253 /** | 254 /** |
| 254 * @return {?function(new:Object)} | 255 * @return {?function(new:Object)} |
| 255 */ | 256 */ |
| 256 resolve: function(typeName) | 257 _resolve: function(typeName) |
| 257 { | 258 { |
| 258 if (!this._cachedTypeClasses[typeName]) { | 259 if (!this._cachedTypeClasses[typeName]) { |
| 259 var path = typeName.substring(1).split("."); | 260 var path = typeName.split("."); |
| 260 var object = window; | 261 var object = window; |
| 261 for (var i = 0; object && (i < path.length); ++i) | 262 for (var i = 0; object && (i < path.length); ++i) |
| 262 object = object[path[i]]; | 263 object = object[path[i]]; |
| 263 if (object) | 264 if (object) |
| 264 this._cachedTypeClasses[typeName] = /** @type function(new:Objec
t) */(object); | 265 this._cachedTypeClasses[typeName] = /** @type function(new:Objec
t) */(object); |
| 265 } | 266 } |
| 266 return this._cachedTypeClasses[typeName]; | 267 return this._cachedTypeClasses[typeName]; |
| 267 } | 268 } |
| 268 | |
| 269 } | 269 } |
| 270 | 270 |
| 271 /** | 271 /** |
| 272 * @constructor | 272 * @constructor |
| 273 */ | 273 */ |
| 274 WebInspector.ModuleManager.ModuleDescriptor = function() | 274 WebInspector.ModuleManager.ModuleDescriptor = function() |
| 275 { | 275 { |
| 276 /** | 276 /** |
| 277 * @type {string} | 277 * @type {string} |
| 278 */ | 278 */ |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 401 return this._module; | 401 return this._module; |
| 402 }, | 402 }, |
| 403 | 403 |
| 404 /** | 404 /** |
| 405 * @return {?function(new:Object)} | 405 * @return {?function(new:Object)} |
| 406 */ | 406 */ |
| 407 _typeClass: function() | 407 _typeClass: function() |
| 408 { | 408 { |
| 409 if (!this._hasTypeClass) | 409 if (!this._hasTypeClass) |
| 410 return null; | 410 return null; |
| 411 return this._module._manager.resolve(this._type); | 411 return this._module._manager._resolve(this._type.substring(1)); |
| 412 }, | 412 }, |
| 413 | 413 |
| 414 /** | 414 /** |
| 415 * @param {?Object} context | 415 * @param {?Object} context |
| 416 * @return {boolean} | 416 * @return {boolean} |
| 417 */ | 417 */ |
| 418 isApplicable: function(context) | 418 isApplicable: function(context) |
| 419 { | 419 { |
| 420 return WebInspector.ModuleManager.isExtensionApplicableToContext(this, c
ontext); | 420 return this._module._manager.isExtensionApplicableToContext(this, contex
t); |
| 421 }, | 421 }, |
| 422 | 422 |
| 423 /** | 423 /** |
| 424 * @return {?Object} | 424 * @return {?Object} |
| 425 */ | 425 */ |
| 426 instance: function() | 426 instance: function() |
| 427 { | 427 { |
| 428 if (!this._className) | 428 if (!this._className) |
| 429 return null; | 429 return null; |
| 430 | 430 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 477 } | 477 } |
| 478 | 478 |
| 479 WebInspector.Revealer.prototype = { | 479 WebInspector.Revealer.prototype = { |
| 480 /** | 480 /** |
| 481 * @param {!Object} object | 481 * @param {!Object} object |
| 482 */ | 482 */ |
| 483 reveal: function(object) {} | 483 reveal: function(object) {} |
| 484 } | 484 } |
| 485 | 485 |
| 486 WebInspector.moduleManager = new WebInspector.ModuleManager(allDescriptors); | 486 WebInspector.moduleManager = new WebInspector.ModuleManager(allDescriptors); |
| OLD | NEW |