diff --git a/arkui-plugins/ui-plugins/component-transformer.ts b/arkui-plugins/ui-plugins/component-transformer.ts index e39df9c261218508ccab34d49eba65e45140078f..f8a72b7fc7d06dd71d80bb62902c760acb5708d3 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 b8ef7d89175c7de8fa45f1196b1cbd99c661076b..07fb64bff606478ea3505dcc3619af5b4b4602b1 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 5fc7804bc7abb90f175dd6183b1434c3526d4f6a..6c8501aa3bbbfe331e5e5e3fdb5ed1183d1bab6b 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 81a1ec31fc92a7bbd78fc4ab6f928633c11b43a5..fb9b6da1ff9adf61c2be584ae8bf80ea7ce7a325 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 8f67a8f996fddfe4cb49635f7a39849fac604402..d24aa915c4c8039ed38b8bd84d67deddccdd5f86 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 463dba1263ed912ef7d433754ae1c4912d50e27b..1a05e5e0978a4d1f1de9cd27d2bcdef73fcdbb37 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") }