diff --git a/arkui-plugins/ui-plugins/struct-translators/factory.ts b/arkui-plugins/ui-plugins/struct-translators/factory.ts index f3f39c246245dae2a94bf760f4afe87d759e212c..4f9fa2d7dd834a1b392e4d9f89498f79adb3a2a5 100644 --- a/arkui-plugins/ui-plugins/struct-translators/factory.ts +++ b/arkui-plugins/ui-plugins/struct-translators/factory.ts @@ -23,6 +23,7 @@ import { getTypeNameFromTypeParameter, getTypeParamsFromClassDecl, isCustomComponentInterface, + MemoNames, } from '../utils'; import { factory as uiFactory } from '../ui-factory'; import { factory as propertyFactory } from '../property-translators/factory'; @@ -528,6 +529,13 @@ export class factory { return arkts.factory.updateClassDeclaration(node, newClassDef); } + static transformTSTypeAlias(node: arkts.TSTypeAliasDeclaration): arkts.TSTypeAliasDeclaration { + if (arkts.isETSFunctionType(node.typeAnnotation) && hasDecorator(node.typeAnnotation, DecoratorNames.BUILDER)) { + node.typeAnnotation.setAnnotations([arkts.annotation(MemoNames.MEMO)]) + } + return node; + } + static updateObservedTrackClassDef(node: arkts.ClassDefinition): arkts.ClassDefinition { const isObserved: boolean = hasDecorator(node, DecoratorNames.OBSERVED); const classHasTrack: boolean = node.body.some( diff --git a/arkui-plugins/ui-plugins/struct-translators/struct-transformer.ts b/arkui-plugins/ui-plugins/struct-translators/struct-transformer.ts index 05b470a094ad4abbd31a1c6c481206577da420f5..4dbead9c6d73d879d36abe7f6b9a78e7cff336fa 100644 --- a/arkui-plugins/ui-plugins/struct-translators/struct-transformer.ts +++ b/arkui-plugins/ui-plugins/struct-translators/struct-transformer.ts @@ -98,6 +98,8 @@ export class StructTransformer extends AbstractVisitor { return addMemoAnnotation(node); } else if (arkts.isEtsScript(node) && ImportCollector.getInstance().importInfos.length > 0) { ImportCollector.getInstance().insertCurrentImports(this.program); + } else if (arkts.isTSTypeAliasDeclaration(node)) { + return factory.transformTSTypeAlias(node); } return node; }