arkanalyzer 1.0.6 → 1.0.8

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 (224) hide show
  1. package/config/arkanalyzer.json +8 -0
  2. package/docs/IR2ts-stmt.md +81 -0
  3. package/docs/IR2ts.md +82 -0
  4. package/lib/Config.d.ts +29 -1
  5. package/lib/Config.d.ts.map +1 -1
  6. package/lib/Config.js +44 -11
  7. package/lib/Scene.d.ts +152 -9
  8. package/lib/Scene.d.ts.map +1 -1
  9. package/lib/Scene.js +233 -66
  10. package/lib/callgraph/algorithm/AbstractAnalysis.d.ts +2 -1
  11. package/lib/callgraph/algorithm/AbstractAnalysis.d.ts.map +1 -1
  12. package/lib/callgraph/algorithm/AbstractAnalysis.js +14 -7
  13. package/lib/callgraph/algorithm/ClassHierarchyAnalysis.d.ts.map +1 -1
  14. package/lib/callgraph/algorithm/ClassHierarchyAnalysis.js +2 -4
  15. package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts.map +1 -1
  16. package/lib/callgraph/algorithm/RapidTypeAnalysis.js +2 -3
  17. package/lib/callgraph/common/Statistics.js +1 -1
  18. package/lib/callgraph/model/BaseGraph.js +2 -2
  19. package/lib/callgraph/model/CallGraph.d.ts +3 -2
  20. package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
  21. package/lib/callgraph/model/CallGraph.js +23 -14
  22. package/lib/callgraph/model/builder/CallGraphBuilder.d.ts +2 -2
  23. package/lib/callgraph/model/builder/CallGraphBuilder.js +3 -3
  24. package/lib/callgraph/pointerAnalysis/Context.d.ts.map +1 -1
  25. package/lib/callgraph/pointerAnalysis/Context.js +0 -1
  26. package/lib/callgraph/pointerAnalysis/Pag.d.ts +36 -9
  27. package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
  28. package/lib/callgraph/pointerAnalysis/Pag.js +130 -37
  29. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +34 -5
  30. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
  31. package/lib/callgraph/pointerAnalysis/PagBuilder.js +479 -126
  32. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts +6 -0
  33. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
  34. package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +107 -45
  35. package/lib/callgraph/pointerAnalysis/PtsDS.d.ts.map +1 -1
  36. package/lib/callgraph/pointerAnalysis/PtsDS.js +0 -2
  37. package/lib/core/base/Constant.d.ts +37 -5
  38. package/lib/core/base/Constant.d.ts.map +1 -1
  39. package/lib/core/base/Constant.js +58 -8
  40. package/lib/core/base/Expr.d.ts +98 -13
  41. package/lib/core/base/Expr.d.ts.map +1 -1
  42. package/lib/core/base/Expr.js +295 -127
  43. package/lib/core/base/Local.d.ts +70 -5
  44. package/lib/core/base/Local.d.ts.map +1 -1
  45. package/lib/core/base/Local.js +77 -4
  46. package/lib/core/base/Ref.d.ts +79 -5
  47. package/lib/core/base/Ref.d.ts.map +1 -1
  48. package/lib/core/base/Ref.js +143 -38
  49. package/lib/core/base/Stmt.d.ts +126 -12
  50. package/lib/core/base/Stmt.d.ts.map +1 -1
  51. package/lib/core/base/Stmt.js +135 -28
  52. package/lib/core/base/Type.d.ts +11 -2
  53. package/lib/core/base/Type.d.ts.map +1 -1
  54. package/lib/core/base/Type.js +47 -42
  55. package/lib/core/base/Value.d.ts +24 -2
  56. package/lib/core/base/Value.d.ts.map +1 -1
  57. package/lib/core/common/ArkError.d.ts +15 -0
  58. package/lib/core/common/ArkError.d.ts.map +1 -0
  59. package/lib/core/common/ArkError.js +28 -0
  60. package/lib/core/common/ArkIRTransformer.d.ts +12 -5
  61. package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
  62. package/lib/core/common/ArkIRTransformer.js +90 -45
  63. package/lib/core/common/BodyBuilder.d.ts +2 -0
  64. package/lib/core/common/BodyBuilder.d.ts.map +1 -1
  65. package/lib/core/common/BodyBuilder.js +5 -2
  66. package/lib/core/common/Builtin.js +1 -1
  67. package/lib/core/common/CfgBuilder.d.ts +12 -7
  68. package/lib/core/common/CfgBuilder.d.ts.map +1 -1
  69. package/lib/core/common/CfgBuilder.js +336 -140
  70. package/lib/core/common/Const.d.ts +15 -10
  71. package/lib/core/common/Const.d.ts.map +1 -1
  72. package/lib/core/common/Const.js +18 -11
  73. package/lib/core/common/DummyMainCreater.d.ts +5 -4
  74. package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
  75. package/lib/core/common/DummyMainCreater.js +43 -28
  76. package/lib/core/common/EtsConst.d.ts +1 -0
  77. package/lib/core/common/EtsConst.d.ts.map +1 -1
  78. package/lib/core/common/EtsConst.js +2 -1
  79. package/lib/core/common/ExprUseReplacer.js +8 -8
  80. package/lib/core/common/IRUtils.d.ts +7 -0
  81. package/lib/core/common/IRUtils.d.ts.map +1 -1
  82. package/lib/core/common/IRUtils.js +34 -2
  83. package/lib/core/common/ModelUtils.d.ts +1 -0
  84. package/lib/core/common/ModelUtils.d.ts.map +1 -1
  85. package/lib/core/common/ModelUtils.js +39 -36
  86. package/lib/core/common/RefUseReplacer.js +3 -3
  87. package/lib/core/common/StmtUseReplacer.js +4 -4
  88. package/lib/core/common/TSConst.d.ts +10 -3
  89. package/lib/core/common/TSConst.d.ts.map +1 -1
  90. package/lib/core/common/TSConst.js +11 -4
  91. package/lib/core/common/TypeInference.d.ts +8 -2
  92. package/lib/core/common/TypeInference.d.ts.map +1 -1
  93. package/lib/core/common/TypeInference.js +222 -90
  94. package/lib/core/common/ValueUtil.d.ts +0 -4
  95. package/lib/core/common/ValueUtil.d.ts.map +1 -1
  96. package/lib/core/common/ValueUtil.js +10 -27
  97. package/lib/core/common/VisibleValue.js +1 -1
  98. package/lib/core/dataflow/DataflowProblem.d.ts +1 -0
  99. package/lib/core/dataflow/DataflowProblem.d.ts.map +1 -1
  100. package/lib/core/dataflow/DataflowProblem.js +4 -4
  101. package/lib/core/dataflow/DataflowSolver.d.ts +20 -16
  102. package/lib/core/dataflow/DataflowSolver.d.ts.map +1 -1
  103. package/lib/core/dataflow/DataflowSolver.js +67 -78
  104. package/lib/core/dataflow/TiantAnalysis.d.ts +1 -0
  105. package/lib/core/dataflow/TiantAnalysis.d.ts.map +1 -1
  106. package/lib/core/dataflow/TiantAnalysis.js +42 -28
  107. package/lib/core/dataflow/UndefinedVariable.d.ts +15 -1
  108. package/lib/core/dataflow/UndefinedVariable.d.ts.map +1 -1
  109. package/lib/core/dataflow/UndefinedVariable.js +122 -76
  110. package/lib/core/dataflow/Util.d.ts +5 -1
  111. package/lib/core/dataflow/Util.d.ts.map +1 -1
  112. package/lib/core/dataflow/Util.js +43 -22
  113. package/lib/core/graph/BasicBlock.d.ts +72 -0
  114. package/lib/core/graph/BasicBlock.d.ts.map +1 -1
  115. package/lib/core/graph/BasicBlock.js +165 -3
  116. package/lib/core/graph/Cfg.d.ts +30 -1
  117. package/lib/core/graph/Cfg.d.ts.map +1 -1
  118. package/lib/core/graph/Cfg.js +131 -11
  119. package/lib/core/graph/DominanceFinder.js +7 -7
  120. package/lib/core/graph/DominanceTree.js +4 -4
  121. package/lib/core/graph/builder/ViewTreeBuilder.d.ts.map +1 -1
  122. package/lib/core/graph/builder/ViewTreeBuilder.js +6 -5
  123. package/lib/core/model/ArkBaseModel.d.ts +59 -0
  124. package/lib/core/model/ArkBaseModel.d.ts.map +1 -0
  125. package/lib/core/model/ArkBaseModel.js +271 -0
  126. package/lib/core/model/ArkBody.d.ts +3 -9
  127. package/lib/core/model/ArkBody.d.ts.map +1 -1
  128. package/lib/core/model/ArkBody.js +3 -14
  129. package/lib/core/model/ArkClass.d.ts +107 -13
  130. package/lib/core/model/ArkClass.d.ts.map +1 -1
  131. package/lib/core/model/ArkClass.js +152 -54
  132. package/lib/core/model/ArkExport.d.ts +8 -7
  133. package/lib/core/model/ArkExport.d.ts.map +1 -1
  134. package/lib/core/model/ArkExport.js +16 -18
  135. package/lib/core/model/ArkField.d.ts +16 -13
  136. package/lib/core/model/ArkField.d.ts.map +1 -1
  137. package/lib/core/model/ArkField.js +18 -62
  138. package/lib/core/model/ArkFile.d.ts +42 -0
  139. package/lib/core/model/ArkFile.d.ts.map +1 -1
  140. package/lib/core/model/ArkFile.js +58 -0
  141. package/lib/core/model/ArkImport.d.ts +9 -7
  142. package/lib/core/model/ArkImport.d.ts.map +1 -1
  143. package/lib/core/model/ArkImport.js +11 -12
  144. package/lib/core/model/ArkMetadata.d.ts +20 -0
  145. package/lib/core/model/ArkMetadata.d.ts.map +1 -0
  146. package/lib/core/model/ArkMetadata.js +44 -0
  147. package/lib/core/model/ArkMethod.d.ts +195 -17
  148. package/lib/core/model/ArkMethod.d.ts.map +1 -1
  149. package/lib/core/model/ArkMethod.js +363 -46
  150. package/lib/core/model/ArkNamespace.d.ts +6 -8
  151. package/lib/core/model/ArkNamespace.d.ts.map +1 -1
  152. package/lib/core/model/ArkNamespace.js +16 -20
  153. package/lib/core/model/ArkSignature.d.ts +41 -0
  154. package/lib/core/model/ArkSignature.d.ts.map +1 -1
  155. package/lib/core/model/ArkSignature.js +76 -19
  156. package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
  157. package/lib/core/model/builder/ArkClassBuilder.js +60 -49
  158. package/lib/core/model/builder/ArkExportBuilder.d.ts.map +1 -1
  159. package/lib/core/model/builder/ArkExportBuilder.js +12 -6
  160. package/lib/core/model/builder/ArkFieldBuilder.d.ts.map +1 -1
  161. package/lib/core/model/builder/ArkFieldBuilder.js +13 -9
  162. package/lib/core/model/builder/ArkFileBuilder.js +1 -3
  163. package/lib/core/model/builder/ArkImportBuilder.d.ts +2 -1
  164. package/lib/core/model/builder/ArkImportBuilder.d.ts.map +1 -1
  165. package/lib/core/model/builder/ArkImportBuilder.js +16 -13
  166. package/lib/core/model/builder/ArkMethodBuilder.d.ts +3 -1
  167. package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
  168. package/lib/core/model/builder/ArkMethodBuilder.js +105 -45
  169. package/lib/core/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
  170. package/lib/core/model/builder/ArkNamespaceBuilder.js +4 -5
  171. package/lib/core/model/builder/builderUtils.d.ts +2 -1
  172. package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
  173. package/lib/core/model/builder/builderUtils.js +63 -43
  174. package/lib/index.d.ts +2 -1
  175. package/lib/index.d.ts.map +1 -1
  176. package/lib/index.js +4 -3
  177. package/lib/save/ArkStream.js +1 -1
  178. package/lib/save/DotPrinter.d.ts.map +1 -1
  179. package/lib/save/DotPrinter.js +1 -15
  180. package/lib/save/GraphPrinter.d.ts.map +1 -1
  181. package/lib/save/GraphPrinter.js +4 -2
  182. package/lib/save/JsonPrinter.js +5 -5
  183. package/lib/save/ViewTreePrinter.d.ts +16 -0
  184. package/lib/save/ViewTreePrinter.d.ts.map +1 -0
  185. package/lib/save/ViewTreePrinter.js +130 -0
  186. package/lib/save/source/SourceBase.d.ts +2 -2
  187. package/lib/save/source/SourceBase.d.ts.map +1 -1
  188. package/lib/save/source/SourceBase.js +6 -13
  189. package/lib/save/source/SourceBody.d.ts.map +1 -1
  190. package/lib/save/source/SourceBody.js +27 -14
  191. package/lib/save/source/SourceClass.d.ts.map +1 -1
  192. package/lib/save/source/SourceClass.js +12 -8
  193. package/lib/save/source/SourceField.d.ts.map +1 -1
  194. package/lib/save/source/SourceField.js +6 -2
  195. package/lib/save/source/SourceMethod.d.ts.map +1 -1
  196. package/lib/save/source/SourceMethod.js +10 -3
  197. package/lib/save/source/SourceModule.d.ts.map +1 -1
  198. package/lib/save/source/SourceModule.js +16 -10
  199. package/lib/save/source/SourceNamespace.d.ts.map +1 -1
  200. package/lib/save/source/SourceNamespace.js +4 -0
  201. package/lib/save/source/SourceStmt.d.ts +1 -1
  202. package/lib/save/source/SourceStmt.d.ts.map +1 -1
  203. package/lib/save/source/SourceStmt.js +37 -25
  204. package/lib/save/source/SourceTransformer.d.ts +6 -0
  205. package/lib/save/source/SourceTransformer.d.ts.map +1 -1
  206. package/lib/save/source/SourceTransformer.js +82 -51
  207. package/lib/save/source/SourceUtils.d.ts.map +1 -1
  208. package/lib/save/source/SourceUtils.js +12 -11
  209. package/lib/transformer/StaticSingleAssignmentFormer.js +3 -3
  210. package/lib/utils/CfgStructualAnalysis.d.ts +1 -0
  211. package/lib/utils/CfgStructualAnalysis.d.ts.map +1 -1
  212. package/lib/utils/CfgStructualAnalysis.js +103 -72
  213. package/lib/utils/callGraphUtils.d.ts.map +1 -1
  214. package/lib/utils/callGraphUtils.js +7 -10
  215. package/lib/utils/crypto_utils.d.ts +6 -0
  216. package/lib/utils/crypto_utils.d.ts.map +1 -0
  217. package/lib/utils/crypto_utils.js +57 -0
  218. package/lib/utils/entryMethodUtils.d.ts.map +1 -1
  219. package/lib/utils/entryMethodUtils.js +27 -26
  220. package/lib/utils/getAllFiles.d.ts +1 -1
  221. package/lib/utils/getAllFiles.d.ts.map +1 -1
  222. package/lib/utils/getAllFiles.js +4 -5
  223. package/lib/utils/logger.js +2 -2
  224. package/package.json +3 -2
@@ -0,0 +1,8 @@
1
+ {
2
+ "enableLeadingComments": false,
3
+ "ignoreFileNames": [
4
+ "oh_modules",
5
+ "node_modules",
6
+ "hvigorfile.ts"
7
+ ]
8
+ }
@@ -0,0 +1,81 @@
1
+ ```Mermaid
2
+ classDiagram
3
+ class TransformerContext {
4
+ getDeclaringArkNamespace(): ArkNamespace | undefined;
5
+ getMethod(signature: MethodSignature): ArkMethod | null;
6
+ getClass(signature: ClassSignature): ArkClass | null;
7
+ getPrinter(): ArkCodeBuffer;
8
+ transTemp2Code(temp: Local): string;
9
+ }
10
+
11
+ <<Interface>> TransformerContext
12
+
13
+ class StmtPrinterContext {
14
+ getStmtReader(): StmtReader;
15
+ setSkipStmt(stmt: Stmt): void;
16
+
17
+ setTempCode(temp: string, code: string): void;
18
+ hasTempVisit(temp: string): boolean;
19
+ setTempVisit(temp: string): void;
20
+ }
21
+ StmtPrinterContext --|> TransformerContext
22
+ <<Interface>> StmtPrinterContext
23
+
24
+ class SourceStmt {
25
+ constructor(context: StmtPrinterContext, original: Stmt);
26
+ getLine(): number;
27
+ dump(): string;
28
+ }
29
+ <<Abstract>> SourceStmt
30
+ SourceStmt --> StmtPrinterContext
31
+
32
+ class SourceAssignStmt {
33
+
34
+ }
35
+ SourceAssignStmt --|> SourceStmt
36
+
37
+ class SourceInvokeStmt {
38
+
39
+ }
40
+
41
+ SourceInvokeStmt --|> SourceStmt
42
+
43
+ class SourceIfStmt {
44
+
45
+ }
46
+ SourceIfStmt --|> SourceStmt
47
+
48
+ class SourceWhileStmt {
49
+
50
+ }
51
+
52
+ SourceWhileStmt --|> SourceStmt
53
+
54
+ class SourceForStmt {
55
+
56
+ }
57
+ SourceForStmt --|> SourceStmt
58
+ class SourceDoWhileStmt {
59
+
60
+ }
61
+ SourceDoWhileStmt --|> SourceStmt
62
+
63
+ class SourceDoStmt {
64
+
65
+ }
66
+ SourceDoStmt --|> SourceStmt
67
+
68
+ class SourceBody {
69
+
70
+ }
71
+ SourceBody --|> StmtPrinterContext
72
+ SourceBody --> SourceStmt
73
+
74
+ class AbstractFlowGraph {
75
+
76
+ }
77
+
78
+ AbstractFlowGraph o-- BasicBlock
79
+
80
+ SourceBody --> AbstractFlowGraph
81
+ ```
package/docs/IR2ts.md ADDED
@@ -0,0 +1,82 @@
1
+ ```Mermaid
2
+ classDiagram
3
+ class ArkCodeBuffer {
4
+ write(s: string) this
5
+ toString() string
6
+ }
7
+
8
+ class ArkStream {
9
+ write(s: string) this
10
+ close() void
11
+ }
12
+
13
+ ArkStream --|> ArkCodeBuffer
14
+
15
+ class Printer {
16
+ abstract dump(): string
17
+ }
18
+ <<Abstract>> Printer
19
+ Printer --> ArkCodeBuffer
20
+
21
+
22
+ class DotMethodPrinter {
23
+ constructor(method: ArkMethod)
24
+ dump(): string
25
+ }
26
+ DotMethodPrinter --|> Printer
27
+
28
+ class SourceFilePrinter {
29
+ constructor(arkFile: ArkFile)
30
+ public dump(): string
31
+ }
32
+ SourceFilePrinter --|> Printer
33
+
34
+ class SourceBase {
35
+ constructor(arkFile: ArkFile, indent: string = '')
36
+ }
37
+
38
+ SourceBase --|> Printer
39
+
40
+ class SourceNamespace {
41
+ constructor(ns: ArkNamespace, indent: string = '')
42
+ }
43
+
44
+ SourceNamespace --|> SourceBase
45
+
46
+ class SourceClass {
47
+ constructor(cls: ArkClass, indent: string = '')
48
+ }
49
+
50
+ SourceClass --|> SourceBase
51
+
52
+ class SourceField {
53
+ constructor(field: ArkField, indent: string = '', initializer: Map<string, string>)
54
+ }
55
+
56
+ SourceField --|> SourceBase
57
+
58
+ class SourceMethod {
59
+ constructor(method: ArkMethod, indent: string = '')
60
+ }
61
+
62
+ SourceMethod --|> SourceBase
63
+
64
+ class SourceExportInfo {
65
+ constructor(info: ExportInfo, indent: string = '')
66
+ }
67
+
68
+ SourceExportInfo --|> SourceBase
69
+
70
+ class SourceImportInfo {
71
+ constructor(info: ImportInfo, indent: string = '')
72
+ }
73
+ SourceImportInfo --|> SourceBase
74
+
75
+ class TransformerContext {
76
+ getPrinter(): ArkCodeBuffer
77
+ transTemp2Code(temp: Local): string
78
+ }
79
+
80
+ <<Interface>> TransformerContext
81
+ SourceBase --|> TransformerContext
82
+ ```
package/lib/Config.d.ts CHANGED
@@ -3,6 +3,12 @@ export interface Sdk {
3
3
  path: string;
4
4
  moduleName: string;
5
5
  }
6
+ export type SceneOptionsValue = string | number | boolean | (string | number)[] | string[] | null | undefined;
7
+ export interface SceneOptions {
8
+ ignoreFileNames?: string[];
9
+ enableLeadingComments?: boolean;
10
+ [option: string]: SceneOptionsValue;
11
+ }
6
12
  export declare class SceneConfig {
7
13
  private targetProjectName;
8
14
  private targetProjectDirectory;
@@ -11,8 +17,30 @@ export declare class SceneConfig {
11
17
  private sdkFiles;
12
18
  private sdkFilesMap;
13
19
  private projectFiles;
14
- constructor();
20
+ private options;
21
+ constructor(options?: SceneOptions);
22
+ getOptions(): SceneOptions;
23
+ /**
24
+ * Set the scene's config,
25
+ * such as the target project's name, the used sdks and the full path.
26
+ * @param targetProjectName - the target project's name.
27
+ * @param targetProjectDirectory - the target project's directory.
28
+ * @param sdks - sdks used in this scene.
29
+ * @param fullFilePath - the full file path.
30
+ */
15
31
  buildConfig(targetProjectName: string, targetProjectDirectory: string, sdks: Sdk[], fullFilePath?: string[]): void;
32
+ /**
33
+ * Create a sceneConfig object for a specified project path and set the target project directory to the targetProjectDirectory property of the sceneConfig object.
34
+ * @param targetProjectDirectory - the target project directory, such as xxx/xxx/xxx, started from project directory.
35
+ * @example
36
+ * 1. build a sceneConfig object.
37
+
38
+ ```typescript
39
+ const projectDir = 'xxx/xxx/xxx';
40
+ const sceneConfig: SceneConfig = new SceneConfig();
41
+ sceneConfig.buildFromProjectDir(projectDir);
42
+ ```
43
+ */
16
44
  buildFromProjectDir(targetProjectDirectory: string): void;
17
45
  buildFromJson(configJsonPath: string): void;
18
46
  getTargetProjectName(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../src/Config.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,GAAG;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,WAAW;IACpB,OAAO,CAAC,iBAAiB,CAAc;IACvC,OAAO,CAAC,sBAAsB,CAAc;IAE5C,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,OAAO,CAAa;IAE5B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,WAAW,CAAsD;IAEzE,OAAO,CAAC,YAAY,CAAgB;;IAK7B,WAAW,CACd,iBAAiB,EAAE,MAAM,EACzB,sBAAsB,EAAE,MAAM,EAC9B,IAAI,EAAE,GAAG,EAAE,EACX,YAAY,CAAC,EAAE,MAAM,EAAE;IAUpB,mBAAmB,CAAC,sBAAsB,EAAE,MAAM;IAMlD,aAAa,CAAC,cAAc,EAAE,MAAM;IAuCpC,oBAAoB;IAIpB,yBAAyB;IAIzB,eAAe;IAIf,WAAW;IAIX,cAAc;IAId,aAAa;IAIb,UAAU;CAGpB"}
1
+ {"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../src/Config.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,GAAG;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;AAC9G,MAAM,WAAW,YAAY;IACzB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAAC;CACvC;AAID,qBAAa,WAAW;IACpB,OAAO,CAAC,iBAAiB,CAAc;IACvC,OAAO,CAAC,sBAAsB,CAAc;IAE5C,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,OAAO,CAAa;IAE5B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,WAAW,CAAsD;IAEzE,OAAO,CAAC,YAAY,CAAgB;IAEpC,OAAO,CAAC,OAAO,CAAe;gBAElB,OAAO,CAAC,EAAE,YAAY;IAW3B,UAAU,IAAI,YAAY;IAIjC;;;;;;;OAOG;IACI,WAAW,CACd,iBAAiB,EAAE,MAAM,EACzB,sBAAsB,EAAE,MAAM,EAC9B,IAAI,EAAE,GAAG,EAAE,EACX,YAAY,CAAC,EAAE,MAAM,EAAE;IAU3B;;;;;;;;;;;OAWG;IACI,mBAAmB,CAAC,sBAAsB,EAAE,MAAM;IAMlD,aAAa,CAAC,cAAc,EAAE,MAAM;IAmCpC,oBAAoB;IAIpB,yBAAyB;IAIzB,eAAe;IAIf,WAAW;IAIX,cAAc;IAId,aAAa;IAIb,UAAU;CAGpB"}
package/lib/Config.js CHANGED
@@ -46,16 +46,38 @@ const path_1 = __importDefault(require("path"));
46
46
  const logger_1 = __importStar(require("./utils/logger"));
47
47
  const getAllFiles_1 = require("./utils/getAllFiles");
48
48
  const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'Config');
49
+ const CONFIG_FILENAME = 'arkanalyzer.json';
50
+ const DEFAULT_CONFIG_FILE = path_1.default.join(__dirname, '../config', CONFIG_FILENAME);
49
51
  class SceneConfig {
50
- constructor() {
51
- this.targetProjectName = "";
52
- this.targetProjectDirectory = "";
53
- this.etsSdkPath = "";
52
+ constructor(options) {
53
+ this.targetProjectName = '';
54
+ this.targetProjectDirectory = '';
55
+ this.etsSdkPath = '';
54
56
  this.sdksObj = [];
55
57
  this.sdkFiles = [];
56
58
  this.sdkFilesMap = new Map();
57
59
  this.projectFiles = [];
60
+ try {
61
+ this.options = JSON.parse(fs_1.default.readFileSync(DEFAULT_CONFIG_FILE, 'utf-8'));
62
+ }
63
+ catch (error) {
64
+ this.options = {};
65
+ }
66
+ if (options) {
67
+ this.options = Object.assign(Object.assign({}, this.options), options);
68
+ }
58
69
  }
70
+ getOptions() {
71
+ return this.options;
72
+ }
73
+ /**
74
+ * Set the scene's config,
75
+ * such as the target project's name, the used sdks and the full path.
76
+ * @param targetProjectName - the target project's name.
77
+ * @param targetProjectDirectory - the target project's directory.
78
+ * @param sdks - sdks used in this scene.
79
+ * @param fullFilePath - the full file path.
80
+ */
59
81
  buildConfig(targetProjectName, targetProjectDirectory, sdks, fullFilePath) {
60
82
  this.targetProjectName = targetProjectName;
61
83
  this.targetProjectDirectory = targetProjectDirectory;
@@ -64,10 +86,22 @@ class SceneConfig {
64
86
  this.projectFiles.push(...fullFilePath);
65
87
  }
66
88
  }
89
+ /**
90
+ * Create a sceneConfig object for a specified project path and set the target project directory to the targetProjectDirectory property of the sceneConfig object.
91
+ * @param targetProjectDirectory - the target project directory, such as xxx/xxx/xxx, started from project directory.
92
+ * @example
93
+ * 1. build a sceneConfig object.
94
+
95
+ ```typescript
96
+ const projectDir = 'xxx/xxx/xxx';
97
+ const sceneConfig: SceneConfig = new SceneConfig();
98
+ sceneConfig.buildFromProjectDir(projectDir);
99
+ ```
100
+ */
67
101
  buildFromProjectDir(targetProjectDirectory) {
68
102
  this.targetProjectDirectory = targetProjectDirectory;
69
103
  this.targetProjectName = path_1.default.basename(targetProjectDirectory);
70
- this.projectFiles = (0, getAllFiles_1.getAllFiles)(targetProjectDirectory, ['.ets', '.ts']);
104
+ this.projectFiles = (0, getAllFiles_1.getAllFiles)(targetProjectDirectory, ['.ets', '.ts'], this.options.ignoreFileNames);
71
105
  }
72
106
  buildFromJson(configJsonPath) {
73
107
  if (fs_1.default.existsSync(configJsonPath)) {
@@ -88,15 +122,14 @@ class SceneConfig {
88
122
  logger.error(`Error parsing JSON: ${error}`);
89
123
  return;
90
124
  }
91
- const targetProjectName = configurations.targetProjectName
92
- ? configurations.targetProjectName
93
- : '';
125
+ const targetProjectName = configurations.targetProjectName ? configurations.targetProjectName : '';
94
126
  const targetProjectDirectory = configurations.targetProjectDirectory
95
127
  ? configurations.targetProjectDirectory
96
128
  : '';
97
- const sdks = configurations.sdks
98
- ? configurations.sdks
99
- : [];
129
+ const sdks = configurations.sdks ? configurations.sdks : [];
130
+ if (configurations.options) {
131
+ this.options = Object.assign(Object.assign({}, this.options), configurations.options);
132
+ }
100
133
  this.buildConfig(targetProjectName, targetProjectDirectory, sdks);
101
134
  }
102
135
  else {
package/lib/Scene.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { SceneConfig, Sdk } from './Config';
1
+ import { SceneConfig, SceneOptions, Sdk } from './Config';
2
2
  import { VisibleValue } from './core/common/VisibleValue';
3
3
  import { ArkClass } from './core/model/ArkClass';
4
4
  import { ArkFile } from './core/model/ArkFile';
@@ -23,7 +23,6 @@ export declare class Scene {
23
23
  private realProjectDir;
24
24
  private moduleScenesMap;
25
25
  private modulePath2NameMap;
26
- private globalImportInfos;
27
26
  private moduleSdkMap;
28
27
  private projectSdkMap;
29
28
  private visibleValue;
@@ -37,36 +36,161 @@ export declare class Scene {
37
36
  private ohPkgFilePath;
38
37
  private ohPkgContent;
39
38
  private buildStage;
39
+ private options;
40
40
  constructor();
41
+ getOptions(): SceneOptions;
42
+ clear(): void;
41
43
  getStage(): SceneBuildStage;
44
+ /**
45
+ * Build scene object according to the {@link SceneConfig}. This API implements 3 functions.
46
+ * First is to build scene object from {@link SceneConfig}, second is to generate {@link ArkFile}s,
47
+ * and the last is to collect project import infomation.
48
+ * @param sceneConfig - a sceneConfig object, which is usally defined by user or Json file.
49
+ * @example
50
+ * 1. Build Scene object from scene config
51
+
52
+ ```typescript
53
+ // build config
54
+ const projectDir = ... ...;
55
+ const sceneConfig = new SceneConfig();
56
+ sceneConfig.buildFromProjectDir(projectDir);
57
+
58
+ // build scene
59
+ const scene = new Scene();
60
+ scene.buildSceneFromProjectDir(sceneConfig);
61
+ ```
62
+ */
42
63
  buildSceneFromProjectDir(sceneConfig: SceneConfig): void;
64
+ /**
65
+ * Set the basic information of the scene using a config,
66
+ * such as the project's name, real path and files.
67
+ * @param sceneConfig - the config used to set the basic information of scene.
68
+ */
43
69
  buildBasicInfo(sceneConfig: SceneConfig): void;
44
70
  private addDefaultConstructors;
45
71
  private buildAllMethodBody;
46
72
  private genArkFiles;
47
73
  private buildSdk;
74
+ /**
75
+ * Build the scene for harmony project. It resolves the file path of the project first, and then fetches dependencies from this file.
76
+ * Next, build a `ModuleScene` for this project to generate {@link ArkFile}. Finally, it build bodies of all methods, generate extended classes, and add DefaultConstructors.
77
+ */
48
78
  buildScene4HarmonyProject(): void;
49
79
  buildModuleScene(moduleName: string, modulePath: string): void;
80
+ /**
81
+ * Get the absolute path of current project.
82
+ * @returns The real project's directiory.
83
+ * @example
84
+ * 1. get real project directory, such as:
85
+ ```typescript
86
+ let projectDir = projectScene.getRealProjectDir();
87
+ ```
88
+ */
50
89
  getRealProjectDir(): string;
90
+ /**
91
+ * Returns the **string** name of the project.
92
+ * @returns The name of the project.
93
+ */
51
94
  getProjectName(): string;
52
95
  getProjectFiles(): string[];
53
96
  getSdkGlobal(globalName: string): ArkExport | null;
97
+ /**
98
+ * Returns the file based on its signature.
99
+ * If no file can be found according to the input signature, **null** will be returned.
100
+ * A typical {@link ArkFile} contains: file's name (i.e., its relative path), project's name,
101
+ * project's dir, file's signature etc.
102
+ * @param fileSignature - the signature of file.
103
+ * @returns a file defined by ArkAnalyzer. **null** will be returned if no file could be found.
104
+ * @example
105
+ * 1. get ArkFile based on file signature.
106
+
107
+ ```typescript
108
+ if (...) {
109
+ const fromSignature = new FileSignature();
110
+ fromSignature.setProjectName(im.getDeclaringArkFile().getProjectName());
111
+ fromSignature.setFileName(fileName);
112
+ return scene.getFile(fromSignature);
113
+ }
114
+ ```
115
+ */
54
116
  getFile(fileSignature: FileSignature): ArkFile | null;
117
+ setFile(file: ArkFile): void;
118
+ hasSdkFile(fileSignature: FileSignature): boolean;
119
+ /**
120
+ * Get files of a {@link Scene}. Generally, a project includes several ets/ts files that define the different class. We need to generate {@link ArkFile} objects from these ets/ts files.
121
+ * @returns The array of {@link ArkFile} from `scene.filesMap.values()`.
122
+ * @example
123
+ * 1. In inferSimpleTypes() to check arkClass and arkMethod.
124
+ * ```typescript
125
+ * public inferSimpleTypes() {
126
+ * for (let arkFile of this.getFiles()) {
127
+ * for (let arkClass of arkFile.getClasses()) {
128
+ * for (let arkMethod of arkClass.getMethods()) {
129
+ * // ... ...;
130
+ * }
131
+ * }
132
+ * }
133
+ * }
134
+ * ```
135
+ * 2. To iterate each method
136
+ * ```typescript
137
+ * for (const file of this.getFiles()) {
138
+ * for (const cls of file.getClasses()) {
139
+ * for (const method of cls.getMethods()) {
140
+ * // ... ...
141
+ * }
142
+ * }
143
+ * }
144
+ *```
145
+ */
55
146
  getFiles(): ArkFile[];
56
- getSdkArkFilesMap(): Map<string, ArkFile>;
147
+ getSdkArkFiles(): ArkFile[];
57
148
  getModuleSdkMap(): Map<string, Sdk[]>;
58
149
  getProjectSdkMap(): Map<string, Sdk>;
59
- getFilesMap(): Map<string, ArkFile>;
60
150
  getNamespace(namespaceSignature: NamespaceSignature): ArkNamespace | null;
61
151
  private getNamespacesMap;
62
152
  getNamespaces(): ArkNamespace[];
153
+ /**
154
+ * Returns the class according to the input class signature.
155
+ * @param classSignature - signature of the class to be obtained.
156
+ * @returns A class.
157
+ */
63
158
  getClass(classSignature: ClassSignature, refresh?: boolean): ArkClass | null;
64
159
  private getClassesMap;
65
160
  getClasses(refresh?: boolean): ArkClass[];
66
161
  getMethod(methodSignature: MethodSignature, refresh?: boolean): ArkMethod | null;
67
162
  private getMethodsMap;
163
+ /**
164
+ * Returns the method associated with the method signature.
165
+ * If no method is associated with this signature, **null** will be returned.
166
+ * An {@link ArkMethod} includes:
167
+ * - Name: the **string** name of method.
168
+ * - Code: the **string** code of the method.
169
+ * - Line: a **number** indicating the line location, initialized as -1.
170
+ * - Column: a **number** indicating the column location, initialized as -1.
171
+ * - Parameters & Types of parameters: the parameters of method and their types.
172
+ * - View tree: the view tree of the method.
173
+ * - ...
174
+ *
175
+ * @param methodSignature - the signature of method.
176
+ * @returns The method associated with the method signature.
177
+ * @example
178
+ * 1. get method from getMethod.
179
+
180
+ ```typescript
181
+ const methodSignatures = this.CHA.resolveCall(xxx, yyy);
182
+ for (const methodSignature of methodSignatures) {
183
+ const method = this.scene.getMethod(methodSignature);
184
+ ... ...
185
+ }
186
+ ```
187
+ */
68
188
  getMethods(refresh?: boolean): ArkMethod[];
69
189
  addToMethodsMap(method: ArkMethod): void;
190
+ removeMethod(method: ArkMethod): boolean;
191
+ removeClass(arkClass: ArkClass): boolean;
192
+ removeNamespace(namespace: ArkNamespace): boolean;
193
+ removeFile(file: ArkFile): boolean;
70
194
  hasMainMethod(): boolean;
71
195
  getEntryPoints(): never[];
72
196
  /** get values that is visible in curr scope */
@@ -81,15 +205,34 @@ export declare class Scene {
81
205
  makeCallGraphCHA(entryPoints: MethodSignature[]): CallGraph;
82
206
  makeCallGraphRTA(entryPoints: MethodSignature[]): CallGraph;
83
207
  /**
84
- * inference type for each non-default method
85
- * because default and generated method was finished
208
+ * Infer type for each non-default method. It infers the type of each field/local/reference.
209
+ * For example, the statement `let b = 5;`, the type of local `b` is `NumberType`; and for the statement `let s = 'hello';`, the type of local `s` is `StringType`. The detailed types are defined in the Type.ts file.
210
+ * @example
211
+ * 1. Infer the type of each class field and method field.
212
+
213
+ ```typescript
214
+ const scene = new Scene();
215
+ scene.buildSceneFromProjectDir(sceneConfig);
216
+ scene.inferTypes();
217
+ ```
86
218
  */
87
219
  inferTypes(): void;
220
+ private inferFile;
88
221
  /**
222
+ * Iterate all assignment statements in methods,
223
+ * and set the type of left operand based on the type of right operand
224
+ * if the left operand is a local variable as well as an unknown.
89
225
  * @Deprecated
226
+ * @example
227
+ * 1. Infer simple type when scene building.
228
+
229
+ ```typescript
230
+ let scene = new Scene();
231
+ scene.buildSceneFromProjectDir(config);
232
+ scene.inferSimpleTypes();
233
+ ```
90
234
  */
91
235
  inferSimpleTypes(): void;
92
- collectProjectImportInfos(): void;
93
236
  getClassMap(): Map<FileSignature | NamespaceSignature, ArkClass[]>;
94
237
  getGlobalVariableMap(): Map<FileSignature | NamespaceSignature, Local[]>;
95
238
  getStaticInitMethods(): ArkMethod[];
@@ -103,8 +246,8 @@ export declare class ModuleScene {
103
246
  private modulePath;
104
247
  private moduleOhPkgFilePath;
105
248
  private ohPkgContent;
106
- constructor();
107
- ModuleScenBuilder(moduleName: string, modulePath: string, projectScene: Scene, recursively?: boolean): void;
249
+ constructor(projectScene: Scene);
250
+ ModuleSceneBuilder(moduleName: string, modulePath: string, recursively?: boolean): void;
108
251
  /**
109
252
  * get oh-package.json5
110
253
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../src/Scene.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../src/Scene.ts"],"names":[],"mappings":"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"}