From d91f0be5c9e978a7c181491a9aca26b6616e8314 Mon Sep 17 00:00:00 2001 From: xieziang Date: Tue, 17 Jun 2025 21:46:50 +0800 Subject: [PATCH] update with updateThenAttch Signed-off-by: xieziang --- .../node-utilities/ArrowFunctionExpression.ts | 62 +++++++++++++++---- 1 file changed, 49 insertions(+), 13 deletions(-) diff --git a/ui2abc/libarkts/src/arkts-api/node-utilities/ArrowFunctionExpression.ts b/ui2abc/libarkts/src/arkts-api/node-utilities/ArrowFunctionExpression.ts index cde917fbf4..ee94ffeecb 100644 --- a/ui2abc/libarkts/src/arkts-api/node-utilities/ArrowFunctionExpression.ts +++ b/ui2abc/libarkts/src/arkts-api/node-utilities/ArrowFunctionExpression.ts @@ -16,6 +16,7 @@ import { ArrowFunctionExpression, AnnotationUsage, ScriptFunction } from "../../generated" import { isSameNativeObject } from "../peers/ArktsObject" import { updateNodeByNode } from "../utilities/private" +import type { AstNode } from '../peers/AstNode'; export function createArrowFunctionExpression( func?: ScriptFunction, @@ -30,20 +31,55 @@ export function createArrowFunctionExpression( return res } +// export function updateArrowFunctionExpression( +// original: ArrowFunctionExpression, +// func?: ScriptFunction, +// annotations?: readonly AnnotationUsage[], +// ): ArrowFunctionExpression { +// if (isSameNativeObject(original.function, func) +// && isSameNativeObject(original.annotations, annotations)) { +// return original +// } +// return updateNodeByNode( +// createArrowFunctionExpression( +// func, +// annotations, +// ), +// original +// ) +// } + +export function updateThenAttach( + update: (original: T, ...args: ARGS) => T, + ...attachFuncs: ((node: T, original: T) => T)[] +): (node: T, ...args: ARGS) => T { + return (node: T, ...args: ARGS) => { + let _node: T = update(node, ...args); + attachFuncs.forEach((attach) => { + _node = attach(_node, node); + }); + return _node; + }; +} + +export function attachModifiers(node: T, original: T): T { + node.modifiers = original.modifiers; + return node; +} + + export function updateArrowFunctionExpression( original: ArrowFunctionExpression, - func?: ScriptFunction, - annotations?: readonly AnnotationUsage[], + func: ScriptFunction, ): ArrowFunctionExpression { - if (isSameNativeObject(original.function, func) - && isSameNativeObject(original.annotations, annotations)) { - return original + if (isSameNativeObject(func, original.function)) { + return original; } - return updateNodeByNode( - createArrowFunctionExpression( - func, - annotations, - ), - original - ) -} + + const update = updateThenAttach( + ArrowFunctionExpression.updateArrowFunctionExpression, + attachModifiers, + (node: ArrowFunctionExpression, original: ArrowFunctionExpression) => node.setAnnotations(original.annotations) + ); + return update(original, func); +} \ No newline at end of file -- Gitee