From aae63c24dd26683344d1c3413dcb8ac16c916409 Mon Sep 17 00:00:00 2001 From: l00913061 Date: Sat, 21 Jun 2025 14:29:17 +0800 Subject: [PATCH] fix customdialog Signed-off-by: l00913061 Change-Id: Ic5b31f4be16269ab24dbd454ebaecdc8b5353a4a --- arkui-plugins/ui-plugins/customdialog.ts | 85 +++++++++++++++--------- 1 file changed, 53 insertions(+), 32 deletions(-) diff --git a/arkui-plugins/ui-plugins/customdialog.ts b/arkui-plugins/ui-plugins/customdialog.ts index 8a238ab05..81f9a68d3 100644 --- a/arkui-plugins/ui-plugins/customdialog.ts +++ b/arkui-plugins/ui-plugins/customdialog.ts @@ -19,7 +19,6 @@ import { CustomComponentNames, getCustomComponentOptionsName, } from './utils'; -import { stat } from 'fs'; import { createAndInsertImportDeclaration } from '../common/arkts-utils'; export function createCustomDialogMethod(controller: string): arkts.MethodDefinition { @@ -107,44 +106,54 @@ export function transformCallToArrow(value: arkts.CallExpression): arkts.ArrowFu return newValue; } + export function transformController(newInstance: arkts.ETSNewClassInstanceExpression): arkts.ETSNewClassInstanceExpression { const arg = newInstance.getArguments[0]; - if (!arkts.isObjectExpression(arg)) { - throw new Error('Error CustomDialogOptions'); + let argObj = arg; + const needAs = arkts.isTSAsExpression(arg); + if (needAs) { + argObj = (argObj as arkts.TSAsExpression).expr!; + } + if (!arkts.isObjectExpression(argObj)) { + return newInstance; } - const properties = arg.properties as arkts.Property[]; + const properties = argObj.properties as arkts.Property[]; const property = properties[0]; const value = property?.value; if (!(value && arkts.isCallExpression(value) && arkts.isIdentifier(value.expression))) { return newInstance; } - const memoArrow = transformCallToArrow(value); properties[0] = arkts.Property.updateProperty( property, property.key, memoArrow ); - const newObj = arkts.ObjectExpression.updateObjectExpression( - arg, + let newObj: arkts.Expression = arkts.ObjectExpression.updateObjectExpression( + argObj, arkts.Es2pandaAstNodeType.AST_NODE_TYPE_OBJECT_EXPRESSION, properties, false ); - const asOptions = arkts.factory.createTSAsExpression( - newObj, - arkts.factory.createTypeReference( - arkts.factory.createTypeReferencePart( - arkts.factory.createIdentifier(CustomComponentNames.CUSTOMDIALOG_CONTROLLER_OPTIONS) - ) - ), - false - ); - return arkts.factory.updateETSNewClassInstanceExpression( - newInstance, - newInstance.getTypeRef, - [asOptions] - ); + if (needAs) { + newObj = arkts.factory.updateTSAsExpression( + arg, + newObj, + arg.typeAnnotation, + arg.isConst + ); + } else { + newObj = arkts.factory.createTSAsExpression( + newObj, + arkts.factory.createTypeReference( + arkts.factory.createTypeReferencePart( + arkts.factory.createIdentifier(CustomComponentNames.CUSTOMDIALOG_CONTROLLER_OPTIONS) + ) + ), + false + ); + } + return arkts.factory.updateETSNewClassInstanceExpression(newInstance, newInstance.getTypeRef, [newObj]); } function createVarExpression(key_name: string, isProperty: boolean): arkts.Expression { @@ -340,7 +349,7 @@ export function updateBody(body: arkts.Statement[]): arkts.Statement[] { export function insertImportDeclaration(program: arkts.Program | undefined): void { if (!program) { - throw Error('Failed to insert import: Transformer has no program'); + return; } const imported = arkts.factory.createIdentifier('ExtendableComponent'); createAndInsertImportDeclaration( @@ -374,13 +383,7 @@ export function transformDeclaration(node: arkts.ClassDeclaration): arkts.ClassD return declaration; } -export function updateNewClassInstanceExpression(node: arkts.ETSNewClassInstanceExpression, varName: string, - isProperty: boolean): arkts.ETSNewClassInstanceExpression { - const asExression = node.getArguments[0] as arkts.TSAsExpression; - const arg = asExression.expr as arkts.ObjectExpression; - if (!arkts.isObjectExpression(arg)) { - throw new Error('Error CustomDialogOptions'); - } +function updateBuilder(arg: arkts.ObjectExpression, varName: string, isProperty: boolean): arkts.ObjectExpression { const properties = arg.properties as arkts.Property[]; const builder = properties[0]; const builder_value = builder.value as arkts.ArrowFunctionExpression; @@ -390,15 +393,33 @@ export function updateNewClassInstanceExpression(node: arkts.ETSNewClassInstance builder.key, newBuilderValue ); - const newObj = arkts.factory.updateObjectExpression( + return arkts.factory.updateObjectExpression( arg, arkts.Es2pandaAstNodeType.AST_NODE_TYPE_OBJECT_EXPRESSION, [newProperty, ...properties.slice(1)], false ); +} + +export function updateNewClassInstanceExpression(node: arkts.ETSNewClassInstanceExpression, varName: string, + isProperty: boolean): arkts.ETSNewClassInstanceExpression { + const asExression = node.getArguments[0] as arkts.TSAsExpression; + const arg = asExression.expr; + let newArg = arg; + if (arg && arkts.isTSAsExpression(arg)) { + newArg = arkts.factory.updateTSAsExpression( + arg, + updateBuilder(arg.expr! as arkts.ObjectExpression, varName, isProperty), + arg.typeAnnotation, + arg.isConst + ); + } else if (arg && arkts.isObjectExpression(arg)) { + newArg = updateBuilder(arg, varName, isProperty); + } + const newAsExpression = arkts.factory.updateTSAsExpression( asExression, - newObj, + newArg, asExression.typeAnnotation, asExression.isConst ); @@ -421,7 +442,7 @@ export function isNewCustomDialogController(node: arkts.AstNode | undefined): bo function updateVar(node: arkts.VariableDeclarator): arkts.VariableDeclarator { if (node.flag !== arkts.Es2pandaVariableDeclaratorFlag.VARIABLE_DECLARATOR_FLAG_LET) { - throw Error('Error VariableDeclarator CustomDialogController'); + return node; } return arkts.factory.updateVariableDeclarator( node, -- Gitee