Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jboolean JDynamicNative::isNullNative() {
}

jni::local_ref<ReadableType> JDynamicNative::getTypeNative() {
return ReadableType::getType(payload_.type());
return jni::make_local(ReadableType::getType(payload_.type()));
}

jni::local_ref<jstring> JDynamicNative::asString() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,32 +27,32 @@ alias_ref<ReadableType> getTypeField(const char* fieldName) {

} // namespace

local_ref<ReadableType> ReadableType::getType(folly::dynamic::Type type) {
alias_ref<ReadableType> ReadableType::getType(folly::dynamic::Type type) {
switch (type) {
case folly::dynamic::Type::NULLT: {
static alias_ref<ReadableType> val = getTypeField("Null");
return make_local(val);
static auto val = getTypeField("Null");
return val;
}
case folly::dynamic::Type::BOOL: {
static alias_ref<ReadableType> val = getTypeField("Boolean");
return make_local(val);
static auto val = getTypeField("Boolean");
return val;
}
case folly::dynamic::Type::DOUBLE:
case folly::dynamic::Type::INT64: {
static alias_ref<ReadableType> val = getTypeField("Number");
return make_local(val);
static auto val = getTypeField("Number");
return val;
}
case folly::dynamic::Type::STRING: {
static alias_ref<ReadableType> val = getTypeField("String");
return make_local(val);
static auto val = getTypeField("String");
return val;
}
case folly::dynamic::Type::OBJECT: {
static alias_ref<ReadableType> val = getTypeField("Map");
return make_local(val);
static auto val = getTypeField("Map");
return val;
}
case folly::dynamic::Type::ARRAY: {
static alias_ref<ReadableType> val = getTypeField("Array");
return make_local(val);
static auto val = getTypeField("Array");
return val;
}
default:
throwNewJavaException(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ namespace facebook::react {
struct ReadableType : public jni::JavaClass<ReadableType> {
static auto constexpr kJavaDescriptor = "Lcom/facebook/react/bridge/ReadableType;";

static jni::local_ref<ReadableType> getType(folly::dynamic::Type type);
static jni::alias_ref<ReadableType> getType(folly::dynamic::Type type);
};

namespace exceptions {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ void ReadableNativeArray::mapException(std::exception_ptr ex) {
}

local_ref<JArrayClass<jobject>> ReadableNativeArray::importArray() {
auto size = static_cast<jint>(array_.size());
auto size = static_cast<jsize>(array_.size());
auto jarray = JArrayClass<jobject>::newArray(size);
for (jint ii = 0; ii < size; ii++) {
addDynamicToJArray(jarray, ii, array_.at(ii));
Expand All @@ -32,10 +32,10 @@ local_ref<JArrayClass<jobject>> ReadableNativeArray::importArray() {
}

local_ref<JArrayClass<jobject>> ReadableNativeArray::importTypeArray() {
auto size = static_cast<jint>(array_.size());
auto size = static_cast<jsize>(array_.size());
auto jarray = JArrayClass<jobject>::newArray(size);
for (jint ii = 0; ii < size; ii++) {
(*jarray)[ii] = ReadableType::getType(array_.at(ii).type());
jarray->setElement(ii, ReadableType::getType(array_.at(ii).type()).get());
}
return jarray;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,58 +21,51 @@ void ReadableNativeMap::mapException(std::exception_ptr ex) {
}

void addDynamicToJArray(
local_ref<JArrayClass<jobject>> jarray,
alias_ref<JArrayClass<jobject>> jarray,
jint index,
const folly::dynamic& dyn) {
local_ref<jobject> value;
switch (dyn.type()) {
case folly::dynamic::Type::NULLT: {
jarray->setElement(index, nullptr);
case folly::dynamic::Type::BOOL:
value = JBoolean::valueOf(static_cast<jboolean>(dyn.getBool()));
break;
}
case folly::dynamic::Type::BOOL: {
(*jarray)[index] =
JBoolean::valueOf(static_cast<unsigned char>(dyn.getBool()));
case folly::dynamic::Type::INT64:
value = JDouble::valueOf(static_cast<double>(dyn.getInt()));
break;
}
case folly::dynamic::Type::INT64: {
(*jarray)[index] = JDouble::valueOf(dyn.getInt());
case folly::dynamic::Type::DOUBLE:
value = JDouble::valueOf(dyn.getDouble());
break;
}
case folly::dynamic::Type::DOUBLE: {
(*jarray)[index] = JDouble::valueOf(dyn.getDouble());
case folly::dynamic::Type::STRING:
value = make_jstring(dyn.getString());
break;
}
case folly::dynamic::Type::STRING: {
(*jarray)[index] = make_jstring(dyn.getString());
case folly::dynamic::Type::OBJECT:
value = ReadableNativeMap::newObjectCxxArgs(dyn);
break;
}
case folly::dynamic::Type::OBJECT: {
(*jarray)[index] = ReadableNativeMap::newObjectCxxArgs(dyn);
case folly::dynamic::Type::ARRAY:
value = ReadableNativeArray::newObjectCxxArgs(dyn);
break;
}
case folly::dynamic::Type::ARRAY: {
(*jarray)[index] = ReadableNativeArray::newObjectCxxArgs(dyn);
break;
}
case folly::dynamic::Type::NULLT:
default:
jarray->setElement(index, nullptr);
break;
}
jarray->setElement(index, value.get());
}

local_ref<JArrayClass<jstring>> ReadableNativeMap::importKeys() {
throwIfConsumed();

keys_ = folly::dynamic::array();
if (map_ == nullptr) {
return JArrayClass<jstring>::newArray(0);
auto size = map_ == nullptr ? 0 : static_cast<jsize>(map_.size());
values_ = std::vector<const folly::dynamic*>(size);

auto jarray = JArrayClass<jstring>::newArray(size);
if (size == 0) {
return jarray;
}
auto jarray = JArrayClass<jstring>::newArray(map_.size());

jint i = 0;
for (auto& pair : map_.items()) {
auto value = pair.first.asString();
(*keys_).push_back(value);
(*jarray)[i++] = make_jstring(value);
values_[i] = &pair.second;
jarray->setElement(i++, make_jstring(pair.first.getString()).get());
}

return jarray;
Expand All @@ -81,23 +74,21 @@ local_ref<JArrayClass<jstring>> ReadableNativeMap::importKeys() {
local_ref<JArrayClass<jobject>> ReadableNativeMap::importValues() {
throwIfConsumed();

auto size = static_cast<jint>(keys_.value().size());
auto size = static_cast<jsize>(values_.size());
auto jarray = JArrayClass<jobject>::newArray(size);
for (jint ii = 0; ii < size; ii++) {
const std::string& key = (*keys_)[ii].getString();
addDynamicToJArray(jarray, ii, map_.at(key));
addDynamicToJArray(jarray, ii, *values_[ii]);
}
return jarray;
}

local_ref<JArrayClass<jobject>> ReadableNativeMap::importTypes() {
throwIfConsumed();

auto size = static_cast<jint>(keys_.value().size());
auto size = static_cast<jsize>(values_.size());
auto jarray = JArrayClass<jobject>::newArray(size);
for (jint ii = 0; ii < size; ii++) {
const std::string& key = (*keys_)[ii].getString();
(*jarray)[ii] = ReadableType::getType(map_.at(key).type());
jarray->setElement(ii, ReadableType::getType(values_[ii]->type()).get());
}
return jarray;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#include <fbjni/fbjni.h>
#include <folly/dynamic.h>
#include <folly/json.h>
#include <optional>
#include <vector>

#include "NativeCommon.h"
#include "NativeMap.h"
Expand All @@ -24,15 +24,15 @@ struct ReadableMap : jni::JavaClass<ReadableMap> {
static auto constexpr kJavaDescriptor = "Lcom/facebook/react/bridge/ReadableMap;";
};

void addDynamicToJArray(jni::local_ref<jni::JArrayClass<jobject>> jarray, jint index, const folly::dynamic &dyn);
void addDynamicToJArray(jni::alias_ref<jni::JArrayClass<jobject>> jarray, jint index, const folly::dynamic &dyn);

struct ReadableNativeMap : jni::HybridClass<ReadableNativeMap, NativeMap> {
static auto constexpr kJavaDescriptor = "Lcom/facebook/react/bridge/ReadableNativeMap;";

jni::local_ref<jni::JArrayClass<jstring>> importKeys();
jni::local_ref<jni::JArrayClass<jobject>> importValues();
jni::local_ref<jni::JArrayClass<jobject>> importTypes();
std::optional<folly::dynamic> keys_;
std::vector<const folly::dynamic *> values_{};
static jni::local_ref<jhybridobject> createWithContents(folly::dynamic &&map);

static void mapException(std::exception_ptr ex);
Expand Down
Loading