diff --git a/packages/react-native-codegen/e2e/deep_imports/__tests__/components/__snapshots__/GenerateEventEmitterCpp-test.js.snap b/packages/react-native-codegen/e2e/deep_imports/__tests__/components/__snapshots__/GenerateEventEmitterCpp-test.js.snap index 6e338000624c..cb6938349e92 100644 --- a/packages/react-native-codegen/e2e/deep_imports/__tests__/components/__snapshots__/GenerateEventEmitterCpp-test.js.snap +++ b/packages/react-native-codegen/e2e/deep_imports/__tests__/components/__snapshots__/GenerateEventEmitterCpp-test.js.snap @@ -153,29 +153,29 @@ void EventNestedObjectPropsNativeComponentViewEventEmitter::onChange(OnChange ev dispatchEvent(\\"change\\", [event=std::move(event)](jsi::Runtime &runtime) { auto payload = jsi::Object(runtime); { - auto location = jsi::Object(runtime); + auto __codegen__1__location = jsi::Object(runtime); { - auto source = jsi::Object(runtime); - source.setProperty(runtime, \\"url\\", event.location.source.url); - location.setProperty(runtime, \\"source\\", source); + auto __codegen__2__source = jsi::Object(runtime); + __codegen__2__source.setProperty(runtime, \\"url\\", event.location.source.url); + __codegen__1__location.setProperty(runtime, \\"source\\", __codegen__2__source); } - location.setProperty(runtime, \\"x\\", event.location.x); - location.setProperty(runtime, \\"y\\", event.location.y); + __codegen__1__location.setProperty(runtime, \\"x\\", event.location.x); + __codegen__1__location.setProperty(runtime, \\"y\\", event.location.y); - auto arrayOfObjects = jsi::Array(runtime, event.location.arrayOfObjects.size()); - size_t arrayOfObjectsIndex = 0; - for (auto arrayOfObjectsValue : event.location.arrayOfObjects) { - auto arrayOfObjectsObject = jsi::Object(runtime); + auto __codegen__3__arrayOfObjects = jsi::Array(runtime, event.location.arrayOfObjects.size()); + size_t __codegen__4__arrayOfObjectsIndex = 0; + for (auto __codegen__5__arrayOfObjectsValue : event.location.arrayOfObjects) { + auto __codegen__6__arrayOfObjectsObject = jsi::Object(runtime); { - auto value = jsi::Object(runtime); - value.setProperty(runtime, \\"str\\", arrayOfObjectsValue.value.str); - arrayOfObjectsObject.setProperty(runtime, \\"value\\", value); + auto __codegen__7__value = jsi::Object(runtime); + __codegen__7__value.setProperty(runtime, \\"str\\", __codegen__5__arrayOfObjectsValue.value.str); + __codegen__6__arrayOfObjectsObject.setProperty(runtime, \\"value\\", __codegen__7__value); } - arrayOfObjects.setValueAtIndex(runtime, arrayOfObjectsIndex++, arrayOfObjectsObject); + __codegen__3__arrayOfObjects.setValueAtIndex(runtime, __codegen__4__arrayOfObjectsIndex++, __codegen__6__arrayOfObjectsObject); } - location.setProperty(runtime, \\"arrayOfObjects\\", arrayOfObjects); + __codegen__1__location.setProperty(runtime, \\"arrayOfObjects\\", __codegen__3__arrayOfObjects); - payload.setProperty(runtime, \\"location\\", location); + payload.setProperty(runtime, \\"location\\", __codegen__1__location); } return payload; }); diff --git a/packages/react-native-codegen/e2e/namespaced/__tests__/components/__snapshots__/GenerateEventEmitterCpp-test.js.snap b/packages/react-native-codegen/e2e/namespaced/__tests__/components/__snapshots__/GenerateEventEmitterCpp-test.js.snap index ec4329c72521..e9f43e45dc2e 100644 --- a/packages/react-native-codegen/e2e/namespaced/__tests__/components/__snapshots__/GenerateEventEmitterCpp-test.js.snap +++ b/packages/react-native-codegen/e2e/namespaced/__tests__/components/__snapshots__/GenerateEventEmitterCpp-test.js.snap @@ -153,29 +153,29 @@ void EventNestedObjectPropsNativeComponentViewEventEmitter::onChange(OnChange ev dispatchEvent(\\"change\\", [event=std::move(event)](jsi::Runtime &runtime) { auto payload = jsi::Object(runtime); { - auto location = jsi::Object(runtime); + auto __codegen__1__location = jsi::Object(runtime); { - auto source = jsi::Object(runtime); - source.setProperty(runtime, \\"url\\", event.location.source.url); - location.setProperty(runtime, \\"source\\", source); + auto __codegen__2__source = jsi::Object(runtime); + __codegen__2__source.setProperty(runtime, \\"url\\", event.location.source.url); + __codegen__1__location.setProperty(runtime, \\"source\\", __codegen__2__source); } - location.setProperty(runtime, \\"x\\", event.location.x); - location.setProperty(runtime, \\"y\\", event.location.y); + __codegen__1__location.setProperty(runtime, \\"x\\", event.location.x); + __codegen__1__location.setProperty(runtime, \\"y\\", event.location.y); - auto arrayOfObjects = jsi::Array(runtime, event.location.arrayOfObjects.size()); - size_t arrayOfObjectsIndex = 0; - for (auto arrayOfObjectsValue : event.location.arrayOfObjects) { - auto arrayOfObjectsObject = jsi::Object(runtime); + auto __codegen__3__arrayOfObjects = jsi::Array(runtime, event.location.arrayOfObjects.size()); + size_t __codegen__4__arrayOfObjectsIndex = 0; + for (auto __codegen__5__arrayOfObjectsValue : event.location.arrayOfObjects) { + auto __codegen__6__arrayOfObjectsObject = jsi::Object(runtime); { - auto value = jsi::Object(runtime); - value.setProperty(runtime, \\"str\\", arrayOfObjectsValue.value.str); - arrayOfObjectsObject.setProperty(runtime, \\"value\\", value); + auto __codegen__7__value = jsi::Object(runtime); + __codegen__7__value.setProperty(runtime, \\"str\\", __codegen__5__arrayOfObjectsValue.value.str); + __codegen__6__arrayOfObjectsObject.setProperty(runtime, \\"value\\", __codegen__7__value); } - arrayOfObjects.setValueAtIndex(runtime, arrayOfObjectsIndex++, arrayOfObjectsObject); + __codegen__3__arrayOfObjects.setValueAtIndex(runtime, __codegen__4__arrayOfObjectsIndex++, __codegen__6__arrayOfObjectsObject); } - location.setProperty(runtime, \\"arrayOfObjects\\", arrayOfObjects); + __codegen__1__location.setProperty(runtime, \\"arrayOfObjects\\", __codegen__3__arrayOfObjects); - payload.setProperty(runtime, \\"location\\", location); + payload.setProperty(runtime, \\"location\\", __codegen__1__location); } return payload; }); diff --git a/packages/react-native-codegen/src/generators/components/GenerateEventEmitterCpp.js b/packages/react-native-codegen/src/generators/components/GenerateEventEmitterCpp.js index 6d9b72cd2909..c394fd4d488d 100644 --- a/packages/react-native-codegen/src/generators/components/GenerateEventEmitterCpp.js +++ b/packages/react-native-codegen/src/generators/components/GenerateEventEmitterCpp.js @@ -100,6 +100,7 @@ function generateSetter( propertyName: string, propertyParts: $ReadOnlyArray, usingEvent: boolean, + context: {variableSuffix: number}, valueMapper: string => string = value => value, ) { const eventChain = usingEvent @@ -117,36 +118,48 @@ function generateObjectSetter( typeAnnotation: ObjectTypeAnnotation, extraIncludes: Set, usingEvent: boolean, + context: {variableSuffix: number}, ) { + const objectVariable = variable(`${propertyName}`, context); return ` { - auto ${propertyName} = jsi::Object(runtime); + auto ${objectVariable} = jsi::Object(runtime); ${indent( generateSetters( + objectVariable, propertyName, typeAnnotation.properties, propertyParts.concat([propertyName]), extraIncludes, usingEvent, + context, ), 2, )} - ${variableName}.setProperty(runtime, "${propertyName}", ${propertyName}); + ${variableName}.setProperty(runtime, "${propertyName}", ${objectVariable}); } `.trim(); } function setValueAtIndex( - propertyName: string, + arrayVariable: string, indexVariable: string, loopLocalVariable: string, mappingFunction: string => string = value => value, ) { - return `${propertyName}.setValueAtIndex(runtime, ${indexVariable}++, ${mappingFunction( + return `${arrayVariable}.setValueAtIndex(runtime, ${indexVariable}++, ${mappingFunction( loopLocalVariable, )});`; } +function variable(name: string, context: {variableSuffix: number}): string { + // Ensure variable names are unique by adding a suffix. + // Prevents C++ variable name collisions for properties with the same name. + // See: https://github.com/facebook/react-native/issues/53839 + context.variableSuffix++; + return `__codegen__${context.variableSuffix}__${name}`; +} + function generateArraySetter( variableName: string, propertyName: string, @@ -154,43 +167,49 @@ function generateArraySetter( elementType: EventTypeAnnotation, extraIncludes: Set, usingEvent: boolean, + context: {variableSuffix: number}, ): string { const eventChain = usingEvent ? `event.${[...propertyParts, propertyName].join('.')}` : [...propertyParts, propertyName].join('.'); - const indexVar = `${propertyName}Index`; - const innerLoopVar = `${propertyName}Value`; + const arrayVariable = variable(propertyName, context); + const indexVar = variable(`${propertyName}Index`, context); + const innerLoopVar = variable(`${propertyName}Value`, context); return ` - auto ${propertyName} = jsi::Array(runtime, ${eventChain}.size()); + auto ${arrayVariable} = jsi::Array(runtime, ${eventChain}.size()); size_t ${indexVar} = 0; for (auto ${innerLoopVar} : ${eventChain}) { ${handleArrayElementType( elementType, propertyName, + arrayVariable, indexVar, innerLoopVar, propertyParts, extraIncludes, usingEvent, + context, )} } - ${variableName}.setProperty(runtime, "${propertyName}", ${propertyName}); + ${variableName}.setProperty(runtime, "${propertyName}", ${arrayVariable}); `; } function handleArrayElementType( elementType: EventTypeAnnotation, propertyName: string, + arrayVariable: string, indexVariable: string, loopLocalVariable: string, propertyParts: $ReadOnlyArray, extraIncludes: Set, usingEvent: boolean, + context: {variableSuffix: number}, ): string { switch (elementType.type) { case 'BooleanTypeAnnotation': return setValueAtIndex( - propertyName, + arrayVariable, indexVariable, loopLocalVariable, val => `(bool)${val}`, @@ -199,17 +218,17 @@ function handleArrayElementType( case 'Int32TypeAnnotation': case 'DoubleTypeAnnotation': case 'FloatTypeAnnotation': - return setValueAtIndex(propertyName, indexVariable, loopLocalVariable); + return setValueAtIndex(arrayVariable, indexVariable, loopLocalVariable); case 'MixedTypeAnnotation': return setValueAtIndex( - propertyName, + arrayVariable, indexVariable, loopLocalVariable, val => `jsi::valueFromDynamic(runtime, ${val})`, ); case 'StringLiteralUnionTypeAnnotation': return setValueAtIndex( - propertyName, + arrayVariable, indexVariable, loopLocalVariable, val => `toString(${val})`, @@ -217,21 +236,25 @@ function handleArrayElementType( case 'ObjectTypeAnnotation': return convertObjectTypeArray( propertyName, + arrayVariable, indexVariable, loopLocalVariable, propertyParts, elementType, extraIncludes, + context, ); case 'ArrayTypeAnnotation': return convertArrayTypeArray( propertyName, + arrayVariable, indexVariable, loopLocalVariable, propertyParts, elementType, extraIncludes, usingEvent, + context, ); default: throw new Error( @@ -242,59 +265,71 @@ function handleArrayElementType( function convertObjectTypeArray( propertyName: string, + arrayVariable: string, indexVariable: string, loopLocalVariable: string, propertyParts: $ReadOnlyArray, objectTypeAnnotation: ObjectTypeAnnotation, extraIncludes: Set, + context: {variableSuffix: number}, ): string { - return `auto ${propertyName}Object = jsi::Object(runtime); + const variableName = variable(`${propertyName}Object`, context); + return `auto ${variableName} = jsi::Object(runtime); ${generateSetters( + variableName, `${propertyName}Object`, objectTypeAnnotation.properties, [].concat([loopLocalVariable]), extraIncludes, false, + context, )} - ${setValueAtIndex(propertyName, indexVariable, `${propertyName}Object`)}`; + ${setValueAtIndex(arrayVariable, indexVariable, variableName)}`; } function convertArrayTypeArray( propertyName: string, + arrayVariable: string, indexVariable: string, loopLocalVariable: string, propertyParts: $ReadOnlyArray, eventTypeAnnotation: EventTypeAnnotation, extraIncludes: Set, usingEvent: boolean, + context: {variableSuffix: number}, ): string { if (eventTypeAnnotation.type !== 'ArrayTypeAnnotation') { throw new Error( `Inconsistent eventTypeAnnotation received. Expected type = 'ArrayTypeAnnotation'; received = ${eventTypeAnnotation.type}`, ); } - return `auto ${propertyName}Array = jsi::Array(runtime, ${loopLocalVariable}.size()); + const nestedArrayVariable = variable(`${propertyName}Array`, context); + return `auto ${nestedArrayVariable} = jsi::Array(runtime, ${loopLocalVariable}.size()); size_t ${indexVariable}Internal = 0; for (auto ${loopLocalVariable}Internal : ${loopLocalVariable}) { ${handleArrayElementType( eventTypeAnnotation.elementType, `${propertyName}Array`, + nestedArrayVariable, `${indexVariable}Internal`, `${loopLocalVariable}Internal`, propertyParts, extraIncludes, usingEvent, + context, )} } - ${setValueAtIndex(propertyName, indexVariable, `${propertyName}Array`)}`; + ${setValueAtIndex(arrayVariable, indexVariable, nestedArrayVariable)}`; } function generateSetters( + variableName: string, parentPropertyName: string, properties: $ReadOnlyArray>, propertyParts: $ReadOnlyArray, extraIncludes: Set, usingEvent: boolean = true, + context: {variableSuffix: number}, ): string { const propSetters = properties .map(eventProperty => { @@ -306,45 +341,50 @@ function generateSetters( case 'DoubleTypeAnnotation': case 'FloatTypeAnnotation': return generateSetter( - parentPropertyName, + variableName, eventProperty.name, propertyParts, usingEvent, + context, ); case 'MixedTypeAnnotation': extraIncludes.add('#include '); return generateSetter( - parentPropertyName, + variableName, eventProperty.name, propertyParts, usingEvent, + context, prop => `jsi::valueFromDynamic(runtime, ${prop})`, ); case 'StringLiteralUnionTypeAnnotation': return generateSetter( - parentPropertyName, + variableName, eventProperty.name, propertyParts, usingEvent, + context, prop => `toString(${prop})`, ); case 'ObjectTypeAnnotation': return generateObjectSetter( - parentPropertyName, + variableName, eventProperty.name, propertyParts, typeAnnotation, extraIncludes, usingEvent, + context, ); case 'ArrayTypeAnnotation': return generateArraySetter( - parentPropertyName, + variableName, eventProperty.name, propertyParts, typeAnnotation.elementType, extraIncludes, usingEvent, + context, ); default: (typeAnnotation.type: empty); @@ -375,15 +415,20 @@ function generateEvent( : `${event.name[2].toLowerCase()}${event.name.slice(3)}`; if (event.typeAnnotation.argument) { + const context = {variableSuffix: 0}; + const variableName = 'payload'; const implementation = ` - auto payload = jsi::Object(runtime); + auto ${variableName} = jsi::Object(runtime); ${generateSetters( 'payload', + variableName, event.typeAnnotation.argument.properties, [], extraIncludes, + true, + context, )} - return payload; + return ${variableName}; `.trim(); if (!event.name.startsWith('on')) { diff --git a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateEventEmitterCpp-test.js.snap b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateEventEmitterCpp-test.js.snap index 78c49307b2db..2a81f9ba1c0a 100644 --- a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateEventEmitterCpp-test.js.snap +++ b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateEventEmitterCpp-test.js.snap @@ -197,15 +197,15 @@ void EventsNestedObjectNativeComponentEventEmitter::onChange(OnChange event) con dispatchEvent(\\"change\\", [event=std::move(event)](jsi::Runtime &runtime) { auto payload = jsi::Object(runtime); { - auto location = jsi::Object(runtime); + auto __codegen__1__location = jsi::Object(runtime); { - auto source = jsi::Object(runtime); - source.setProperty(runtime, \\"url\\", event.location.source.url); - location.setProperty(runtime, \\"source\\", source); + auto __codegen__2__source = jsi::Object(runtime); + __codegen__2__source.setProperty(runtime, \\"url\\", event.location.source.url); + __codegen__1__location.setProperty(runtime, \\"source\\", __codegen__2__source); } - location.setProperty(runtime, \\"x\\", event.location.x); - location.setProperty(runtime, \\"y\\", event.location.y); - payload.setProperty(runtime, \\"location\\", location); + __codegen__1__location.setProperty(runtime, \\"x\\", event.location.x); + __codegen__1__location.setProperty(runtime, \\"y\\", event.location.y); + payload.setProperty(runtime, \\"location\\", __codegen__1__location); } return payload; }); @@ -249,60 +249,60 @@ void EventsNativeComponentEventEmitter::onArrayEventType(OnArrayEventType event) dispatchEvent(\\"arrayEventType\\", [event=std::move(event)](jsi::Runtime &runtime) { auto payload = jsi::Object(runtime); - auto bool_array_event_prop = jsi::Array(runtime, event.bool_array_event_prop.size()); - size_t bool_array_event_propIndex = 0; - for (auto bool_array_event_propValue : event.bool_array_event_prop) { - bool_array_event_prop.setValueAtIndex(runtime, bool_array_event_propIndex++, (bool)bool_array_event_propValue); + auto __codegen__1__bool_array_event_prop = jsi::Array(runtime, event.bool_array_event_prop.size()); + size_t __codegen__2__bool_array_event_propIndex = 0; + for (auto __codegen__3__bool_array_event_propValue : event.bool_array_event_prop) { + __codegen__1__bool_array_event_prop.setValueAtIndex(runtime, __codegen__2__bool_array_event_propIndex++, (bool)__codegen__3__bool_array_event_propValue); } - payload.setProperty(runtime, \\"bool_array_event_prop\\", bool_array_event_prop); + payload.setProperty(runtime, \\"bool_array_event_prop\\", __codegen__1__bool_array_event_prop); - auto string_enum_event_prop = jsi::Array(runtime, event.string_enum_event_prop.size()); - size_t string_enum_event_propIndex = 0; - for (auto string_enum_event_propValue : event.string_enum_event_prop) { - string_enum_event_prop.setValueAtIndex(runtime, string_enum_event_propIndex++, toString(string_enum_event_propValue)); + auto __codegen__4__string_enum_event_prop = jsi::Array(runtime, event.string_enum_event_prop.size()); + size_t __codegen__5__string_enum_event_propIndex = 0; + for (auto __codegen__6__string_enum_event_propValue : event.string_enum_event_prop) { + __codegen__4__string_enum_event_prop.setValueAtIndex(runtime, __codegen__5__string_enum_event_propIndex++, toString(__codegen__6__string_enum_event_propValue)); } - payload.setProperty(runtime, \\"string_enum_event_prop\\", string_enum_event_prop); + payload.setProperty(runtime, \\"string_enum_event_prop\\", __codegen__4__string_enum_event_prop); - auto array_array_event_prop = jsi::Array(runtime, event.array_array_event_prop.size()); - size_t array_array_event_propIndex = 0; - for (auto array_array_event_propValue : event.array_array_event_prop) { - auto array_array_event_propArray = jsi::Array(runtime, array_array_event_propValue.size()); - size_t array_array_event_propIndexInternal = 0; - for (auto array_array_event_propValueInternal : array_array_event_propValue) { - array_array_event_propArray.setValueAtIndex(runtime, array_array_event_propIndexInternal++, array_array_event_propValueInternal); + auto __codegen__7__array_array_event_prop = jsi::Array(runtime, event.array_array_event_prop.size()); + size_t __codegen__8__array_array_event_propIndex = 0; + for (auto __codegen__9__array_array_event_propValue : event.array_array_event_prop) { + auto __codegen__10__array_array_event_propArray = jsi::Array(runtime, __codegen__9__array_array_event_propValue.size()); + size_t __codegen__8__array_array_event_propIndexInternal = 0; + for (auto __codegen__9__array_array_event_propValueInternal : __codegen__9__array_array_event_propValue) { + __codegen__10__array_array_event_propArray.setValueAtIndex(runtime, __codegen__8__array_array_event_propIndexInternal++, __codegen__9__array_array_event_propValueInternal); } - array_array_event_prop.setValueAtIndex(runtime, array_array_event_propIndex++, array_array_event_propArray); + __codegen__7__array_array_event_prop.setValueAtIndex(runtime, __codegen__8__array_array_event_propIndex++, __codegen__10__array_array_event_propArray); } - payload.setProperty(runtime, \\"array_array_event_prop\\", array_array_event_prop); + payload.setProperty(runtime, \\"array_array_event_prop\\", __codegen__7__array_array_event_prop); - auto array_object_event_prop = jsi::Array(runtime, event.array_object_event_prop.size()); - size_t array_object_event_propIndex = 0; - for (auto array_object_event_propValue : event.array_object_event_prop) { - auto array_object_event_propObject = jsi::Object(runtime); - array_object_event_propObject.setProperty(runtime, \\"lat\\", array_object_event_propValue.lat); -array_object_event_propObject.setProperty(runtime, \\"lon\\", array_object_event_propValue.lon); - - auto names = jsi::Array(runtime, array_object_event_propValue.names.size()); - size_t namesIndex = 0; - for (auto namesValue : array_object_event_propValue.names) { - names.setValueAtIndex(runtime, namesIndex++, namesValue); + auto __codegen__11__array_object_event_prop = jsi::Array(runtime, event.array_object_event_prop.size()); + size_t __codegen__12__array_object_event_propIndex = 0; + for (auto __codegen__13__array_object_event_propValue : event.array_object_event_prop) { + auto __codegen__14__array_object_event_propObject = jsi::Object(runtime); + __codegen__14__array_object_event_propObject.setProperty(runtime, \\"lat\\", __codegen__13__array_object_event_propValue.lat); +__codegen__14__array_object_event_propObject.setProperty(runtime, \\"lon\\", __codegen__13__array_object_event_propValue.lon); + + auto __codegen__15__names = jsi::Array(runtime, __codegen__13__array_object_event_propValue.names.size()); + size_t __codegen__16__namesIndex = 0; + for (auto __codegen__17__namesValue : __codegen__13__array_object_event_propValue.names) { + __codegen__15__names.setValueAtIndex(runtime, __codegen__16__namesIndex++, __codegen__17__namesValue); } - array_object_event_propObject.setProperty(runtime, \\"names\\", names); + __codegen__14__array_object_event_propObject.setProperty(runtime, \\"names\\", __codegen__15__names); - array_object_event_prop.setValueAtIndex(runtime, array_object_event_propIndex++, array_object_event_propObject); + __codegen__11__array_object_event_prop.setValueAtIndex(runtime, __codegen__12__array_object_event_propIndex++, __codegen__14__array_object_event_propObject); } - payload.setProperty(runtime, \\"array_object_event_prop\\", array_object_event_prop); + payload.setProperty(runtime, \\"array_object_event_prop\\", __codegen__11__array_object_event_prop); - auto array_mixed_event_prop = jsi::Array(runtime, event.array_mixed_event_prop.size()); - size_t array_mixed_event_propIndex = 0; - for (auto array_mixed_event_propValue : event.array_mixed_event_prop) { - array_mixed_event_prop.setValueAtIndex(runtime, array_mixed_event_propIndex++, jsi::valueFromDynamic(runtime, array_mixed_event_propValue)); + auto __codegen__18__array_mixed_event_prop = jsi::Array(runtime, event.array_mixed_event_prop.size()); + size_t __codegen__19__array_mixed_event_propIndex = 0; + for (auto __codegen__20__array_mixed_event_propValue : event.array_mixed_event_prop) { + __codegen__18__array_mixed_event_prop.setValueAtIndex(runtime, __codegen__19__array_mixed_event_propIndex++, jsi::valueFromDynamic(runtime, __codegen__20__array_mixed_event_propValue)); } - payload.setProperty(runtime, \\"array_mixed_event_prop\\", array_mixed_event_prop); + payload.setProperty(runtime, \\"array_mixed_event_prop\\", __codegen__18__array_mixed_event_prop); return payload; });