diff --git a/arkui-plugins/common/debug.ts b/arkui-plugins/common/debug.ts index 4675725602d7f27589789677fa841ae3ad924ca7..35085829b827416d63069fc5275251f30b6eca46 100644 --- a/arkui-plugins/common/debug.ts +++ b/arkui-plugins/common/debug.ts @@ -34,6 +34,39 @@ function mkDir(filePath: string): void { fs.mkdirSync(filePath); } +export function debugLogAstNode(message: string, node: arkts.AstNode): void { + if (!isDebugLog) { + return; + } + console.log(message); + console.log(node.dumpSrc()); +} + +export function debugDumpAstNode( + node: arkts.AstNode, + fileName: string, + cachePath: string | undefined, + programFileName: string): void { + if (!isDebugDump) { + return; + } + const currentDirectory = process.cwd(); + const modifiedFileName = programFileName.replaceAll('.', '_'); + const outputDir: string = cachePath + ? path.resolve(currentDirectory, cachePath, modifiedFileName) + : path.resolve(currentDirectory, 'dist', 'cache', modifiedFileName); + const filePath: string = path.resolve(outputDir, fileName); + if (!fs.existsSync(outputDir)) { + mkDir(outputDir); + } + try { + fs.writeFileSync(filePath, node.dumpSrc(), 'utf8'); + } catch (error) { + console.error('文件操作失败:', error); + } +} + +/** @deprecated */ export function debugDump( content: string, fileName: string, diff --git a/arkui-plugins/common/program-visitor.ts b/arkui-plugins/common/program-visitor.ts index 1b7d0eac810e6aec9444196641e9886351a8e259..20850fd5e538b80ad9de0006d7469de5508d9223 100644 --- a/arkui-plugins/common/program-visitor.ts +++ b/arkui-plugins/common/program-visitor.ts @@ -16,7 +16,7 @@ import * as arkts from '@koalaui/libarkts'; import { AbstractVisitor, VisitorOptions } from './abstract-visitor'; import { matchPrefix } from './arkts-utils'; -import { debugDump, debugLog, getDumpFileName } from './debug'; +import { getDumpFileName, debugDumpAstNode, debugLog } from './debug'; import { InteroperAbilityNames } from '../ui-plugins/interop/predefines'; import { PluginContext } from './plugin-context'; import { LegacyTransformer } from '../ui-plugins/interop/legacy-transformer'; @@ -126,10 +126,9 @@ export class ProgramVisitor extends AbstractVisitor { prefixName: string, extensionName: string ): void { - debugDump( - script.dumpSrc(), + debugDumpAstNode( + script, getDumpFileName(this.state, prefixName, undefined, name), - true, cachePath, extensionName ); @@ -274,10 +273,9 @@ export class ProgramVisitor extends AbstractVisitor { transformer.reset(); arkts.setAllParents(script); if (!transformer.isExternal) { - debugDump( - script.dumpSrc(), + debugDumpAstNode( + script, getDumpFileName(this.state, this.pluginName, count, transformer.constructor.name), - true, this.pluginContext?.getProjectConfig()?.cachePath, program!.fileNameWithExtension ); diff --git a/arkui-plugins/memo-plugins/index.ts b/arkui-plugins/memo-plugins/index.ts index 85bc31d2490ffc2e928c742bb9bec7aeb9159b95..8ae69bf05ba09ffc6a09d0b864406baeb1476a4d 100644 --- a/arkui-plugins/memo-plugins/index.ts +++ b/arkui-plugins/memo-plugins/index.ts @@ -21,7 +21,7 @@ import { ReturnTransformer } from './return-transformer'; import { ParameterTransformer } from './parameter-transformer'; import { ProgramVisitor } from '../common/program-visitor'; import { EXTERNAL_SOURCE_PREFIX_NAMES, EXTERNAL_SOURCE_PREFIX_NAMES_FOR_FRAMEWORK } from '../common/predefines'; -import { debugDump, debugLog, getDumpFileName } from '../common/debug'; +import { debugLog } from '../common/debug'; import { SignatureTransformer } from './signature-transformer'; import { InternalsTransformer } from './internal-transformer'; @@ -43,29 +43,14 @@ function checkedTransform(this: PluginContext): arkts.EtsScript | undefined { if (!!contextPtr) { let program = arkts.getOrUpdateGlobalContext(contextPtr).program; let script = program.astNode; - debugLog('[BEFORE MEMO SCRIPT] script: ', script.dumpSrc()); - const cachePath: string | undefined = this.getProjectConfig()?.cachePath; const isFrameworkMode = !!this.getProjectConfig()?.frameworkMode; const canSkipPhases = !isFrameworkMode && program.canSkipPhases(); - debugDump( - script.dumpSrc(), - getDumpFileName(0, 'SRC', 5, 'MEMO_AfterCheck_Begin'), - true, - cachePath, - program.fileNameWithExtension - ); + arkts.Performance.getInstance().createEvent('memo-checked'); program = checkedProgramVisit(program, this, canSkipPhases, isFrameworkMode); script = program.astNode; arkts.Performance.getInstance().stopEvent('memo-checked', true); - debugLog('[AFTER MEMO SCRIPT] script: ', script.dumpSrc()); - debugDump( - script.dumpSrc(), - getDumpFileName(0, 'SRC', 6, 'MEMO_AfterCheck_End'), - true, - cachePath, - program.fileNameWithExtension - ); + arkts.Performance.getInstance().memoryTrackerGetDelta('UIPlugin:Memo-AfterCheck'); arkts.Performance.getInstance().memoryTrackerReset(); diff --git a/arkui-plugins/ui-plugins/index.ts b/arkui-plugins/ui-plugins/index.ts index 1785e4854352aa9d54977fe12a7ed1909928947e..c89dd6eff217958eabd44595a2ff42893c4b9b1d 100644 --- a/arkui-plugins/ui-plugins/index.ts +++ b/arkui-plugins/ui-plugins/index.ts @@ -19,7 +19,7 @@ import { CheckedTransformer } from './checked-transformer'; import { Plugins, PluginContext, ProjectConfig } from '../common/plugin-context'; import { ProgramVisitor } from '../common/program-visitor'; import { EXTERNAL_SOURCE_PREFIX_NAMES } from '../common/predefines'; -import { debugDump, debugLog, getDumpFileName } from '../common/debug'; +import { debugLog } from '../common/debug'; export function uiTransform(): Plugins { return { @@ -42,28 +42,13 @@ function parsedTransform(this: PluginContext): arkts.EtsScript | undefined { if (!!contextPtr) { let program = arkts.getOrUpdateGlobalContext(contextPtr).program; script = program.astNode; - const cachePath: string | undefined = this.getProjectConfig()?.cachePath; const canSkipPhases = program.canSkipPhases(); - debugLog('[BEFORE PARSED SCRIPT] script: ', script.dumpSrc()); - debugDump( - script.dumpSrc(), - getDumpFileName(0, 'SRC', 1, 'UI_AfterParse_Begin'), - true, - cachePath, - program.fileNameWithExtension - ); + arkts.Performance.getInstance().createEvent('ui-parsed'); program = parsedProgramVisit(program, this, canSkipPhases); script = program.astNode; arkts.Performance.getInstance().stopEvent('ui-parsed', true); - debugLog('[AFTER PARSED SCRIPT] script: ', script.dumpSrc()); - debugDump( - script.dumpSrc(), - getDumpFileName(0, 'SRC', 2, 'UI_AfterParse_End'), - true, - cachePath, - program.fileNameWithExtension - ); + this.setArkTSAst(script); arkts.Performance.getInstance().memoryTrackerGetDelta('UIPlugin:AfterParse'); arkts.Performance.getInstance().memoryTrackerReset(); @@ -110,28 +95,13 @@ function checkedTransform(this: PluginContext): arkts.EtsScript | undefined { if (!!contextPtr) { let program = arkts.getOrUpdateGlobalContext(contextPtr).program; script = program.astNode; - const cachePath: string | undefined = this.getProjectConfig()?.cachePath; const canSkipPhases = program.canSkipPhases(); - debugLog('[BEFORE STRUCT SCRIPT] script: ', script.dumpSrc()); - debugDump( - script.dumpSrc(), - getDumpFileName(0, 'SRC', 3, 'UI_AfterCheck_Begin'), - true, - cachePath, - program.fileNameWithExtension - ); + arkts.Performance.getInstance().createEvent('ui-checked'); program = checkedProgramVisit(program, this, canSkipPhases); script = program.astNode; arkts.Performance.getInstance().stopEvent('ui-checked', true); - debugLog('[AFTER STRUCT SCRIPT] script: ', script.dumpSrc()); - debugDump( - script.dumpSrc(), - getDumpFileName(0, 'SRC', 4, 'UI_AfterCheck_End'), - true, - cachePath, - program.fileNameWithExtension - ); + this.setArkTSAst(script); arkts.Performance.getInstance().memoryTrackerGetDelta('UIPlugin:UI-AfterCheck'); arkts.Performance.getInstance().stopMemRecord('Node:UIPlugin:UI-AfterCheck'); diff --git a/koala-wrapper/src/arkts-api/peers/Program.ts b/koala-wrapper/src/arkts-api/peers/Program.ts index 6cdcc883b53eb087580222c91513b9b23caf9e8c..9d11c76629e3c6390ffcfa36a318fb6ad194061d 100644 --- a/koala-wrapper/src/arkts-api/peers/Program.ts +++ b/koala-wrapper/src/arkts-api/peers/Program.ts @@ -19,18 +19,9 @@ import { acceptNativeObjectArrayResult, unpackString } from "../utilities/privat import { KNativePointer } from "@koalaui/interop" import { EtsScript } from "../types" -enum SkipPhaseResult { - NOT_COMPUTED, - CAN_SKIP, - CANNOT_SKIP, -} - export class Program extends ArktsObject { - private canSkipPhaseResult: SkipPhaseResult; - constructor(peer: KNativePointer) { super(peer); - this.canSkipPhaseResult = SkipPhaseResult.NOT_COMPUTED; } get astNode(): EtsScript { @@ -83,18 +74,7 @@ export class Program extends ArktsObject { } canSkipPhases(): boolean { - if (this.canSkipPhaseResult === SkipPhaseResult.CAN_SKIP) { - return true; - } else if (this.canSkipPhaseResult === SkipPhaseResult.CANNOT_SKIP) { - return false; - } - if (global.es2panda._ProgramCanSkipPhases(global.context, this.peer)) { - this.canSkipPhaseResult = SkipPhaseResult.CAN_SKIP; - return true; - } else { - this.canSkipPhaseResult = SkipPhaseResult.CANNOT_SKIP; - return false; - } + return global.es2panda._ProgramCanSkipPhases(global.context, this.peer); } } diff --git a/koala-wrapper/src/arkts-api/static/global.ts b/koala-wrapper/src/arkts-api/static/global.ts index 8daf1adb80abbd8195b3e303a19fe2fdc6182280..f35fea30f01b0413fce9644fbfaa77d11d25ed3c 100644 --- a/koala-wrapper/src/arkts-api/static/global.ts +++ b/koala-wrapper/src/arkts-api/static/global.ts @@ -80,4 +80,6 @@ export class global { global._config = undefined; global.configObj = undefined; } + + public static validatePeerTypes = false; } diff --git a/koala-wrapper/src/arkts-api/utilities/private.ts b/koala-wrapper/src/arkts-api/utilities/private.ts index c343fb8e26c9bdd17782f2cc01ab267d10948ee0..bab346fc8cc22b3ae7a201e9812c7ec8f5622ca9 100644 --- a/koala-wrapper/src/arkts-api/utilities/private.ts +++ b/koala-wrapper/src/arkts-api/utilities/private.ts @@ -41,9 +41,11 @@ export function assertValidPeer(peer: KPtr, expectedKind: Es2pandaAstNodeType): if (peer === nullptr) { throwError(`invalid peer`); } - const peerType = global.generatedEs2panda._AstNodeTypeConst(global.context, peer); - if (peerType !== expectedKind) { - throwError(`expected: ${Es2pandaAstNodeType[expectedKind]}, got: ${Es2pandaAstNodeType[peerType]}`); + if (global.validatePeerTypes) { + const peerType = global.generatedEs2panda._AstNodeTypeConst(global.context, peer); + if (peerType !== expectedKind) { + throwError(`expected: ${Es2pandaAstNodeType[expectedKind]}, got: ${Es2pandaAstNodeType[peerType]}`); + } } }