From 01963448adc70a03b4f5c0d3a7c65b684dd11102 Mon Sep 17 00:00:00 2001 From: Igor Loginov Date: Tue, 11 Mar 2025 17:13:16 +0300 Subject: [PATCH 1/2] Generated StructDeclaration --- .../plugins/src/component-transformer.ts | 8 +++---- .../src/arkts-api/factory/nodeFactory.ts | 14 ++++++----- .../src/arkts-api/factory/nodeTests.ts | 5 ---- arkoala-arkts/libarkts/src/arkts-api/index.ts | 1 + arkoala-arkts/libarkts/src/arkts-api/types.ts | 23 ------------------- .../src/arkts-api/utilities/private.ts | 4 ++++ .../libarkts/src/arkts-api/visitor.ts | 12 +++++----- 7 files changed, 23 insertions(+), 44 deletions(-) diff --git a/arkoala-arkts/libarkts/plugins/src/component-transformer.ts b/arkoala-arkts/libarkts/plugins/src/component-transformer.ts index 43ee858a5..e004095b1 100644 --- a/arkoala-arkts/libarkts/plugins/src/component-transformer.ts +++ b/arkoala-arkts/libarkts/plugins/src/component-transformer.ts @@ -28,7 +28,7 @@ export class ComponentTransformer extends AbstractVisitor { private context: { componentNames: string[] } = { componentNames: [] } - isComponentStruct(node: arkts.StructDeclaration): boolean { + isComponentStruct(node: arkts.ETSStructDeclaration): boolean { // For now just rewrite any struct return true } @@ -69,7 +69,7 @@ export class ComponentTransformer extends AbstractVisitor { ) } - processComponent(node: arkts.ClassDeclaration | arkts.StructDeclaration): arkts.ClassDeclaration | arkts.StructDeclaration { + processComponent(node: arkts.ClassDeclaration | arkts.ETSStructDeclaration): arkts.ClassDeclaration | arkts.ETSStructDeclaration { const className = node.definition?.ident?.name if (!className) { throw "Non Empty className expected for Component" @@ -123,7 +123,7 @@ export class ComponentTransformer extends AbstractVisitor { arkts.classDefinitionFlags(node.definition) | arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_FINAL ) - if (arkts.isStructDeclaration(node)) { + if (arkts.isETSStructDeclaration(node)) { return arkts.factory.createClassDeclaration( newDefinition ) @@ -140,7 +140,7 @@ export class ComponentTransformer extends AbstractVisitor { if (arkts.isEtsScript(newNode)) { return this.processEtsScript(newNode) } - if (arkts.isStructDeclaration(newNode) && this.isComponentStruct(newNode)) { + if (arkts.isETSStructDeclaration(newNode) && this.isComponentStruct(newNode)) { return this.processComponent(newNode) } return newNode diff --git a/arkoala-arkts/libarkts/src/arkts-api/factory/nodeFactory.ts b/arkoala-arkts/libarkts/src/arkts-api/factory/nodeFactory.ts index 5ef0c0d8c..0294ee846 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/factory/nodeFactory.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/factory/nodeFactory.ts @@ -25,7 +25,6 @@ import { MethodDefinition, NumberLiteral, ScriptFunction, - StructDeclaration, VariableDeclaration, VariableDeclarator } from "../types" @@ -38,6 +37,8 @@ import { ClassProperty, ConditionalExpression, ETSFunctionType, + ETSPrimitiveType, + ETSStructDeclaration, ETSTypeReference, ETSTypeReferencePart, ETSUndefinedType, @@ -53,7 +54,8 @@ import { TSInterfaceDeclaration, TSTypeParameter, TSTypeParameterDeclaration, - UndefinedLiteral + TypeNode, + UndefinedLiteral, } from "../../generated" import { factory as generatedFactory } from "../../generated/factory" @@ -156,11 +158,11 @@ export const factory = { get updateBinaryExpression() { return compose(BinaryExpression.createBinaryExpression) }, - get createStructDeclaration() { - return StructDeclaration.create + get createETSStructDeclaration() { + return ETSStructDeclaration.createETSStructDeclaration }, - get updateStructDeclaration() { - return compose(StructDeclaration.create) + get updateETSStructDeclaration() { + return compose(ETSStructDeclaration.createETSStructDeclaration) }, get createClassDefinition() { return ClassDefinition.createClassDefinition diff --git a/arkoala-arkts/libarkts/src/arkts-api/factory/nodeTests.ts b/arkoala-arkts/libarkts/src/arkts-api/factory/nodeTests.ts index 5872d0b5d..9c0319eeb 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/factory/nodeTests.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/factory/nodeTests.ts @@ -8,7 +8,6 @@ import { FunctionExpression, MethodDefinition, ScriptFunction, - StructDeclaration, VariableDeclaration, VariableDeclarator } from "../types" @@ -34,10 +33,6 @@ export function isArrowFunctionExpression(node: AstNode): node is ArrowFunctionE return node instanceof ArrowFunctionExpression } -export function isStructDeclaration(node: AstNode): node is StructDeclaration { - return node instanceof StructDeclaration -} - export function isFunctionExpression(node: AstNode): node is FunctionExpression { return node instanceof FunctionExpression } diff --git a/arkoala-arkts/libarkts/src/arkts-api/index.ts b/arkoala-arkts/libarkts/src/arkts-api/index.ts index 0fbb58bf3..b2e1d8205 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/index.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/index.ts @@ -30,6 +30,7 @@ export * from "../generated/peers/ThrowStatement" export * from "../generated/peers/TypeNode" export * from "../generated/peers/ClassDeclaration" export * from "../generated/peers/ClassDefinition" +export * from "../generated/peers/ETSStructDeclaration" export * from "../generated/peers/Identifier" export * from "../generated/peers/ETSTypeReference" export * from "../generated/peers/ETSTypeReferencePart" diff --git a/arkoala-arkts/libarkts/src/arkts-api/types.ts b/arkoala-arkts/libarkts/src/arkts-api/types.ts index f84a2f3f8..76b25ef3f 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/types.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/types.ts @@ -453,28 +453,6 @@ export class ETSParameterExpression extends Expression { identifier: Identifier } -export class StructDeclaration extends AstNode { - constructor(peer: KPtr) { - assertValidPeer(peer, Es2pandaAstNodeType.AST_NODE_TYPE_STRUCT_DECLARATION) - super(peer) - // TODO: is struct definition the same as struct definition? - this.definition = unpackNonNullableNode(global.generatedEs2panda._ClassDeclarationDefinition(global.context, this.peer)) - } - - static create( - definition: ClassDefinition, - ): StructDeclaration { - return new StructDeclaration( - global.generatedEs2panda._CreateETSStructDeclaration( - global.context, - passNode(definition) - ) - ) - } - - readonly definition: ClassDefinition -} - export class MethodDefinition extends AstNode { constructor(peer: KPtr, key?: KPtr) { assertValidPeer(peer, Es2pandaAstNodeType.AST_NODE_TYPE_METHOD_DEFINITION) @@ -679,7 +657,6 @@ const pairs: [Es2pandaAstNodeType, { new(peer: KNativePointer): AstNode }][] = [ [Es2pandaAstNodeType.AST_NODE_TYPE_TS_TYPE_PARAMETER_DECLARATION, TSTypeParameterDeclaration], [Es2pandaAstNodeType.AST_NODE_TYPE_CALL_EXPRESSION, CallExpression], [Es2pandaAstNodeType.AST_NODE_TYPE_ARROW_FUNCTION_EXPRESSION, ArrowFunctionExpression], - [Es2pandaAstNodeType.AST_NODE_TYPE_STRUCT_DECLARATION, StructDeclaration], [Es2pandaAstNodeType.AST_NODE_TYPE_METHOD_DEFINITION, MethodDefinition], [Es2pandaAstNodeType.AST_NODE_TYPE_VARIABLE_DECLARATION, VariableDeclaration], [Es2pandaAstNodeType.AST_NODE_TYPE_VARIABLE_DECLARATOR, VariableDeclarator], diff --git a/arkoala-arkts/libarkts/src/arkts-api/utilities/private.ts b/arkoala-arkts/libarkts/src/arkts-api/utilities/private.ts index e099b1402..14626d709 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/utilities/private.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/utilities/private.ts @@ -47,6 +47,10 @@ export function assertValidPeer(peer: KPtr, expectedKind: Es2pandaAstNodeType): throwError(`invalid peer`) } const peerType = global.generatedEs2panda._AstNodeTypeConst(global.context, peer) + if (peerType === Es2pandaAstNodeType.AST_NODE_TYPE_STRUCT_DECLARATION && expectedKind === Es2pandaAstNodeType.AST_NODE_TYPE_CLASS_DECLARATION) { + // todo: Struct is a child class of Class + return + } if (peerType !== expectedKind) { throwError(`expected: ${Es2pandaAstNodeType[expectedKind]}, got: ${Es2pandaAstNodeType[peerType]}`) } diff --git a/arkoala-arkts/libarkts/src/arkts-api/visitor.ts b/arkoala-arkts/libarkts/src/arkts-api/visitor.ts index 3e35416b4..22d975739 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/visitor.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/visitor.ts @@ -27,7 +27,8 @@ import { isTSInterfaceBody, isTSInterfaceDeclaration, isMemberExpression, - isTSAsExpression + isTSAsExpression, + isETSStructDeclaration, } from "../generated" import { isArrowFunctionExpression, @@ -37,7 +38,6 @@ import { isFunctionDeclaration, isMethodDefinition, isScriptFunction, - isStructDeclaration, isVariableDeclaration, isVariableDeclarator } from "./factory/nodeTests" @@ -147,14 +147,14 @@ export function visitEachChild( nodeVisitor(node.expression, visitor) ) } - if (isClassDeclaration(node)) { - return factory.updateClassDeclaration( + if (isETSStructDeclaration(node)) { + return factory.updateETSStructDeclaration( node, nodeVisitor(node.definition, visitor) ) } - if (isStructDeclaration(node)) { - return factory.updateStructDeclaration( + if (isClassDeclaration(node)) { + return factory.updateClassDeclaration( node, nodeVisitor(node.definition, visitor) ) -- Gitee From 22a60c69cb09f9f3d75bd1b24c07f45c622a9478 Mon Sep 17 00:00:00 2001 From: Igor Loginov Date: Wed, 12 Mar 2025 11:27:50 +0300 Subject: [PATCH 2/2] Removed unused imports --- arkoala-arkts/libarkts/src/arkts-api/factory/nodeFactory.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/arkoala-arkts/libarkts/src/arkts-api/factory/nodeFactory.ts b/arkoala-arkts/libarkts/src/arkts-api/factory/nodeFactory.ts index 0294ee846..06e9f8dae 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/factory/nodeFactory.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/factory/nodeFactory.ts @@ -37,7 +37,6 @@ import { ClassProperty, ConditionalExpression, ETSFunctionType, - ETSPrimitiveType, ETSStructDeclaration, ETSTypeReference, ETSTypeReferencePart, @@ -54,7 +53,6 @@ import { TSInterfaceDeclaration, TSTypeParameter, TSTypeParameterDeclaration, - TypeNode, UndefinedLiteral, } from "../../generated" import { factory as generatedFactory } from "../../generated/factory" -- Gitee