diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java index 08f5a7021..6929ea3d7 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java @@ -361,16 +361,15 @@ public class CatalystInstanceImpl implements CatalystInstance { private String buildModulesConfigJSONProperty( NativeModuleRegistry nativeModuleRegistry, JavaScriptModulesConfig jsModulesConfig) { - // TODO(5300733): Serialize config using single json generator JsonFactory jsonFactory = new JsonFactory(); StringWriter writer = new StringWriter(); try { JsonGenerator jg = jsonFactory.createGenerator(writer); jg.writeStartObject(); jg.writeFieldName("remoteModuleConfig"); - jg.writeRawValue(nativeModuleRegistry.moduleDescriptions()); + nativeModuleRegistry.writeModuleDescriptions(jg); jg.writeFieldName("localModulesConfig"); - jg.writeRawValue(jsModulesConfig.moduleDescriptions()); + jsModulesConfig.writeModuleDescriptions(jg); jg.writeEndObject(); jg.close(); } catch (IOException ioe) { diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaScriptModulesConfig.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaScriptModulesConfig.java index bc75da277..abeba7230 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaScriptModulesConfig.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaScriptModulesConfig.java @@ -10,12 +10,10 @@ package com.facebook.react.bridge; import java.io.IOException; -import java.io.StringWriter; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; -import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonGenerator; /** @@ -33,23 +31,14 @@ public class JavaScriptModulesConfig { return mModules; } - /*package*/ String moduleDescriptions() { - JsonFactory jsonFactory = new JsonFactory(); - StringWriter writer = new StringWriter(); - try { - JsonGenerator jg = jsonFactory.createGenerator(writer); - jg.writeStartObject(); - for (JavaScriptModuleRegistration registration : mModules) { - jg.writeObjectFieldStart(registration.getName()); - appendJSModuleToJSONObject(jg, registration); - jg.writeEndObject(); - } + /*package*/ void writeModuleDescriptions(JsonGenerator jg) throws IOException { + jg.writeStartObject(); + for (JavaScriptModuleRegistration registration : mModules) { + jg.writeObjectFieldStart(registration.getName()); + appendJSModuleToJSONObject(jg, registration); jg.writeEndObject(); - jg.close(); - } catch (IOException ioe) { - throw new RuntimeException("Unable to serialize JavaScript module declaration", ioe); } - return writer.getBuffer().toString(); + jg.writeEndObject(); } private void appendJSModuleToJSONObject( diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModuleRegistry.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModuleRegistry.java index 50bdd69bb..389fd66b4 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModuleRegistry.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModuleRegistry.java @@ -10,17 +10,16 @@ package com.facebook.react.bridge; import java.io.IOException; -import java.io.StringWriter; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.List; import java.util.Map; import com.facebook.react.common.MapBuilder; import com.facebook.infer.annotation.Assertions; import com.facebook.systrace.Systrace; -import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonGenerator; /** @@ -28,18 +27,15 @@ import com.fasterxml.jackson.core.JsonGenerator; */ public class NativeModuleRegistry { - private final ArrayList mModuleTable; + private final List mModuleTable; private final Map, NativeModule> mModuleInstances; - private final String mModuleDescriptions; private final ArrayList mBatchCompleteListenerModules; private NativeModuleRegistry( - ArrayList moduleTable, - Map, NativeModule> moduleInstances, - String moduleDescriptions) { + List moduleTable, + Map, NativeModule> moduleInstances) { mModuleTable = moduleTable; mModuleInstances = moduleInstances; - mModuleDescriptions = moduleDescriptions; mBatchCompleteListenerModules = new ArrayList(mModuleTable.size()); for (int i = 0; i < mModuleTable.size(); i++) { @@ -62,8 +58,29 @@ public class NativeModuleRegistry { definition.call(catalystInstance, methodId, parameters); } - /* package */ String moduleDescriptions() { - return mModuleDescriptions; + /* package */ void writeModuleDescriptions(JsonGenerator jg) throws IOException { + Systrace.beginSection(Systrace.TRACE_TAG_REACT_JAVA_BRIDGE, "CreateJSON"); + try { + jg.writeStartObject(); + for (ModuleDefinition moduleDef : mModuleTable) { + jg.writeObjectFieldStart(moduleDef.name); + jg.writeNumberField("moduleID", moduleDef.id); + jg.writeObjectFieldStart("methods"); + for (int i = 0; i < moduleDef.methods.size(); i++) { + MethodRegistration method = moduleDef.methods.get(i); + jg.writeObjectFieldStart(method.name); + jg.writeNumberField("methodID", i); + jg.writeStringField("type", method.method.getType()); + jg.writeEndObject(); + } + jg.writeEndObject(); + moduleDef.target.writeConstantsField(jg, "constants"); + jg.writeEndObject(); + } + jg.writeEndObject(); + } finally { + Systrace.endSection(Systrace.TRACE_TAG_REACT_JAVA_BRIDGE); + } } /* package */ void notifyCatalystInstanceDestroy() { @@ -174,45 +191,16 @@ public class NativeModuleRegistry { } public NativeModuleRegistry build() { - Systrace.beginSection(Systrace.TRACE_TAG_REACT_JAVA_BRIDGE, "CreateJSON"); - ArrayList moduleTable = new ArrayList<>(); - Map, NativeModule> moduleInstances = MapBuilder.newHashMap(); - String moduleDefinitionJson; - try { - JsonFactory jsonFactory = new JsonFactory(); - StringWriter writer = new StringWriter(); - try { - JsonGenerator jg = jsonFactory.createGenerator(writer); - jg.writeStartObject(); - int idx = 0; - for (NativeModule module : mModules.values()) { - ModuleDefinition moduleDef = new ModuleDefinition(idx++, module.getName(), module); - moduleTable.add(moduleDef); - moduleInstances.put(module.getClass(), module); - jg.writeObjectFieldStart(moduleDef.name); - jg.writeNumberField("moduleID", moduleDef.id); - jg.writeObjectFieldStart("methods"); - for (int i = 0; i < moduleDef.methods.size(); i++) { - MethodRegistration method = moduleDef.methods.get(i); - jg.writeObjectFieldStart(method.name); - jg.writeNumberField("methodID", i); - jg.writeStringField("type", method.method.getType()); - jg.writeEndObject(); - } - jg.writeEndObject(); - moduleDef.target.writeConstantsField(jg, "constants"); - jg.writeEndObject(); - } - jg.writeEndObject(); - jg.close(); - } catch (IOException ioe) { - throw new RuntimeException("Unable to serialize Java module configuration", ioe); - } - moduleDefinitionJson = writer.getBuffer().toString(); - } finally { - Systrace.endSection(Systrace.TRACE_TAG_REACT_JAVA_BRIDGE); + List moduleTable = new ArrayList<>(); + Map, NativeModule> moduleInstances = new HashMap<>(); + + int idx = 0; + for (NativeModule module : mModules.values()) { + ModuleDefinition moduleDef = new ModuleDefinition(idx++, module.getName(), module); + moduleTable.add(moduleDef); + moduleInstances.put(module.getClass(), module); } - return new NativeModuleRegistry(moduleTable, moduleInstances, moduleDefinitionJson); + return new NativeModuleRegistry(moduleTable, moduleInstances); } } }