From 2e4775370f073df5be637eb1ec08d80584f4bd07 Mon Sep 17 00:00:00 2001 From: lidongyao <738401275@qq.com> Date: Thu, 27 Mar 2025 20:05:20 +0800 Subject: [PATCH] ui plugin debug Change-Id: I988932c82aff9701475efcb175802dc9d672e53c --- .../ui-plugins/component-transformer.ts | 8 +++---- .../ui-plugins/struct-transformer.ts | 8 +++++-- koala-wrapper/src/arkts-api/peers/AstNode.ts | 4 ++++ koala-wrapper/src/arkts-api/peers/Context.ts | 10 ++++++++ koala-wrapper/src/arkts-api/visitor.ts | 23 ++++++++++++++++--- .../src/generated/Es2pandaNativeModule.ts | 3 +++ 6 files changed, 46 insertions(+), 10 deletions(-) diff --git a/arkui-plugins/ui-plugins/component-transformer.ts b/arkui-plugins/ui-plugins/component-transformer.ts index e39df9c26..f8a72b7fc 100644 --- a/arkui-plugins/ui-plugins/component-transformer.ts +++ b/arkui-plugins/ui-plugins/component-transformer.ts @@ -143,7 +143,8 @@ export class ComponentTransformer extends AbstractVisitor { ), entryStorageProperty ? [entryStorageProperty, ...node.definition?.body] : node.definition?.body, node.definition?.modifiers, - arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_FINAL + // arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_FINAL + arkts.classDefinitionFlags(node.definition) | arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_FINAL ) if (arkts.isStructDeclaration(node)) { @@ -151,10 +152,7 @@ export class ComponentTransformer extends AbstractVisitor { newDefinition ) } else { - return arkts.factory.updateClassDeclaration( - node, - newDefinition - ) + return arkts.factory.updateClassDeclaration(node, newDefinition) } } diff --git a/arkui-plugins/ui-plugins/struct-transformer.ts b/arkui-plugins/ui-plugins/struct-transformer.ts index b8ef7d891..07fb64bff 100644 --- a/arkui-plugins/ui-plugins/struct-transformer.ts +++ b/arkui-plugins/ui-plugins/struct-transformer.ts @@ -346,10 +346,14 @@ function tranformClassMembers(node: arkts.ClassDeclaration): arkts.ClassDeclarat definition.super, [...translatedMembers, ...updateMembers], definition.modifiers, - arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_NONE + // arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_NONE + arkts.classDefinitionFlags(definition) ); - return arkts.factory.updateClassDeclaration(node, updateClassDef); + // return arkts.factory.updateClassDeclaration(node, updateClassDef); + const newClassDecl = arkts.factory.updateClassDeclaration(node, updateClassDef); + newClassDecl.modifiers = node.modifiers; + return newClassDecl; } export class StructTransformer extends AbstractVisitor { diff --git a/koala-wrapper/src/arkts-api/peers/AstNode.ts b/koala-wrapper/src/arkts-api/peers/AstNode.ts index 5fc7804bc..6c8501aa3 100644 --- a/koala-wrapper/src/arkts-api/peers/AstNode.ts +++ b/koala-wrapper/src/arkts-api/peers/AstNode.ts @@ -86,6 +86,10 @@ export abstract class AstNode extends ArktsObject { return unpackString(global.generatedEs2panda._AstNodeDumpEtsSrcConst(global.context, this.peer)) } + public dumpSrcForPlugin(): string { + return unpackString(global.generatedEs2panda._AstNodeDumpEtsSrcForPlugin(global.context, this.peer)) + } + public dumpModifiers(): string { return unpackString(global.es2panda._AstNodeDumpModifiers(global.context, this.peer)) } diff --git a/koala-wrapper/src/arkts-api/peers/Context.ts b/koala-wrapper/src/arkts-api/peers/Context.ts index 81a1ec31f..fb9b6da1f 100644 --- a/koala-wrapper/src/arkts-api/peers/Context.ts +++ b/koala-wrapper/src/arkts-api/peers/Context.ts @@ -49,6 +49,16 @@ export class Context extends ArktsObject { return new Context(global.context); } + static destroyAndRecreateForPlugin( + ast: AstNode + ): Context { + console.log("[TS WRAPPER] DESTROY AND RECREATE FOR PLUGIN"); + const source = filterSource(ast.dumpSrcForPlugin()) + global.es2panda._DestroyContext(global.context) + global.compilerContext = Context.createFromString(source) + + return new Context(global.context); + } get program(): Program { return new Program(global.es2panda._ContextProgram(this.peer)); diff --git a/koala-wrapper/src/arkts-api/visitor.ts b/koala-wrapper/src/arkts-api/visitor.ts index 8f67a8f99..d24aa915c 100644 --- a/koala-wrapper/src/arkts-api/visitor.ts +++ b/koala-wrapper/src/arkts-api/visitor.ts @@ -153,10 +153,16 @@ export function visitEachChild( ) } if (isClassDeclaration(node)) { - return factory.updateClassDeclaration( + // return factory.updateClassDeclaration( + // node, + // nodeVisitor(node.definition, visitor) + // ) + const _node = factory.updateClassDeclaration( node, nodeVisitor(node.definition, visitor) ) + _node.modifiers = node.modifiers; + return _node; } if (isStructDeclaration(node)) { // FIXME: workaround for annotations loss after updateStructDeclaration @@ -231,16 +237,27 @@ export function visitEachChild( ) } if (isTSInterfaceDeclaration(node)) { - return factory.updateInterfaceDeclaration( + // return factory.updateInterfaceDeclaration( + // node, + // nodesVisitor(node.extends, visitor), + // nodeVisitor(node.id, visitor), + // nodeVisitor(node.typeParams, visitor), + // nodeVisitor(node.body, visitor), + // node.isStatic, + // // TODO: how do I get it? + // true + // ) + const _node = factory.updateInterfaceDeclaration( node, nodesVisitor(node.extends, visitor), nodeVisitor(node.id, visitor), nodeVisitor(node.typeParams, visitor), nodeVisitor(node.body, visitor), node.isStatic, - // TODO: how do I get it? true ) + _node.modifiers = node.modifiers; + return _node; } if (isTSInterfaceBody(node)) { return factory.updateInterfaceBody( diff --git a/koala-wrapper/src/generated/Es2pandaNativeModule.ts b/koala-wrapper/src/generated/Es2pandaNativeModule.ts index 463dba126..1a05e5e09 100644 --- a/koala-wrapper/src/generated/Es2pandaNativeModule.ts +++ b/koala-wrapper/src/generated/Es2pandaNativeModule.ts @@ -1690,6 +1690,9 @@ export class Es2pandaNativeModule { _AstNodeDumpEtsSrcConst(context: KNativePointer, receiver: KNativePointer): KStringPtr { throw new Error("This methods was not overloaded by native module initialization") } + _AstNodeDumpEtsSrcForPlugin(context: KNativePointer, receiver: KNativePointer): KStringPtr { + throw new Error("This methods was not overloaded by native module initialization") + } _AstNodeDumpConst(context: KNativePointer, receiver: KNativePointer, dumper: KNativePointer): void { throw new Error("This methods was not overloaded by native module initialization") } -- Gitee