Backout D2570057

Reviewed By: kmagiera

Differential Revision: D2590341

fb-gh-sync-id: 8a6073de3ef2a6e87b785a2bb252468a37c081cf
This commit is contained in:
David Aurelio
2015-10-28 08:26:50 -07:00
committed by facebook-github-bot-9
parent 7d4f5a5c47
commit 4ac898fceb
7 changed files with 79 additions and 161 deletions

View File

@@ -30,6 +30,7 @@ let MIN_TIME_BETWEEN_FLUSHES_MS = 5;
let SPY_MODE = false;
let MethodTypes = keyMirror({
local: null,
remote: null,
remoteAsync: null,
});
@@ -61,18 +62,15 @@ class MessageQueue {
'flushedQueue',
].forEach((fn) => this[fn] = this[fn].bind(this));
let modulesConfig = this._genModulesConfig(remoteModules);
this._genModules(modulesConfig);
this._genModules(remoteModules);
localModules && this._genLookupTables(
this._genModulesConfig(localModules),this._moduleTable, this._methodTable
);
localModules, this._moduleTable, this._methodTable);
this._debugInfo = {};
this._remoteModuleTable = {};
this._remoteMethodTable = {};
this._genLookupTables(
modulesConfig, this._remoteModuleTable, this._remoteMethodTable
);
remoteModules, this._remoteModuleTable, this._remoteMethodTable);
}
/**
@@ -184,118 +182,43 @@ class MessageQueue {
/**
* Private helper methods
*/
/**
* Converts the old, object-based module structure to the new
* array-based structure. TODO (t8823865) Removed this
* functin once Android has been updated.
*/
_genModulesConfig(modules /* array or object */) {
if (Array.isArray(modules)) {
return modules;
} else {
let moduleArray = [];
let moduleNames = Object.keys(modules);
for (var i = 0, l = moduleNames.length; i < l; i++) {
let moduleName = moduleNames[i];
let moduleConfig = modules[moduleName];
let module = [moduleName];
if (moduleConfig.constants) {
module.push(moduleConfig.constants);
}
let methodsConfig = moduleConfig.methods;
if (methodsConfig) {
let methods = [];
let asyncMethods = [];
let methodNames = Object.keys(methodsConfig);
for (var j = 0, ll = methodNames.length; j < ll; j++) {
let methodName = methodNames[j];
let methodConfig = methodsConfig[methodName];
methods[methodConfig.methodID] = methodName;
if (methodConfig.type === MethodTypes.remoteAsync) {
asyncMethods.push(methodConfig.methodID);
}
}
if (methods.length) {
module.push(methods);
if (asyncMethods.length) {
module.push(asyncMethods);
}
}
}
moduleArray[moduleConfig.moduleID] = module;
}
return moduleArray;
}
}
_genLookupTables(modulesConfig, moduleTable, methodTable) {
for (var moduleID = 0, l = modulesConfig.length; moduleID < l; moduleID++) {
let module = modulesConfig[moduleID];
if (!module) {
continue;
}
let moduleName = module[0];
_genLookupTables(localModules, moduleTable, methodTable) {
let moduleNames = Object.keys(localModules);
for (var i = 0, l = moduleNames.length; i < l; i++) {
let moduleName = moduleNames[i];
let methods = localModules[moduleName].methods || {};
let moduleID = localModules[moduleName].moduleID;
moduleTable[moduleID] = moduleName;
methodTable[moduleID] = {};
if (module.length > 1) {
let methodsIndex = 1;
if (!Array.isArray(module[1])) {
methodsIndex = 2;
}
if (module.length > methodsIndex) {
let methods = module[methodsIndex];
for (var methodID = 0, ll = methods.length; methodID < ll; methodID++) {
methodTable[moduleID][methodID] = methods[methodID];
}
}
let methodNames = Object.keys(methods);
for (var j = 0, k = methodNames.length; j < k; j++) {
let methodName = methodNames[j];
let methodConfig = methods[methodName];
methodTable[moduleID][methodConfig.methodID] = methodName;
}
}
}
_genModules(remoteModules) {
for (var i = 0, l = remoteModules.length; i < l; i++) {
let module = remoteModules[i];
if (!module) {
continue;
}
let moduleName = module[0];
let constants = null;
let methods = null;
let asyncMethods = null;
if (module.length > 0) {
let methodsIndex = 1;
if (!Array.isArray(module[1])) {
constants = module[1];
methodsIndex = 2;
}
if (module.length > methodsIndex) {
methods = module[methodsIndex];
if (module.length > methodsIndex) {
asyncMethods = module[methodsIndex];
}
}
}
let moduleConfig = {
moduleID: i,
constants,
methods,
asyncMethods,
};
let moduleNames = Object.keys(remoteModules);
for (var i = 0, l = moduleNames.length; i < l; i++) {
let moduleName = moduleNames[i];
let moduleConfig = remoteModules[moduleName];
this.RemoteModules[moduleName] = this._genModule({}, moduleConfig);
}
}
_genModule(module, moduleConfig) {
let methods = moduleConfig.methods || [];
let asyncMethods = moduleConfig.asyncMethods || [];
for (var methodID = 0, l = methods.length; methodID < l; methodID++) {
let methodName = methods[methodID];
let isAsync = (asyncMethods.indexOf(methodID) !== -1);
let methods = moduleConfig.methods || {};
let methodNames = Object.keys(methods);
for (var i = 0, l = methodNames.length; i < l; i++) {
let methodName = methodNames[i];
let methodConfig = methods[methodName];
module[methodName] = this._genMethod(
moduleConfig.moduleID,
methodID,
isAsync ? MethodTypes.remoteAsync : MethodTypes.remote
methodConfig.methodID,
methodConfig.type || MethodTypes.remote
);
}
Object.assign(module, moduleConfig.constants);
@@ -303,6 +226,10 @@ class MessageQueue {
}
_genMethod(module, method, type) {
if (type === MethodTypes.local) {
return null;
}
let fn = null;
let self = this;
if (type === MethodTypes.remoteAsync) {