From fffae394c79e312c56aa7850cd4b8096d593d224 Mon Sep 17 00:00:00 2001 From: Mike Armstrong Date: Fri, 9 Oct 2015 03:10:32 -0700 Subject: [PATCH] Use new hybrid inheritance for NativeArray and descendants Reviewed By: @andreicoman11 Differential Revision: D2523619 fb-gh-sync-id: 62382c16cbbeceec12763b3786676ecff783b651 --- .../src/main/jni/react/jni/NativeArray.h | 27 ++++++-------- .../main/jni/react/jni/ReadableNativeArray.h | 35 +++++++++++++++++++ 2 files changed, 45 insertions(+), 17 deletions(-) create mode 100644 ReactAndroid/src/main/jni/react/jni/ReadableNativeArray.h diff --git a/ReactAndroid/src/main/jni/react/jni/NativeArray.h b/ReactAndroid/src/main/jni/react/jni/NativeArray.h index 42f474396..452f6b1d0 100644 --- a/ReactAndroid/src/main/jni/react/jni/NativeArray.h +++ b/ReactAndroid/src/main/jni/react/jni/NativeArray.h @@ -8,29 +8,22 @@ namespace facebook { namespace react { -struct NativeArray : public jni::HybridClass { +class NativeArray : public jni::HybridClass { + public: static constexpr const char* kJavaDescriptor = "Lcom/facebook/react/bridge/NativeArray;"; - static jni::local_ref initHybrid(jni::alias_ref) { - return makeCxxInstance(); - } - - // Whether this array has been added to another array or map and no longer has a valid array value + // Whether this array has been added to another array or map and no longer + // has a valid array value. bool isConsumed = false; - folly::dynamic array = {}; + folly::dynamic array; jstring toString(); - static void registerNatives() { - registerHybrid({ - makeNativeMethod("initHybrid", NativeArray::initHybrid), - makeNativeMethod("toString", NativeArray::toString), - }); - } + static void registerNatives(); + + protected: + friend HybridBase; + explicit NativeArray(folly::dynamic array); }; -__attribute__((visibility("default"))) -jni::local_ref -createReadableNativeArrayWithContents(folly::dynamic array); - }} diff --git a/ReactAndroid/src/main/jni/react/jni/ReadableNativeArray.h b/ReactAndroid/src/main/jni/react/jni/ReadableNativeArray.h new file mode 100644 index 000000000..5407d0e8a --- /dev/null +++ b/ReactAndroid/src/main/jni/react/jni/ReadableNativeArray.h @@ -0,0 +1,35 @@ + // Copyright 2004-present Facebook. All Rights Reserved. + +#pragma once + +#include "NativeArray.h" + +namespace facebook { +namespace react { + +class ReadableNativeArray : public jni::HybridClass { + protected: + friend HybridBase; + explicit ReadableNativeArray(folly::dynamic array); + + public: + static constexpr const char* kJavaDescriptor = "Lcom/facebook/react/bridge/ReadableNativeArray;"; + + static void mapException(const std::exception& ex); + jint getSize(); + jboolean isNull(jint index); + jboolean getBoolean(jint index); + jint getInt(jint index); + jdouble getDouble(jint index); + // The lifetime of the const char* is the same as the underlying dynamic + // array. This is fine for converting back to Java, but other uses should be + // careful. + const char* getString(jint index); + jni::local_ref getArray(jint index); + jobject getMap(jint index); + jobject getType(jint index); + + static void registerNatives(); +}; + +}}