Add Object props support for Java

Summary: This diff adds Java handling for object props

Reviewed By: TheSavior

Differential Revision: D16759139

fbshipit-source-id: e47956dc43cd1eb4abd58636bf111dde8d7244cc
This commit is contained in:
Rick Hanlon
2019-08-12 13:52:38 -07:00
committed by Facebook Github Bot
parent 50b821df49
commit ebb412ab00
7 changed files with 54 additions and 4 deletions
@@ -90,7 +90,7 @@ function getJavaValueForProp(
return '(ReadableArray) value';
}
case 'ObjectTypeAnnotation': {
throw new Error('Object type is not implemented');
return '(ReadableMap) value';
}
case 'StringEnumTypeAnnotation':
return '(String) value';
@@ -69,7 +69,8 @@ function getJavaValueForProp(prop: PropTypeShape, imports): string {
return '@Nullable ReadableArray value';
}
case 'ObjectTypeAnnotation': {
throw new Error('Object type is not implemented');
addNullable(imports);
return '@Nullable ReadableMap value';
}
case 'StringEnumTypeAnnotation':
addNullable(imports);
@@ -77,6 +77,10 @@ function getImports(component: ComponentShape): Set<string> {
if (typeAnnotation.type === 'ArrayTypeAnnotation') {
imports.add('import com.facebook.react.bridge.ReadableArray;');
}
if (typeAnnotation.type === 'ObjectTypeAnnotation') {
imports.add('import com.facebook.react.bridge.ReadableMap;');
}
});
return imports;
@@ -17,7 +17,6 @@ const generator = require('../GeneratePropsJavaDelegate.js');
describe('GeneratePropsJavaDelegate', () => {
Object.keys(fixtures)
.sort()
.filter(fixtureName => fixtureName !== 'OBJECT_PROPS')
.forEach(fixtureName => {
const fixture = fixtures[fixtureName];
@@ -17,7 +17,6 @@ const generator = require('../GeneratePropsJavaInterface.js');
describe('GeneratePropsJavaInterface', () => {
Object.keys(fixtures)
.sort()
.filter(fixtureName => fixtureName !== 'OBJECT_PROPS')
.forEach(fixtureName => {
const fixture = fixtures[fixtureName];
@@ -503,6 +503,37 @@ public class NoPropsNoEventsComponentManagerDelegate<T extends View, U extends B
}
`;
exports[`GeneratePropsJavaDelegate can generate fixture OBJECT_PROPS 1`] = `
Map {
"ObjectPropsManagerDelegate.java" => "
package com.facebook.react.viewmanagers;
import android.view.View;
import androidx.annotation.Nullable;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.uimanager.BaseViewManager;
import com.facebook.react.uimanager.BaseViewManagerDelegate;
import com.facebook.react.uimanager.LayoutShadowNode;
public class ObjectPropsManagerDelegate<T extends View, U extends BaseViewManager<T, ? extends LayoutShadowNode> & ObjectPropsManagerInterface<T>> extends BaseViewManagerDelegate<T, U> {
public ObjectPropsManagerDelegate(U viewManager) {
super(viewManager);
}
@Override
public void setProperty(T view, String propName, @Nullable Object value) {
switch (propName) {
case \\"objectProp\\":
mViewManager.setObjectProp(view, (ReadableMap) value);
break;
default:
super.setProperty(view, propName, value);
}
}
}
",
}
`;
exports[`GeneratePropsJavaDelegate can generate fixture POINT_PROP 1`] = `
Map {
"PointPropNativeComponentManagerDelegate.java" => "
@@ -241,6 +241,22 @@ public interface NoPropsNoEventsComponentManagerInterface<T extends View> {
}
`;
exports[`GeneratePropsJavaInterface can generate fixture OBJECT_PROPS 1`] = `
Map {
"ObjectPropsManagerInterface.java" => "
package com.facebook.react.viewmanagers;
import android.view.View;
import androidx.annotation.Nullable;
import com.facebook.react.bridge.ReadableMap;
public interface ObjectPropsManagerInterface<T extends View> {
void setObjectProp(T view, @Nullable ReadableMap value);
}
",
}
`;
exports[`GeneratePropsJavaInterface can generate fixture POINT_PROP 1`] = `
Map {
"PointPropNativeComponentManagerInterface.java" => "