diff --git a/packages/react-native-codegen/src/generators/components/GeneratePropsJavaDelegate.js b/packages/react-native-codegen/src/generators/components/GeneratePropsJavaDelegate.js index 955686b8b87..95aaf1c294a 100644 --- a/packages/react-native-codegen/src/generators/components/GeneratePropsJavaDelegate.js +++ b/packages/react-native-codegen/src/generators/components/GeneratePropsJavaDelegate.js @@ -11,7 +11,6 @@ 'use strict'; import type { - CommandTypeShape, ComponentShape, PropTypeShape, SchemaType, @@ -27,20 +26,10 @@ package com.facebook.react.viewmanagers; ::_IMPORTS_:: public class ::_CLASSNAME_:: { - ::_METHODS_:: -} -`; - -const propSetterTemplate = ` public void setProperty(::_INTERFACE_CLASSNAME_:: viewManager, T view, String propName, Object value) { ::_PROP_CASES_:: } -`; - -const commandsTemplate = ` - public void receiveCommand(::_INTERFACE_CLASSNAME_:: viewManager, T view, String commandName, ReadableArray args) { - ::_COMMAND_CASES_:: - } +} `; function getJavaValueForProp( @@ -116,51 +105,6 @@ function generatePropCasesString( }`; } -function getCommandArgJavaType(param) { - switch (param.typeAnnotation.type) { - case 'BooleanTypeAnnotation': - return 'getBoolean'; - case 'Int32TypeAnnotation': - return 'getInt'; - default: - (param.typeAnnotation.type: empty); - throw new Error('Receieved invalid typeAnnotation'); - } -} - -function getCommandArguments(command: CommandTypeShape): string { - return [ - 'view', - ...command.typeAnnotation.params.map((param, index) => { - const commandArgJavaType = getCommandArgJavaType(param); - - return `args.${commandArgJavaType}(${index})`; - }), - ].join(', '); -} - -function generateCommandCasesString( - component: ComponentShape, - componentName: string, -) { - if (component.commands.length === 0) { - return null; - } - - const commandMethods = component.commands - .map(command => { - return `case "${command.name}": - viewManager.${toSafeJavaString( - command.name, - false, - )}(${getCommandArguments(command)}); - break;`; - }) - .join('\n' + ' '); - - return commandMethods; -} - function getClassExtendString(component): string { const extendString = component.extendsProps .map(extendProps => { @@ -183,28 +127,6 @@ function getClassExtendString(component): string { return extendString; } -function getDelegateImports(component) { - const imports = getImports(component); - // The delegate needs ReadableArray for commands always. - // The interface doesn't always need it - if (component.commands.length > 0) { - imports.add('import com.facebook.react.bridge.ReadableArray;'); - } - - return imports; -} - -function generateMethods(propsString, commandsString): string { - return [ - propSetterTemplate.trim().replace('::_PROP_CASES_::', propsString), - commandsString != null - ? commandsTemplate.trim().replace('::_COMMAND_CASES_::', commandsString) - : '', - ] - .join('\n\n ') - .trimRight(); -} - module.exports = { generate(libraryName: string, schema: SchemaType): FilesOutput { const files = new Map(); @@ -221,12 +143,8 @@ module.exports = { const interfaceClassName = `${componentName}ViewManagerInterface`; const fileName = `${className}.java`; - const imports = getDelegateImports(component); + const imports = getImports(component); const propsString = generatePropCasesString(component, componentName); - const commandsString = generateCommandCasesString( - component, - componentName, - ); const extendString = getClassExtendString(component); const replacedTemplate = template @@ -237,13 +155,9 @@ module.exports = { .join('\n'), ) .replace(/::_CLASSNAME_::/g, className) + .replace(/::_INTERFACE_CLASSNAME_::/g, interfaceClassName) .replace('::_EXTEND_CLASSES_::', extendString) - .replace('::_PROP_CASES_::', propsString) - .replace( - '::_METHODS_::', - generateMethods(propsString, commandsString), - ) - .replace(/::_INTERFACE_CLASSNAME_::/g, interfaceClassName); + .replace('::_PROP_CASES_::', propsString); files.set(fileName, replacedTemplate); }); diff --git a/packages/react-native-codegen/src/generators/components/GeneratePropsJavaInterface.js b/packages/react-native-codegen/src/generators/components/GeneratePropsJavaInterface.js index e662477c08b..a13a091b3d6 100644 --- a/packages/react-native-codegen/src/generators/components/GeneratePropsJavaInterface.js +++ b/packages/react-native-codegen/src/generators/components/GeneratePropsJavaInterface.js @@ -107,14 +107,15 @@ function getCommandArguments( command: CommandTypeShape, componentName: string, ): string { - return [ - 'T view', - ...command.typeAnnotation.params.map(param => { + const commandArgs = command.typeAnnotation.params + .map(param => { const commandArgJavaType = getCommandArgJavaType(param); return `${commandArgJavaType} ${param.name}`; - }), - ].join(', '); + }) + .join(', '); + + return `T view, ${commandArgs}`; } function generateCommandsString( @@ -123,9 +124,11 @@ function generateCommandsString( ) { return component.commands .map(command => { - const safeJavaName = toSafeJavaString(command.name, false); + const safeJavaName = toSafeJavaString(command.name); + const lowerJavaName = + safeJavaName[0].toLowerCase() + safeJavaName.slice(1); - return `void ${safeJavaName}(${getCommandArguments( + return `void ${lowerJavaName}(${getCommandArguments( command, componentName, )});`; diff --git a/packages/react-native-codegen/src/generators/components/JavaHelpers.js b/packages/react-native-codegen/src/generators/components/JavaHelpers.js index 61bcb365f86..7413fe4de15 100644 --- a/packages/react-native-codegen/src/generators/components/JavaHelpers.js +++ b/packages/react-native-codegen/src/generators/components/JavaHelpers.js @@ -16,17 +16,11 @@ function upperCaseFirst(inString: string): string { return inString[0].toUpperCase() + inString.slice(1); } -function toSafeJavaString( - input: string, - shouldUpperCaseFirst?: boolean, -): string { - const parts = input.split('-'); - - if (shouldUpperCaseFirst === false) { - return parts.join(''); - } - - return parts.map(upperCaseFirst).join(''); +function toSafeJavaString(input: string): string { + return input + .split('-') + .map(upperCaseFirst) + .join(''); } function getImports(component: ComponentShape): Set { diff --git a/packages/react-native-codegen/src/generators/components/__test_fixtures__/fixtures.js b/packages/react-native-codegen/src/generators/components/__test_fixtures__/fixtures.js index e1d36d9ecba..025825de9e7 100644 --- a/packages/react-native-codegen/src/generators/components/__test_fixtures__/fixtures.js +++ b/packages/react-native-codegen/src/generators/components/__test_fixtures__/fixtures.js @@ -921,14 +921,6 @@ const COMMANDS: SchemaType = { events: [], props: [], commands: [ - { - name: 'flashScrollIndicators', - optional: false, - typeAnnotation: { - type: 'FunctionTypeAnnotation', - params: [], - }, - }, { name: 'hotspotUpdate', optional: false, diff --git a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsJavaDelegate-test.js.snap b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsJavaDelegate-test.js.snap index 7da4aefc11a..f04f2cf7844 100644 --- a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsJavaDelegate-test.js.snap +++ b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsJavaDelegate-test.js.snap @@ -88,24 +88,11 @@ Map { package com.facebook.react.viewmanagers; import android.view.View; -import com.facebook.react.bridge.ReadableArray; public class CommandNativeComponentViewManagerDelegate { public void setProperty(CommandNativeComponentViewManagerInterface viewManager, T view, String propName, Object value) { // No props } - - public void receiveCommand(CommandNativeComponentInterface viewManager, T view, String commandName, ReadableArray args) { - case \\"flashScrollIndicators\\": - viewManager.flashScrollIndicators(view); - break; - case \\"hotspotUpdate\\": - viewManager.hotspotUpdate(view, args.getInt(0), args.getInt(1)); - break; - case \\"scrollTo\\": - viewManager.scrollTo(view, args.getInt(0), args.getBoolean(1)); - break; - } } ", } @@ -117,7 +104,6 @@ Map { package com.facebook.react.viewmanagers; import android.view.View; -import com.facebook.react.bridge.ReadableArray; public class CommandNativeComponentViewManagerDelegate { public void setProperty(CommandNativeComponentViewManagerInterface viewManager, T view, String propName, Object value) { @@ -127,12 +113,6 @@ public class CommandNativeComponentViewManagerDelegate { break; } } - - public void receiveCommand(CommandNativeComponentInterface viewManager, T view, String commandName, ReadableArray args) { - case \\"hotspotUpdate\\": - viewManager.hotspotUpdate(view, args.getInt(0), args.getInt(1)); - break; - } } ", } 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 c61813c9396..da606e801b0 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 @@ -61,7 +61,6 @@ import android.view.View; public interface CommandNativeComponentViewManagerInterface { // No props - void flashScrollIndicators(T view); void hotspotUpdate(T view, int x, int y); void scrollTo(T view, int y, boolean animated); } diff --git a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateViewConfigJs-test.js.snap b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateViewConfigJs-test.js.snap index 11d15d3c571..565e9750ce5 100644 --- a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateViewConfigJs-test.js.snap +++ b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateViewConfigJs-test.js.snap @@ -144,14 +144,6 @@ export const __INTERNAL_VIEW_CONFIG = CommandNativeComponentViewConfig; export default nativeComponentName; export const Commands = { - flashScrollIndicators(ref) { - UIManager.dispatchViewCommand( - findNodeHandle(ref), - UIManager.getViewManagerConfig(\\"CommandNativeComponent\\").Commands.flashScrollIndicators, - [] - ); - }, - hotspotUpdate(ref, x, y) { UIManager.dispatchViewCommand( findNodeHandle(ref),