diff --git a/arkoala/ets-plugin/src/ApiUtils.ts b/arkoala/ets-plugin/src/ApiUtils.ts index 13ae2876174f08aa45d1c259dc51c4ee8cf80a7c..a8ed18c300f3404cd65d5673f4164b15887d1cbd 100644 --- a/arkoala/ets-plugin/src/ApiUtils.ts +++ b/arkoala/ets-plugin/src/ApiUtils.ts @@ -254,6 +254,14 @@ export function makePrivate(modifierLikes: ts.ModifierLike[] | undefined): ts.Mo return collect(Private(), dropPrivate(dropPublic(modifierLikes))) } +export function isStatic(node: ts.Node): boolean { + if (!ts.canHaveModifiers(node)) return false + const modifierLikes = ts.getModifiers(node) + return !!(modifierLikes?.find(it => + it.kind != ts.SyntaxKind.StaticKeyword) + ) +} + export function sourceStructName(node: ts.StructDeclaration) { return node.name ?? throwError(`Nameless struct`) } diff --git a/arkoala/ets-plugin/src/PropertyTranslators.ts b/arkoala/ets-plugin/src/PropertyTranslators.ts index f293554b3211d8592b49e66aa8c6e2bf601c266b..543fbbf26e7e0e06844513ff687cc6a0b179f603 100644 --- a/arkoala/ets-plugin/src/PropertyTranslators.ts +++ b/arkoala/ets-plugin/src/PropertyTranslators.ts @@ -23,6 +23,7 @@ import { dropReadonly, findDecoratorArgument, id, + isStatic, makePrivate, parameter, undefinedValue, @@ -796,6 +797,7 @@ function translatePropOrObjectLinkToBuildParameter(property: ts.PropertyDeclarat export function classifyProperty(member: ts.ClassElement, context: PropertyTranslatorContext): PropertyTranslator | undefined { if (!ts.isPropertyDeclaration(member)) return undefined + if (isStatic(member)) return undefined if (isState(member)) return new State(member, context) if (isStorageProp(member)) return new StorageProp(member, context) diff --git a/arkoala/ets-plugin/src/StructTransformer.ts b/arkoala/ets-plugin/src/StructTransformer.ts index 3bde629ad65a9c5685b4ae564eeaa5b0f530a64d..03a67906fb5db08e7e45d492209475d65e1ceb6a 100644 --- a/arkoala/ets-plugin/src/StructTransformer.ts +++ b/arkoala/ets-plugin/src/StructTransformer.ts @@ -74,6 +74,7 @@ import { hasDecorator, id, isKnownIdentifier, + isStatic, isUndefined, ObjectType, optionalParameter, @@ -466,7 +467,9 @@ export class StructTransformer extends AbstractVisitor { // The rest of the struct members are translated here directly. const restMembers = structNode.members.map(member => { - if (isKnownIdentifier(member.name, "build")) { + if (isStatic(member)) { + return member + } else if (isKnownIdentifier(member.name, "build")) { return this.translateBuilder(structNode, propertyTranslators, member, true) } else if (hasDecorator(member, "Builder")) { return this.translateBuilder(structNode, propertyTranslators, member, false)