Permalink
Browse files

Move to{HashMap,ArrayList} up to Readable{Map,Array}

Summary:
NativeReadable{Map,Array} classes have convenient to{HashMap,ArrayList}
methods that make it easier to interoperate with existing Java code
from within a ReactNative application (e.g., Native Module) ...

Thanks for submitting a PR! Please read these instructions carefully:

- [x] Explain the **motivation** for making this change.
- [x] Provide a **test plan** demonstrating that the code is solid.
- [x] Match the **code formatting** of the rest of the codebase.
- [x] Target the `master` branch, NOT a "stable" branch.

NativeReadable{Map,Array} classes have convenient to{HashMap,ArrayList}
methods that make it easier to interoperate with existing Java code
from within a ReactNative application (e.g., Native Module)

These changes make these same methods available to any code using
the Readable{Map,Array} interfaces, instead of forcing consumers to
cast their generic instances into the NativeReadable* equivalents

Moving this methods up to the interfaces also makes it easier to
write unit tests for Native Modules - using the JavaOnly{Map,Array}
implementations of Readable{Map,Array} - while still relying on the
to{HashMap,ArrayList} methods

* Write a native module that receives a JSON object as `ReadableMap` and a JSON array `ReadableArray`.
* Print out the result of `toHashMap` and `toArrayList`.
* Make sure `NativeReadable{Map,Array}` works:
  * Call the native module's method from JavaScript, passing an `Object` and an `Array`.
  * Compare the printed values with the passed content.
* Make sure `JavaOnly{Map,Array}` works:
  * Call the native module's method from the Java code and pass a `JavaOnlyMap` and a `JavaOnlyArray`.
  * Compare the printed values with the passed content.

**Please advise if there is an automated test suite where I could add a case for this.**
Closes #14072

Differential Revision: D5123120

Pulled By: javache

fbshipit-source-id: 343f4396b99e03ecaf47993db6955d7932152f77
  • Loading branch information...
dcestari authored and facebook-github-bot committed May 24, 2017
1 parent 5e97be8 commit fe229f810475e90f7438c1b4b611b37953937782
@@ -150,6 +150,11 @@ public void pushNull() {
mBackingList.add(null);
}
@Override
public ArrayList<Object> toArrayList() {
return new ArrayList<Object>(mBackingList);
}
@Override
public String toString() {
return mBackingList.toString();
@@ -173,6 +173,11 @@ public void putArray(String key, WritableArray value) {
mBackingMap.put(key, value);
}
@Override
public HashMap<String, Object> toHashMap() {
return new HashMap<String, Object>(mBackingMap);
}
@Override
public String toString() {
return mBackingMap.toString();
@@ -9,6 +9,8 @@
package com.facebook.react.bridge;
import java.util.ArrayList;
/**
* Interface for an array that allows typed access to its members. Used to pass parameters from JS
* to Java.
@@ -25,4 +27,6 @@
ReadableMap getMap(int index);
Dynamic getDynamic(int index);
ReadableType getType(int index);
ArrayList<Object> toArrayList();
}
@@ -9,6 +9,8 @@
package com.facebook.react.bridge;
import java.util.HashMap;
/**
* Interface for a map that allows typed access to its members. Used to pass parameters from JS to
* Java.
@@ -26,4 +28,6 @@
Dynamic getDynamic(String name);
ReadableType getType(String name);
ReadableMapKeySetIterator keySetIterator();
HashMap<String, Object> toHashMap();
}
@@ -52,6 +52,7 @@ public Dynamic getDynamic(int index) {
return DynamicFromArray.create(this, index);
}
@Override
public ArrayList<Object> toArrayList() {
ArrayList<Object> arrayList = new ArrayList<>();
@@ -57,6 +57,7 @@ public ReadableMapKeySetIterator keySetIterator() {
return new ReadableNativeMapKeySetIterator(this);
}
@Override
public HashMap<String, Object> toHashMap() {
ReadableMapKeySetIterator iterator = keySetIterator();
HashMap<String, Object> hashMap = new HashMap<>();

0 comments on commit fe229f8

Please sign in to comment.