diff --git a/arkui-plugins/ui-plugins/checked-transformer.ts b/arkui-plugins/ui-plugins/checked-transformer.ts index f3ccf8d290649868032c97398295db8bc3d03846..357a4183021aeb35a44a662531c1d963b8310337 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 031e865b907e25bb10683e74cb7177df69b4f4c2..fc0a1ca57d897a7427b9baad1b6e7c44f33db388 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(