diff --git a/packages/react-native-codegen/src/generators/modules/GenerateModuleHObjCpp.js b/packages/react-native-codegen/src/generators/modules/GenerateModuleHObjCpp.js index be4a3ac79b3..1d292bd1584 100644 --- a/packages/react-native-codegen/src/generators/modules/GenerateModuleHObjCpp.js +++ b/packages/react-native-codegen/src/generators/modules/GenerateModuleHObjCpp.js @@ -239,6 +239,12 @@ module.exports = { ) .replace('::_ARGS_::', nativeArgs); if (prop.name === 'getConstants') { + if ( + prop.typeAnnotation.returnTypeAnnotation.properties && + prop.typeAnnotation.returnTypeAnnotation.properties.length === 0 + ) { + return ''; + } return constants.replace(/::_MODULE_NAME_::/, name); } return implementation; diff --git a/packages/react-native-codegen/src/generators/modules/GenerateModuleMm.js b/packages/react-native-codegen/src/generators/modules/GenerateModuleMm.js index 5cc4912aeec..9af914ce3e2 100644 --- a/packages/react-native-codegen/src/generators/modules/GenerateModuleMm.js +++ b/packages/react-native-codegen/src/generators/modules/GenerateModuleMm.js @@ -114,6 +114,15 @@ function tranlsateMethodForImplementation(property): string { .slice(1) .join(':') .concat(':'); + if ( + property.name === 'getConstants' && + property.typeAnnotation.returnTypeAnnotation.type === + 'ObjectTypeAnnotation' && + property.typeAnnotation.returnTypeAnnotation.properties && + property.typeAnnotation.returnTypeAnnotation.properties.length === 0 + ) { + return ''; + } return propertyTemplate .replace( /::_KIND_::/g, @@ -217,10 +226,19 @@ module.exports = { .replace( '::_PROPERTIES_MAP_::', properties - .map(({name: propertyName, typeAnnotation: {params}}) => - proprertyDefTemplate - .replace(/::_PROPERTY_NAME_::/g, propertyName) - .replace(/::_ARGS_COUNT_::/g, params.length.toString()), + .map( + ({ + name: propertyName, + typeAnnotation: {params, returnTypeAnnotation}, + }) => + propertyName === 'getConstants' && + returnTypeAnnotation.type === 'ObjectTypeAnnotation' && + returnTypeAnnotation.properties && + returnTypeAnnotation.properties.length === 0 + ? '' + : proprertyDefTemplate + .replace(/::_PROPERTY_NAME_::/g, propertyName) + .replace(/::_ARGS_COUNT_::/g, params.length.toString()), ) .join('\n'), ) diff --git a/packages/react-native-codegen/src/generators/modules/ObjCppUtils/Utils.js b/packages/react-native-codegen/src/generators/modules/ObjCppUtils/Utils.js index 93319225af1..ee0f9286908 100644 --- a/packages/react-native-codegen/src/generators/modules/ObjCppUtils/Utils.js +++ b/packages/react-native-codegen/src/generators/modules/ObjCppUtils/Utils.js @@ -44,6 +44,11 @@ function flatObjects( .filter( annotation => (annotation.name === 'GetConstantsReturnType') === forConstants, + ) + .filter( + annotation => + annotation.name !== 'GetConstantsReturnType' || + annotation.properties.length > 0, ); let flattenObjects: Array<{| diff --git a/packages/react-native-codegen/src/generators/modules/__test_fixtures__/fixtures.js b/packages/react-native-codegen/src/generators/modules/__test_fixtures__/fixtures.js index a3f6affdb21..f13dae88bd5 100644 --- a/packages/react-native-codegen/src/generators/modules/__test_fixtures__/fixtures.js +++ b/packages/react-native-codegen/src/generators/modules/__test_fixtures__/fixtures.js @@ -331,6 +331,19 @@ const TWO_MODULES_DIFFERENT_FILES: SchemaType = { nativeModules: { Sample2TurboModule: { properties: [ + { + name: 'getConstants', + typeAnnotation: { + type: 'FunctionTypeAnnotation', + returnTypeAnnotation: { + nullable: false, + type: 'ObjectTypeAnnotation', + properties: [], + }, + params: [], + optional: false, + }, + }, { name: 'voidFunc', typeAnnotation: { diff --git a/packages/react-native-codegen/src/generators/modules/__tests__/__snapshots__/GenerateModuleCpp-test.js.snap b/packages/react-native-codegen/src/generators/modules/__tests__/__snapshots__/GenerateModuleCpp-test.js.snap index f7b06ba7791..4a617d755d4 100644 --- a/packages/react-native-codegen/src/generators/modules/__tests__/__snapshots__/GenerateModuleCpp-test.js.snap +++ b/packages/react-native-codegen/src/generators/modules/__tests__/__snapshots__/GenerateModuleCpp-test.js.snap @@ -156,6 +156,9 @@ NativeSampleTurboModuleCxxSpecJSI::NativeSampleTurboModuleCxxSpecJSI(std::shared : TurboModule(\\"SampleTurboModule\\", jsInvoker) { methodMap_[\\"voidFunc\\"] = MethodMetadata {0, __hostFunction_NativeSampleTurboModuleCxxSpecJSI_voidFunc}; } +static jsi::Value __hostFunction_NativeSample2TurboModuleCxxSpecJSI_getConstants(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { + return static_cast(&turboModule)->getConstants(rt); +} static jsi::Value __hostFunction_NativeSample2TurboModuleCxxSpecJSI_voidFunc(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { static_cast(&turboModule)->voidFunc(rt); @@ -164,6 +167,7 @@ static jsi::Value __hostFunction_NativeSample2TurboModuleCxxSpecJSI_voidFunc(jsi NativeSample2TurboModuleCxxSpecJSI::NativeSample2TurboModuleCxxSpecJSI(std::shared_ptr jsInvoker) : TurboModule(\\"Sample2TurboModule\\", jsInvoker) { + methodMap_[\\"getConstants\\"] = MethodMetadata {0, __hostFunction_NativeSample2TurboModuleCxxSpecJSI_getConstants}; methodMap_[\\"voidFunc\\"] = MethodMetadata {0, __hostFunction_NativeSample2TurboModuleCxxSpecJSI_voidFunc}; } diff --git a/packages/react-native-codegen/src/generators/modules/__tests__/__snapshots__/GenerateModuleH-test.js.snap b/packages/react-native-codegen/src/generators/modules/__tests__/__snapshots__/GenerateModuleH-test.js.snap index a047c9e9986..f80f9bcc571 100644 --- a/packages/react-native-codegen/src/generators/modules/__tests__/__snapshots__/GenerateModuleH-test.js.snap +++ b/packages/react-native-codegen/src/generators/modules/__tests__/__snapshots__/GenerateModuleH-test.js.snap @@ -136,6 +136,7 @@ protected: NativeSample2TurboModuleCxxSpecJSI(std::shared_ptr jsInvoker); public: +virtual jsi::Object getConstants(jsi::Runtime &rt) = 0; virtual void voidFunc(jsi::Runtime &rt) = 0; }; diff --git a/packages/react-native-codegen/src/generators/modules/__tests__/__snapshots__/GenerateModuleHObjCpp-test.js.snap b/packages/react-native-codegen/src/generators/modules/__tests__/__snapshots__/GenerateModuleHObjCpp-test.js.snap index f94625e7496..40fe1754d61 100644 --- a/packages/react-native-codegen/src/generators/modules/__tests__/__snapshots__/GenerateModuleHObjCpp-test.js.snap +++ b/packages/react-native-codegen/src/generators/modules/__tests__/__snapshots__/GenerateModuleHObjCpp-test.js.snap @@ -362,6 +362,7 @@ Map { @protocol NativeSample2TurboModuleSpec + - (void) voidFunc; @end diff --git a/packages/react-native-codegen/src/generators/modules/__tests__/__snapshots__/GenerateModuleMm-test.js.snap b/packages/react-native-codegen/src/generators/modules/__tests__/__snapshots__/GenerateModuleMm-test.js.snap index 2ae851ffa5f..613f5aa0156 100644 --- a/packages/react-native-codegen/src/generators/modules/__tests__/__snapshots__/GenerateModuleMm-test.js.snap +++ b/packages/react-native-codegen/src/generators/modules/__tests__/__snapshots__/GenerateModuleMm-test.js.snap @@ -181,6 +181,7 @@ NativeSampleTurboModuleSpecJSI::NativeSampleTurboModuleSpecJSI(id(turboModule) .invokeObjCMethod(rt, VoidKind, \\"voidFunc\\", @selector(voidFunc), args, count); @@ -188,6 +189,7 @@ static facebook::jsi::Value __hostFunction_NativeSample2TurboModuleSpecJSI_voidF NativeSample2TurboModuleSpecJSI::NativeSample2TurboModuleSpecJSI(id instance, std::shared_ptr jsInvoker) : ObjCTurboModule(\\"Sample2TurboModule\\", instance, jsInvoker) { + methodMap_[\\"voidFunc\\"] = MethodMetadata {0, __hostFunction_NativeSample2TurboModuleSpecJSI_voidFunc}; }