arkanalyzer 1.0.86 → 1.0.88

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 (422) hide show
  1. package/README.en.md +69 -65
  2. package/README.md +56 -70
  3. package/config/arkanalyzer.json +7 -2
  4. package/docs/cppFrontend/ArkAnalyzer-cpp_usage_guide.md +245 -0
  5. package/docs/cppFrontend/cpp_frontend_build_guide.md +126 -0
  6. package/docs/cppFrontend/cpp_frontend_user_guide.md +175 -0
  7. package/docs/cppFrontend/img.png +0 -0
  8. package/docs/cppFrontend/img_1.png +0 -0
  9. package/docs/cppFrontend/img_10.png +0 -0
  10. package/docs/cppFrontend/img_11.png +0 -0
  11. package/docs/cppFrontend/img_12.png +0 -0
  12. package/docs/cppFrontend/img_13.png +0 -0
  13. package/docs/cppFrontend/img_14.png +0 -0
  14. package/docs/cppFrontend/img_15.png +0 -0
  15. package/docs/cppFrontend/img_16.png +0 -0
  16. package/docs/cppFrontend/img_17.png +0 -0
  17. package/docs/cppFrontend/img_18.png +0 -0
  18. package/docs/cppFrontend/img_19.png +0 -0
  19. package/docs/cppFrontend/img_2.png +0 -0
  20. package/docs/cppFrontend/img_20.png +0 -0
  21. package/docs/cppFrontend/img_21.png +0 -0
  22. package/docs/cppFrontend/img_22.png +0 -0
  23. package/docs/cppFrontend/img_23.png +0 -0
  24. package/docs/cppFrontend/img_3.png +0 -0
  25. package/docs/cppFrontend/img_4.png +0 -0
  26. package/docs/cppFrontend/img_5.png +0 -0
  27. package/docs/cppFrontend/img_6.png +0 -0
  28. package/docs/cppFrontend/img_7.png +0 -0
  29. package/docs/cppFrontend/img_8.png +0 -0
  30. package/docs/cppFrontend/img_9.png +0 -0
  31. package/docs/sig_programanalysis.en.md +66 -0
  32. package/docs/sig_programanalysis.md +73 -0
  33. package/lib/Config.d.ts +35 -1
  34. package/lib/Config.d.ts.map +1 -1
  35. package/lib/Config.js +91 -2
  36. package/lib/Scene.d.ts +25 -2
  37. package/lib/Scene.d.ts.map +1 -1
  38. package/lib/Scene.js +151 -44
  39. package/lib/callgraph/algorithm/AbstractAnalysis.d.ts +4 -3
  40. package/lib/callgraph/algorithm/AbstractAnalysis.d.ts.map +1 -1
  41. package/lib/callgraph/algorithm/AbstractAnalysis.js +17 -17
  42. package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts +6 -1
  43. package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts.map +1 -1
  44. package/lib/callgraph/algorithm/RapidTypeAnalysis.js +117 -14
  45. package/lib/callgraph/common/Statistics.d.ts +4 -2
  46. package/lib/callgraph/common/Statistics.d.ts.map +1 -1
  47. package/lib/callgraph/common/Statistics.js +14 -2
  48. package/lib/callgraph/model/CallGraph.d.ts +12 -8
  49. package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
  50. package/lib/callgraph/model/CallGraph.js +53 -29
  51. package/lib/callgraph/model/builder/CallGraphBuilder.d.ts +1 -0
  52. package/lib/callgraph/model/builder/CallGraphBuilder.d.ts.map +1 -1
  53. package/lib/callgraph/model/builder/CallGraphBuilder.js +5 -1
  54. package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
  55. package/lib/callgraph/pointerAnalysis/Pag.js +3 -0
  56. package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +4 -2
  57. package/lib/cli/cli.d.ts +3 -0
  58. package/lib/cli/cli.d.ts.map +1 -0
  59. package/lib/cli/cli.js +82 -0
  60. package/lib/cli/commands/cg.d.ts +53 -0
  61. package/lib/cli/commands/cg.d.ts.map +1 -0
  62. package/lib/cli/commands/cg.js +404 -0
  63. package/lib/cli/commands/index.d.ts +6 -0
  64. package/lib/cli/commands/index.d.ts.map +1 -0
  65. package/lib/cli/commands/index.js +64 -0
  66. package/lib/cli/commands/ir.d.ts +26 -0
  67. package/lib/cli/commands/ir.d.ts.map +1 -0
  68. package/lib/cli/commands/ir.js +94 -0
  69. package/lib/core/base/Constant.d.ts +1 -1
  70. package/lib/core/base/Constant.d.ts.map +1 -1
  71. package/lib/core/base/Constant.js +1 -1
  72. package/lib/core/base/Expr.d.ts +29 -5
  73. package/lib/core/base/Expr.d.ts.map +1 -1
  74. package/lib/core/base/Expr.js +145 -23
  75. package/lib/core/base/Position.d.ts +14 -0
  76. package/lib/core/base/Position.d.ts.map +1 -1
  77. package/lib/core/base/Position.js +27 -0
  78. package/lib/core/base/Ref.d.ts +1 -0
  79. package/lib/core/base/Ref.d.ts.map +1 -1
  80. package/lib/core/base/Ref.js +4 -1
  81. package/lib/core/base/Type.d.ts +64 -24
  82. package/lib/core/base/Type.d.ts.map +1 -1
  83. package/lib/core/base/Type.js +144 -49
  84. package/lib/core/common/ArkError.d.ts +26 -2
  85. package/lib/core/common/ArkError.d.ts.map +1 -1
  86. package/lib/core/common/ArkError.js +56 -2
  87. package/lib/core/common/ArkIRTransformer.d.ts +11 -10
  88. package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
  89. package/lib/core/common/ArkIRTransformer.js +1 -1
  90. package/lib/core/common/ArkValueTransformer.d.ts +14 -12
  91. package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
  92. package/lib/core/common/ArkValueTransformer.js +1 -5
  93. package/lib/core/common/Const.d.ts +4 -0
  94. package/lib/core/common/Const.d.ts.map +1 -1
  95. package/lib/core/common/Const.js +5 -1
  96. package/lib/core/common/DummyMainCreater.d.ts +23 -13
  97. package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
  98. package/lib/core/common/DummyMainCreater.js +66 -43
  99. package/lib/core/common/EtsConst.d.ts +11 -0
  100. package/lib/core/common/EtsConst.d.ts.map +1 -1
  101. package/lib/core/common/EtsConst.js +12 -1
  102. package/lib/core/common/IRInference.d.ts.map +1 -1
  103. package/lib/core/common/IRInference.js +6 -2
  104. package/lib/core/common/IRUtils.d.ts.map +1 -1
  105. package/lib/core/common/IRUtils.js +3 -33
  106. package/lib/core/common/ModelUtils.d.ts +4 -7
  107. package/lib/core/common/ModelUtils.d.ts.map +1 -1
  108. package/lib/core/common/ModelUtils.js +77 -110
  109. package/lib/core/common/SdkUtils.d.ts +1 -1
  110. package/lib/core/common/SdkUtils.d.ts.map +1 -1
  111. package/lib/core/common/SdkUtils.js +14 -5
  112. package/lib/core/common/TypeInference.d.ts.map +1 -1
  113. package/lib/core/common/TypeInference.js +9 -3
  114. package/lib/core/graph/BaseExplicitGraph.d.ts +4 -4
  115. package/lib/core/graph/BaseExplicitGraph.d.ts.map +1 -1
  116. package/lib/core/graph/BaseExplicitGraph.js +15 -8
  117. package/lib/core/graph/BasicBlock.d.ts.map +1 -1
  118. package/lib/core/graph/Scc.d.ts.map +1 -1
  119. package/lib/core/graph/Scc.js +7 -2
  120. package/lib/core/graph/builder/CfgBuilder.d.ts +10 -7
  121. package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
  122. package/lib/core/graph/builder/CfgBuilder.js +12 -5
  123. package/lib/core/inference/Inference.d.ts.map +1 -1
  124. package/lib/core/inference/Inference.js +7 -0
  125. package/lib/core/inference/ModelInference.d.ts +1 -1
  126. package/lib/core/inference/ModelInference.d.ts.map +1 -1
  127. package/lib/core/inference/ValueInference.d.ts +3 -2
  128. package/lib/core/inference/ValueInference.d.ts.map +1 -1
  129. package/lib/core/inference/ValueInference.js +64 -12
  130. package/lib/core/inference/abc/AbcInference.d.ts +28 -2
  131. package/lib/core/inference/abc/AbcInference.d.ts.map +1 -1
  132. package/lib/core/inference/abc/AbcInference.js +105 -4
  133. package/lib/core/model/ArkBaseModel.d.ts +14 -1
  134. package/lib/core/model/ArkBaseModel.d.ts.map +1 -1
  135. package/lib/core/model/ArkBaseModel.js +61 -2
  136. package/lib/core/model/ArkBody.d.ts.map +1 -1
  137. package/lib/core/model/ArkBody.js +1 -3
  138. package/lib/core/model/ArkClass.d.ts +25 -2
  139. package/lib/core/model/ArkClass.d.ts.map +1 -1
  140. package/lib/core/model/ArkClass.js +72 -30
  141. package/lib/core/model/ArkField.d.ts.map +1 -1
  142. package/lib/core/model/ArkField.js +3 -1
  143. package/lib/core/model/ArkFile.d.ts +4 -1
  144. package/lib/core/model/ArkFile.d.ts.map +1 -1
  145. package/lib/core/model/ArkFile.js +44 -3
  146. package/lib/core/model/ArkImport.d.ts.map +1 -1
  147. package/lib/core/model/ArkImport.js +9 -1
  148. package/lib/core/model/ArkMetadata.d.ts +32 -1
  149. package/lib/core/model/ArkMetadata.d.ts.map +1 -1
  150. package/lib/core/model/ArkMetadata.js +28 -2
  151. package/lib/core/model/ArkMethod.d.ts +5 -0
  152. package/lib/core/model/ArkMethod.d.ts.map +1 -1
  153. package/lib/core/model/ArkMethod.js +33 -1
  154. package/lib/core/model/ArkNamespace.d.ts +2 -0
  155. package/lib/core/model/ArkNamespace.d.ts.map +1 -1
  156. package/lib/core/model/ArkNamespace.js +11 -0
  157. package/lib/core/model/ArkSignature.d.ts +3 -3
  158. package/lib/core/model/ArkSignature.d.ts.map +1 -1
  159. package/lib/core/model/ArkSignature.js +14 -9
  160. package/lib/core/model/builder/ArkClassBuilder.d.ts +2 -0
  161. package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
  162. package/lib/core/model/builder/ArkClassBuilder.js +3 -3
  163. package/lib/core/model/builder/ArkMetadataBuilder.d.ts +21 -0
  164. package/lib/core/model/builder/ArkMetadataBuilder.d.ts.map +1 -0
  165. package/lib/core/model/builder/ArkMetadataBuilder.js +160 -0
  166. package/lib/core/model/builder/ArkMethodBuilder.d.ts +4 -1
  167. package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
  168. package/lib/core/model/builder/ArkMethodBuilder.js +50 -29
  169. package/lib/core/model/builder/ArkNamespaceBuilder.d.ts +1 -0
  170. package/lib/core/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
  171. package/lib/core/model/builder/ArkNamespaceBuilder.js +2 -1
  172. package/lib/core/model/builder/BodyBuilder.d.ts +4 -0
  173. package/lib/core/model/builder/BodyBuilder.d.ts.map +1 -1
  174. package/lib/core/model/builder/builderUtils.d.ts +1 -0
  175. package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
  176. package/lib/core/model/builder/builderUtils.js +7 -3
  177. package/lib/frontend/cppFrontend/ast/ArkCxxAstNode.d.ts +296 -0
  178. package/lib/frontend/cppFrontend/ast/ArkCxxAstNode.d.ts.map +1 -0
  179. package/lib/frontend/cppFrontend/ast/ArkCxxAstNode.js +145 -0
  180. package/lib/frontend/cppFrontend/ast/astJsonNapi/napiApi.d.ts +8 -0
  181. package/lib/frontend/cppFrontend/ast/astJsonNapi/napiApi.d.ts.map +1 -0
  182. package/lib/frontend/cppFrontend/ast/astJsonNapi/napiApi.js +90 -0
  183. package/lib/frontend/cppFrontend/ast/astJsonNapi/napiRunner.d.ts +8 -0
  184. package/lib/frontend/cppFrontend/ast/astJsonNapi/napiRunner.d.ts.map +1 -0
  185. package/lib/frontend/cppFrontend/ast/astJsonNapi/napiRunner.js +183 -0
  186. package/lib/frontend/cppFrontend/ast/astParser.d.ts +25 -0
  187. package/lib/frontend/cppFrontend/ast/astParser.d.ts.map +1 -0
  188. package/lib/frontend/cppFrontend/ast/astParser.js +280 -0
  189. package/lib/frontend/cppFrontend/ast/astUtils.d.ts +18 -0
  190. package/lib/frontend/cppFrontend/ast/astUtils.d.ts.map +1 -0
  191. package/lib/frontend/cppFrontend/ast/astUtils.js +158 -0
  192. package/lib/frontend/cppFrontend/ast/const.d.ts +17 -0
  193. package/lib/frontend/cppFrontend/ast/const.d.ts.map +1 -0
  194. package/lib/frontend/cppFrontend/ast/const.js +58 -0
  195. package/lib/frontend/cppFrontend/ast/index.d.ts +5 -0
  196. package/lib/frontend/cppFrontend/ast/index.d.ts.map +1 -0
  197. package/lib/frontend/cppFrontend/ast/index.js +31 -0
  198. package/lib/frontend/cppFrontend/base/Constant.d.ts +9 -0
  199. package/lib/frontend/cppFrontend/base/Constant.d.ts.map +1 -0
  200. package/lib/frontend/cppFrontend/base/Constant.js +33 -0
  201. package/lib/frontend/cppFrontend/base/Expr.d.ts +174 -0
  202. package/lib/frontend/cppFrontend/base/Expr.d.ts.map +1 -0
  203. package/lib/frontend/cppFrontend/base/Expr.js +530 -0
  204. package/lib/frontend/cppFrontend/base/Ref.d.ts +25 -0
  205. package/lib/frontend/cppFrontend/base/Ref.d.ts.map +1 -0
  206. package/lib/frontend/cppFrontend/base/Ref.js +53 -0
  207. package/lib/frontend/cppFrontend/base/Trap.d.ts +8 -0
  208. package/lib/frontend/cppFrontend/base/Trap.d.ts.map +1 -0
  209. package/lib/frontend/cppFrontend/base/Trap.js +28 -0
  210. package/lib/frontend/cppFrontend/base/Type.d.ts +264 -0
  211. package/lib/frontend/cppFrontend/base/Type.d.ts.map +1 -0
  212. package/lib/frontend/cppFrontend/base/Type.js +600 -0
  213. package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts +109 -0
  214. package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts.map +1 -0
  215. package/lib/frontend/cppFrontend/common/ArkIRTransformer.js +925 -0
  216. package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts +477 -0
  217. package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts.map +1 -0
  218. package/lib/frontend/cppFrontend/common/ArkValueTransformer.js +2746 -0
  219. package/lib/frontend/cppFrontend/common/Builtin.d.ts +57 -0
  220. package/lib/frontend/cppFrontend/common/Builtin.d.ts.map +1 -0
  221. package/lib/frontend/cppFrontend/common/Builtin.js +106 -0
  222. package/lib/frontend/cppFrontend/common/IRInference.d.ts +94 -0
  223. package/lib/frontend/cppFrontend/common/IRInference.d.ts.map +1 -0
  224. package/lib/frontend/cppFrontend/common/IRInference.js +1087 -0
  225. package/lib/frontend/cppFrontend/common/IRUtils.d.ts +23 -0
  226. package/lib/frontend/cppFrontend/common/IRUtils.d.ts.map +1 -0
  227. package/lib/frontend/cppFrontend/common/IRUtils.js +168 -0
  228. package/lib/frontend/cppFrontend/common/ModelUtils.d.ts +44 -0
  229. package/lib/frontend/cppFrontend/common/ModelUtils.d.ts.map +1 -0
  230. package/lib/frontend/cppFrontend/common/ModelUtils.js +567 -0
  231. package/lib/frontend/cppFrontend/common/TypeInference.d.ts +278 -0
  232. package/lib/frontend/cppFrontend/common/TypeInference.d.ts.map +1 -0
  233. package/lib/frontend/cppFrontend/common/TypeInference.js +1354 -0
  234. package/lib/frontend/cppFrontend/common/ValueUtil.d.ts +16 -0
  235. package/lib/frontend/cppFrontend/common/ValueUtil.d.ts.map +1 -0
  236. package/lib/frontend/cppFrontend/common/ValueUtil.js +61 -0
  237. package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts +182 -0
  238. package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts.map +1 -0
  239. package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.js +1435 -0
  240. package/lib/frontend/cppFrontend/graph/builder/ConditionBuilder.d.ts +21 -0
  241. package/lib/frontend/cppFrontend/graph/builder/ConditionBuilder.d.ts.map +1 -0
  242. package/lib/frontend/cppFrontend/graph/builder/ConditionBuilder.js +303 -0
  243. package/lib/frontend/cppFrontend/graph/builder/IfBuilder.d.ts +15 -0
  244. package/lib/frontend/cppFrontend/graph/builder/IfBuilder.d.ts.map +1 -0
  245. package/lib/frontend/cppFrontend/graph/builder/IfBuilder.js +161 -0
  246. package/lib/frontend/cppFrontend/graph/builder/LoopBuilder.d.ts +21 -0
  247. package/lib/frontend/cppFrontend/graph/builder/LoopBuilder.d.ts.map +1 -0
  248. package/lib/frontend/cppFrontend/graph/builder/LoopBuilder.js +261 -0
  249. package/lib/frontend/cppFrontend/graph/builder/SwitchBuilder.d.ts +12 -0
  250. package/lib/frontend/cppFrontend/graph/builder/SwitchBuilder.d.ts.map +1 -0
  251. package/lib/frontend/cppFrontend/graph/builder/SwitchBuilder.js +155 -0
  252. package/lib/frontend/cppFrontend/graph/builder/TrapBuilder.d.ts +29 -0
  253. package/lib/frontend/cppFrontend/graph/builder/TrapBuilder.d.ts.map +1 -0
  254. package/lib/frontend/cppFrontend/graph/builder/TrapBuilder.js +302 -0
  255. package/lib/frontend/cppFrontend/inference/CxxInference.d.ts +10 -0
  256. package/lib/frontend/cppFrontend/inference/CxxInference.d.ts.map +1 -0
  257. package/lib/frontend/cppFrontend/inference/CxxInference.js +41 -0
  258. package/lib/frontend/cppFrontend/inference/CxxModelInference.d.ts +28 -0
  259. package/lib/frontend/cppFrontend/inference/CxxModelInference.d.ts.map +1 -0
  260. package/lib/frontend/cppFrontend/inference/CxxModelInference.js +98 -0
  261. package/lib/frontend/cppFrontend/inference/CxxValueInference.d.ts +20 -0
  262. package/lib/frontend/cppFrontend/inference/CxxValueInference.d.ts.map +1 -0
  263. package/lib/frontend/cppFrontend/inference/CxxValueInference.js +128 -0
  264. package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts +11 -0
  265. package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts.map +1 -0
  266. package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.js +413 -0
  267. package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts +5 -0
  268. package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts.map +1 -0
  269. package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.js +61 -0
  270. package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts +17 -0
  271. package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts.map +1 -0
  272. package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.js +284 -0
  273. package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.d.ts +6 -0
  274. package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.d.ts.map +1 -0
  275. package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.js +57 -0
  276. package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts +14 -0
  277. package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts.map +1 -0
  278. package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.js +422 -0
  279. package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts +8 -0
  280. package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts.map +1 -0
  281. package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.js +194 -0
  282. package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts +59 -0
  283. package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts.map +1 -0
  284. package/lib/frontend/cppFrontend/model/builder/BodyBuilder.js +605 -0
  285. package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts +46 -0
  286. package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts.map +1 -0
  287. package/lib/frontend/cppFrontend/model/builder/builderUtils.js +499 -0
  288. package/lib/frontend/cppFrontend/utils/cmakeUtils.d.ts +44 -0
  289. package/lib/frontend/cppFrontend/utils/cmakeUtils.d.ts.map +1 -0
  290. package/lib/frontend/cppFrontend/utils/cmakeUtils.js +240 -0
  291. package/lib/index.d.ts +2 -1
  292. package/lib/index.d.ts.map +1 -1
  293. package/lib/index.js +8 -1
  294. package/lib/node_modules/ohos-typescript/.ohos-typescript-version +1 -0
  295. package/{node_modules → lib/node_modules}/ohos-typescript/package.json +2 -1
  296. package/lib/save/CGJsonPrinter.d.ts +8 -0
  297. package/lib/save/CGJsonPrinter.d.ts.map +1 -0
  298. package/lib/save/CGJsonPrinter.js +41 -0
  299. package/lib/save/GraphPrinter.js +2 -2
  300. package/lib/save/json/JsonDto.d.ts +86 -2
  301. package/lib/save/json/JsonDto.d.ts.map +1 -1
  302. package/lib/save/json/JsonSerialization.d.ts +1 -1
  303. package/lib/save/json/JsonSerialization.d.ts.map +1 -1
  304. package/lib/save/json/JsonSerialization.js +235 -145
  305. package/lib/save/source/SourceStmt.d.ts.map +1 -1
  306. package/lib/save/source/SourceStmt.js +3 -1
  307. package/lib/save/source/SourceTransformer.d.ts.map +1 -1
  308. package/lib/save/source/SourceTransformer.js +0 -3
  309. package/lib/utils/CxxSceneUtils.d.ts +11 -0
  310. package/lib/utils/CxxSceneUtils.d.ts.map +1 -0
  311. package/lib/utils/CxxSceneUtils.js +178 -0
  312. package/lib/utils/FileUtils.d.ts +8 -8
  313. package/lib/utils/FileUtils.d.ts.map +1 -1
  314. package/lib/utils/FileUtils.js +35 -45
  315. package/lib/utils/LRUCacheDecorator.d.ts +20 -0
  316. package/lib/utils/LRUCacheDecorator.d.ts.map +1 -0
  317. package/lib/utils/LRUCacheDecorator.js +89 -0
  318. package/lib/utils/ModuleUtils.d.ts +39 -0
  319. package/lib/utils/ModuleUtils.d.ts.map +1 -0
  320. package/lib/utils/ModuleUtils.js +261 -0
  321. package/package.json +13 -7
  322. /package/{node_modules → lib/node_modules}/ohos-typescript/LICENSE +0 -0
  323. /package/{node_modules → lib/node_modules}/ohos-typescript/README.OpenSource +0 -0
  324. /package/{node_modules → lib/node_modules}/ohos-typescript/README.md +0 -0
  325. /package/{node_modules → lib/node_modules}/ohos-typescript/SECURITY.md +0 -0
  326. /package/{node_modules → lib/node_modules}/ohos-typescript/ThirdPartyNoticeText.txt +0 -0
  327. /package/{node_modules → lib/node_modules}/ohos-typescript/bin/tsc +0 -0
  328. /package/{node_modules → lib/node_modules}/ohos-typescript/bin/tsserver +0 -0
  329. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/README.md +0 -0
  330. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/cancellationToken.js +0 -0
  331. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/cs/diagnosticMessages.generated.json +0 -0
  332. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/de/diagnosticMessages.generated.json +0 -0
  333. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/es/diagnosticMessages.generated.json +0 -0
  334. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/fr/diagnosticMessages.generated.json +0 -0
  335. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/it/diagnosticMessages.generated.json +0 -0
  336. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/ja/diagnosticMessages.generated.json +0 -0
  337. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/ko/diagnosticMessages.generated.json +0 -0
  338. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.d.ts +0 -0
  339. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.dom.d.ts +0 -0
  340. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.dom.iterable.d.ts +0 -0
  341. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.collection.d.ts +0 -0
  342. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.core.d.ts +0 -0
  343. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.d.ts +0 -0
  344. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.generator.d.ts +0 -0
  345. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.iterable.d.ts +0 -0
  346. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.promise.d.ts +0 -0
  347. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.proxy.d.ts +0 -0
  348. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.reflect.d.ts +0 -0
  349. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.symbol.d.ts +0 -0
  350. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.symbol.wellknown.d.ts +0 -0
  351. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2016.array.include.d.ts +0 -0
  352. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2016.d.ts +0 -0
  353. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2016.full.d.ts +0 -0
  354. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.d.ts +0 -0
  355. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.full.d.ts +0 -0
  356. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.intl.d.ts +0 -0
  357. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.object.d.ts +0 -0
  358. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.sharedmemory.d.ts +0 -0
  359. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.string.d.ts +0 -0
  360. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.typedarrays.d.ts +0 -0
  361. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.asyncgenerator.d.ts +0 -0
  362. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.asynciterable.d.ts +0 -0
  363. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.d.ts +0 -0
  364. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.full.d.ts +0 -0
  365. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.intl.d.ts +0 -0
  366. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.promise.d.ts +0 -0
  367. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.regexp.d.ts +0 -0
  368. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.array.d.ts +0 -0
  369. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.d.ts +0 -0
  370. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.full.d.ts +0 -0
  371. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.intl.d.ts +0 -0
  372. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.object.d.ts +0 -0
  373. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.string.d.ts +0 -0
  374. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.symbol.d.ts +0 -0
  375. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.bigint.d.ts +0 -0
  376. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.d.ts +0 -0
  377. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.date.d.ts +0 -0
  378. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.full.d.ts +0 -0
  379. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.intl.d.ts +0 -0
  380. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.number.d.ts +0 -0
  381. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.promise.d.ts +0 -0
  382. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.sharedmemory.d.ts +0 -0
  383. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.string.d.ts +0 -0
  384. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.symbol.wellknown.d.ts +0 -0
  385. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.d.ts +0 -0
  386. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.full.d.ts +0 -0
  387. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.intl.d.ts +0 -0
  388. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.promise.d.ts +0 -0
  389. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.string.d.ts +0 -0
  390. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.weakref.d.ts +0 -0
  391. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.array.d.ts +0 -0
  392. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.d.ts +0 -0
  393. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.error.d.ts +0 -0
  394. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.full.d.ts +0 -0
  395. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.intl.d.ts +0 -0
  396. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.object.d.ts +0 -0
  397. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.sharedmemory.d.ts +0 -0
  398. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.string.d.ts +0 -0
  399. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es5.d.ts +0 -0
  400. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es6.d.ts +0 -0
  401. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.esnext.d.ts +0 -0
  402. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.esnext.full.d.ts +0 -0
  403. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.esnext.intl.d.ts +0 -0
  404. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.scripthost.d.ts +0 -0
  405. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.webworker.d.ts +0 -0
  406. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.webworker.importscripts.d.ts +0 -0
  407. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.webworker.iterable.d.ts +0 -0
  408. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/pl/diagnosticMessages.generated.json +0 -0
  409. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/pt-br/diagnosticMessages.generated.json +0 -0
  410. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/ru/diagnosticMessages.generated.json +0 -0
  411. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tr/diagnosticMessages.generated.json +0 -0
  412. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tsc.js +0 -0
  413. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tsserver.js +0 -0
  414. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tsserverlibrary.d.ts +0 -0
  415. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tsserverlibrary.js +0 -0
  416. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/typesMap.json +0 -0
  417. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/typescript.d.ts +0 -0
  418. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/typescript.js +0 -0
  419. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/typingsInstaller.js +0 -0
  420. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/watchGuard.js +0 -0
  421. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/zh-cn/diagnosticMessages.generated.json +0 -0
  422. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/zh-tw/diagnosticMessages.generated.json +0 -0
@@ -0,0 +1,413 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2024-2025 Huawei Device Co., Ltd.
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ var desc = Object.getOwnPropertyDescriptor(m, k);
19
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
20
+ desc = { enumerable: true, get: function() { return m[k]; } };
21
+ }
22
+ Object.defineProperty(o, k2, desc);
23
+ }) : (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ o[k2] = m[k];
26
+ }));
27
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
28
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
29
+ }) : function(o, v) {
30
+ o["default"] = v;
31
+ });
32
+ var __importStar = (this && this.__importStar) || function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.buildDefaultArkClassFromArkFile = exports.buildNormalArkClass = exports.buildNormalArkClassFromArkNamespace = exports.buildNormalArkClassFromArkFile = exports.buildNormalArkClassFromArkMethod = void 0;
41
+ const ArkMethod_1 = require("../../../../core/model/ArkMethod");
42
+ const logger_1 = __importStar(require("../../../../utils/logger"));
43
+ const ArkClass_1 = require("../../../../core/model/ArkClass");
44
+ const ArkMethodBuilder_1 = require("./ArkMethodBuilder");
45
+ const builderUtils_1 = require("./builderUtils");
46
+ const ArkFieldBuilder_1 = require("./ArkFieldBuilder");
47
+ const Stmt_1 = require("../../../../core/base/Stmt");
48
+ const Const_1 = require("../../../../core/common/Const");
49
+ const IRUtils_1 = require("../../common/IRUtils");
50
+ const ArkSignature_1 = require("../../../../core/model/ArkSignature");
51
+ const ArkClassBuilder_1 = require("../../../../core/model/builder/ArkClassBuilder");
52
+ const ArkIRTransformer_1 = require("../../common/ArkIRTransformer");
53
+ const ast_1 = require("../../ast");
54
+ const ArkField_1 = require("../../../../core/model/ArkField");
55
+ const Constant_1 = require("../../../../core/base/Constant");
56
+ const ValueUtil_1 = require("../../../../core/common/ValueUtil");
57
+ const Expr_1 = require("../../../../core/base/Expr");
58
+ const Local_1 = require("../../../../core/base/Local");
59
+ const Position_1 = require("../../../../core/base/Position");
60
+ const ArkMetadata_1 = require("../../../../core/model/ArkMetadata");
61
+ const Ref_1 = require("../../../../core/base/Ref");
62
+ const Type_1 = require("../../../../core/base/Type");
63
+ const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'ArkClassBuilder');
64
+ function buildNormalArkClassFromArkMethod(clsNode, cls, sourceFile, declaring) {
65
+ const namespace = cls.getDeclaringArkNamespace();
66
+ if (namespace) {
67
+ buildNormalArkClassFromArkNamespace(clsNode, namespace, cls, sourceFile, declaring);
68
+ }
69
+ else {
70
+ buildNormalArkClassFromArkFile(clsNode, cls.getDeclaringArkFile(), cls, sourceFile, declaring);
71
+ }
72
+ }
73
+ exports.buildNormalArkClassFromArkMethod = buildNormalArkClassFromArkMethod;
74
+ function buildNormalArkClassFromArkFile(clsNode, arkFile, cls, sourceFile, declaring) {
75
+ cls.setDeclaringArkFile(arkFile);
76
+ cls.setCode(clsNode.code);
77
+ const nodePos = (0, ast_1.getNodeStartLineAndCol)(clsNode);
78
+ cls.setLine(nodePos.line);
79
+ cls.setColumn(nodePos.col);
80
+ buildNormalArkClass(clsNode, cls, sourceFile, declaring);
81
+ arkFile.addArkClass(cls);
82
+ }
83
+ exports.buildNormalArkClassFromArkFile = buildNormalArkClassFromArkFile;
84
+ function buildNormalArkClassFromArkNamespace(clsNode, arkNamespace, cls, sourceFile, declaring) {
85
+ cls.setDeclaringArkNamespace(arkNamespace);
86
+ cls.setDeclaringArkFile(arkNamespace.getDeclaringArkFile());
87
+ cls.setCode(clsNode.code);
88
+ const nodePos = (0, ast_1.getNodeStartLineAndCol)(clsNode);
89
+ cls.setLine(nodePos.line);
90
+ cls.setColumn(nodePos.col);
91
+ buildNormalArkClass(clsNode, cls, sourceFile, declaring);
92
+ arkNamespace.addArkClass(cls);
93
+ }
94
+ exports.buildNormalArkClassFromArkNamespace = buildNormalArkClassFromArkNamespace;
95
+ function buildNormalArkClass(clsNode, cls, sourceFile, declaring) {
96
+ if (clsNode.kind === 'CXXRecordDecl' || clsNode.kind === 'RecordDecl') {
97
+ switch (clsNode.tagUsed) {
98
+ case 'struct':
99
+ buildStruct2ArkClass(clsNode, cls, sourceFile, declaring);
100
+ break;
101
+ case 'class':
102
+ buildClass2ArkClass(clsNode, cls, sourceFile, declaring);
103
+ break;
104
+ case 'enum':
105
+ buildEnum2ArkClass(clsNode, cls, sourceFile, declaring);
106
+ break;
107
+ case 'union':
108
+ buildUnion2ArkClass(clsNode, cls, sourceFile, declaring);
109
+ break;
110
+ default:
111
+ }
112
+ }
113
+ if (clsNode.kind === 'ClassTemplateDecl') {
114
+ buildTemplateClass(clsNode, cls, sourceFile); // The kind attribute of template classes will not be automatically classified as 'class' in tagUsed
115
+ }
116
+ else if (clsNode.kind === 'EnumDecl') {
117
+ buildEnum2ArkClass(clsNode, cls, sourceFile, declaring);
118
+ }
119
+ IRUtils_1.IRUtils.setComments(cls, clsNode, sourceFile, cls.getDeclaringArkFile().getScene().getOptions());
120
+ }
121
+ exports.buildNormalArkClass = buildNormalArkClass;
122
+ function buildUnion2ArkClass(clsNode, cls, sourceFile, declaring) {
123
+ var _a;
124
+ const className = genClassName(clsNode.name ? clsNode.name : '', cls, declaring);
125
+ const classSignature = new ArkSignature_1.ClassSignature(className, cls.getDeclaringArkFile().getFileSignature(), ((_a = cls.getDeclaringArkNamespace()) === null || _a === void 0 ? void 0 : _a.getSignature()) || null);
126
+ cls.setSignature(classSignature);
127
+ cls.setCategory(ArkClass_1.ClassCategory.UNION);
128
+ (0, ArkClassBuilder_1.init4InstanceInitMethod)(cls);
129
+ (0, ArkClassBuilder_1.init4StaticInitMethod)(cls);
130
+ buildArkClassMembers(clsNode, cls, sourceFile);
131
+ }
132
+ function buildStruct2ArkClass(clsNode, cls, sourceFile, declaring) {
133
+ var _a;
134
+ const className = genClassName(clsNode.name ? clsNode.name : '', cls, declaring);
135
+ const classSignature = new ArkSignature_1.ClassSignature(className, cls.getDeclaringArkFile().getFileSignature(), ((_a = cls.getDeclaringArkNamespace()) === null || _a === void 0 ? void 0 : _a.getSignature()) || null);
136
+ cls.setSignature(classSignature);
137
+ if (clsNode.inner) {
138
+ processCXXHeritage(clsNode, cls);
139
+ }
140
+ cls.setModifiers((0, builderUtils_1.buildModifiers)(clsNode));
141
+ cls.setDecorators((0, builderUtils_1.buildDecorators)(clsNode, sourceFile));
142
+ cls.setCategory(ArkClass_1.ClassCategory.STRUCT);
143
+ (0, ArkClassBuilder_1.init4InstanceInitMethod)(cls);
144
+ (0, ArkClassBuilder_1.init4StaticInitMethod)(cls);
145
+ buildArkClassMembers(clsNode, cls, sourceFile);
146
+ }
147
+ function buildClass2ArkClass(clsNode, cls, sourceFile, declaring) {
148
+ var _a;
149
+ const className = genClassName(clsNode.name ? clsNode.name : '', cls, declaring);
150
+ const classSignature = new ArkSignature_1.ClassSignature(className, cls.getDeclaringArkFile().getFileSignature(), ((_a = cls.getDeclaringArkNamespace()) === null || _a === void 0 ? void 0 : _a.getSignature()) || null);
151
+ cls.setSignature(classSignature);
152
+ if (clsNode.inner) {
153
+ processCXXHeritage(clsNode, cls);
154
+ }
155
+ if (clsNode.kind === 'ClassTemplateDecl') {
156
+ (0, builderUtils_1.buildTypeParameters)(clsNode, sourceFile, cls).forEach(typeParameter => {
157
+ cls.addGenericType(typeParameter);
158
+ });
159
+ }
160
+ cls.setCategory(clsNode.tagUsed === 'struct' ? ArkClass_1.ClassCategory.STRUCT : ArkClass_1.ClassCategory.CLASS);
161
+ (0, ArkClassBuilder_1.init4InstanceInitMethod)(cls);
162
+ (0, ArkClassBuilder_1.init4StaticInitMethod)(cls);
163
+ buildArkClassMembers(clsNode, cls, sourceFile);
164
+ cls.setModifiers((0, builderUtils_1.buildModifiersForCxxClass)(cls));
165
+ }
166
+ function buildTemplateClass(clsNode, cls, sourceFile, declaring) {
167
+ var _a;
168
+ const className = genClassName(clsNode.name ? clsNode.name : '', cls, declaring);
169
+ const classSignature = new ArkSignature_1.ClassSignature(className, cls.getDeclaringArkFile().getFileSignature(), ((_a = cls.getDeclaringArkNamespace()) === null || _a === void 0 ? void 0 : _a.getSignature()) || null);
170
+ cls.setSignature(classSignature);
171
+ if (clsNode.inner) {
172
+ processCXXHeritage(clsNode, cls);
173
+ }
174
+ (0, builderUtils_1.buildTypeParameters)(clsNode, sourceFile, cls).forEach(typeParameter => {
175
+ cls.addGenericType(typeParameter);
176
+ });
177
+ let classBody = clsNode.inner[clsNode.inner.length - 1];
178
+ cls.setCategory(clsNode.tagUsed === 'struct' ? ArkClass_1.ClassCategory.STRUCT : ArkClass_1.ClassCategory.CLASS);
179
+ (0, ArkClassBuilder_1.init4InstanceInitMethod)(cls);
180
+ (0, ArkClassBuilder_1.init4StaticInitMethod)(cls);
181
+ buildArkClassMembers(classBody, cls, sourceFile);
182
+ cls.setModifiers((0, builderUtils_1.buildModifiersForCxxClass)(cls));
183
+ }
184
+ function genClassName(declaringName, cls, declaring) {
185
+ if (!declaringName) {
186
+ const declaringArkNamespace = cls.getDeclaringArkNamespace();
187
+ const num = declaringArkNamespace ? declaringArkNamespace.getAnonymousClassNumber() : cls.getDeclaringArkFile().getAnonymousClassNumber();
188
+ declaringName = Const_1.ANONYMOUS_CLASS_PREFIX + num;
189
+ }
190
+ let suffix = '';
191
+ if (declaring instanceof ArkClass_1.ArkClass) {
192
+ suffix = Const_1.ANONYMOUS_CLASS_DELIMITER + declaring.getName();
193
+ }
194
+ else {
195
+ suffix = declaring ? Const_1.ANONYMOUS_CLASS_DELIMITER + declaring.getDeclaringArkClass().getName() + '.' + declaring.getName() : '';
196
+ }
197
+ return declaringName + suffix;
198
+ }
199
+ function processCXXHeritage(clsNode, cls) {
200
+ var _a, _b;
201
+ if (clsNode.bases) {
202
+ for (let i = 0; i < clsNode.bases.length; i++) {
203
+ let classInfo = {
204
+ baseClass: undefined,
205
+ isVirtual: (_a = clsNode.bases[i].isVirtual) !== null && _a !== void 0 ? _a : false,
206
+ access: (_b = clsNode.bases[i].access) !== null && _b !== void 0 ? _b : 'private',
207
+ };
208
+ cls.addHeritageClassNameWithInfo(clsNode.bases[i].type.qualType, classInfo);
209
+ }
210
+ }
211
+ }
212
+ function buildEnum2ArkClass(clsNode, cls, sourceFile, declaring) {
213
+ var _a;
214
+ const className = genClassName(clsNode.name ? clsNode.name : '', cls, declaring);
215
+ const classSignature = new ArkSignature_1.ClassSignature(className, cls.getDeclaringArkFile().getFileSignature(), ((_a = cls.getDeclaringArkNamespace()) === null || _a === void 0 ? void 0 : _a.getSignature()) || null);
216
+ cls.setSignature(classSignature);
217
+ cls.setCategory(ArkClass_1.ClassCategory.ENUM);
218
+ (0, ArkClassBuilder_1.init4StaticInitMethod)(cls);
219
+ buildArkClassMembers(clsNode, cls, sourceFile);
220
+ }
221
+ function buildInitMethodsForClassTag(tagStr, cls, sourceFile, instanceInitStmts, staticInitStmts) {
222
+ if (tagStr === 'class') {
223
+ const tu = sourceFile;
224
+ const instanceIRTransformer = new ArkIRTransformer_1.ArkCxxIRTransformer(tu, cls.getInstanceInitMethod());
225
+ const staticIRTransformer = new ArkIRTransformer_1.ArkCxxIRTransformer(tu, cls.getStaticInitMethod());
226
+ (0, ArkMethodBuilder_1.buildInitMethod)(cls.getInstanceInitMethod(), instanceInitStmts, instanceIRTransformer.getThisLocal());
227
+ (0, ArkMethodBuilder_1.buildInitMethod)(cls.getStaticInitMethod(), staticInitStmts, staticIRTransformer.getThisLocal());
228
+ }
229
+ else if (tagStr === 'enum') {
230
+ const tu = sourceFile;
231
+ const staticIRTransformer = new ArkIRTransformer_1.ArkCxxIRTransformer(tu, cls.getStaticInitMethod());
232
+ (0, ArkMethodBuilder_1.buildInitMethod)(cls.getStaticInitMethod(), staticInitStmts, staticIRTransformer.getThisLocal());
233
+ }
234
+ }
235
+ function buildArkClassMembers(clsNode, cls, sourceFile) {
236
+ var _a;
237
+ buildMethodsForClass(clsNode, cls, sourceFile);
238
+ let staticIRTransformer;
239
+ const tagStr = ((_a = clsNode.tagUsed) !== null && _a !== void 0 ? _a : '');
240
+ const staticInitStmts = [];
241
+ const instanceInitStmts = [];
242
+ const enumFieldInfo = { lastFieldName: '', curValue: 0, isCurValueValid: true };
243
+ for (let i = 0; i < clsNode.inner.length; i++) {
244
+ let member = clsNode.inner[i];
245
+ switch (member.kind) {
246
+ case 'FieldDecl':
247
+ case 'VarDecl': {
248
+ const arkField = (0, ArkFieldBuilder_1.buildProperty2ArkField)(member, sourceFile, cls);
249
+ // If the parameter inner is not empty, it means it contains initialization information
250
+ if (member.inner.length > 0 && member.hasInClassInitializer) {
251
+ staticIRTransformer = new ArkIRTransformer_1.ArkCxxIRTransformer(sourceFile, cls.getStaticInitMethod());
252
+ getInitStmts(staticIRTransformer, arkField, member.inner[member.inner.length - 1]);
253
+ }
254
+ arkField.getInitializer().forEach(stmt => instanceInitStmts.push(stmt));
255
+ break;
256
+ }
257
+ case 'EnumConstantDecl': {
258
+ const arkField = (0, ArkFieldBuilder_1.buildProperty2ArkField)(member, sourceFile, cls);
259
+ staticIRTransformer = new ArkIRTransformer_1.ArkCxxIRTransformer(sourceFile, cls.getStaticInitMethod());
260
+ getInitStmts(staticIRTransformer, arkField, member.inner[0], enumFieldInfo);
261
+ arkField.getInitializer().forEach(stmt => staticInitStmts.push(stmt));
262
+ break;
263
+ }
264
+ case 'CXXMethodDecl':
265
+ case 'CXXConstructorDecl':
266
+ case 'CXXAccessSpecifier':
267
+ case 'CXXDestructorDecl':
268
+ // ignore
269
+ break;
270
+ case 'EnumDecl':
271
+ case 'CXXRecordDecl': {
272
+ processClassDeclInClass(member, cls, sourceFile);
273
+ break;
274
+ }
275
+ case 'UsingDecl':
276
+ processUsingDeclInClass(member, cls);
277
+ break;
278
+ case 'TypeAliasDecl':
279
+ processTypeAliasDeclInClass(member, cls, sourceFile, instanceInitStmts);
280
+ break;
281
+ default:
282
+ logger.warn('Please contact developers to support new member type: ', member.kind);
283
+ break;
284
+ }
285
+ }
286
+ buildInitMethodsForClassTag(tagStr, cls, sourceFile, instanceInitStmts, staticInitStmts);
287
+ }
288
+ function processClassDeclInClass(classDeclNode, cls, sourceFile) {
289
+ const newCls = new ArkClass_1.ArkClass();
290
+ const namespace = cls.getDeclaringArkNamespace();
291
+ if (namespace) {
292
+ buildNormalArkClassFromArkNamespace(classDeclNode, namespace, newCls, sourceFile, cls);
293
+ }
294
+ else {
295
+ buildNormalArkClassFromArkFile(classDeclNode, cls.getDeclaringArkFile(), newCls, sourceFile, cls);
296
+ }
297
+ }
298
+ function processUsingDeclInClass(usingDecl, cls) {
299
+ var _a;
300
+ if (usingDecl.inner.length !== 2) {
301
+ return;
302
+ }
303
+ const curFile = cls.getDeclaringArkFile();
304
+ const usingClass = curFile.getClassWithName(usingDecl.inner[0].name.replace(/struct |class /g, ''));
305
+ if (!usingClass) {
306
+ return;
307
+ }
308
+ const usingMemberName = usingDecl.inner[1].name;
309
+ const member = (_a = usingClass.getMethodWithName(usingMemberName)) !== null && _a !== void 0 ? _a : usingClass.getStaticFieldWithName(usingMemberName);
310
+ // CXXTodo: classSignature belongs to the base class and needs special handling during the inferType process.
311
+ if (member instanceof ArkMethod_1.ArkMethod) {
312
+ cls.addMethod(member);
313
+ }
314
+ if (member instanceof ArkField_1.ArkField) {
315
+ cls.addField(member);
316
+ }
317
+ }
318
+ function processTypeAliasDeclInClass(typeAliasDecl, cls, sourceFile, instanceInitStmts) {
319
+ const arkField = (0, ArkFieldBuilder_1.buildProperty2ArkField)(typeAliasDecl, sourceFile, cls);
320
+ // it's a type alias declaration
321
+ const staticIRTransformer = new ArkIRTransformer_1.ArkCxxIRTransformer(sourceFile, cls.getStaticInitMethod());
322
+ const stmts = staticIRTransformer.cxxNodeToStmts(typeAliasDecl);
323
+ if (stmts.length === 0) {
324
+ return;
325
+ }
326
+ stmts.forEach(stmt => instanceInitStmts.push(stmt));
327
+ arkField.getInitializer().push(...stmts);
328
+ if (stmts[0] instanceof Stmt_1.ArkAliasTypeDefineStmt) {
329
+ arkField.getSignature().setType(stmts[0].getAliasType());
330
+ }
331
+ }
332
+ function buildMethodsForClass(clsNode, cls, sourceFile) {
333
+ clsNode.inner.forEach((member) => {
334
+ if (member.kind.toString() === 'CXXMethodDecl' ||
335
+ member.kind.toString() === 'CXXConstructorDecl' ||
336
+ member.kind.toString() === 'CXXDestructorDecl' ||
337
+ member.kind.toString() === 'FriendDecl') {
338
+ let method = new ArkMethod_1.ArkMethod();
339
+ (0, ArkMethodBuilder_1.buildArkMethodFromArkClass)(member, cls, method, sourceFile);
340
+ }
341
+ });
342
+ }
343
+ function buildDefaultArkClassFromArkFile(arkFile, defaultClass, astRoot) {
344
+ defaultClass.setDeclaringArkFile(arkFile);
345
+ defaultClass.setCategory(ArkClass_1.ClassCategory.CLASS);
346
+ buildDefaultArkClass(defaultClass, astRoot);
347
+ }
348
+ exports.buildDefaultArkClassFromArkFile = buildDefaultArkClassFromArkFile;
349
+ function buildDefaultArkClass(cls, sourceFile, node) {
350
+ var _a;
351
+ const defaultArkClassSignature = new ArkSignature_1.ClassSignature(Const_1.DEFAULT_ARK_CLASS_NAME, cls.getDeclaringArkFile().getFileSignature(), ((_a = cls.getDeclaringArkNamespace()) === null || _a === void 0 ? void 0 : _a.getSignature()) || null);
352
+ cls.setSignature(defaultArkClassSignature);
353
+ genDefaultArkMethod(cls, sourceFile, node);
354
+ }
355
+ function genDefaultArkMethod(cls, sourceFile, node) {
356
+ let defaultMethod = new ArkMethod_1.ArkMethod();
357
+ (0, ArkMethodBuilder_1.buildDefaultArkMethodFromArkClass)(cls, defaultMethod, sourceFile, node);
358
+ cls.setDefaultArkMethod(defaultMethod);
359
+ }
360
+ // Get initialization statement when member variables contain default values
361
+ function getInitStmts(transformer, field, initNode, enumFieldInfo) {
362
+ let initValue;
363
+ let initPositions;
364
+ const stmts = [];
365
+ if (!transformer) {
366
+ return;
367
+ }
368
+ if (initNode) {
369
+ let initStmts = [];
370
+ ({ value: initValue, valueOriginalPositions: initPositions, stmts: initStmts } = transformer.cxxNodeToValueAndStmts(initNode));
371
+ initStmts.forEach(stmt => stmts.push(stmt));
372
+ if (enumFieldInfo !== undefined) {
373
+ if (initValue instanceof Constant_1.NumberConstant) {
374
+ enumFieldInfo.curValue = parseFloat(initValue.getValue()) + 1;
375
+ enumFieldInfo.isCurValueValid = true;
376
+ }
377
+ else {
378
+ enumFieldInfo.lastFieldName = field.getName();
379
+ enumFieldInfo.isCurValueValid = false;
380
+ }
381
+ }
382
+ }
383
+ else if (enumFieldInfo !== undefined) {
384
+ if (enumFieldInfo.isCurValueValid) {
385
+ initValue = ValueUtil_1.ValueUtil.getOrCreateNumberConst(enumFieldInfo.curValue);
386
+ enumFieldInfo.curValue += 1;
387
+ }
388
+ else {
389
+ initValue = new Expr_1.ArkNormalBinopExpr(new Local_1.Local(enumFieldInfo.lastFieldName), ValueUtil_1.ValueUtil.getOrCreateNumberConst(1), Expr_1.NormalBinaryOperator.Addition);
390
+ enumFieldInfo.lastFieldName = field.getName();
391
+ }
392
+ initPositions = [Position_1.FullPosition.DEFAULT];
393
+ field.setMetadata(ArkMetadata_1.ArkMetadataKind.ENUM_INIT_TYPE_USER, new ArkMetadata_1.EnumInitTypeUserMetadata(false));
394
+ }
395
+ else {
396
+ return;
397
+ }
398
+ const fieldRef = new Ref_1.ArkInstanceFieldRef(transformer.getThisLocal(), field.getSignature());
399
+ const fieldRefPositions = [Position_1.FullPosition.DEFAULT, Position_1.FullPosition.DEFAULT];
400
+ const assignStmt = new Stmt_1.ArkAssignStmt(fieldRef, initValue);
401
+ assignStmt.setOperandOriginalPositions([...fieldRefPositions, ...initPositions]);
402
+ stmts.push(assignStmt);
403
+ const fieldSourceCode = field.getCode();
404
+ const fieldOriginPosition = field.getOriginPosition();
405
+ for (const stmt of stmts) {
406
+ stmt.setOriginPositionInfo(fieldOriginPosition);
407
+ stmt.setOriginalText(fieldSourceCode);
408
+ }
409
+ field.setInitializer(stmts);
410
+ if (field.getType() instanceof Type_1.UnknownType) {
411
+ field.getSignature().setType(initValue.getType());
412
+ }
413
+ }
@@ -0,0 +1,5 @@
1
+ import { ArkField } from '../../../../core/model/ArkField';
2
+ import { ArkClass } from '../../../../core/model/ArkClass';
3
+ import { CxxAstNode } from '../../ast';
4
+ export declare function buildProperty2ArkField(member: CxxAstNode, sourceFile: CxxAstNode, cls: ArkClass): ArkField;
5
+ //# sourceMappingURL=ArkFieldBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArkFieldBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/frontend/cppFrontend/model/builder/ArkFieldBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,QAAQ,EAAiB,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAQ3D,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,GAAG,QAAQ,CAuB1G"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2024-2025 Huawei Device Co., Ltd.
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.buildProperty2ArkField = void 0;
18
+ const ArkField_1 = require("../../../../core/model/ArkField");
19
+ const builderUtils_1 = require("./builderUtils");
20
+ const ArkSignature_1 = require("../../../../core/model/ArkSignature");
21
+ const Type_1 = require("../../../../core/base/Type");
22
+ const Position_1 = require("../../../../core/base/Position");
23
+ const ArkBaseModel_1 = require("../../../../core/model/ArkBaseModel");
24
+ const IRUtils_1 = require("../../common/IRUtils");
25
+ const builderUtils_2 = require("../../../../core/model/builder/builderUtils");
26
+ function buildProperty2ArkField(member, sourceFile, cls) {
27
+ let field = new ArkField_1.ArkField();
28
+ field.setCategory(mapSyntaxKindToFieldOriginType(member.kind));
29
+ field.setCode(member.code);
30
+ field.setDeclaringArkClass(cls);
31
+ field.setOriginPosition(Position_1.LineColPosition.cxxBuildFromNode(member));
32
+ let fieldName = member.name;
33
+ field.addModifier((0, builderUtils_1.buildModifiers)(member));
34
+ let fieldType = Type_1.UnknownType.getInstance();
35
+ if ((member.kind === 'FieldDecl' || member.kind === 'VarDecl') && member.type) {
36
+ fieldType = (0, builderUtils_2.buildGenericType)((0, builderUtils_1.cxxNode2Type)(member, cls, sourceFile), field);
37
+ }
38
+ if (member.kind === 'EnumConstantDecl') {
39
+ field.addModifier(ArkBaseModel_1.ModifierType.STATIC);
40
+ fieldType = new Type_1.ClassType(cls.getSignature());
41
+ }
42
+ field.setSignature(new ArkSignature_1.FieldSignature(fieldName, cls.getSignature(), fieldType, field.isStatic()));
43
+ IRUtils_1.IRUtils.setComments(field, member, sourceFile, cls.getDeclaringArkFile().getScene().getOptions());
44
+ cls.addField(field);
45
+ return field;
46
+ }
47
+ exports.buildProperty2ArkField = buildProperty2ArkField;
48
+ function mapSyntaxKindToFieldOriginType(syntaxKind) {
49
+ let fieldOriginType = null;
50
+ switch (syntaxKind) {
51
+ case 'FieldDecl':
52
+ case 'TypeAliasDecl':
53
+ fieldOriginType = ArkField_1.FieldCategory.PROPERTY_DECLARATION;
54
+ break;
55
+ case 'EnumConstantDecl':
56
+ fieldOriginType = ArkField_1.FieldCategory.ENUM_MEMBER;
57
+ break;
58
+ default:
59
+ }
60
+ return fieldOriginType;
61
+ }
@@ -0,0 +1,17 @@
1
+ import { ArkFile } from '../../../../core/model/ArkFile';
2
+ import { ArkClass } from '../../../../core/model/ArkClass';
3
+ import { CxxAstNode } from '../../ast';
4
+ export declare const classMap: Map<string, ArkClass>;
5
+ /**
6
+ * Entry of building ArkFile instance
7
+ *
8
+ * @param absoluteFilePath
9
+ * @param projectDir
10
+ * @param arkFile
11
+ * @param projectName
12
+ * @param includeDirs
13
+ * @returns
14
+ */
15
+ export declare function buildArkFileFromFile(absoluteFilePath: string, projectDir: string, arkFile: ArkFile, projectName: string, includeDirs?: string[]): void;
16
+ export declare function buildArkClassFromCxxClass(classNode: CxxAstNode, arkFile: ArkFile, astRoot: CxxAstNode): void;
17
+ //# sourceMappingURL=ArkFileBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArkFileBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/frontend/cppFrontend/model/builder/ArkFileBuilder.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAMzD,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAS3D,OAAO,EAAsB,UAAU,EAAkB,MAAM,WAAW,CAAC;AAa3E,eAAO,MAAM,QAAQ,EAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,CAA+B,CAAC;AAgD5E;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,GAAE,MAAM,EAAO,GAAG,IAAI,CAa1J;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CAU5G"}