arkanalyzer 1.0.94 → 2.0.0-beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (291) hide show
  1. package/lib/Config.d.ts +7 -0
  2. package/lib/Config.d.ts.map +1 -1
  3. package/lib/Scene.d.ts +134 -170
  4. package/lib/Scene.d.ts.map +1 -1
  5. package/lib/Scene.js +412 -976
  6. package/lib/callgraph/algorithm/AbstractAnalysis.js +3 -2
  7. package/lib/callgraph/algorithm/RapidTypeAnalysis.js +1 -1
  8. package/lib/callgraph/model/CallGraph.js +1 -1
  9. package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts +1 -3
  10. package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts.map +1 -1
  11. package/lib/callgraph/pointerAnalysis/PTAUtils.js +17 -7
  12. package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
  13. package/lib/callgraph/pointerAnalysis/Pag.js +4 -14
  14. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
  15. package/lib/callgraph/pointerAnalysis/PagBuilder.js +2 -1
  16. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
  17. package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +1 -2
  18. package/lib/callgraph/pointerAnalysis/plugins/WorkerPlugin.d.ts.map +1 -1
  19. package/lib/callgraph/pointerAnalysis/plugins/WorkerPlugin.js +0 -1
  20. package/lib/cli/commands/cg.d.ts +1 -0
  21. package/lib/cli/commands/cg.d.ts.map +1 -1
  22. package/lib/cli/commands/cg.js +22 -18
  23. package/lib/cli/commands/ir.d.ts +1 -0
  24. package/lib/cli/commands/ir.d.ts.map +1 -1
  25. package/lib/cli/commands/ir.js +5 -2
  26. package/lib/core/base/Constant.d.ts +5 -5
  27. package/lib/core/base/Constant.d.ts.map +1 -1
  28. package/lib/core/base/Constant.js +12 -9
  29. package/lib/core/base/Expr.d.ts +36 -20
  30. package/lib/core/base/Expr.d.ts.map +1 -1
  31. package/lib/core/base/Expr.js +206 -94
  32. package/lib/core/base/Local.d.ts +10 -20
  33. package/lib/core/base/Local.d.ts.map +1 -1
  34. package/lib/core/base/Local.js +25 -28
  35. package/lib/core/base/Position.d.ts +6 -0
  36. package/lib/core/base/Position.d.ts.map +1 -1
  37. package/lib/core/base/Position.js +37 -11
  38. package/lib/core/base/Ref.d.ts +45 -33
  39. package/lib/core/base/Ref.d.ts.map +1 -1
  40. package/lib/core/base/Ref.js +225 -51
  41. package/lib/core/base/Stmt.d.ts +19 -9
  42. package/lib/core/base/Stmt.d.ts.map +1 -1
  43. package/lib/core/base/Stmt.js +135 -52
  44. package/lib/core/base/Type.d.ts +67 -4
  45. package/lib/core/base/Type.d.ts.map +1 -1
  46. package/lib/core/base/Type.js +391 -20
  47. package/lib/core/base/TypeExpr.d.ts +6 -4
  48. package/lib/core/base/TypeExpr.d.ts.map +1 -1
  49. package/lib/core/base/TypeExpr.js +34 -10
  50. package/lib/core/base/Value.d.ts +20 -2
  51. package/lib/core/base/Value.d.ts.map +1 -1
  52. package/lib/core/base/Value.js +12 -0
  53. package/lib/core/common/ArkIRTransformer.d.ts +18 -0
  54. package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
  55. package/lib/core/common/ArkIRTransformer.js +94 -75
  56. package/lib/core/common/ArkValueTransformer.d.ts +21 -3
  57. package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
  58. package/lib/core/common/ArkValueTransformer.js +455 -265
  59. package/lib/core/common/Builtin.d.ts +48 -24
  60. package/lib/core/common/Builtin.d.ts.map +1 -1
  61. package/lib/core/common/Builtin.js +90 -52
  62. package/lib/core/common/CanonicalizerValidator.d.ts +308 -0
  63. package/lib/core/common/CanonicalizerValidator.d.ts.map +1 -0
  64. package/lib/core/common/CanonicalizerValidator.js +888 -0
  65. package/lib/core/common/Const.d.ts +3 -3
  66. package/lib/core/common/Const.d.ts.map +1 -1
  67. package/lib/core/common/Const.js +3 -3
  68. package/lib/core/common/DummyMainCreater.d.ts +2 -21
  69. package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
  70. package/lib/core/common/DummyMainCreater.js +8 -105
  71. package/lib/core/common/IRInference.d.ts +55 -3
  72. package/lib/core/common/IRInference.d.ts.map +1 -1
  73. package/lib/core/common/IRInference.js +407 -126
  74. package/lib/core/common/IRUtils.d.ts +1 -0
  75. package/lib/core/common/IRUtils.d.ts.map +1 -1
  76. package/lib/core/common/IRUtils.js +44 -13
  77. package/lib/core/common/ModelUtils.d.ts +44 -20
  78. package/lib/core/common/ModelUtils.d.ts.map +1 -1
  79. package/lib/core/common/ModelUtils.js +378 -208
  80. package/lib/core/common/SdkUtils.d.ts +35 -5
  81. package/lib/core/common/SdkUtils.d.ts.map +1 -1
  82. package/lib/core/common/SdkUtils.js +181 -53
  83. package/lib/core/common/SignatureCanonicalizer.d.ts +95 -0
  84. package/lib/core/common/SignatureCanonicalizer.d.ts.map +1 -0
  85. package/lib/core/common/SignatureCanonicalizer.js +116 -0
  86. package/lib/core/common/SignatureCanonicalizerRegistry.d.ts +176 -0
  87. package/lib/core/common/SignatureCanonicalizerRegistry.d.ts.map +1 -0
  88. package/lib/core/common/SignatureCanonicalizerRegistry.js +343 -0
  89. package/lib/core/common/SignatureModelCanonicalizer.d.ts +69 -0
  90. package/lib/core/common/SignatureModelCanonicalizer.d.ts.map +1 -0
  91. package/lib/core/common/SignatureModelCanonicalizer.js +109 -0
  92. package/lib/core/common/StmtUseReplacer.d.ts +1 -0
  93. package/lib/core/common/StmtUseReplacer.d.ts.map +1 -1
  94. package/lib/core/common/StmtUseReplacer.js +9 -0
  95. package/lib/core/common/StringUtils.d.ts +12 -1
  96. package/lib/core/common/StringUtils.d.ts.map +1 -1
  97. package/lib/core/common/StringUtils.js +36 -17
  98. package/lib/core/common/TempSignatureCanonicalizer.d.ts +82 -0
  99. package/lib/core/common/TempSignatureCanonicalizer.d.ts.map +1 -0
  100. package/lib/core/common/TempSignatureCanonicalizer.js +177 -0
  101. package/lib/core/common/TypeInference.d.ts +24 -6
  102. package/lib/core/common/TypeInference.d.ts.map +1 -1
  103. package/lib/core/common/TypeInference.js +243 -117
  104. package/lib/core/common/ValueUtil.d.ts +2 -1
  105. package/lib/core/common/ValueUtil.d.ts.map +1 -1
  106. package/lib/core/common/ValueUtil.js +4 -1
  107. package/lib/core/graph/Cfg.d.ts.map +1 -1
  108. package/lib/core/graph/Cfg.js +21 -6
  109. package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
  110. package/lib/core/graph/builder/CfgBuilder.js +46 -33
  111. package/lib/core/graph/builder/IfBuilder.d.ts.map +1 -1
  112. package/lib/core/graph/builder/IfBuilder.js +6 -2
  113. package/lib/core/graph/builder/ViewTreeBuilder.d.ts.map +1 -1
  114. package/lib/core/graph/builder/ViewTreeBuilder.js +6 -2
  115. package/lib/core/inference/ModelInference.d.ts +24 -4
  116. package/lib/core/inference/ModelInference.d.ts.map +1 -1
  117. package/lib/core/inference/ModelInference.js +273 -79
  118. package/lib/core/inference/ValueInference.d.ts +3 -2
  119. package/lib/core/inference/ValueInference.d.ts.map +1 -1
  120. package/lib/core/inference/ValueInference.js +90 -40
  121. package/lib/core/inference/abc/AbcInference.d.ts.map +1 -1
  122. package/lib/core/inference/abc/AbcInference.js +28 -15
  123. package/lib/core/inference/arkts/ArkTsInference.d.ts +9 -3
  124. package/lib/core/inference/arkts/ArkTsInference.d.ts.map +1 -1
  125. package/lib/core/inference/arkts/ArkTsInference.js +54 -16
  126. package/lib/core/model/ArkClass.d.ts +192 -18
  127. package/lib/core/model/ArkClass.d.ts.map +1 -1
  128. package/lib/core/model/ArkClass.js +852 -122
  129. package/lib/core/model/ArkExport.d.ts.map +1 -1
  130. package/lib/core/model/ArkExport.js +1 -2
  131. package/lib/core/model/ArkField.d.ts +34 -2
  132. package/lib/core/model/ArkField.d.ts.map +1 -1
  133. package/lib/core/model/ArkField.js +89 -14
  134. package/lib/core/model/ArkFile.d.ts +72 -12
  135. package/lib/core/model/ArkFile.d.ts.map +1 -1
  136. package/lib/core/model/ArkFile.js +275 -65
  137. package/lib/core/model/ArkImport.d.ts.map +1 -1
  138. package/lib/core/model/ArkImport.js +1 -2
  139. package/lib/core/model/ArkMethod.d.ts +101 -15
  140. package/lib/core/model/ArkMethod.d.ts.map +1 -1
  141. package/lib/core/model/ArkMethod.js +252 -39
  142. package/lib/core/model/ArkModule.d.ts +1 -1
  143. package/lib/core/model/ArkModule.js +1 -1
  144. package/lib/core/model/ArkNamespace.d.ts +80 -10
  145. package/lib/core/model/ArkNamespace.d.ts.map +1 -1
  146. package/lib/core/model/ArkNamespace.js +309 -76
  147. package/lib/core/model/ArkSignature.d.ts +242 -18
  148. package/lib/core/model/ArkSignature.d.ts.map +1 -1
  149. package/lib/core/model/ArkSignature.js +725 -95
  150. package/lib/core/model/builder/ArkClassBuilder.d.ts +6 -3
  151. package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
  152. package/lib/core/model/builder/ArkClassBuilder.js +116 -71
  153. package/lib/core/model/builder/ArkExportBuilder.d.ts +1 -1
  154. package/lib/core/model/builder/ArkExportBuilder.d.ts.map +1 -1
  155. package/lib/core/model/builder/ArkExportBuilder.js +1 -1
  156. package/lib/core/model/builder/ArkFieldBuilder.d.ts +0 -2
  157. package/lib/core/model/builder/ArkFieldBuilder.d.ts.map +1 -1
  158. package/lib/core/model/builder/ArkFieldBuilder.js +9 -43
  159. package/lib/core/model/builder/ArkFileBuilder.d.ts.map +1 -1
  160. package/lib/core/model/builder/ArkFileBuilder.js +32 -33
  161. package/lib/core/model/builder/ArkMethodBuilder.d.ts +10 -3
  162. package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
  163. package/lib/core/model/builder/ArkMethodBuilder.js +40 -26
  164. package/lib/core/model/builder/ArkNamespaceBuilder.d.ts +3 -2
  165. package/lib/core/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
  166. package/lib/core/model/builder/ArkNamespaceBuilder.js +45 -77
  167. package/lib/core/model/builder/ArkSignatureBuilder.d.ts +9 -0
  168. package/lib/core/model/builder/ArkSignatureBuilder.d.ts.map +1 -1
  169. package/lib/core/model/builder/ArkSignatureBuilder.js +26 -3
  170. package/lib/core/model/builder/BodyBuilder.d.ts +1 -0
  171. package/lib/core/model/builder/BodyBuilder.d.ts.map +1 -1
  172. package/lib/core/model/builder/BodyBuilder.js +37 -11
  173. package/lib/core/model/builder/builderUtils.d.ts +11 -1
  174. package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
  175. package/lib/core/model/builder/builderUtils.js +124 -90
  176. package/lib/frontend/FrontendBuilder.d.ts +10 -6
  177. package/lib/frontend/FrontendBuilder.d.ts.map +1 -1
  178. package/lib/frontend/FrontendBuilder.js +19 -45
  179. package/lib/frontend/ModuleScene.d.ts +43 -0
  180. package/lib/frontend/ModuleScene.d.ts.map +1 -0
  181. package/lib/frontend/ModuleScene.js +143 -0
  182. package/lib/frontend/SceneBuildStage.d.ts +15 -0
  183. package/lib/frontend/SceneBuildStage.d.ts.map +1 -0
  184. package/lib/frontend/SceneBuildStage.js +32 -0
  185. package/lib/frontend/SceneBuilder.d.ts +153 -0
  186. package/lib/frontend/SceneBuilder.d.ts.map +1 -0
  187. package/lib/frontend/SceneBuilder.js +859 -0
  188. package/lib/frontend/arktsFrontend/ArktsFrontend.d.ts +0 -2
  189. package/lib/frontend/arktsFrontend/ArktsFrontend.d.ts.map +1 -1
  190. package/lib/frontend/arktsFrontend/ArktsFrontend.js +0 -18
  191. package/lib/frontend/arktsFrontend/FileBodyRemount.d.ts +17 -0
  192. package/lib/frontend/arktsFrontend/FileBodyRemount.d.ts.map +1 -0
  193. package/lib/frontend/arktsFrontend/FileBodyRemount.js +187 -0
  194. package/lib/frontend/common/ModuleBuilder.d.ts +4 -2
  195. package/lib/frontend/common/ModuleBuilder.d.ts.map +1 -1
  196. package/lib/frontend/common/ModuleBuilder.js +19 -9
  197. package/lib/frontend/cppFrontend/CppFrontend.d.ts +0 -6
  198. package/lib/frontend/cppFrontend/CppFrontend.d.ts.map +1 -1
  199. package/lib/frontend/cppFrontend/CppFrontend.js +0 -56
  200. package/lib/frontend/cppFrontend/base/Type.d.ts +7 -0
  201. package/lib/frontend/cppFrontend/base/Type.d.ts.map +1 -1
  202. package/lib/frontend/cppFrontend/base/Type.js +29 -0
  203. package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts.map +1 -1
  204. package/lib/frontend/cppFrontend/common/ArkIRTransformer.js +56 -56
  205. package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts +1 -1
  206. package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts.map +1 -1
  207. package/lib/frontend/cppFrontend/common/ArkValueTransformer.js +124 -113
  208. package/lib/frontend/cppFrontend/common/Builtin.d.ts +29 -19
  209. package/lib/frontend/cppFrontend/common/Builtin.d.ts.map +1 -1
  210. package/lib/frontend/cppFrontend/common/Builtin.js +56 -35
  211. package/lib/frontend/cppFrontend/common/IRInference.d.ts +7 -2
  212. package/lib/frontend/cppFrontend/common/IRInference.d.ts.map +1 -1
  213. package/lib/frontend/cppFrontend/common/IRInference.js +61 -28
  214. package/lib/frontend/cppFrontend/common/IRUtils.d.ts +1 -0
  215. package/lib/frontend/cppFrontend/common/IRUtils.d.ts.map +1 -1
  216. package/lib/frontend/cppFrontend/common/IRUtils.js +22 -10
  217. package/lib/frontend/cppFrontend/common/ModelUtils.d.ts +19 -0
  218. package/lib/frontend/cppFrontend/common/ModelUtils.d.ts.map +1 -1
  219. package/lib/frontend/cppFrontend/common/ModelUtils.js +84 -3
  220. package/lib/frontend/cppFrontend/common/TypeInference.d.ts.map +1 -1
  221. package/lib/frontend/cppFrontend/common/TypeInference.js +44 -54
  222. package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts.map +1 -1
  223. package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.js +2 -1
  224. package/lib/frontend/cppFrontend/inference/CxxModelInference.d.ts +1 -1
  225. package/lib/frontend/cppFrontend/inference/CxxModelInference.d.ts.map +1 -1
  226. package/lib/frontend/cppFrontend/inference/CxxValueInference.d.ts.map +1 -1
  227. package/lib/frontend/cppFrontend/inference/CxxValueInference.js +41 -5
  228. package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts.map +1 -1
  229. package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.js +18 -28
  230. package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts.map +1 -1
  231. package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.js +2 -3
  232. package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts +2 -2
  233. package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts.map +1 -1
  234. package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.js +31 -24
  235. package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts.map +1 -1
  236. package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.js +10 -16
  237. package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts +0 -2
  238. package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
  239. package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.js +19 -37
  240. package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts +1 -0
  241. package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts.map +1 -1
  242. package/lib/frontend/cppFrontend/model/builder/BodyBuilder.js +30 -3
  243. package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts.map +1 -1
  244. package/lib/frontend/cppFrontend/model/builder/builderUtils.js +8 -4
  245. package/lib/index.d.ts +3 -0
  246. package/lib/index.d.ts.map +1 -1
  247. package/lib/index.js +10 -2
  248. package/lib/save/json/JsonSerialization.js +2 -2
  249. package/lib/save/source/SourceStmt.js +1 -1
  250. package/lib/save/source/SourceTransformer.d.ts.map +1 -1
  251. package/lib/save/source/SourceTransformer.js +0 -9
  252. package/lib/statistics/StageStatistics.d.ts +195 -0
  253. package/lib/statistics/StageStatistics.d.ts.map +1 -0
  254. package/lib/statistics/StageStatistics.js +346 -0
  255. package/lib/statistics/StageStatisticsReporter.d.ts +58 -0
  256. package/lib/statistics/StageStatisticsReporter.d.ts.map +1 -0
  257. package/lib/statistics/StageStatisticsReporter.js +255 -0
  258. package/lib/utils/Canonicalizer.d.ts +9 -2
  259. package/lib/utils/Canonicalizer.d.ts.map +1 -1
  260. package/lib/utils/Canonicalizer.js +19 -2
  261. package/lib/utils/CxxSceneUtils.d.ts +7 -0
  262. package/lib/utils/CxxSceneUtils.d.ts.map +1 -1
  263. package/lib/utils/CxxSceneUtils.js +10 -1
  264. package/lib/utils/FileUtils.d.ts +0 -1
  265. package/lib/utils/FileUtils.d.ts.map +1 -1
  266. package/lib/utils/FileUtils.js +1 -9
  267. package/lib/utils/HashUtils.d.ts +9 -0
  268. package/lib/utils/HashUtils.d.ts.map +1 -0
  269. package/lib/utils/HashUtils.js +65 -0
  270. package/lib/utils/ModuleUtils.d.ts.map +1 -1
  271. package/lib/utils/ModuleUtils.js +24 -5
  272. package/lib/utils/VisitedSegment.d.ts +23 -0
  273. package/lib/utils/VisitedSegment.d.ts.map +1 -0
  274. package/lib/utils/VisitedSegment.js +64 -0
  275. package/lib/utils/callGraphUtils.d.ts.map +1 -1
  276. package/lib/utils/callGraphUtils.js +7 -7
  277. package/lib/utils/getAllFiles.d.ts.map +1 -1
  278. package/lib/utils/getAllFiles.js +11 -8
  279. package/lib/utils/logger.d.ts +4 -0
  280. package/lib/utils/logger.d.ts.map +1 -1
  281. package/lib/utils/logger.js +16 -0
  282. package/lib/utils/parseArkSourceFile.d.ts +33 -0
  283. package/lib/utils/parseArkSourceFile.d.ts.map +1 -0
  284. package/lib/utils/parseArkSourceFile.js +131 -0
  285. package/package.json +1 -1
  286. package/lib/utils/DependenciesSort.d.ts +0 -3
  287. package/lib/utils/DependenciesSort.d.ts.map +0 -1
  288. package/lib/utils/DependenciesSort.js +0 -72
  289. package/lib/utils/crypto_utils.d.ts +0 -6
  290. package/lib/utils/crypto_utils.d.ts.map +0 -1
  291. package/lib/utils/crypto_utils.js +0 -57
@@ -56,9 +56,11 @@ const ArkClass_1 = require("../ArkClass");
56
56
  const ArkMethod_1 = require("../ArkMethod");
57
57
  const Position_1 = require("../../base/Position");
58
58
  const EtsConst_1 = require("../../common/EtsConst");
59
+ const parseArkSourceFile_1 = require("../../../utils/parseArkSourceFile");
59
60
  const ArkSignature_1 = require("../ArkSignature");
60
61
  const Const_1 = require("../../common/Const");
61
62
  const StringUtils_1 = require("../../common/StringUtils");
63
+ const SignatureCanonicalizerRegistry_1 = require("../../common/SignatureCanonicalizerRegistry");
62
64
  const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'ArkFileBuilder');
63
65
  exports.notStmtOrExprKind = [
64
66
  'ModuleDeclaration',
@@ -95,7 +97,7 @@ function buildArkFileFromFile(absoluteFilePath, projectDir, arkFile, projectName
95
97
  sourceText = fs_1.default.readFileSync(arkFile.getFilePath(), 'utf8');
96
98
  }
97
99
  catch (error) {
98
- logger.error('Failed to read file: ${error}');
100
+ logger.error(`Failed to read file: ${error}`);
99
101
  return;
100
102
  }
101
103
  const options = arkFile.getScene().getOptions();
@@ -103,7 +105,7 @@ function buildArkFileFromFile(absoluteFilePath, projectDir, arkFile, projectName
103
105
  if (eagerLoad && arkFile.getScene().getProjectName() === arkFile.getProjectName()) {
104
106
  arkFile.setCode(sourceText);
105
107
  }
106
- const sourceFile = ohos_typescript_1.default.createSourceFile(arkFile.getName(), sourceText, ohos_typescript_1.default.ScriptTarget.Latest, true, undefined, EtsConst_1.ETS_COMPILER_OPTIONS);
108
+ const sourceFile = (0, parseArkSourceFile_1.parseArkSourceFile)(arkFile.getName(), sourceText, true, EtsConst_1.ETS_COMPILER_OPTIONS);
107
109
  // save ast source file, if enabled ast and file is from the project (not from sdk)
108
110
  if (arkFile.getScene().getOptions().enableAST && arkFile.getScene().getProjectName() === arkFile.getProjectName()) {
109
111
  arkFile.setAST(sourceFile);
@@ -123,10 +125,12 @@ exports.buildArkFileFromFile = buildArkFileFromFile;
123
125
  * which would duplicate `export *` entries (their temp keys are process-level auto-increment).
124
126
  */
125
127
  function buildArkFile(arkFile, astRoot, skipImportExport = false) {
126
- const namespaces = [];
127
128
  for (const child of astRoot.statements) {
129
+ if (ohos_typescript_1.default.isTypeAliasDeclaration(child)) {
130
+ (0, ArkClassBuilder_1.registerTypeAliasTypeLiteral)(child);
131
+ }
128
132
  if (ohos_typescript_1.default.isModuleDeclaration(child)) {
129
- buildAndCollectNamespace(child, arkFile, astRoot, namespaces);
133
+ buildAndCollectNamespace(child, arkFile, astRoot);
130
134
  }
131
135
  else if (ohos_typescript_1.default.isClassDeclaration(child) || ohos_typescript_1.default.isInterfaceDeclaration(child) || ohos_typescript_1.default.isEnumDeclaration(child) || ohos_typescript_1.default.isStructDeclaration(child)) {
132
136
  buildAndExportClass(child, arkFile, astRoot);
@@ -146,27 +150,30 @@ function buildArkFile(arkFile, astRoot, skipImportExport = false) {
146
150
  logger.trace('Child joined default method of arkFile: ', ohos_typescript_1.default.SyntaxKind[child.kind]);
147
151
  }
148
152
  }
149
- mergeAndAddNamespaces(namespaces, arkFile);
150
153
  }
151
- function buildAndCollectNamespace(child, arkFile, astRoot, namespaces) {
152
- const ns = new ArkNamespace_1.ArkNamespace();
153
- ns.setDeclaringArkFile(arkFile);
154
- (0, ArkNamespaceBuilder_1.buildArkNamespace)(child, arkFile, ns, astRoot);
155
- namespaces.push(ns);
154
+ function buildAndCollectNamespace(child, arkFile, astRoot) {
155
+ const namespaceSig = (0, ArkNamespaceBuilder_1.buildNamespaceSignature)(child, arkFile);
156
+ let ns = SignatureCanonicalizerRegistry_1.SignatureCanonicalizerRegistry.getInstance().getNamespaceBySig(namespaceSig);
157
+ if (!ns) {
158
+ ns = new ArkNamespace_1.ArkNamespace(arkFile.getFileSigID(), undefined, namespaceSig);
159
+ arkFile.addNamespace(ns);
160
+ }
161
+ (0, ArkNamespaceBuilder_1.buildArkNamespace)(child, ns, astRoot);
156
162
  if (ns.isExported()) {
157
163
  arkFile.addExportInfo((0, ArkExportBuilder_1.buildExportInfo)(ns, arkFile, Position_1.FullPosition.buildFromNode(child, astRoot)));
158
164
  }
159
165
  }
160
166
  function buildAndExportClass(child, arkFile, astRoot) {
161
- const cls = new ArkClass_1.ArkClass();
167
+ const cls = new ArkClass_1.ArkClass(arkFile.getFileSigID());
162
168
  (0, ArkClassBuilder_1.buildNormalArkClassFromArkFile)(child, arkFile, cls, astRoot);
163
169
  if (cls.isExported()) {
164
170
  arkFile.addExportInfo((0, ArkExportBuilder_1.buildExportInfo)(cls, arkFile, Position_1.FullPosition.buildFromNode(child, astRoot)));
165
171
  }
166
172
  }
167
173
  function buildAndExportMethod(child, arkFile, astRoot) {
168
- const mthd = new ArkMethod_1.ArkMethod();
169
- (0, ArkMethodBuilder_1.buildArkMethodFromArkClass)(child, arkFile.getDefaultClass(), mthd, astRoot);
174
+ const defaultClass = arkFile.getDefaultClass();
175
+ const mthd = new ArkMethod_1.ArkMethod(defaultClass.getClassSigID());
176
+ (0, ArkMethodBuilder_1.buildArkMethodFromArkClass)(child, defaultClass, mthd, astRoot);
170
177
  if (mthd.isExported()) {
171
178
  arkFile.addExportInfo((0, ArkExportBuilder_1.buildExportInfo)(mthd, arkFile, Position_1.FullPosition.buildFromNode(child, astRoot)));
172
179
  }
@@ -202,22 +209,10 @@ function tryBuildImportExport(child, arkFile, astRoot) {
202
209
  }
203
210
  return false;
204
211
  }
205
- function mergeAndAddNamespaces(namespaces, arkFile) {
206
- const merged = (0, ArkNamespaceBuilder_1.mergeNameSpaces)(namespaces);
207
- merged.forEach(ns => {
208
- arkFile.addNamespace(ns);
209
- if (ns.isExport()) {
210
- const positions = ns.getOriginFullPositions();
211
- if (positions.length > 0) {
212
- arkFile.addExportInfo((0, ArkExportBuilder_1.buildExportInfo)(ns, arkFile, positions[0]));
213
- }
214
- }
215
- });
216
- }
217
212
  function genDefaultArkClass(arkFile, astRoot) {
218
- let defaultClass = new ArkClass_1.ArkClass();
219
- (0, ArkClassBuilder_1.buildDefaultArkClassFromArkFile)(arkFile, defaultClass, astRoot);
220
- arkFile.setDefaultClass(defaultClass);
213
+ let defaultClass = new ArkClass_1.ArkClass(arkFile.getFileSigID());
214
+ (0, ArkClassBuilder_1.buildDefaultArkClassFromArkFile)(defaultClass, astRoot);
215
+ arkFile.setDefaultClassID(defaultClass.getClassSigID());
221
216
  arkFile.addArkClass(defaultClass);
222
217
  }
223
218
  /**
@@ -227,16 +222,20 @@ function genDefaultArkClass(arkFile, astRoot) {
227
222
  * @returns
228
223
  */
229
224
  function buildImportExportInfoFromFile(arkFile) {
225
+ var _a;
230
226
  let sourceText;
231
227
  try {
232
228
  sourceText = fs_1.default.readFileSync(arkFile.getFilePath(), 'utf8');
233
229
  }
234
230
  catch (error) {
235
- logger.error('Failed to read file: ${error}');
231
+ logger.error(`Failed to read file: ${error}`);
236
232
  return;
237
233
  }
238
- arkFile.setCode(sourceText);
239
- const sourceFile = ohos_typescript_1.default.createSourceFile(arkFile.getName(), sourceText, ohos_typescript_1.default.ScriptTarget.Latest, true, undefined, EtsConst_1.ETS_COMPILER_OPTIONS);
234
+ const eagerLoad = (_a = arkFile.getScene().getOptions().saveSourceCodeByDefault) !== null && _a !== void 0 ? _a : false;
235
+ if (eagerLoad && arkFile.getScene().getProjectName() === arkFile.getProjectName()) {
236
+ arkFile.setCode(sourceText);
237
+ }
238
+ const sourceFile = (0, parseArkSourceFile_1.parseArkSourceFile)(arkFile.getName(), sourceText, true, EtsConst_1.ETS_COMPILER_OPTIONS);
240
239
  buildImportExportInfo(arkFile, sourceFile);
241
240
  }
242
241
  exports.buildImportExportInfoFromFile = buildImportExportInfoFromFile;
@@ -291,10 +290,10 @@ function buildArkFileSignaturesFromFile(arkFile) {
291
290
  sourceText = fs_1.default.readFileSync(arkFile.getFilePath(), 'utf8');
292
291
  }
293
292
  catch (error) {
294
- logger.error('Failed to read file: ${error}');
293
+ logger.error(`Failed to read file: ${error}`);
295
294
  return;
296
295
  }
297
- const sourceFile = ohos_typescript_1.default.createSourceFile(arkFile.getName(), sourceText, ohos_typescript_1.default.ScriptTarget.Latest, true, undefined, EtsConst_1.ETS_COMPILER_OPTIONS);
296
+ const sourceFile = (0, parseArkSourceFile_1.parseArkSourceFile)(arkFile.getName(), sourceText, true, EtsConst_1.ETS_COMPILER_OPTIONS);
298
297
  if (arkFile.getScene().getOptions().enableAST && arkFile.getScene().getProjectName() === arkFile.getProjectName()) {
299
298
  arkFile.setAST(sourceFile);
300
299
  }
@@ -7,7 +7,7 @@ import { Stmt } from '../../base/Stmt';
7
7
  import { Local } from '../../base/Local';
8
8
  import { Value } from '../../base/Value';
9
9
  export type MethodLikeNode = ts.FunctionDeclaration | ts.MethodDeclaration | ts.ConstructorDeclaration | ts.ArrowFunction | ts.AccessorDeclaration | ts.FunctionExpression | ts.MethodSignature | ts.ConstructSignatureDeclaration | ts.CallSignatureDeclaration | ts.FunctionTypeNode;
10
- export declare function buildDefaultArkMethodFromArkClass(declaringClass: ArkClass, mtd: ArkMethod, sourceFile: ts.SourceFile, node?: ts.ModuleDeclaration): void;
10
+ export declare function buildDefaultArkMethodFromArkClass(mtd: ArkMethod, sourceFile: ts.SourceFile, node?: ts.ModuleDeclaration): void;
11
11
  export declare function buildArkMethodFromArkClass(methodNode: MethodLikeNode, declaringClass: ArkClass, mtd: ArkMethod, sourceFile: ts.SourceFile, declaringMethod?: ArkMethod): void;
12
12
  export declare function buildNestedMethodName(originName: string, declaringMethodName: string): string;
13
13
  export declare class ObjectBindingPatternParameter {
@@ -56,10 +56,17 @@ export declare class MethodParameter implements Value {
56
56
  addArrayElement(element: ArrayBindingPatternParameter): void;
57
57
  getArrayElements(): ArrayBindingPatternParameter[];
58
58
  setArrayElements(arrayElements: ArrayBindingPatternParameter[]): void;
59
- getUses(): Value[];
59
+ getUses(acc?: Value[]): Value[];
60
60
  }
61
61
  export declare function needDefaultConstructorInClass(arkClass: ArkClass): boolean;
62
- export declare function buildDefaultConstructor(arkClass: ArkClass, visited?: Set<ArkClass>): boolean;
62
+ /**
63
+ * On-demand variant of {@link buildDefaultConstructor} with the isLibraryClass guard
64
+ * lifted: callers decide by construction stage / SDK batch whether library classes
65
+ * get default constructors (the batch-level parameter replaces the per-class project
66
+ * name comparison on this hot path). The remaining static guards are unchanged.
67
+ */
68
+ export declare function ensureDefaultConstructor(arkClass: ArkClass): boolean;
69
+ export declare function buildDefaultConstructor(arkClass: ArkClass, visited?: Set<number>, force?: boolean): boolean;
63
70
  export declare function buildInitMethod(initMethod: ArkMethod, fieldInitializerStmts: Stmt[], thisLocal: Local, globals?: Map<string, GlobalRef> | null): void;
64
71
  export declare function addInitInConstructor(constructor: ArkMethod): void;
65
72
  export declare function isMethodImplementation(node: MethodLikeNode): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"ArkMethodBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/ArkMethodBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ArkMethodBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/ArkMethodBuilder.ts"],"names":[],"mappings":"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"}
@@ -40,7 +40,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
40
40
  return (mod && mod.__esModule) ? mod : { "default": mod };
41
41
  };
42
42
  Object.defineProperty(exports, "__esModule", { value: true });
43
- exports.replaceSuper2Constructor = exports.updateMethodSignaturesAndLineCols = exports.checkAndUpdateMethod = exports.isMethodImplementation = exports.addInitInConstructor = exports.buildInitMethod = exports.buildDefaultConstructor = exports.needDefaultConstructorInClass = exports.MethodParameter = exports.ArrayBindingPatternParameter = exports.ObjectBindingPatternParameter = exports.buildNestedMethodName = exports.buildArkMethodFromArkClass = exports.buildDefaultArkMethodFromArkClass = void 0;
43
+ exports.replaceSuper2Constructor = exports.updateMethodSignaturesAndLineCols = exports.checkAndUpdateMethod = exports.isMethodImplementation = exports.addInitInConstructor = exports.buildInitMethod = exports.buildDefaultConstructor = exports.ensureDefaultConstructor = exports.needDefaultConstructorInClass = exports.MethodParameter = exports.ArrayBindingPatternParameter = exports.ObjectBindingPatternParameter = exports.buildNestedMethodName = exports.buildArkMethodFromArkClass = exports.buildDefaultArkMethodFromArkClass = void 0;
44
44
  const Type_1 = require("../../base/Type");
45
45
  const BodyBuilder_1 = require("./BodyBuilder");
46
46
  const ViewTreeBuilder_1 = require("../../graph/builder/ViewTreeBuilder");
@@ -65,10 +65,9 @@ const IRUtils_1 = require("../../common/IRUtils");
65
65
  const ArkError_1 = require("../../common/ArkError");
66
66
  const Position_1 = require("../../base/Position");
67
67
  const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'ArkMethodBuilder');
68
- function buildDefaultArkMethodFromArkClass(declaringClass, mtd, sourceFile, node) {
69
- mtd.setDeclaringArkClass(declaringClass);
68
+ function buildDefaultArkMethodFromArkClass(mtd, sourceFile, node) {
70
69
  const methodSubSignature = ArkSignatureBuilder_1.ArkSignatureBuilder.buildMethodSubSignatureFromMethodName(Const_1.DEFAULT_ARK_METHOD_NAME, true);
71
- const methodSignature = new ArkSignature_1.MethodSignature(mtd.getDeclaringArkClass().getSignature(), methodSubSignature);
70
+ const methodSignature = new ArkSignature_1.MethodSignature(mtd.getDeclaringArkClass().getClassSigID(), methodSubSignature);
72
71
  mtd.setImplementationSignature(methodSignature);
73
72
  mtd.setImplOriginFullPosition(new Position_1.FullPosition(0, 0, 0, 0));
74
73
  const defaultMethodNode = node ? node : sourceFile;
@@ -77,10 +76,7 @@ function buildDefaultArkMethodFromArkClass(declaringClass, mtd, sourceFile, node
77
76
  }
78
77
  exports.buildDefaultArkMethodFromArkClass = buildDefaultArkMethodFromArkClass;
79
78
  function buildArkMethodFromArkClass(methodNode, declaringClass, mtd, sourceFile, declaringMethod) {
80
- mtd.setDeclaringArkClass(declaringClass);
81
79
  if (declaringMethod !== undefined && !declaringMethod.isGenerated() && !declaringMethod.isDefaultArkMethod()) {
82
- // If declaringMethod is %dflt, %instInit, %statInit, then the method should be taken as nested method of them.
83
- // Otherwise, it will fail to handle global vars of this method or failed to do the free of bodyBuilder.
84
80
  mtd.setOuterMethod(declaringMethod);
85
81
  }
86
82
  ohos_typescript_1.default.isFunctionDeclaration(methodNode) && mtd.setAsteriskToken(methodNode.asteriskToken !== undefined);
@@ -104,7 +100,7 @@ function buildArkMethodFromArkClass(methodNode, declaringClass, mtd, sourceFile,
104
100
  returnType = (0, builderUtils_1.buildGenericType)((0, builderUtils_1.buildReturnType)(methodNode.type, sourceFile, mtd), mtd);
105
101
  }
106
102
  const methodSubSignature = new ArkSignature_1.MethodSubSignature(methodName, methodParameters, returnType, mtd.isStatic());
107
- const methodSignature = new ArkSignature_1.MethodSignature(mtd.getDeclaringArkClass().getSignature(), methodSubSignature);
103
+ const methodSignature = new ArkSignature_1.MethodSignature(mtd.getDeclaringArkClass().getClassSigID(), methodSubSignature);
108
104
  if (isMethodImplementation(methodNode)) {
109
105
  mtd.setImplementationSignature(methodSignature);
110
106
  mtd.setImplOriginFullPosition(Position_1.FullPosition.buildFromNode(methodNode, sourceFile));
@@ -130,11 +126,11 @@ exports.buildArkMethodFromArkClass = buildArkMethodFromArkClass;
130
126
  function buildMethodName(node, declaringClass, sourceFile, declaringMethod) {
131
127
  let name = '';
132
128
  if (ohos_typescript_1.default.isFunctionDeclaration(node) || ohos_typescript_1.default.isFunctionExpression(node)) {
133
- name = node.name ? (0, StringUtils_1.cloneText)(node.name.text) : buildAnonymousMethodName(node, declaringClass);
129
+ name = node.name ? (0, StringUtils_1.cloneText)(node.name.text) : buildAnonymousMethodName(declaringClass);
134
130
  }
135
131
  else if (ohos_typescript_1.default.isFunctionTypeNode(node)) {
136
132
  //TODO: check name type
137
- name = node.name ? (0, StringUtils_1.cloneText)(node.name.getText(sourceFile)) : buildAnonymousMethodName(node, declaringClass);
133
+ name = node.name ? (0, StringUtils_1.cloneText)(node.name.getText(sourceFile)) : buildAnonymousMethodName(declaringClass);
138
134
  }
139
135
  else if (ohos_typescript_1.default.isMethodDeclaration(node) || ohos_typescript_1.default.isMethodSignature(node)) {
140
136
  if (ohos_typescript_1.default.isIdentifier(node.name)) {
@@ -172,14 +168,14 @@ function buildMethodName(node, declaringClass, sourceFile, declaringMethod) {
172
168
  name = Const_1.SETTER_PREFIX + (0, StringUtils_1.cloneText)(node.name.text);
173
169
  }
174
170
  else if (ohos_typescript_1.default.isArrowFunction(node)) {
175
- name = buildAnonymousMethodName(node, declaringClass);
171
+ name = buildAnonymousMethodName(declaringClass);
176
172
  }
177
173
  if (declaringMethod !== undefined && !declaringMethod.isDefaultArkMethod()) {
178
174
  name = buildNestedMethodName(name, declaringMethod.getName());
179
175
  }
180
176
  return name;
181
177
  }
182
- function buildAnonymousMethodName(node, declaringClass) {
178
+ function buildAnonymousMethodName(declaringClass) {
183
179
  return `${Const_1.ANONYMOUS_METHOD_PREFIX}${declaringClass.getAnonymousMethodNumber()}`;
184
180
  }
185
181
  function buildNestedMethodName(originName, declaringMethodName) {
@@ -289,8 +285,8 @@ class MethodParameter {
289
285
  setArrayElements(arrayElements) {
290
286
  this.arrayElements = arrayElements;
291
287
  }
292
- getUses() {
293
- return [];
288
+ getUses(acc = []) {
289
+ return acc;
294
290
  }
295
291
  }
296
292
  exports.MethodParameter = MethodParameter;
@@ -303,14 +299,31 @@ function needDefaultConstructorInClass(arkClass) {
303
299
  !arkClass.isDeclare());
304
300
  }
305
301
  exports.needDefaultConstructorInClass = needDefaultConstructorInClass;
302
+ /**
303
+ * On-demand variant of {@link buildDefaultConstructor} with the isLibraryClass guard
304
+ * lifted: callers decide by construction stage / SDK batch whether library classes
305
+ * get default constructors (the batch-level parameter replaces the per-class project
306
+ * name comparison on this hot path). The remaining static guards are unchanged.
307
+ */
308
+ function ensureDefaultConstructor(arkClass) {
309
+ const category = arkClass.getCategory();
310
+ if (arkClass.getMethodWithName(TSConst_1.CONSTRUCTOR_NAME) !== null ||
311
+ (category !== ArkClass_1.ClassCategory.CLASS && category !== ArkClass_1.ClassCategory.OBJECT) ||
312
+ arkClass.isDefaultArkClass() ||
313
+ arkClass.isDeclare()) {
314
+ return false;
315
+ }
316
+ return buildDefaultConstructor(arkClass, new Set(), true);
317
+ }
318
+ exports.ensureDefaultConstructor = ensureDefaultConstructor;
306
319
  function recursivelyCheckAndBuildSuperConstructor(arkClass, visited = new Set()) {
307
- if (visited.has(arkClass)) {
320
+ if (visited.has(arkClass.getClassSigID())) {
308
321
  return;
309
322
  }
310
- visited.add(arkClass);
323
+ visited.add(arkClass.getClassSigID());
311
324
  let superClass = arkClass.getSuperClass();
312
325
  while (superClass !== null) {
313
- if (visited.has(superClass)) {
326
+ if (visited.has(superClass.getClassSigID())) {
314
327
  break;
315
328
  }
316
329
  if (superClass.getMethodWithName(TSConst_1.CONSTRUCTOR_NAME) === null) {
@@ -319,16 +332,12 @@ function recursivelyCheckAndBuildSuperConstructor(arkClass, visited = new Set())
319
332
  superClass = superClass.getSuperClass();
320
333
  }
321
334
  }
322
- function buildDefaultConstructor(arkClass, visited = new Set()) {
335
+ function buildDefaultConstructor(arkClass, visited = new Set(), force = false) {
323
336
  var _a;
324
337
  recursivelyCheckAndBuildSuperConstructor(arkClass, visited);
325
- if (!needDefaultConstructorInClass(arkClass)) {
338
+ if (!force && !needDefaultConstructorInClass(arkClass)) {
326
339
  return false;
327
340
  }
328
- const defaultConstructor = new ArkMethod_1.ArkMethod();
329
- defaultConstructor.setDeclaringArkClass(arkClass);
330
- defaultConstructor.setIsGeneratedFlag(true);
331
- defaultConstructor.setImplOriginFullPosition(new Position_1.FullPosition(0, 0, 0, 0));
332
341
  const thisLocal = new Local_1.Local(TSConst_1.THIS_NAME, new Type_1.ClassType(arkClass.getSignature()));
333
342
  const thisDefStmt = new Stmt_1.ArkAssignStmt(thisLocal, new Ref_1.ArkThisRef(new Type_1.ClassType(arkClass.getSignature())));
334
343
  thisLocal.setDeclaringStmt(thisDefStmt);
@@ -353,8 +362,10 @@ function buildDefaultConstructor(arkClass, visited = new Set()) {
353
362
  const superInvokeExpr = new Expr_1.ArkInstanceInvokeExpr(thisLocal, superConstructor.getSignature(), parameterArgs);
354
363
  basicBlock.addStmt(new Stmt_1.ArkInvokeStmt(superInvokeExpr));
355
364
  }
356
- const methodSubSignature = new ArkSignature_1.MethodSubSignature(TSConst_1.CONSTRUCTOR_NAME, parameters, thisLocal.getType(), defaultConstructor.isStatic());
357
- defaultConstructor.setImplementationSignature(new ArkSignature_1.MethodSignature(arkClass.getSignature(), methodSubSignature));
365
+ const methodSubSignature = new ArkSignature_1.MethodSubSignature(TSConst_1.CONSTRUCTOR_NAME, parameters, thisLocal.getType());
366
+ const defaultConstructor = new ArkMethod_1.ArkMethod(arkClass.getClassSigID(), new ArkSignature_1.MethodSignature(arkClass.getClassSigID(), methodSubSignature));
367
+ defaultConstructor.setIsGeneratedFlag(true);
368
+ defaultConstructor.setImplOriginFullPosition(new Position_1.FullPosition(0, 0, 0, 0));
358
369
  basicBlock.addStmt(new Stmt_1.ArkReturnStmt(thisLocal));
359
370
  const cfg = new Cfg_1.Cfg();
360
371
  cfg.addBlock(basicBlock);
@@ -423,7 +434,7 @@ function addInitInConstructor(constructor) {
423
434
  }
424
435
  break;
425
436
  }
426
- const initInvokeStmt = new Stmt_1.ArkInvokeStmt(new Expr_1.ArkInstanceInvokeExpr(thisLocal, constructor.getDeclaringArkClass().getInstanceInitMethod().getSignature(), []));
437
+ const initInvokeStmt = new Stmt_1.ArkInvokeStmt(new Expr_1.ArkInstanceInvokeExpr(thisLocal, constructor.getDeclaringArkClass().getInstanceInitMethodOrNull().getSignature(), []));
427
438
  initInvokeStmt.setCfg(cfg);
428
439
  firstBlockStmts.splice(index, 0, initInvokeStmt);
429
440
  }
@@ -535,6 +546,9 @@ function replaceSuper2Constructor(constructor) {
535
546
  logger.error(`Can not find local this in constructor method ${constructor.getSignature().toString()}`);
536
547
  return;
537
548
  }
549
+ // 替换埋葬:旧 super invoke expr 被整体替换且无后续持有者——其 (UNKNOWN, super) stub 的 temp 行在此显式 retire(原每显式 super() 构造调用
550
+ // 留 1 行钉活到 dispose)。
551
+ superInvokeStmt.getInvokeExpr().retireTemp();
538
552
  const newInvokeExpr = new Expr_1.ArkInstanceInvokeExpr(base, superConstructor.getSignature(), superInvokeStmt.getInvokeExpr().getArgs());
539
553
  superInvokeStmt.replaceInvokeExpr(newInvokeExpr);
540
554
  return;
@@ -1,7 +1,8 @@
1
1
  import { ArkFile } from '../ArkFile';
2
2
  import ts from 'ohos-typescript';
3
3
  import { ArkNamespace } from '../ArkNamespace';
4
- export declare function buildArkNamespace(node: ts.ModuleDeclaration, declaringInstance: ArkFile | ArkNamespace, ns: ArkNamespace, sourceFile: ts.SourceFile): void;
4
+ import { NamespaceSignature } from '../ArkSignature';
5
+ export declare function buildNamespaceSignature(node: ts.ModuleDeclaration, declaringInstance: ArkFile | ArkNamespace): NamespaceSignature;
6
+ export declare function buildArkNamespace(node: ts.ModuleDeclaration, ns: ArkNamespace, sourceFile: ts.SourceFile): void;
5
7
  export declare function genDefaultArkClass(ns: ArkNamespace, node: ts.ModuleDeclaration, sourceFile: ts.SourceFile): void;
6
- export declare function mergeNameSpaces(arkNamespaces: ArkNamespace[]): ArkNamespace[];
7
8
  //# sourceMappingURL=ArkNamespaceBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ArkNamespaceBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/ArkNamespaceBuilder.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAY/C,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,OAAO,GAAG,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,IAAI,CAkD1J;AAiED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,IAAI,CAMhH;AAED,wBAAgB,eAAe,CAAC,aAAa,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAyB7E"}
1
+ {"version":3,"file":"ArkNamespaceBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/ArkNamespaceBuilder.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAO/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAMrD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,OAAO,GAAG,YAAY,GAAG,kBAAkB,CAMjI;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,IAAI,CAwC/G;AA0DD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,IAAI,CAMhH"}
@@ -40,10 +40,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
40
40
  return (mod && mod.__esModule) ? mod : { "default": mod };
41
41
  };
42
42
  Object.defineProperty(exports, "__esModule", { value: true });
43
- exports.mergeNameSpaces = exports.genDefaultArkClass = exports.buildArkNamespace = void 0;
43
+ exports.genDefaultArkClass = exports.buildArkNamespace = exports.buildNamespaceSignature = void 0;
44
44
  const Position_1 = require("../../base/Position");
45
45
  const ArkClassBuilder_1 = require("./ArkClassBuilder");
46
- const ArkFile_1 = require("../ArkFile");
47
46
  const ArkMethodBuilder_1 = require("./ArkMethodBuilder");
48
47
  const ohos_typescript_1 = __importDefault(require("ohos-typescript"));
49
48
  const ArkNamespace_1 = require("../ArkNamespace");
@@ -55,29 +54,26 @@ const ArkClass_1 = require("../ArkClass");
55
54
  const ArkMethod_1 = require("../ArkMethod");
56
55
  const ArkSignature_1 = require("../ArkSignature");
57
56
  const IRUtils_1 = require("../../common/IRUtils");
57
+ const SignatureCanonicalizerRegistry_1 = require("../../common/SignatureCanonicalizerRegistry");
58
58
  const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'ArkNamespaceBuilder');
59
- function buildArkNamespace(node, declaringInstance, ns, sourceFile) {
60
- var _a;
59
+ function buildNamespaceSignature(node, declaringInstance) {
60
+ const namespaceName = (0, StringUtils_1.cloneText)(node.name.text);
61
+ if (declaringInstance instanceof ArkNamespace_1.ArkNamespace) {
62
+ return new ArkSignature_1.NamespaceSignature(namespaceName, declaringInstance.getDeclaringFileID(), declaringInstance.getNamespaceSigID());
63
+ }
64
+ return new ArkSignature_1.NamespaceSignature(namespaceName, declaringInstance.getFileSigID());
65
+ }
66
+ exports.buildNamespaceSignature = buildNamespaceSignature;
67
+ function buildArkNamespace(node, ns, sourceFile) {
61
68
  // modifiers
62
69
  if (node.modifiers) {
63
70
  ns.setModifiers((0, builderUtils_1.buildModifiers)(node));
64
71
  ns.setDecorators((0, builderUtils_1.buildDecorators)(node, sourceFile));
65
72
  }
66
- if (declaringInstance instanceof ArkFile_1.ArkFile) {
67
- ns.setDeclaringArkFile(declaringInstance);
68
- }
69
- else {
70
- ns.setDeclaringArkNamespace(declaringInstance);
71
- ns.setDeclaringArkFile(declaringInstance.getDeclaringArkFile());
72
- }
73
- ns.setDeclaringInstance(declaringInstance);
74
- const namespaceName = (0, StringUtils_1.cloneText)(node.name.text);
75
- const namespaceSignature = new ArkSignature_1.NamespaceSignature(namespaceName, ns.getDeclaringArkFile().getFileSignature(), ((_a = ns.getDeclaringArkNamespace()) === null || _a === void 0 ? void 0 : _a.getSignature()) || null);
76
- ns.setSignature(namespaceSignature);
77
73
  // set line and column
78
74
  const { line, character } = ohos_typescript_1.default.getLineAndCharacterOfPosition(sourceFile, node.getStart(sourceFile));
79
75
  const endPos = ohos_typescript_1.default.getLineAndCharacterOfPosition(sourceFile, node.getEnd());
80
- ns.setOriginFullPositions([new Position_1.FullPosition(line + 1, character + 1, endPos.line + 1, endPos.character + 1)]);
76
+ ns.setOriginFullPositions([...ns.getOriginFullPositions(), new Position_1.FullPosition(line + 1, character + 1, endPos.line + 1, endPos.character + 1)]);
81
77
  genDefaultArkClass(ns, node, sourceFile);
82
78
  // build ns member
83
79
  if (node.body) {
@@ -88,9 +84,13 @@ function buildArkNamespace(node, declaringInstance, ns, sourceFile) {
88
84
  //TODO: Check
89
85
  else if (ohos_typescript_1.default.isModuleDeclaration(node.body)) {
90
86
  logger.trace('This ModuleBody is an NamespaceDeclaration.');
91
- let childNs = new ArkNamespace_1.ArkNamespace();
92
- buildArkNamespace(node.body, ns, childNs, sourceFile);
93
- ns.addNamespace(childNs);
87
+ const namespaceSig = buildNamespaceSignature(node.body, ns);
88
+ let childNs = SignatureCanonicalizerRegistry_1.SignatureCanonicalizerRegistry.getInstance().getNamespaceBySig(namespaceSig);
89
+ if (!childNs) {
90
+ childNs = new ArkNamespace_1.ArkNamespace(ns.getDeclaringFileID(), ns.getNamespaceSigID(), namespaceSig);
91
+ ns.addNamespace(childNs);
92
+ }
93
+ buildArkNamespace(node.body, childNs, sourceFile);
94
94
  }
95
95
  else if (ohos_typescript_1.default.isIdentifier(node.body)) {
96
96
  logger.warn('ModuleBody is Identifier');
@@ -108,34 +108,40 @@ exports.buildArkNamespace = buildArkNamespace;
108
108
  // TODO: check and update
109
109
  function buildNamespaceMembers(node, namespace, sourceFile) {
110
110
  const statements = node.statements;
111
- const nestedNamespaces = [];
112
111
  statements.forEach(child => {
112
+ if (ohos_typescript_1.default.isTypeAliasDeclaration(child)) {
113
+ (0, ArkClassBuilder_1.registerTypeAliasTypeLiteral)(child);
114
+ }
113
115
  if (ohos_typescript_1.default.isModuleDeclaration(child)) {
114
- let childNs = new ArkNamespace_1.ArkNamespace();
115
- childNs.setDeclaringArkNamespace(namespace);
116
- childNs.setDeclaringArkFile(namespace.getDeclaringArkFile());
117
- buildArkNamespace(child, namespace, childNs, sourceFile);
118
- nestedNamespaces.push(childNs);
116
+ const childNsSig = buildNamespaceSignature(child, namespace);
117
+ let childNs = SignatureCanonicalizerRegistry_1.SignatureCanonicalizerRegistry.getInstance().getNamespaceBySig(childNsSig);
118
+ if (!childNs) {
119
+ childNs = new ArkNamespace_1.ArkNamespace(namespace.getDeclaringFileID(), namespace.getNamespaceSigID(), childNsSig);
120
+ namespace.addNamespace(childNs);
121
+ }
122
+ buildArkNamespace(child, childNs, sourceFile);
123
+ if (childNs.isExported()) {
124
+ namespace.addExportInfo((0, ArkExportBuilder_1.buildExportInfo)(childNs, namespace.getDeclaringArkFile(), Position_1.FullPosition.buildFromNode(child, sourceFile)));
125
+ }
119
126
  }
120
127
  else if (ohos_typescript_1.default.isClassDeclaration(child) || ohos_typescript_1.default.isInterfaceDeclaration(child) || ohos_typescript_1.default.isEnumDeclaration(child) || ohos_typescript_1.default.isStructDeclaration(child)) {
121
- let cls = new ArkClass_1.ArkClass();
122
- (0, ArkClassBuilder_1.buildNormalArkClassFromArkNamespace)(child, namespace, cls, sourceFile);
128
+ const classSig = (0, ArkClassBuilder_1.buildClassSignature)(child, namespace);
129
+ let cls = SignatureCanonicalizerRegistry_1.SignatureCanonicalizerRegistry.getInstance().getClassBySig(classSig);
130
+ if (!cls) {
131
+ cls = new ArkClass_1.ArkClass(namespace.getDeclaringFileID(), namespace.getNamespaceSigID(), classSig);
132
+ namespace.addArkClass(cls);
133
+ }
134
+ (0, ArkClassBuilder_1.buildNormalArkClassFromArkNamespace)(child, cls, sourceFile);
123
135
  if (cls.isExported()) {
124
136
  namespace.addExportInfo((0, ArkExportBuilder_1.buildExportInfo)(cls, namespace.getDeclaringArkFile(), Position_1.FullPosition.buildFromNode(child, sourceFile)));
125
137
  }
126
138
  }
127
139
  // TODO: Check
128
- else if (ohos_typescript_1.default.isMethodDeclaration(child)) {
140
+ else if (ohos_typescript_1.default.isMethodDeclaration(child) || ohos_typescript_1.default.isFunctionDeclaration(child)) {
129
141
  logger.trace('This is a MethodDeclaration in ArkNamespace.');
130
- let mthd = new ArkMethod_1.ArkMethod();
131
- (0, ArkMethodBuilder_1.buildArkMethodFromArkClass)(child, namespace.getDefaultClass(), mthd, sourceFile);
132
- if (mthd.isExported()) {
133
- namespace.addExportInfo((0, ArkExportBuilder_1.buildExportInfo)(mthd, namespace.getDeclaringArkFile(), Position_1.FullPosition.buildFromNode(child, sourceFile)));
134
- }
135
- }
136
- else if (ohos_typescript_1.default.isFunctionDeclaration(child)) {
137
- let mthd = new ArkMethod_1.ArkMethod();
138
- (0, ArkMethodBuilder_1.buildArkMethodFromArkClass)(child, namespace.getDefaultClass(), mthd, sourceFile);
142
+ const defaultClass = namespace.getDefaultClass();
143
+ let mthd = new ArkMethod_1.ArkMethod(defaultClass.getClassSigID());
144
+ (0, ArkMethodBuilder_1.buildArkMethodFromArkClass)(child, defaultClass, mthd, sourceFile);
139
145
  if (mthd.isExported()) {
140
146
  namespace.addExportInfo((0, ArkExportBuilder_1.buildExportInfo)(mthd, namespace.getDeclaringArkFile(), Position_1.FullPosition.buildFromNode(child, sourceFile)));
141
147
  }
@@ -154,49 +160,11 @@ function buildNamespaceMembers(node, namespace, sourceFile) {
154
160
  // join default method
155
161
  }
156
162
  });
157
- const nestedMergedNameSpaces = mergeNameSpaces(nestedNamespaces);
158
- nestedMergedNameSpaces.forEach(nestedNameSpace => {
159
- namespace.addNamespace(nestedNameSpace);
160
- if (nestedNameSpace.isExport()) {
161
- const positions = nestedNameSpace.getOriginFullPositions();
162
- if (positions.length > 0) {
163
- namespace.addExportInfo((0, ArkExportBuilder_1.buildExportInfo)(nestedNameSpace, namespace.getDeclaringArkFile(), positions[0]));
164
- }
165
- }
166
- });
167
163
  }
168
164
  function genDefaultArkClass(ns, node, sourceFile) {
169
- let defaultClass = new ArkClass_1.ArkClass();
170
- (0, ArkClassBuilder_1.buildDefaultArkClassFromArkNamespace)(ns, defaultClass, node, sourceFile);
165
+ let defaultClass = new ArkClass_1.ArkClass(ns.getDeclaringFileID(), ns.getNamespaceSigID());
166
+ (0, ArkClassBuilder_1.buildDefaultArkClass)(defaultClass, sourceFile, node);
171
167
  ns.setDefaultClass(defaultClass);
172
168
  ns.addArkClass(defaultClass);
173
169
  }
174
170
  exports.genDefaultArkClass = genDefaultArkClass;
175
- function mergeNameSpaces(arkNamespaces) {
176
- const namespaceMap = new Map();
177
- for (let i = 0; i < arkNamespaces.length; i++) {
178
- const currNamespace = arkNamespaces[i];
179
- const currName = currNamespace.getName();
180
- if (namespaceMap.has(currName)) {
181
- const prevNamespace = namespaceMap.get(currName);
182
- const nestedPrevNamespaces = prevNamespace.getNamespaces();
183
- const nestedCurrNamespaces = currNamespace.getNamespaces();
184
- const nestedMergedNameSpaces = mergeNameSpaces([...nestedPrevNamespaces, ...nestedCurrNamespaces]);
185
- nestedMergedNameSpaces.forEach(nestedNameSpace => {
186
- prevNamespace.addNamespace(nestedNameSpace);
187
- });
188
- const classes = currNamespace.getClasses();
189
- classes.forEach(cls => {
190
- prevNamespace.addArkClass(cls);
191
- });
192
- const prevLineColPairs = prevNamespace.getOriginFullPositions();
193
- const currLineColPairs = currNamespace.getOriginFullPositions();
194
- prevNamespace.setOriginFullPositions([...prevLineColPairs, ...currLineColPairs]);
195
- }
196
- else {
197
- namespaceMap.set(currName, currNamespace);
198
- }
199
- }
200
- return [...namespaceMap.values()];
201
- }
202
- exports.mergeNameSpaces = mergeNameSpaces;
@@ -1,9 +1,18 @@
1
1
  import { ClassSignature, FieldSignature, MethodSignature, MethodSubSignature } from '../ArkSignature';
2
2
  export declare class ArkSignatureBuilder {
3
+ /**
4
+ * Stub 缓存白名单(组件名域):系统组件(isEtsSystemComponent 动态集合,SDK 构建期灌入全量)+ 组件常量(自定义组件折叠名 / If / Repeat)。
5
+ * 白名单外的名字(new 表达式类名、C++ 类型名等任意来源)不缓存——每次 new,行为不变。
6
+ */
7
+ private static readonly CACHEABLE_COMPONENT_STUBS;
8
+ /** 白名单内同名 stub 共享实例。 */
9
+ private static readonly componentStubCache;
3
10
  static buildMethodSignatureFromClassNameAndMethodName(className: string, methodName: string, staticFlag?: boolean): MethodSignature;
4
11
  static buildMethodSignatureFromMethodName(methodName: string, staticFlag?: boolean): MethodSignature;
5
12
  static buildMethodSubSignatureFromMethodName(methodName: string, staticFlag?: boolean): MethodSubSignature;
6
13
  static buildClassSignatureFromClassName(className: string): ClassSignature;
14
+ /** @internal Registry dispose 同点清理(Scene.dispose/clear 调用)。 */
15
+ static clearComponentStubCache(): void;
7
16
  static buildFieldSignatureFromFieldName(fieldName: string, staticFlag?: boolean): FieldSignature;
8
17
  }
9
18
  //# sourceMappingURL=ArkSignatureBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ArkSignatureBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/ArkSignatureBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAiB,eAAe,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrH,qBAAa,mBAAmB;WACd,8CAA8C,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,eAAe;WAMnI,kCAAkC,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,eAAe;WAKpG,qCAAqC,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,kBAAkB;WAI1G,gCAAgC,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc;WAInE,gCAAgC,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,cAAc;CAGjH"}
1
+ {"version":3,"file":"ArkSignatureBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/ArkSignatureBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAItG,qBAAa,mBAAmB;IAC5B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAA2E;IAE5H,wBAAwB;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAqC;WAEjE,8CAA8C,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,eAAe;WAQnI,kCAAkC,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,eAAe;WAKpG,qCAAqC,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,kBAAkB;WAI1G,gCAAgC,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc;IAajF,+DAA+D;WACjD,uBAAuB,IAAI,IAAI;WAI/B,gCAAgC,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,cAAc;CAGjH"}