Skip to content

Commit 45b9b65

Browse files
sahrensfacebook-github-bot
authored andcommitted
factor out common native obj switch code
Summary: No reason to duplicate it. Reviewed By: mdvacca Differential Revision: D14488262 fbshipit-source-id: b5ce23ea591abc3e9bc07ee48cc756322cae220c
1 parent a062b34 commit 45b9b65

File tree

3 files changed

+71
-86
lines changed

3 files changed

+71
-86
lines changed

ReactAndroid/src/main/jni/react/jni/ReadableNativeArray.cpp

Lines changed: 7 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -18,49 +18,18 @@ __attribute__((visibility("default")))
1818
ReadableNativeArray::ReadableNativeArray(folly::dynamic array)
1919
: HybridBase(std::move(array)) {}
2020

21-
void ReadableNativeArray::mapException(const std::exception& ex) {
22-
if (dynamic_cast<const folly::TypeError*>(&ex) != nullptr) {
23-
throwNewJavaException(exceptions::gUnexpectedNativeTypeExceptionClass, ex.what());
21+
void ReadableNativeArray::mapException(const std::exception &ex) {
22+
if (dynamic_cast<const folly::TypeError *>(&ex) != nullptr) {
23+
throwNewJavaException(
24+
exceptions::gUnexpectedNativeTypeExceptionClass, ex.what());
2425
}
2526
}
2627

2728
local_ref<JArrayClass<jobject>> ReadableNativeArray::importArray() {
2829
jint size = array_.size();
2930
auto jarray = JArrayClass<jobject>::newArray(size);
3031
for (jint ii = 0; ii < size; ii++) {
31-
const auto &element = array_.at(ii);
32-
switch(element.type()) {
33-
case folly::dynamic::Type::NULLT: {
34-
jarray->setElement(ii, nullptr);
35-
break;
36-
}
37-
case folly::dynamic::Type::BOOL: {
38-
(*jarray)[ii] = JBoolean::valueOf(element.getBool());
39-
break;
40-
}
41-
case folly::dynamic::Type::INT64: {
42-
(*jarray)[ii] = JDouble::valueOf(element.getInt());
43-
break;
44-
}
45-
case folly::dynamic::Type::DOUBLE: {
46-
(*jarray)[ii] = JDouble::valueOf(element.getDouble());
47-
break;
48-
}
49-
case folly::dynamic::Type::STRING: {
50-
(*jarray)[ii] = make_jstring(element.getString());
51-
break;
52-
}
53-
case folly::dynamic::Type::OBJECT: {
54-
(*jarray)[ii] = ReadableNativeMap::newObjectCxxArgs(element);
55-
break;
56-
}
57-
case folly::dynamic::Type::ARRAY: {
58-
(*jarray)[ii] = ReadableNativeArray::newObjectCxxArgs(element);
59-
break;
60-
}
61-
default:
62-
break;
63-
}
32+
addDynamicToJArray(jarray, ii, array_.at(ii));
6433
}
6534
return jarray;
6635
}
@@ -76,8 +45,8 @@ local_ref<JArrayClass<jobject>> ReadableNativeArray::importTypeArray() {
7645

7746
void ReadableNativeArray::registerNatives() {
7847
registerHybrid({
79-
makeNativeMethod("importArray", ReadableNativeArray::importArray),
80-
makeNativeMethod("importTypeArray", ReadableNativeArray::importTypeArray),
48+
makeNativeMethod("importArray", ReadableNativeArray::importArray),
49+
makeNativeMethod("importTypeArray", ReadableNativeArray::importTypeArray),
8150
});
8251
}
8352

ReactAndroid/src/main/jni/react/jni/ReadableNativeMap.cpp

Lines changed: 52 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,49 @@ using namespace facebook::jni;
1010
namespace facebook {
1111
namespace react {
1212

13-
void ReadableNativeMap::mapException(const std::exception& ex) {
14-
if (dynamic_cast<const folly::TypeError*>(&ex) != nullptr) {
15-
throwNewJavaException(exceptions::gUnexpectedNativeTypeExceptionClass, ex.what());
13+
void ReadableNativeMap::mapException(const std::exception &ex) {
14+
if (dynamic_cast<const folly::TypeError *>(&ex) != nullptr) {
15+
throwNewJavaException(
16+
exceptions::gUnexpectedNativeTypeExceptionClass, ex.what());
17+
}
18+
}
19+
20+
void addDynamicToJArray(
21+
local_ref<JArrayClass<jobject>> jarray,
22+
jint index,
23+
const folly::dynamic &dyn) {
24+
switch (dyn.type()) {
25+
case folly::dynamic::Type::NULLT: {
26+
jarray->setElement(index, nullptr);
27+
break;
28+
}
29+
case folly::dynamic::Type::BOOL: {
30+
(*jarray)[index] = JBoolean::valueOf(dyn.getBool());
31+
break;
32+
}
33+
case folly::dynamic::Type::INT64: {
34+
(*jarray)[index] = JDouble::valueOf(dyn.getInt());
35+
break;
36+
}
37+
case folly::dynamic::Type::DOUBLE: {
38+
(*jarray)[index] = JDouble::valueOf(dyn.getDouble());
39+
break;
40+
}
41+
case folly::dynamic::Type::STRING: {
42+
(*jarray)[index] = make_jstring(dyn.getString());
43+
break;
44+
}
45+
case folly::dynamic::Type::OBJECT: {
46+
(*jarray)[index] = ReadableNativeMap::newObjectCxxArgs(dyn);
47+
break;
48+
}
49+
case folly::dynamic::Type::ARRAY: {
50+
(*jarray)[index] = ReadableNativeArray::newObjectCxxArgs(dyn);
51+
break;
52+
}
53+
default:
54+
jarray->setElement(index, nullptr);
55+
break;
1656
}
1757
}
1858

@@ -35,41 +75,7 @@ local_ref<JArrayClass<jobject>> ReadableNativeMap::importValues() {
3575
auto jarray = JArrayClass<jobject>::newArray(size);
3676
for (jint ii = 0; ii < size; ii++) {
3777
const std::string &key = keys_.value()[ii].getString();
38-
const auto &element = map_.at(key);
39-
switch(element.type()) {
40-
case folly::dynamic::Type::NULLT: {
41-
jarray->setElement(ii, nullptr);
42-
break;
43-
}
44-
case folly::dynamic::Type::BOOL: {
45-
(*jarray)[ii] = JBoolean::valueOf(element.getBool());
46-
break;
47-
}
48-
case folly::dynamic::Type::INT64: {
49-
(*jarray)[ii] = JDouble::valueOf(element.getInt());
50-
break;
51-
}
52-
case folly::dynamic::Type::DOUBLE: {
53-
(*jarray)[ii] = JDouble::valueOf(element.getDouble());
54-
break;
55-
}
56-
case folly::dynamic::Type::STRING: {
57-
(*jarray)[ii] = make_jstring(element.getString());
58-
break;
59-
}
60-
case folly::dynamic::Type::OBJECT: {
61-
(*jarray)[ii] = ReadableNativeMap::newObjectCxxArgs(element);
62-
break;
63-
}
64-
case folly::dynamic::Type::ARRAY: {
65-
(*jarray)[ii] = ReadableNativeArray::newObjectCxxArgs(element);
66-
break;
67-
}
68-
default: {
69-
jarray->setElement(ii, nullptr);
70-
break;
71-
}
72-
}
78+
addDynamicToJArray(jarray, ii, map_.at(key));
7379
}
7480
return jarray;
7581
}
@@ -84,14 +90,17 @@ local_ref<JArrayClass<jobject>> ReadableNativeMap::importTypes() {
8490
return jarray;
8591
}
8692

87-
local_ref<ReadableNativeMap::jhybridobject> ReadableNativeMap::createWithContents(folly::dynamic&& map) {
93+
local_ref<ReadableNativeMap::jhybridobject>
94+
ReadableNativeMap::createWithContents(folly::dynamic &&map) {
8895
if (map.isNull()) {
8996
return local_ref<jhybridobject>(nullptr);
9097
}
9198

9299
if (!map.isObject()) {
93-
throwNewJavaException(exceptions::gUnexpectedNativeTypeExceptionClass,
94-
"expected Map, got a %s", map.typeName());
100+
throwNewJavaException(
101+
exceptions::gUnexpectedNativeTypeExceptionClass,
102+
"expected Map, got a %s",
103+
map.typeName());
95104
}
96105

97106
return newObjectCxxArgs(std::move(map));
@@ -105,5 +114,5 @@ void ReadableNativeMap::registerNatives() {
105114
});
106115
}
107116

108-
} // namespace react
109-
} // namespace facebook
117+
} // namespace react
118+
} // namespace facebook

ReactAndroid/src/main/jni/react/jni/ReadableNativeMap.h

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
#pragma once
77

88
#include <fb/fbjni.h>
9+
#include <folly/Optional.h>
910
#include <folly/dynamic.h>
1011
#include <folly/json.h>
11-
#include <folly/Optional.h>
1212

1313
#include "NativeCommon.h"
1414
#include "NativeMap.h"
@@ -20,19 +20,26 @@ namespace react {
2020
struct WritableNativeMap;
2121

2222
struct ReadableMap : jni::JavaClass<ReadableMap> {
23-
static auto constexpr kJavaDescriptor = "Lcom/facebook/react/bridge/ReadableMap;";
23+
static auto constexpr kJavaDescriptor =
24+
"Lcom/facebook/react/bridge/ReadableMap;";
2425
};
2526

27+
void addDynamicToJArray(
28+
jni::local_ref<jni::JArrayClass<jobject>> jarray,
29+
jint index,
30+
const folly::dynamic &dyn);
31+
2632
struct ReadableNativeMap : jni::HybridClass<ReadableNativeMap, NativeMap> {
27-
static auto constexpr kJavaDescriptor = "Lcom/facebook/react/bridge/ReadableNativeMap;";
33+
static auto constexpr kJavaDescriptor =
34+
"Lcom/facebook/react/bridge/ReadableNativeMap;";
2835

2936
jni::local_ref<jni::JArrayClass<jstring>> importKeys();
3037
jni::local_ref<jni::JArrayClass<jobject>> importValues();
3138
jni::local_ref<jni::JArrayClass<jobject>> importTypes();
3239
folly::Optional<folly::dynamic> keys_;
33-
static jni::local_ref<jhybridobject> createWithContents(folly::dynamic&& map);
40+
static jni::local_ref<jhybridobject> createWithContents(folly::dynamic &&map);
3441

35-
static void mapException(const std::exception& ex);
42+
static void mapException(const std::exception &ex);
3643

3744
static void registerNatives();
3845

0 commit comments

Comments
 (0)