大型多模块 ArkTS 工程执行 CompileArkTS 任务时,ets-loader 内置的 TypeScript 检查器间歇性崩溃,hvigor 仅报 Error Code: 00308018 Unknown Error,不输出任何文件位置与真实诊断信息,构建直接失败。
runArkPack(@ohos/hvigor-arkts-compose)创建的合成 CallExpression 节点无 parent 指针,流入检查器时重载解析失败展开诊断路径直接访问 node.parent.kind 崩溃。
runArkPack -> getResolvedSignature -> resolveSignature -> resolveCallExpression -> resolveCall -> chooseOverload -> getSignatureApplicabilityError -> checkExpressionWithContextualType -> checkExpression -> checkCallExpression <-- 崩溃
所有修复对正常 AST 节点行为完全不变(parser/binder 保证 parent/symbol 有值,可选链/early-return 不触发),仅将异常节点的崩溃改为优雅降级。
已在 docs/knowledge/type-checker-and-compat.md 补充约束、检查清单、崩溃场景文档。
tests/cases/compiler/checkCallExpressionParentNullGuard.ts
问题概述
大型多模块 ArkTS 工程执行 CompileArkTS 任务时,ets-loader 内置的 TypeScript 检查器间歇性崩溃,hvigor 仅报 Error Code: 00308018 Unknown Error,不输出任何文件位置与真实诊断信息,构建直接失败。
根因
runArkPack(@ohos/hvigor-arkts-compose)创建的合成 CallExpression 节点无 parent 指针,流入检查器时重载解析失败展开诊断路径直接访问 node.parent.kind 崩溃。
崩溃链路
修复内容(13 处)
node.parent 判空(7 处)
关联空指针崩溃(6 处)
修复原则
所有修复对正常 AST 节点行为完全不变(parser/binder 保证 parent/symbol 有值,可选链/early-return 不触发),仅将异常节点的崩溃改为优雅降级。
关联提交
验证
知识库
已在 docs/knowledge/type-checker-and-compat.md 补充约束、检查清单、崩溃场景文档。
回归测试
tests/cases/compiler/checkCallExpressionParentNullGuard.ts