diff --git a/arkoala-arkts/trivial/user/src/ets/page1.ets b/arkoala-arkts/trivial/user/src/ets/page1.ets index 80f1cf135193f17e320e0b098c2f1f066581c416..facae06741efef78a7d92202aefbed06e4a6edef 100644 --- a/arkoala-arkts/trivial/user/src/ets/page1.ets +++ b/arkoala-arkts/trivial/user/src/ets/page1.ets @@ -169,7 +169,7 @@ struct Page1 { .backgroundColor(Color.Gray) .justifyContent(FlexAlign.Center) }, - (item:string): string => item + (item:string) => item ) } } diff --git a/ui2abc/libarkts/generator/options.json5 b/ui2abc/libarkts/generator/options.json5 index 80bd512f72b742911d8ad18cd0ecb538141f4939..9c9c7ddbb3b6920fc2247b0fb6c34f6d3b41622f 100644 --- a/ui2abc/libarkts/generator/options.json5 +++ b/ui2abc/libarkts/generator/options.json5 @@ -277,6 +277,19 @@ definition: "extension_ETSModuleGetNamespaceFlag", } ] + }, + { + interface: "ScriptFunction", + methods: [ + { + name: "getPreferredReturnTypePointer", + definition: "extension_ScriptFunctionGetPreferredReturnTypePointer", + }, + { + name: "setPreferredReturnTypePointer", + definition: "extension_ScriptFunctionSetPreferredReturnTypePointer", + }, + ] } ], } diff --git a/ui2abc/libarkts/native/src/bridges.cc b/ui2abc/libarkts/native/src/bridges.cc index cccb117e2849360dc2023b72cbdf6cf7501d6cc0..2b5bad9436de0b1219c16fd073b05d2757b670f4 100644 --- a/ui2abc/libarkts/native/src/bridges.cc +++ b/ui2abc/libarkts/native/src/bridges.cc @@ -402,6 +402,44 @@ void impl_DestroyGlobalContext(KNativePointer globalContextPtr) { } KOALA_INTEROP_V1(DestroyGlobalContext, KNativePointer) +// All these "Checker_" bridges are related to checker namespace in es2panda, so work with them carefully +// Checker.Type does reset on recheck, so modifying them makes no sence +// It seems that compiler does not provide API to convert Checker.Type to ir.Type +KNativePointer impl_Checker_ScriptFunctionGetPreferredReturnType(KNativePointer context, KNativePointer node) +{ + auto _context = reinterpret_cast(context); + auto _node = reinterpret_cast(node); + return GetImpl()->ScriptFunctionGetPreferredReturnType(_context, _node); +} +KOALA_INTEROP_2(Checker_ScriptFunctionGetPreferredReturnType, KNativePointer, KNativePointer, KNativePointer) + +void impl_Checker_ScriptFunctionSetPreferredReturnType(KNativePointer context, KNativePointer node, KNativePointer type) +{ + auto _context = reinterpret_cast(context); + auto _node = reinterpret_cast(node); + auto _type = reinterpret_cast(type); + GetImpl()->ScriptFunctionSetPreferredReturnType(_context, _node, _type); + return; +} +KOALA_INTEROP_V3(Checker_ScriptFunctionSetPreferredReturnType, KNativePointer, KNativePointer, KNativePointer) + +KNativePointer impl_Checker_TypeToString(KNativePointer context, KNativePointer type) +{ + auto _context = reinterpret_cast(context); + auto _type = reinterpret_cast(type); + auto result = GetImpl()->TypeToStringConst(_context, _type); + return StageArena::strdup(result); +} +KOALA_INTEROP_2(Checker_TypeToString, KNativePointer, KNativePointer, KNativePointer) + +KNativePointer impl_Checker_TypeNodeGetType(KNativePointer context, KNativePointer astNode) +{ + auto _context = reinterpret_cast(context); + auto _astNode = reinterpret_cast(astNode); + return GetImpl()->TypeNodeGetType(_context, _astNode); +} +KOALA_INTEROP_2(Checker_TypeNodeGetType, KNativePointer, KNativePointer, KNativePointer) + // From koala-wrapper // Improve: check if some code should be generated diff --git a/ui2abc/libarkts/src/Es2pandaNativeModule.ts b/ui2abc/libarkts/src/Es2pandaNativeModule.ts index 7cc7406dc420040a60ce684e5609a8a140c870d8..53e1cb9e9ca6442a90b0924fa6399290035d3ff0 100644 --- a/ui2abc/libarkts/src/Es2pandaNativeModule.ts +++ b/ui2abc/libarkts/src/Es2pandaNativeModule.ts @@ -23,6 +23,7 @@ import { KDouble, KUInt, KStringArrayPtr, + KStringPtr, } from "@koalaui/interop" import { Es2pandaNativeModule as GeneratedEs2pandaNativeModule, KNativePointerArray } from "./generated/Es2pandaNativeModule" import * as path from "path" @@ -162,6 +163,18 @@ export class Es2pandaNativeModule { _OptionsArkTsConfig(context: KNativePointer, options: KNativePointer): KNativePointer { throw new Error("Not implemented"); } + _Checker_ScriptFunctionGetPreferredReturnType(context: KNativePointer, node: KNativePointer): KNativePointer { + throw new Error("Not implemented"); + } + _Checker_ScriptFunctionSetPreferredReturnType(context: KNativePointer, node: KNativePointer, type: KNativePointer): void { + throw new Error("Not implemented"); + } + _Checker_TypeToString(context: KNativePointer, type: KNativePointer): KNativePointer { + throw new Error("Not implemented"); + } + _Checker_TypeNodeGetType(context: KNativePointer, node: KNativePointer): KNativePointer { + throw new Error("Not implemented"); + } // From koala-wrapper _ClassVariableDeclaration(context: KNativePointer, classInstance: KNativePointer): KNativePointer { diff --git a/ui2abc/libarkts/src/arkts-api/InferVoidReturnType.ts b/ui2abc/libarkts/src/arkts-api/InferVoidReturnType.ts deleted file mode 100644 index 25358cc6269c325c115574653a1108d34776f439..0000000000000000000000000000000000000000 --- a/ui2abc/libarkts/src/arkts-api/InferVoidReturnType.ts +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2022-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { factory } from "./factory/nodeFactory" -import { BlockStatement, isReturnStatement, isScriptFunction, Program, ScriptFunction } from "../generated" -import { AbstractVisitor } from "./AbstractVisitor" -import { AstNode } from "./peers/AstNode" -import { Es2pandaPrimitiveType, Es2pandaScriptFunctionFlags } from "src/generated/Es2pandaEnums" - -interface IsScriptFunctionRoot { - isScriptFunctionRoot: boolean -} - -// Improve: this is to workaround compiler not beeing able to infer return type on recheck -class CheckReturns extends AbstractVisitor { - visitor(node: AstNode, options?: IsScriptFunctionRoot): AstNode { - if (isReturnStatement(node) && node.argument !== undefined) { - this.seenNonVoidReturn = true - } - if (isScriptFunction(node) && !options?.isScriptFunctionRoot) { - return node - } - return this.visitEachChild(node) - } - - seenNonVoidReturn: boolean = false - static instance?: CheckReturns -} - -// This function checks that it is possible to infer return type of script function as void -function checkReturns(node: AstNode): boolean { - if (!CheckReturns.instance) { - CheckReturns.instance = new CheckReturns() - } - CheckReturns.instance.seenNonVoidReturn = false - CheckReturns.instance.visitor(node, { isScriptFunctionRoot: true }) - return CheckReturns.instance.seenNonVoidReturn == false -} - -class InferVoidReturnType extends AbstractVisitor { - visitor(node: BlockStatement): BlockStatement - visitor(node: AstNode): AstNode { - const result = this.visitEachChild(node) - if (isScriptFunction(result) && - result.returnTypeAnnotation === undefined && - !result.isConstructor && // constructors should not have return type - (result.flags & Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_SETTER) == 0 // setters should not return void - ) { - const isVoid = checkReturns(result) - if (isVoid) { - return factory.updateScriptFunction( - result, - result.body, - result.typeParams, - result.params, - factory.createETSPrimitiveType( - Es2pandaPrimitiveType.PRIMITIVE_TYPE_VOID, - ), - result.hasReceiver, - result.flags, - result.modifierFlags, - result.id, - result.annotations, - ) - } - } - return result - } -} - -export function inferVoidReturnType(program: Program) { - program.setAst(new InferVoidReturnType().visitor(program.ast)) -} diff --git a/ui2abc/libarkts/src/arkts-api/index.ts b/ui2abc/libarkts/src/arkts-api/index.ts index fdfccb94e8db1589fb8083986b76955ab3375219..4ca4a56f8858bee6ee9fda7662623f24527d43ee 100644 --- a/ui2abc/libarkts/src/arkts-api/index.ts +++ b/ui2abc/libarkts/src/arkts-api/index.ts @@ -26,7 +26,6 @@ export * from "./CheckedBackFilter" export * from "./SetBaseOverloads" export * from "./plugins" export * from "./ImportStorage" -export * from "./InferVoidReturnType" export * from "./ProgramProvider" export * from "./peers/AstNode" diff --git a/ui2abc/libarkts/src/arkts-api/node-utilities/ScriptFunction.ts b/ui2abc/libarkts/src/arkts-api/node-utilities/ScriptFunction.ts index b188dcb45a6a599ad8b5751bc46dabfb7716caf7..b940b89b92b3c4d3ed4eaeed9ec26123daa651fe 100644 --- a/ui2abc/libarkts/src/arkts-api/node-utilities/ScriptFunction.ts +++ b/ui2abc/libarkts/src/arkts-api/node-utilities/ScriptFunction.ts @@ -26,6 +26,7 @@ import { AstNode } from "../peers/AstNode" import { Es2pandaModifierFlags, Es2pandaScriptFunctionFlags } from "../../generated/Es2pandaEnums" import { isSameNativeObject } from "../peers/ArktsObject" import { updateNodeByNode } from "../utilities/private" +import { KNativePointer } from "@koalaui/interop" export function createScriptFunction( databody: AstNode | undefined, @@ -37,6 +38,7 @@ export function createScriptFunction( dataflags: Es2pandaModifierFlags, ident: Identifier | undefined, annotations: readonly AnnotationUsage[] | undefined, + preferredReturnTypePointer?: KNativePointer, ) { const res = ScriptFunction.createScriptFunction( databody, @@ -55,6 +57,9 @@ export function createScriptFunction( if (annotations) { res.setAnnotations(annotations) } + if (preferredReturnTypePointer) { + res.setPreferredReturnTypePointer(preferredReturnTypePointer) + } return res } @@ -69,6 +74,7 @@ export function updateScriptFunction( dataflags: Es2pandaModifierFlags, ident: Identifier | undefined, annotations: readonly AnnotationUsage[] | undefined, + preferredReturnTypePointer?: KNativePointer, ) { if (isSameNativeObject(databody, original.body) && isSameNativeObject(typeParams, original.typeParams) @@ -79,6 +85,7 @@ export function updateScriptFunction( && isSameNativeObject(dataflags, original.modifierFlags) && isSameNativeObject(ident, original.id) && isSameNativeObject(annotations, original.annotations) + && preferredReturnTypePointer == original.getPreferredReturnTypePointer() ) { return original } @@ -92,7 +99,8 @@ export function updateScriptFunction( datafuncFlags, dataflags, ident, - annotations + annotations, + preferredReturnTypePointer, ), original ) diff --git a/ui2abc/libarkts/src/arkts-api/utilities/extensions.ts b/ui2abc/libarkts/src/arkts-api/utilities/extensions.ts index fa5adad69f3f6d9579fc0cfe03499781f0a95317..01b553eed44f728ec0ef2e4d26ce3ea636e539ef 100644 --- a/ui2abc/libarkts/src/arkts-api/utilities/extensions.ts +++ b/ui2abc/libarkts/src/arkts-api/utilities/extensions.ts @@ -15,10 +15,11 @@ import type { ETSModule, - MethodDefinition + MethodDefinition, + ScriptFunction } from "../../generated" import { Es2pandaModuleFlag } from "../../generated/Es2pandaEnums" -import { global } from "../../reexport-for-generated" +import { global, KNativePointer } from "../../reexport-for-generated" export function extension_ETSModuleGetNamespaceFlag(this: ETSModule): Es2pandaModuleFlag { return (this.isETSScript ? Es2pandaModuleFlag.MODULE_FLAG_ETSSCRIPT : 0) @@ -46,3 +47,11 @@ export function extension_MethodDefinitionOnUpdate(this: MethodDefinition, origi this.setBaseOverloadMethod(originalBase) } } + +export function extension_ScriptFunctionGetPreferredReturnTypePointer(this: ScriptFunction): KNativePointer { + return global.es2panda._Checker_ScriptFunctionGetPreferredReturnType(global.context, this.peer) +} + +export function extension_ScriptFunctionSetPreferredReturnTypePointer(this: ScriptFunction, typePointer: KNativePointer): void { + global.es2panda._Checker_ScriptFunctionSetPreferredReturnType(global.context, this.peer, typePointer) +} diff --git a/ui2abc/libarkts/src/arkts-api/utilities/public.ts b/ui2abc/libarkts/src/arkts-api/utilities/public.ts index c2e27db4a96d0523b78488dc33805a765be6eb48..76234476dd7058335e40bc8bd3eb291072252751 100644 --- a/ui2abc/libarkts/src/arkts-api/utilities/public.ts +++ b/ui2abc/libarkts/src/arkts-api/utilities/public.ts @@ -17,7 +17,7 @@ import { global } from "../static/global" import { isNumber, throwError, withWarning } from "../../utils" import { KNativePointer, nullptr, KInt} from "@koalaui/interop" import { passNode, passNodeArray, unpackNodeArray, unpackNonNullableNode, passString, unpackString } from "./private" -import { Es2pandaContextState, Es2pandaModifierFlags, Es2pandaMethodDefinitionKind } from "../../generated/Es2pandaEnums" +import { Es2pandaContextState, Es2pandaModifierFlags, Es2pandaMethodDefinitionKind, Es2pandaPrimitiveType } from "../../generated/Es2pandaEnums" import type { AstNode } from "../peers/AstNode" import { isSameNativeObject } from "../peers/ArktsObject" import { @@ -40,10 +40,12 @@ import { isNumberLiteral, Property, MemberExpression, - isMethodDefinition + isMethodDefinition, + TypeNode, } from "../../generated" import { Config } from "../peers/Config" import { Context } from "../peers/Context" +import { factory } from "../factory/nodeFactory" import { NodeCache } from "../node-cache" import { listPrograms } from "../plugins" @@ -342,4 +344,22 @@ export function getProgramFromAstNode(node: AstNode): Program { export function importDeclarationInsert(node: ETSImportDeclaration, program: Program): void { global.es2panda._InsertETSImportDeclarationAndParse(global.context, program.peer, node.peer) -} \ No newline at end of file +} + +export function tryConvertCheckerTypeToTypeNode(typePeer: KNativePointer | undefined): TypeNode | undefined { + if (!typePeer) { + return undefined + } + const str = unpackString(global.es2panda._Checker_TypeToString(global.context, typePeer)) + if (str == "void") { + return factory.createETSPrimitiveType(Es2pandaPrimitiveType.PRIMITIVE_TYPE_VOID) + } + if (str == "String" || str == "StringerNode") { + return factory.createETSTypeReference( + factory.createETSTypeReferencePart( + factory.createIdentifier(str) + ) + ) + } + return undefined +} diff --git a/ui2abc/libarkts/src/arkts-api/visitor.ts b/ui2abc/libarkts/src/arkts-api/visitor.ts index 9fa9379a5b9b653e52d3969a19ac42c50163d330..d4732e8912fd004076d1b1a5d57319db0c683643 100644 --- a/ui2abc/libarkts/src/arkts-api/visitor.ts +++ b/ui2abc/libarkts/src/arkts-api/visitor.ts @@ -247,7 +247,8 @@ export function visitEachChild( node.flags, node.modifierFlags, nodeVisitor(node.id, visitor), - nodesVisitor(node.annotations, visitor) + nodesVisitor(node.annotations, visitor), + node.getPreferredReturnTypePointer(), ) } if (isETSParameterExpression(node)) { diff --git a/ui2abc/libarkts/src/generated/Es2pandaNativeModule.ts b/ui2abc/libarkts/src/generated/Es2pandaNativeModule.ts index 2b91f19e3eb8557833b9131cc00580c67746564c..9b91746b26c37536836fffdc08e42185b25bc21a 100644 --- a/ui2abc/libarkts/src/generated/Es2pandaNativeModule.ts +++ b/ui2abc/libarkts/src/generated/Es2pandaNativeModule.ts @@ -29,7 +29,7 @@ import { KLong } from "@koalaui/interop" -// Improve: this type should be in interop +// TODO: this type should be in interop export type KNativePointerArray = BigUint64Array export class Es2pandaNativeModule { diff --git a/ui2abc/libarkts/src/generated/peers/ScriptFunction.ts b/ui2abc/libarkts/src/generated/peers/ScriptFunction.ts index 853fd31942fa038706e4b283ec180f3d5f2a18b5..11e9ce84050b72c21dd3e3542cf8b25f8ad444d2 100644 --- a/ui2abc/libarkts/src/generated/peers/ScriptFunction.ts +++ b/ui2abc/libarkts/src/generated/peers/ScriptFunction.ts @@ -42,6 +42,8 @@ import { Identifier } from "./Identifier" import { ReturnStatement } from "./ReturnStatement" import { TSTypeParameterDeclaration } from "./TSTypeParameterDeclaration" import { TypeNode } from "./TypeNode" +import { extension_ScriptFunctionGetPreferredReturnTypePointer } from "./../../reexport-for-generated" +import { extension_ScriptFunctionSetPreferredReturnTypePointer } from "./../../reexport-for-generated" export class ScriptFunction extends AstNode { constructor(pointer: KNativePointer) { @@ -265,6 +267,8 @@ export class ScriptFunction extends AstNode { global.generatedEs2panda._ScriptFunctionAddAnnotations(global.context, this.peer, passNode(annotations)) return this } + getPreferredReturnTypePointer = extension_ScriptFunctionGetPreferredReturnTypePointer + setPreferredReturnTypePointer = extension_ScriptFunctionSetPreferredReturnTypePointer protected readonly brandScriptFunction: undefined } export function isScriptFunction(node: object | undefined): node is ScriptFunction { diff --git a/ui2abc/libarkts/src/index.ts b/ui2abc/libarkts/src/index.ts index 7518cded8ef8a2917036013f87caf4f0a237872a..bf93407f3a35bb1244546981e0921e9dc2a6f4f0 100644 --- a/ui2abc/libarkts/src/index.ts +++ b/ui2abc/libarkts/src/index.ts @@ -29,7 +29,6 @@ export * from "./arkts-api/CheckedBackFilter" export * from "./arkts-api/SetBaseOverloads" export * from "./arkts-api/plugins" export * from "./arkts-api/ImportStorage" -export * from "./arkts-api/InferVoidReturnType" export * from "./arkts-api/ProgramProvider" export * from "./arkts-api/node-utilities/Program" export * from "./arkts-api/node-utilities/ArkTsConfig" diff --git a/ui2abc/libarkts/src/plugin-utils.ts b/ui2abc/libarkts/src/plugin-utils.ts index d5a3208b90405598a36e54b77edcbeb58c635ab7..3f4b8543b3d15e19fbad736f0a200cd0b0180be5 100644 --- a/ui2abc/libarkts/src/plugin-utils.ts +++ b/ui2abc/libarkts/src/plugin-utils.ts @@ -17,17 +17,14 @@ import { Es2pandaContextState, PluginContext, ImportStorage, - setBaseOverloads, arktsGlobal, ChainExpressionFilter, ProgramTransformer, Program, - inferVoidReturnType, ProgramProvider, CompilationOptions, dumpProgramSrcFormatted } from "./arkts-api" -import { AstNode } from "./reexport-for-generated" export interface RunTransformerHooks { onProgramTransformStart?(options: CompilationOptions, program: Program): void @@ -75,9 +72,6 @@ export function runTransformerOnProgram(program: Program, options: CompilationOp // Save currently existing imports in the program const importStorage = new ImportStorage(program, options.state == Es2pandaContextState.ES2PANDA_STATE_PARSED) - // Run some common plugins that should be run before plugin usage and depends on the current state - stateSpecificPreFilters(program, options.state) - // Run the plugin itself transform?.(program, options, pluginContext) @@ -116,16 +110,6 @@ export function runTransformer(prog: Program, state: Es2pandaContextState, trans } } -function setAllParents(ast: AstNode) { - arktsGlobal.es2panda._AstNodeUpdateAll(arktsGlobal.context, ast.peer) -} - -function stateSpecificPreFilters(program: Program, state: Es2pandaContextState) { - if (state == Es2pandaContextState.ES2PANDA_STATE_CHECKED) { - inferVoidReturnType(program) - } -} - function stateSpecificPostFilters(program: Program, state: Es2pandaContextState) { if (state == Es2pandaContextState.ES2PANDA_STATE_CHECKED) { program.setAst(new ChainExpressionFilter().visitor(program.ast)) diff --git a/ui2abc/libarkts/src/reexport-for-generated.ts b/ui2abc/libarkts/src/reexport-for-generated.ts index 22b9296eb98d6fe7f90dc0fbe3fd7782ed841967..9a4f5acfde9c4ade66f3bc847c947f3455b083f0 100644 --- a/ui2abc/libarkts/src/reexport-for-generated.ts +++ b/ui2abc/libarkts/src/reexport-for-generated.ts @@ -35,4 +35,6 @@ export { extension_ETSModuleGetNamespaceFlag, extension_MethodDefinitionOnUpdate, extension_MethodDefinitionSetChildrenParentPtr, + extension_ScriptFunctionGetPreferredReturnTypePointer, + extension_ScriptFunctionSetPreferredReturnTypePointer, } from "./arkts-api/utilities/extensions" diff --git a/ui2abc/libarkts/test/arkts-api/functions/create.test.ts b/ui2abc/libarkts/test/arkts-api/functions/create.test.ts index bc2fdaa9c2982422524d1b37a82f4dab989d98db..34ab3b0773724c492d78ac498d8d8bccb5d5feb1 100644 --- a/ui2abc/libarkts/test/arkts-api/functions/create.test.ts +++ b/ui2abc/libarkts/test/arkts-api/functions/create.test.ts @@ -70,6 +70,7 @@ suite(util.basename(__filename), () => { arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_PUBLIC | arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_STATIC, arkts.factory.createIdentifier("foo"), undefined, + undefined, ) const funcDecl = @@ -208,6 +209,7 @@ suite(util.basename(__filename), () => { arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_PUBLIC | arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_STATIC, arkts.factory.createIdentifier("foo"), undefined, + undefined, ) const funcDecl = diff --git a/ui2abc/libarkts/test/arkts-api/import-export/import.test.ts b/ui2abc/libarkts/test/arkts-api/import-export/import.test.ts index f79f6ea8dcae68530f006d705ceeaa854deaa845..7dd82ef7a7bd8b29ba1ae5da25ec4ba676808dd7 100644 --- a/ui2abc/libarkts/test/arkts-api/import-export/import.test.ts +++ b/ui2abc/libarkts/test/arkts-api/import-export/import.test.ts @@ -198,6 +198,7 @@ suite(util.basename(__filename), () => { scriptFunction.modifierFlags, scriptFunction.id!, undefined, + undefined, ) const newFuncDecl = diff --git a/ui2abc/libarkts/test/arkts-api/recheck/constructor/index.ts b/ui2abc/libarkts/test/arkts-api/recheck/constructor/index.ts index 52b9b2e2e6c8825934e12877936cd3e5f1a3644f..bf4ec8bb843a06e5c7da4b672e1671c5b025126e 100644 --- a/ui2abc/libarkts/test/arkts-api/recheck/constructor/index.ts +++ b/ui2abc/libarkts/test/arkts-api/recheck/constructor/index.ts @@ -40,7 +40,8 @@ class ConstructorWithOverload extends arkts.AbstractVisitor { node.flags, node.modifierFlags, node.id, - node.annotations + node.annotations, + node.getPrefferedReturnTypePointer(), ) } return node diff --git a/ui2abc/libarkts/test/arkts-api/recheck/exports/create-class/index.ts b/ui2abc/libarkts/test/arkts-api/recheck/exports/create-class/index.ts index ad9b79316c0bd499ddf5321d01fa47af5d43f031..caabbba9fcb6d0ce7aff10daef3426c8c6d60b1f 100644 --- a/ui2abc/libarkts/test/arkts-api/recheck/exports/create-class/index.ts +++ b/ui2abc/libarkts/test/arkts-api/recheck/exports/create-class/index.ts @@ -112,6 +112,7 @@ export function addUseImportClassSameFileAndCreateClass(program: arkts.Program, arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_NONE, arkts.factory.createIdentifier("constructor"), [], + undefined, ) ), arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_CONSTRUCTOR, diff --git a/ui2abc/libarkts/test/arkts-api/recheck/imports/recursive/index.ts b/ui2abc/libarkts/test/arkts-api/recheck/imports/recursive/index.ts index 43a9433ed75236cfbdcd96732626e88b0debf71f..fa47ebc7404b074c603ed13c679a35559495e8ba 100644 --- a/ui2abc/libarkts/test/arkts-api/recheck/imports/recursive/index.ts +++ b/ui2abc/libarkts/test/arkts-api/recheck/imports/recursive/index.ts @@ -39,7 +39,8 @@ class InsertParameter extends arkts.AbstractVisitor { node.flags, node.modifierFlags, node.id, - node.annotations + node.annotations, + node.getPrefferedReturnTypePointer(), ) } return node diff --git a/ui2abc/libarkts/test/arkts-api/recheck/simple/add-class-method/index.ts b/ui2abc/libarkts/test/arkts-api/recheck/simple/add-class-method/index.ts index 38d3ebcdc721a3fae4da12417286efb8e754d5af..641239af36a42e3fb8db44b7175067bd340b3902 100644 --- a/ui2abc/libarkts/test/arkts-api/recheck/simple/add-class-method/index.ts +++ b/ui2abc/libarkts/test/arkts-api/recheck/simple/add-class-method/index.ts @@ -46,6 +46,7 @@ export function addClassMethod(node: arkts.ClassDefinition) { arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_PUBLIC, arkts.factory.createIdentifier("g"), undefined, + undefined, ) ), arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_PUBLIC, diff --git a/ui2abc/libarkts/test/arkts-api/recheck/simple/add-variable/index.ts b/ui2abc/libarkts/test/arkts-api/recheck/simple/add-variable/index.ts index fd15fbbd215fa8164344c27a7b8e55dee2c6e648..0ea26777fb6878da770eed72704f09587f4384de 100644 --- a/ui2abc/libarkts/test/arkts-api/recheck/simple/add-variable/index.ts +++ b/ui2abc/libarkts/test/arkts-api/recheck/simple/add-variable/index.ts @@ -76,6 +76,7 @@ export function addVariableDeclaration(node: arkts.ClassDefinition) { func.modifierFlags, func.id, func.annotations, + func.getPrefferedReturnTypePointer(), ), ), node.modifierFlags, diff --git a/ui2abc/libarkts/test/arkts-api/recheck/this/index.ts b/ui2abc/libarkts/test/arkts-api/recheck/this/index.ts index 65a35d8756ced9c843e5f6ae3a5472ec5c08eeb2..a508fc2504f3b640f9bd758e797beb0c820d3ac9 100644 --- a/ui2abc/libarkts/test/arkts-api/recheck/this/index.ts +++ b/ui2abc/libarkts/test/arkts-api/recheck/this/index.ts @@ -38,7 +38,8 @@ class AddThisReference extends arkts.AbstractVisitor { node.flags, node.modifierFlags, node.id, - node.annotations + node.annotations, + node.getPrefferedReturnTypePointer(), ) } return node diff --git a/ui2abc/memo-plugin/demo/demo/demo.ets b/ui2abc/memo-plugin/demo/demo/demo.ets index b1459d4456de4035287354ef104bfce9e3d564cc..01f69262606bc1003b7bc7a4669211337ae35edc 100644 --- a/ui2abc/memo-plugin/demo/demo/demo.ets +++ b/ui2abc/memo-plugin/demo/demo/demo.ets @@ -33,12 +33,13 @@ function Stringer( @memo content?: () => void ): void { - NodeAttach(():StringerNode => - new StringerNode(), (node: StringerNode): void => { - node.data = arg - console.log("I am recomputing with arg: ", arg) - content?.() - }) + NodeAttach(() => new StringerNode(), + (node: StringerNode): void => { + node.data = arg + console.log("I am recomputing with arg: ", arg) + content?.() + } + ) } const state = mutableState(17) diff --git a/ui2abc/memo-plugin/src/FunctionTransformer.ts b/ui2abc/memo-plugin/src/FunctionTransformer.ts index 9cd7fd90071e188be91861c599854b40fcaf76b0..f840d8c49dce19721d81f6650ff0b79af389d24f 100644 --- a/ui2abc/memo-plugin/src/FunctionTransformer.ts +++ b/ui2abc/memo-plugin/src/FunctionTransformer.ts @@ -209,6 +209,7 @@ export class FunctionTransformer extends arkts.AbstractVisitor { scriptFunction.modifierFlags, scriptFunction.id, scriptFunction.annotations, + scriptFunction.getPreferredReturnTypePointer(), ) } @@ -245,6 +246,7 @@ export class FunctionTransformer extends arkts.AbstractVisitor { scriptFunction.modifierFlags, scriptFunction.id, scriptFunction.annotations, + scriptFunction.getPreferredReturnTypePointer(), ) } diff --git a/ui2abc/memo-plugin/src/MemoFactory.ts b/ui2abc/memo-plugin/src/MemoFactory.ts index 234d8a05aed5991035e610d1542a36143bc36d57..a39ef10030b672f978576774282d5fe35e8a6daa 100644 --- a/ui2abc/memo-plugin/src/MemoFactory.ts +++ b/ui2abc/memo-plugin/src/MemoFactory.ts @@ -320,7 +320,10 @@ export class factory { } static deduceArrowWrapperType(arrow: arkts.ArrowFunctionExpression): arkts.TypeNode|undefined { const origType: arkts.TypeNode | undefined = arrow.function?.returnTypeAnnotation - if (origType == undefined) return undefined + // const origPreferredType: arkts.TypeNode | undefined = arkts.tryConvertCheckerTypeToTypeNode( + // arrow.function?.getPreferredReturnTypePointer() + // ) + if (origType == undefined/* && origPreferredType == undefined*/) return undefined const params = arrow.function?.params?.map(it => { const param = it as arkts.ETSParameterExpression return arkts.factory.createETSParameterExpression( @@ -333,7 +336,7 @@ export class factory { return arkts.factory.createETSFunctionType( undefined, params, - origType.clone(), + /*origType ? */origType.clone()/* : origPreferredType*/, false, arkts.Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_NONE, undefined @@ -355,6 +358,7 @@ export class factory { arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_NONE, undefined, undefined, + undefined, ) ) } @@ -363,7 +367,7 @@ export class factory { arkts.factory.createMemberExpression( arkts.factory.createIdentifier(RuntimeNames.CONTEXT, undefined), arkts.factory.createIdentifier(RuntimeNames.COMPUTE, undefined), - arkts.Es2pandaMemberExpressionKind.MEMBER_EXPRESSION_KIND_PROPERTY_ACCESS, + arkts.Es2pandaMemberExpressionKind.MEMBER_EXPRESSION_KIND_NONE, false, false ), diff --git a/ui2abc/memo-plugin/src/SignatureTransformer.ts b/ui2abc/memo-plugin/src/SignatureTransformer.ts index 74a91109b9e3da31e7e6ace0031887d34f798214..c60c8f9f3758d834b53bd782010310c97dbae568 100644 --- a/ui2abc/memo-plugin/src/SignatureTransformer.ts +++ b/ui2abc/memo-plugin/src/SignatureTransformer.ts @@ -61,7 +61,8 @@ export class SignatureTransformer extends arkts.AbstractVisitor { node.flags, node.modifierFlags, node.id, - node.annotations + node.annotations, + node.getPreferredReturnTypePointer(), ) } if (arkts.isETSFunctionType(node)) { diff --git a/ui2abc/ui-plugins/src/builder-lambda-transformer.ts b/ui2abc/ui-plugins/src/builder-lambda-transformer.ts index 204127884e4f5d65db843588b22781385f60a1b1..ebef1ead4ffe272296b64157e264b93e7a1638d5 100644 --- a/ui2abc/ui-plugins/src/builder-lambda-transformer.ts +++ b/ui2abc/ui-plugins/src/builder-lambda-transformer.ts @@ -169,7 +169,8 @@ function createInstanceLambda( arkts.Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_ARROW, arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_NONE, undefined, - undefined + undefined, + undefined, ) ) } @@ -387,7 +388,8 @@ function transformComponentBuilder( func.flags, func.modifierFlags, node.id, - newAnnotations + newAnnotations, + func.getPreferredReturnTypePointer(), ) const result = arkts.factory.updateMethodDefinition( diff --git a/ui2abc/ui-plugins/src/class-transformer.ts b/ui2abc/ui-plugins/src/class-transformer.ts index 44f2faa7f7c80406761a02cade60a80e490dd17e..a22645fb2c10ca1ffca56a5225bfb89139fabebc 100644 --- a/ui2abc/ui-plugins/src/class-transformer.ts +++ b/ui2abc/ui-plugins/src/class-transformer.ts @@ -185,7 +185,8 @@ export class ClassTransformer extends arkts.AbstractVisitor { method.function.flags, method.function.modifierFlags, method.function.id, - method.function.annotations + method.function.annotations, + method.function.getPreferredReturnTypePointer(), ) ), method.modifierFlags, @@ -275,7 +276,8 @@ function createGetterSetter(property: arkts.ClassProperty, arkts.Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_METHOD | arkts.Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_GETTER, arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_PUBLIC, arkts.factory.createIdentifier(name), - [] + [], + undefined, ) const setterFunction = arkts.factory.createScriptFunction( @@ -309,7 +311,8 @@ function createGetterSetter(property: arkts.ClassProperty, arkts.Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_METHOD | arkts.Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_SETTER | arkts.Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_OVERLOAD, arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_PUBLIC, arkts.factory.createIdentifier(name), - [] + [], + undefined, ) let setter = arkts.factory.createMethodDefinition( @@ -446,7 +449,8 @@ function createMethodDefinition(methodName: string, arkts.Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_METHOD, arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_PUBLIC, arkts.factory.createIdentifier(methodName), - [] + [], + undefined, ) ), arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_PUBLIC diff --git a/ui2abc/ui-plugins/src/component-transformer.ts b/ui2abc/ui-plugins/src/component-transformer.ts index 5999ff0f39a9c90493460ec33e955b7e87564361..c7110a372cfafc38335f880ed18fcf5b27592955 100644 --- a/ui2abc/ui-plugins/src/component-transformer.ts +++ b/ui2abc/ui-plugins/src/component-transformer.ts @@ -306,7 +306,8 @@ export class ComponentTransformer extends arkts.AbstractVisitor { arkts.Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_METHOD, arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_PROTECTED, arkts.factory.createIdentifier(methodName), - [] + [], + undefined, ) ), arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_PROTECTED, @@ -387,7 +388,8 @@ export class ComponentTransformer extends arkts.AbstractVisitor { false ) ]) - ] + ], + undefined, ) ), arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_STATIC, @@ -447,7 +449,8 @@ export class ComponentTransformer extends arkts.AbstractVisitor { scriptFunction.flags, scriptFunction.modifierFlags, arkts.factory.createIdentifier(CustomComponentNames.COMPONENT_BUILD), - [annotation(InternalAnnotations.MEMO)] + [annotation(InternalAnnotations.MEMO)], + undefined, ) const modifiers: arkts.Es2pandaModifierFlags = isDeclaration ? arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_ABSTRACT @@ -579,6 +582,7 @@ export class ComponentTransformer extends arkts.AbstractVisitor { arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_PUBLIC, arkts.factory.createIdentifier("entry"), [annotation(InternalAnnotations.MEMO)], + undefined, ), ), arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_PUBLIC, @@ -642,7 +646,8 @@ function createVoidMethod(methodName: string, parameters: readonly arkts.Express arkts.Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_METHOD, arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_PROTECTED, arkts.factory.createIdentifier(methodName), - [] + [], + undefined, ) ), arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_PROTECTED, @@ -668,7 +673,8 @@ function createTrueMethod(methodName: string): arkts.MethodDefinition { arkts.Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_METHOD, arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_PROTECTED, arkts.factory.createIdentifier(methodName), - [] + [], + undefined, ) ), arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_PROTECTED, diff --git a/ui2abc/ui-plugins/src/instantiate-factory-helper.ts b/ui2abc/ui-plugins/src/instantiate-factory-helper.ts index 18a918e774a10341ff0f642967a4e28fa853cc57..b289a5f44b93a7e869095d6ec718f8f712a3c5f6 100644 --- a/ui2abc/ui-plugins/src/instantiate-factory-helper.ts +++ b/ui2abc/ui-plugins/src/instantiate-factory-helper.ts @@ -52,7 +52,8 @@ function lambdaReturnFilter(node: arkts.AstNode): arkts.AstNode { node.flags, node.modifierFlags, node.id, - node.annotations + node.annotations, + undefined, ) } diff --git a/ui2abc/ui-plugins/src/property-transformers.ts b/ui2abc/ui-plugins/src/property-transformers.ts index 29c6d241b4f07bc701df037bd666adb6c5272bff..e7ad191795c828ad9dd53946f0097732b71a88a5 100644 --- a/ui2abc/ui-plugins/src/property-transformers.ts +++ b/ui2abc/ui-plugins/src/property-transformers.ts @@ -116,7 +116,8 @@ function createWrappedProperty( arkts.Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_METHOD | arkts.Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_GETTER, arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_PUBLIC, arkts.factory.createIdentifier(name), - [] + [], + undefined, ) const setterStatements: arkts.Statement[] = [ @@ -162,7 +163,8 @@ function createWrappedProperty( arkts.Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_METHOD | arkts.Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_SETTER | arkts.Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_OVERLOAD, arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_PUBLIC, arkts.factory.createIdentifier(name), - [] + [], + undefined, ) let setter = arkts.factory.createMethodDefinition( @@ -213,7 +215,8 @@ function addTrackablePropertyTo( arkts.Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_ARROW, arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_NONE, undefined, - undefined + undefined, + undefined, ) ) ) @@ -236,7 +239,8 @@ function addTrackablePropertyTo( arkts.Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_METHOD | arkts.Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_GETTER, arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_PUBLIC, arkts.factory.createIdentifier(propertyName), - [] + [], + undefined, ) const setterFunction = arkts.factory.createScriptFunction( arkts.factory.createBlockStatement([ @@ -255,7 +259,8 @@ function addTrackablePropertyTo( arkts.Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_METHOD | arkts.Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_SETTER | arkts.Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_OVERLOAD, arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_PUBLIC, arkts.factory.createIdentifier(propertyName), - [] + [], + undefined, ) const setter = arkts.factory.createMethodDefinition( arkts.Es2pandaMethodDefinitionKind.METHOD_DEFINITION_KIND_SET, @@ -543,7 +548,8 @@ function callStatementsOnce(statements: arkts.Statement[]): arkts.Statement { arkts.Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_ARROW, arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_NONE, undefined, - undefined + undefined, + undefined, ) return arkts.factory.createExpressionStatement( arkts.factory.createCallExpression(