Replace getInt with asInt in native collections
Reviewed By: mhorowitz Differential Revision: D5904751 fbshipit-source-id: 995412196fd76ea60a65253719e49852322be6e6
This commit is contained in:
parent
f8e13868dd
commit
790eabcdff
|
@ -43,16 +43,9 @@ jdouble ReadableNativeArray::getDouble(jint index) {
|
||||||
}
|
}
|
||||||
|
|
||||||
jint ReadableNativeArray::getInt(jint index) {
|
jint ReadableNativeArray::getInt(jint index) {
|
||||||
auto integer = array_.at(index).getInt();
|
const folly::dynamic& val = array_.at(index);
|
||||||
static_assert(std::is_same<decltype(integer), int64_t>::value,
|
int64_t integer = convertDynamicIfIntegral(val);
|
||||||
"folly::dynamic int is not int64_t");
|
return makeJIntOrThrow(integer);
|
||||||
jint javaint = static_cast<jint>(integer);
|
|
||||||
if (integer != javaint) {
|
|
||||||
throwNewJavaException(
|
|
||||||
exceptions::gUnexpectedNativeTypeExceptionClass,
|
|
||||||
"Value '%lld' doesn't fit into a 32 bit signed int", integer);
|
|
||||||
}
|
|
||||||
return javaint;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* ReadableNativeArray::getString(jint index) {
|
const char* ReadableNativeArray::getString(jint index) {
|
||||||
|
|
|
@ -46,14 +46,9 @@ double ReadableNativeMap::getDoubleKey(const std::string& key) {
|
||||||
}
|
}
|
||||||
|
|
||||||
jint ReadableNativeMap::getIntKey(const std::string& key) {
|
jint ReadableNativeMap::getIntKey(const std::string& key) {
|
||||||
auto integer = getMapValue(key).getInt();
|
const folly::dynamic& val = getMapValue(key);
|
||||||
jint javaint = static_cast<jint>(integer);
|
int64_t integer = convertDynamicIfIntegral(val);
|
||||||
if (integer != javaint) {
|
return makeJIntOrThrow(integer);
|
||||||
throwNewJavaException(
|
|
||||||
exceptions::gUnexpectedNativeTypeExceptionClass,
|
|
||||||
"Value '%lld' doesn't fit into a 32 bit signed int", integer);
|
|
||||||
}
|
|
||||||
return javaint;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
local_ref<jstring> ReadableNativeMap::getStringKey(const std::string& key) {
|
local_ref<jstring> ReadableNativeMap::getStringKey(const std::string& key) {
|
||||||
|
@ -146,5 +141,29 @@ void ReadableNativeMapKeySetIterator::registerNatives() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
jint makeJIntOrThrow(int64_t integer) {
|
||||||
|
jint javaint = static_cast<jint>(integer);
|
||||||
|
if (integer != javaint) {
|
||||||
|
throwNewJavaException(
|
||||||
|
exceptions::gUnexpectedNativeTypeExceptionClass,
|
||||||
|
"Value '%lld' doesn't fit into a 32 bit signed int", integer);
|
||||||
|
}
|
||||||
|
return javaint;
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t convertDynamicIfIntegral(const folly::dynamic& val) {
|
||||||
|
if (val.isInt()) {
|
||||||
|
return val.getInt();
|
||||||
|
}
|
||||||
|
double dbl = val.getDouble();
|
||||||
|
int64_t result = static_cast<int64_t>(dbl);
|
||||||
|
if (dbl != result) {
|
||||||
|
throwNewJavaException(
|
||||||
|
exceptions::gUnexpectedNativeTypeExceptionClass,
|
||||||
|
"Tried to read an int, but got a non-integral double: %f", dbl);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace react
|
} // namespace react
|
||||||
} // namespace facebook
|
} // namespace facebook
|
||||||
|
|
|
@ -55,5 +55,8 @@ struct ReadableNativeMapKeySetIterator : jni::HybridClass<ReadableNativeMapKeySe
|
||||||
const folly::dynamic& map_;
|
const folly::dynamic& map_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
jint makeJIntOrThrow(int64_t integer);
|
||||||
|
int64_t convertDynamicIfIntegral(const folly::dynamic&);
|
||||||
|
|
||||||
} // namespace react
|
} // namespace react
|
||||||
} // namespace facebook
|
} // namespace facebook
|
||||||
|
|
Loading…
Reference in New Issue