From 6511fffcaa1eee610538181a35cb16ca3cd805f6 Mon Sep 17 00:00:00 2001 From: Boren Zhang Date: Thu, 5 Jun 2025 15:38:40 +0800 Subject: [PATCH] Transform wrapBuilder. Change @Builder to @memo in type alias for functions. Signed-off-by: Boren Zhang --- arkui-plugins/ui-plugins/checked-transformer.ts | 2 ++ arkui-plugins/ui-plugins/struct-translators/factory.ts | 10 +++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/arkui-plugins/ui-plugins/checked-transformer.ts b/arkui-plugins/ui-plugins/checked-transformer.ts index f3ccf8d29..357a41830 100644 --- a/arkui-plugins/ui-plugins/checked-transformer.ts +++ b/arkui-plugins/ui-plugins/checked-transformer.ts @@ -116,6 +116,8 @@ export class CheckedTransformer 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 structFactory.transformTSTypeAlias(node); } return node; } diff --git a/arkui-plugins/ui-plugins/struct-translators/factory.ts b/arkui-plugins/ui-plugins/struct-translators/factory.ts index 031e865b9..fc0a1ca57 100644 --- a/arkui-plugins/ui-plugins/struct-translators/factory.ts +++ b/arkui-plugins/ui-plugins/struct-translators/factory.ts @@ -23,10 +23,11 @@ import { getTypeNameFromTypeParameter, getTypeParamsFromClassDecl, isCustomComponentInterface, + MemoNames, } from '../utils'; import { factory as uiFactory } from '../ui-factory'; import { factory as propertyFactory } from '../property-translators/factory'; -import { collect, filterDefined } from '../../common/arkts-utils'; +import { collect, filterDefined, annotation } from '../../common/arkts-utils'; import { classifyObservedTrack, classifyProperty, @@ -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([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( -- Gitee