From 2d937c63e4b25bcbf69a44937ae22beda6613361 Mon Sep 17 00:00:00 2001 From: Eli White Date: Mon, 19 Aug 2019 11:24:49 -0700 Subject: [PATCH] Add recursive types for Object types Summary: We weren't adding the local imports recursively as well. This is a similar change as was made when creating the CppHelpers.getImports in D16759170. Reviewed By: rickhanlonii, JoshuaGross Differential Revision: D16840667 fbshipit-source-id: 1090a774c9e96798d5900bc0b4bf1be29b3ba090 --- .../generators/components/GeneratePropsH.js | 28 +++++++++++++++---- .../__snapshots__/GeneratePropsH-test.js.snap | 4 +++ 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/packages/react-native-codegen/src/generators/components/GeneratePropsH.js b/packages/react-native-codegen/src/generators/components/GeneratePropsH.js index 4312a63e4a7..1462ce882ac 100644 --- a/packages/react-native-codegen/src/generators/components/GeneratePropsH.js +++ b/packages/react-native-codegen/src/generators/components/GeneratePropsH.js @@ -17,7 +17,11 @@ const { getImports, } = require('./CppHelpers.js'); -import type {PropTypeShape, SchemaType} from '../../CodegenSchema'; +import type { + ExtendsPropsShape, + PropTypeShape, + SchemaType, +} from '../../CodegenSchema'; // File path -> contents type FilesOutput = Map; @@ -420,10 +424,12 @@ function generatePropsString( .join('\n' + ' '); } -function getLocalImports(component): Set { +function getExtendsImports( + extendsProps: $ReadOnlyArray, +): Set { const imports: Set = new Set(); - component.extendsProps.forEach(extendProps => { + extendsProps.forEach(extendProps => { switch (extendProps.type) { case 'ReactNativeBuiltInType': switch (extendProps.knownTypeName) { @@ -440,6 +446,14 @@ function getLocalImports(component): Set { } }); + return imports; +} + +function getLocalImports( + properties: $ReadOnlyArray, +): Set { + const imports: Set = new Set(); + function addImportsForNativeName(name) { switch (name) { case 'ColorPrimitive': @@ -459,7 +473,7 @@ function getLocalImports(component): Set { } } - component.props.forEach(prop => { + properties.forEach(prop => { const typeAnnotation = prop.typeAnnotation; if (typeAnnotation.type === 'NativePrimitiveTypeAnnotation') { @@ -483,7 +497,9 @@ function getLocalImports(component): Set { if (typeAnnotation.type === 'ObjectTypeAnnotation') { imports.add('#include '); const objectImports = getImports(typeAnnotation.properties); + const localImports = getLocalImports(typeAnnotation.properties); objectImports.forEach(imports.add, imports); + localImports.forEach(imports.add, imports); } }); @@ -631,8 +647,10 @@ module.exports = { component.props, ); const extendString = getClassExtendString(component); - const imports = getLocalImports(component); + const extendsImports = getExtendsImports(component.extendsProps); + const imports = getLocalImports(component.props); + extendsImports.forEach(allImports.add, allImports); imports.forEach(allImports.add, allImports); const replacedTemplate = classTemplate diff --git a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsH-test.js.snap b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsH-test.js.snap index fd790ab50d5..67dd0c601fa 100644 --- a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsH-test.js.snap +++ b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsH-test.js.snap @@ -658,6 +658,10 @@ Map { #include #include #include +#include +#include +#include +#include namespace facebook { namespace react {