From 1783780a921d5dbd2201287c5267375031ef457b Mon Sep 17 00:00:00 2001 From: Rick Hanlon Date: Fri, 19 Jul 2019 14:59:34 -0700 Subject: [PATCH] Add buck rule to generate Java library Summary: Adds buck rule for generated code Reviewed By: mdvacca, makovkastar Differential Revision: D16338763 fbshipit-source-id: 6b238b3993cc110f009ad541cfa924d0d06d2fcb --- packages/react-native-codegen/DEFS.bzl | 26 ++++++++++++-- ...BooleanPropNativeComponentViewManager.java | 10 ++++++ .../src/generators/RNCodegen.js | 9 ++++- .../components/GeneratePropsJavaInterface.js | 2 +- .../src/generators/components/JavaHelpers.js | 9 +++-- .../GeneratePropsJavaInterface-test.js.snap | 36 +++++++++---------- 6 files changed, 67 insertions(+), 25 deletions(-) create mode 100644 packages/react-native-codegen/buck_tests/java/BooleanPropNativeComponentViewManager.java diff --git a/packages/react-native-codegen/DEFS.bzl b/packages/react-native-codegen/DEFS.bzl index be53579d37d..75d6a15bbe0 100644 --- a/packages/react-native-codegen/DEFS.bzl +++ b/packages/react-native-codegen/DEFS.bzl @@ -10,7 +10,9 @@ load( "fb_xplat_cxx_test", "get_apple_compiler_flags", "get_apple_inspector_flags", + "react_native_target", "react_native_xplat_target", + "rn_android_library", "rn_xplat_cxx_library", ) @@ -22,8 +24,9 @@ def rn_codegen( generate_event_emitter_cpp_name = "generate_event_emitter_cpp-{}".format(name) generate_event_emitter_h_name = "generate_event_emitter_h-{}".format(name) generate_props_cpp_name = "generate_props_cpp-{}".format(name) - generate_tests_cpp_name = "generate_tests_cpp-{}".format(name) generate_props_h_name = "generated_props_h-{}".format(name) + generate_props_java_name = "generate_props_java-{}".format(name) + generate_tests_cpp_name = "generate_tests_cpp-{}".format(name) generate_shadow_node_cpp_name = "generated_shadow_node_cpp-{}".format(name) generate_shadow_node_h_name = "generated_shadow_node_h-{}".format(name) generate_module_h_name = "generate_module_h-{}".format(name) @@ -31,7 +34,7 @@ def rn_codegen( fb_native.genrule( name = generate_fixtures_rule_name, - srcs = [], + srcs = native.glob(["src/generators/**/*.js"]), cmd = "$(exe fbsource//xplat/js/react-native-github/packages/react-native-codegen:rn_codegen) $(location {}) {} $OUT".format(schema_target, name), out = "codegenfiles-{}".format(name), ) @@ -72,6 +75,13 @@ def rn_codegen( out = "Props.h", ) + fb_native.zip_file( + name = generate_props_java_name, + srcs = [":{}".format(generate_fixtures_rule_name)], + out = "{}.src.zip".format(generate_props_java_name), + visibility = ["PUBLIC"], + ) + fb_native.genrule( name = generate_shadow_node_cpp_name, cmd = "cp $(location :{})/ShadowNodes.cpp $OUT".format(generate_fixtures_rule_name), @@ -148,7 +158,6 @@ def rn_codegen( ], ) - # libs rn_xplat_cxx_library( name = "generated_modules-{}".format(name), tests = [":generated_tests-{}".format(name)], @@ -182,6 +191,17 @@ def rn_codegen( ], ) + rn_android_library( + name = "generated_components_java-{}".format(name), + srcs = [ + ":{}".format(generate_props_java_name), + ], + visibility = ["PUBLIC"], + deps = [ + react_native_target("java/com/facebook/react/bridge:bridge"), + ], + ) + # Tests fb_xplat_cxx_test( name = "generated_tests-{}".format(name), diff --git a/packages/react-native-codegen/buck_tests/java/BooleanPropNativeComponentViewManager.java b/packages/react-native-codegen/buck_tests/java/BooleanPropNativeComponentViewManager.java new file mode 100644 index 00000000000..37c93140094 --- /dev/null +++ b/packages/react-native-codegen/buck_tests/java/BooleanPropNativeComponentViewManager.java @@ -0,0 +1,10 @@ +package com.facebook.react.uimanager; + +import android.view.ViewGroup; + +public class BooleanPropNativeComponentViewManager extends BaseViewManager + implements BooleanPropNativeComponentInterface { + + @Override + public void setDisabled(ViewGroup view, boolean value) {} +} diff --git a/packages/react-native-codegen/src/generators/RNCodegen.js b/packages/react-native-codegen/src/generators/RNCodegen.js index 52b1d7eb382..b73e8d4a06e 100644 --- a/packages/react-native-codegen/src/generators/RNCodegen.js +++ b/packages/react-native-codegen/src/generators/RNCodegen.js @@ -24,6 +24,8 @@ const generatePropsCpp = require('./components/GeneratePropsCpp.js'); const generatePropsH = require('./components/GeneratePropsH.js'); const generateModuleH = require('./modules/GenerateModuleH.js'); const generateModuleCpp = require('./modules/GenerateModuleCpp.js'); +const generatePropsJavaInterface = require('./components/GeneratePropsJavaInterface.js'); +const generatePropsJavaDelegate = require('./components/GeneratePropsJavaDelegate.js'); const generateTests = require('./components/GenerateTests.js'); const generateShadowNodeCpp = require('./components/GenerateShadowNodeCpp.js'); const generateShadowNodeH = require('./components/GenerateShadowNodeH.js'); @@ -56,7 +58,12 @@ type Config = $ReadOnly<{| const GENERATORS = { descriptors: [generateComponentDescriptorH.generate], events: [generateEventEmitterCpp.generate, generateEventEmitterH.generate], - props: [generatePropsCpp.generate, generatePropsH.generate], + props: [ + generatePropsCpp.generate, + generatePropsH.generate, + generatePropsJavaInterface.generate, + generatePropsJavaDelegate.generate, + ], modules: [generateModuleCpp.generate, generateModuleH.generate], tests: [generateTests.generate], 'shadow-nodes': [ diff --git a/packages/react-native-codegen/src/generators/components/GeneratePropsJavaInterface.js b/packages/react-native-codegen/src/generators/components/GeneratePropsJavaInterface.js index 235230d13ff..6ab7dc8980e 100644 --- a/packages/react-native-codegen/src/generators/components/GeneratePropsJavaInterface.js +++ b/packages/react-native-codegen/src/generators/components/GeneratePropsJavaInterface.js @@ -79,7 +79,7 @@ function generatePropsString(component: ComponentShape, componentName: string) { prop.name, )}(T view, ${getJavaValueForProp(prop, componentName)});`; }) - .join(',\n' + ' '); + .join('\n' + ' '); } function getClassExtendString(component): string { diff --git a/packages/react-native-codegen/src/generators/components/JavaHelpers.js b/packages/react-native-codegen/src/generators/components/JavaHelpers.js index 7f5ae1e94e4..7413fe4de15 100644 --- a/packages/react-native-codegen/src/generators/components/JavaHelpers.js +++ b/packages/react-native-codegen/src/generators/components/JavaHelpers.js @@ -16,14 +16,14 @@ function upperCaseFirst(inString: string): string { return inString[0].toUpperCase() + inString.slice(1); } -export function toSafeJavaString(input: string): string { +function toSafeJavaString(input: string): string { return input .split('-') .map(upperCaseFirst) .join(''); } -export function getImports(component: ComponentShape): Set { +function getImports(component: ComponentShape): Set { const imports: Set = new Set(); component.extendsProps.forEach(extendProps => { @@ -75,3 +75,8 @@ export function getImports(component: ComponentShape): Set { return imports; } + +module.exports = { + toSafeJavaString, + getImports, +}; diff --git a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsJavaInterface-test.js.snap b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsJavaInterface-test.js.snap index a76af20d331..f704042e71a 100644 --- a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsJavaInterface-test.js.snap +++ b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsJavaInterface-test.js.snap @@ -9,13 +9,13 @@ import android.view.View; import com.facebook.react.bridge.ReadableArray; public interface ArrayPropsNativeComponentInterface { - void setNames(T view, ReadableArray value);, - void setDisableds(T view, ReadableArray value);, - void setProgress(T view, ReadableArray value);, - void setRadii(T view, ReadableArray value);, - void setColors(T view, ReadableArray value);, - void setSrcs(T view, ReadableArray value);, - void setPoints(T view, ReadableArray value);, + void setNames(T view, ReadableArray value); + void setDisableds(T view, ReadableArray value); + void setProgress(T view, ReadableArray value); + void setRadii(T view, ReadableArray value); + void setColors(T view, ReadableArray value); + void setSrcs(T view, ReadableArray value); + void setPoints(T view, ReadableArray value); void setSizes(T view, ReadableArray value); } ", @@ -128,11 +128,11 @@ package com.facebook.react.viewmanagers; import android.view.View; public interface FloatPropNativeComponentInterface { - void setBlurRadius(T view, Float value);, - void setBlurRadius2(T view, Float value);, - void setBlurRadius3(T view, Float value);, - void setBlurRadius4(T view, Float value);, - void setBlurRadius5(T view, Float value);, + void setBlurRadius(T view, Float value); + void setBlurRadius2(T view, Float value); + void setBlurRadius3(T view, Float value); + void setBlurRadius4(T view, Float value); + void setBlurRadius5(T view, Float value); void setBlurRadius6(T view, Float value); } ", @@ -162,8 +162,8 @@ package com.facebook.react.viewmanagers; import android.view.View; public interface IntegerPropNativeComponentInterface { - void setProgress1(T view, int value);, - void setProgress2(T view, int value);, + void setProgress1(T view, int value); + void setProgress2(T view, int value); void setProgress3(T view, int value); } ", @@ -193,9 +193,9 @@ import android.view.View; import com.facebook.react.bridge.ReadableMap; public interface ImageColorPropNativeComponentInterface { - void setThumbImage(T view, ReadableMap value);, - void setColor(T view, Integer value);, - void setThumbTintColor(T view, Integer value);, + void setThumbImage(T view, ReadableMap value); + void setColor(T view, Integer value); + void setThumbTintColor(T view, Integer value); void setPoint(T view, ReadableMap value); } ", @@ -239,7 +239,7 @@ package com.facebook.react.viewmanagers; import android.view.View; public interface StringPropComponentInterface { - void setAccessibilityHint(T view, String value);, + void setAccessibilityHint(T view, String value); void setAccessibilityRole(T view, String value); } ",