arkanalyzer 1.0.7 → 1.0.9

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 (164) hide show
  1. package/config/arkanalyzer.json +8 -0
  2. package/lib/Config.d.ts +9 -1
  3. package/lib/Config.d.ts.map +1 -1
  4. package/lib/Config.js +24 -11
  5. package/lib/Scene.d.ts +49 -42
  6. package/lib/Scene.d.ts.map +1 -1
  7. package/lib/Scene.js +124 -93
  8. package/lib/callgraph/algorithm/AbstractAnalysis.js +1 -1
  9. package/lib/callgraph/common/Statistics.js +1 -1
  10. package/lib/callgraph/model/CallGraph.d.ts +3 -2
  11. package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
  12. package/lib/callgraph/model/CallGraph.js +15 -5
  13. package/lib/callgraph/model/builder/CallGraphBuilder.js +1 -1
  14. package/lib/callgraph/pointerAnalysis/Pag.d.ts +35 -8
  15. package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
  16. package/lib/callgraph/pointerAnalysis/Pag.js +89 -8
  17. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +32 -5
  18. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
  19. package/lib/callgraph/pointerAnalysis/PagBuilder.js +378 -83
  20. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts +3 -0
  21. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
  22. package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +71 -18
  23. package/lib/core/base/Constant.d.ts +25 -5
  24. package/lib/core/base/Constant.d.ts.map +1 -1
  25. package/lib/core/base/Constant.js +46 -8
  26. package/lib/core/base/Expr.d.ts +45 -40
  27. package/lib/core/base/Expr.d.ts.map +1 -1
  28. package/lib/core/base/Expr.js +236 -150
  29. package/lib/core/base/Local.d.ts +2 -2
  30. package/lib/core/base/Local.d.ts.map +1 -1
  31. package/lib/core/base/Local.js +2 -2
  32. package/lib/core/base/Ref.d.ts +38 -37
  33. package/lib/core/base/Ref.d.ts.map +1 -1
  34. package/lib/core/base/Ref.js +102 -70
  35. package/lib/core/base/Stmt.d.ts +4 -0
  36. package/lib/core/base/Stmt.d.ts.map +1 -1
  37. package/lib/core/base/Stmt.js +12 -1
  38. package/lib/core/base/Type.d.ts +4 -0
  39. package/lib/core/base/Type.d.ts.map +1 -1
  40. package/lib/core/base/Type.js +41 -17
  41. package/lib/core/common/ArkError.d.ts +15 -0
  42. package/lib/core/common/ArkError.d.ts.map +1 -0
  43. package/lib/core/common/ArkError.js +28 -0
  44. package/lib/core/common/ArkIRTransformer.d.ts +1 -1
  45. package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
  46. package/lib/core/common/ArkIRTransformer.js +24 -8
  47. package/lib/core/common/CfgBuilder.d.ts.map +1 -1
  48. package/lib/core/common/CfgBuilder.js +5 -0
  49. package/lib/core/common/Const.d.ts +15 -10
  50. package/lib/core/common/Const.d.ts.map +1 -1
  51. package/lib/core/common/Const.js +18 -11
  52. package/lib/core/common/DummyMainCreater.d.ts +2 -1
  53. package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
  54. package/lib/core/common/DummyMainCreater.js +28 -15
  55. package/lib/core/common/EtsConst.d.ts +1 -0
  56. package/lib/core/common/EtsConst.d.ts.map +1 -1
  57. package/lib/core/common/EtsConst.js +2 -1
  58. package/lib/core/common/IRUtils.d.ts +6 -0
  59. package/lib/core/common/IRUtils.d.ts.map +1 -1
  60. package/lib/core/common/IRUtils.js +29 -2
  61. package/lib/core/common/ModelUtils.d.ts +1 -0
  62. package/lib/core/common/ModelUtils.d.ts.map +1 -1
  63. package/lib/core/common/ModelUtils.js +32 -32
  64. package/lib/core/common/TSConst.d.ts +10 -3
  65. package/lib/core/common/TSConst.d.ts.map +1 -1
  66. package/lib/core/common/TSConst.js +11 -4
  67. package/lib/core/common/TypeInference.d.ts +8 -2
  68. package/lib/core/common/TypeInference.d.ts.map +1 -1
  69. package/lib/core/common/TypeInference.js +218 -87
  70. package/lib/core/common/ValueUtil.d.ts +0 -4
  71. package/lib/core/common/ValueUtil.d.ts.map +1 -1
  72. package/lib/core/common/ValueUtil.js +8 -25
  73. package/lib/core/dataflow/DataflowSolver.d.ts.map +1 -1
  74. package/lib/core/dataflow/DataflowSolver.js +2 -4
  75. package/lib/core/dataflow/TiantAnalysis.js +2 -1
  76. package/lib/core/dataflow/Util.d.ts +1 -1
  77. package/lib/core/dataflow/Util.d.ts.map +1 -1
  78. package/lib/core/dataflow/Util.js +8 -7
  79. package/lib/core/graph/BasicBlock.d.ts +41 -0
  80. package/lib/core/graph/BasicBlock.d.ts.map +1 -1
  81. package/lib/core/graph/BasicBlock.js +132 -1
  82. package/lib/core/graph/Cfg.d.ts +30 -1
  83. package/lib/core/graph/Cfg.d.ts.map +1 -1
  84. package/lib/core/graph/Cfg.js +129 -6
  85. package/lib/core/graph/builder/ViewTreeBuilder.d.ts.map +1 -1
  86. package/lib/core/graph/builder/ViewTreeBuilder.js +3 -2
  87. package/lib/core/model/ArkBaseModel.d.ts +8 -0
  88. package/lib/core/model/ArkBaseModel.d.ts.map +1 -1
  89. package/lib/core/model/ArkBaseModel.js +55 -3
  90. package/lib/core/model/ArkClass.d.ts +36 -30
  91. package/lib/core/model/ArkClass.d.ts.map +1 -1
  92. package/lib/core/model/ArkClass.js +78 -39
  93. package/lib/core/model/ArkExport.d.ts +3 -0
  94. package/lib/core/model/ArkExport.d.ts.map +1 -1
  95. package/lib/core/model/ArkExport.js +10 -0
  96. package/lib/core/model/ArkField.d.ts +2 -0
  97. package/lib/core/model/ArkField.d.ts.map +1 -1
  98. package/lib/core/model/ArkField.js +3 -0
  99. package/lib/core/model/ArkFile.d.ts +4 -0
  100. package/lib/core/model/ArkFile.d.ts.map +1 -1
  101. package/lib/core/model/ArkFile.js +20 -0
  102. package/lib/core/model/ArkImport.d.ts +2 -0
  103. package/lib/core/model/ArkImport.d.ts.map +1 -1
  104. package/lib/core/model/ArkImport.js +3 -0
  105. package/lib/core/model/ArkMetadata.d.ts +20 -0
  106. package/lib/core/model/ArkMetadata.d.ts.map +1 -0
  107. package/lib/core/model/ArkMetadata.js +44 -0
  108. package/lib/core/model/ArkMethod.d.ts +156 -53
  109. package/lib/core/model/ArkMethod.d.ts.map +1 -1
  110. package/lib/core/model/ArkMethod.js +309 -54
  111. package/lib/core/model/ArkNamespace.d.ts +4 -0
  112. package/lib/core/model/ArkNamespace.d.ts.map +1 -1
  113. package/lib/core/model/ArkNamespace.js +13 -0
  114. package/lib/core/model/ArkSignature.d.ts +11 -5
  115. package/lib/core/model/ArkSignature.d.ts.map +1 -1
  116. package/lib/core/model/ArkSignature.js +38 -18
  117. package/lib/core/model/builder/ArkClassBuilder.d.ts +0 -1
  118. package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
  119. package/lib/core/model/builder/ArkClassBuilder.js +9 -34
  120. package/lib/core/model/builder/ArkExportBuilder.d.ts.map +1 -1
  121. package/lib/core/model/builder/ArkExportBuilder.js +6 -1
  122. package/lib/core/model/builder/ArkFieldBuilder.d.ts.map +1 -1
  123. package/lib/core/model/builder/ArkFieldBuilder.js +3 -0
  124. package/lib/core/model/builder/ArkFileBuilder.js +1 -1
  125. package/lib/core/model/builder/ArkImportBuilder.d.ts +2 -1
  126. package/lib/core/model/builder/ArkImportBuilder.d.ts.map +1 -1
  127. package/lib/core/model/builder/ArkImportBuilder.js +12 -5
  128. package/lib/core/model/builder/ArkMethodBuilder.d.ts +2 -1
  129. package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
  130. package/lib/core/model/builder/ArkMethodBuilder.js +87 -47
  131. package/lib/core/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
  132. package/lib/core/model/builder/ArkNamespaceBuilder.js +2 -0
  133. package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
  134. package/lib/core/model/builder/builderUtils.js +25 -2
  135. package/lib/save/source/SourceClass.d.ts.map +1 -1
  136. package/lib/save/source/SourceClass.js +4 -0
  137. package/lib/save/source/SourceField.d.ts.map +1 -1
  138. package/lib/save/source/SourceField.js +4 -0
  139. package/lib/save/source/SourceMethod.d.ts.map +1 -1
  140. package/lib/save/source/SourceMethod.js +7 -0
  141. package/lib/save/source/SourceModule.d.ts.map +1 -1
  142. package/lib/save/source/SourceModule.js +14 -9
  143. package/lib/save/source/SourceNamespace.d.ts.map +1 -1
  144. package/lib/save/source/SourceNamespace.js +4 -0
  145. package/lib/save/source/SourceStmt.d.ts.map +1 -1
  146. package/lib/save/source/SourceStmt.js +15 -3
  147. package/lib/save/source/SourceTransformer.d.ts +6 -0
  148. package/lib/save/source/SourceTransformer.d.ts.map +1 -1
  149. package/lib/save/source/SourceTransformer.js +72 -41
  150. package/lib/save/source/SourceUtils.d.ts.map +1 -1
  151. package/lib/save/source/SourceUtils.js +3 -2
  152. package/lib/transformer/StaticSingleAssignmentFormer.js +1 -1
  153. package/lib/utils/CfgStructualAnalysis.d.ts +1 -0
  154. package/lib/utils/CfgStructualAnalysis.d.ts.map +1 -1
  155. package/lib/utils/CfgStructualAnalysis.js +41 -7
  156. package/lib/utils/callGraphUtils.d.ts.map +1 -1
  157. package/lib/utils/callGraphUtils.js +7 -10
  158. package/lib/utils/crypto_utils.d.ts +6 -0
  159. package/lib/utils/crypto_utils.d.ts.map +1 -0
  160. package/lib/utils/crypto_utils.js +57 -0
  161. package/lib/utils/getAllFiles.d.ts +1 -1
  162. package/lib/utils/getAllFiles.d.ts.map +1 -1
  163. package/lib/utils/getAllFiles.js +4 -5
  164. package/package.json +3 -2
package/lib/Scene.js CHANGED
@@ -77,7 +77,6 @@ class Scene {
77
77
  this.realProjectDir = '';
78
78
  this.moduleScenesMap = new Map();
79
79
  this.modulePath2NameMap = new Map();
80
- this.globalImportInfos = [];
81
80
  this.moduleSdkMap = new Map();
82
81
  this.projectSdkMap = new Map();
83
82
  // values that are visible in curr scope
@@ -95,6 +94,24 @@ class Scene {
95
94
  this.ohPkgContent = {};
96
95
  this.buildStage = SceneBuildStage.BUILD_INIT;
97
96
  }
97
+ getOptions() {
98
+ return this.options;
99
+ }
100
+ clear() {
101
+ this.projectFiles = [];
102
+ this.moduleScenesMap.clear();
103
+ this.modulePath2NameMap.clear();
104
+ this.moduleSdkMap.clear();
105
+ this.projectSdkMap.clear();
106
+ this.filesMap.clear();
107
+ this.namespacesMap.clear();
108
+ this.classesMap.clear();
109
+ this.methodsMap.clear();
110
+ this.sdkArkFilesMap.clear();
111
+ this.sdkGlobalMap.clear();
112
+ this.ohPkgContentMap.clear();
113
+ this.ohPkgContent = {};
114
+ }
98
115
  getStage() {
99
116
  return this.buildStage;
100
117
  }
@@ -106,21 +123,20 @@ class Scene {
106
123
  * @example
107
124
  * 1. Build Scene object from scene config
108
125
 
109
- ```typescript
110
- // build config
111
- const projectDir = ... ...;
112
- const sceneConfig = new SceneConfig();
113
- sceneConfig.buildFromProjectDir(projectDir);
126
+ ```typescript
127
+ // build config
128
+ const projectDir = ... ...;
129
+ const sceneConfig = new SceneConfig();
130
+ sceneConfig.buildFromProjectDir(projectDir);
114
131
 
115
- // build scene
116
- const scene = new Scene();
117
- scene.buildSceneFromProjectDir(sceneConfig);
118
- ```
119
- */
132
+ // build scene
133
+ const scene = new Scene();
134
+ scene.buildSceneFromProjectDir(sceneConfig);
135
+ ```
136
+ */
120
137
  buildSceneFromProjectDir(sceneConfig) {
121
138
  this.buildBasicInfo(sceneConfig);
122
139
  this.genArkFiles();
123
- this.collectProjectImportInfos();
124
140
  }
125
141
  /**
126
142
  * Set the basic information of the scene using a config,
@@ -129,6 +145,7 @@ class Scene {
129
145
  */
130
146
  buildBasicInfo(sceneConfig) {
131
147
  var _a;
148
+ this.options = sceneConfig.getOptions();
132
149
  this.projectName = sceneConfig.getTargetProjectName();
133
150
  this.realProjectDir = fs_1.default.realpathSync(sceneConfig.getTargetProjectDirectory());
134
151
  this.projectFiles = sceneConfig.getProjectFiles();
@@ -178,6 +195,9 @@ class Scene {
178
195
  }
179
196
  }
180
197
  });
198
+ this.sdkArkFilesMap.forEach(file => {
199
+ this.inferFile(file);
200
+ });
181
201
  }
182
202
  addDefaultConstructors() {
183
203
  for (const file of this.getFiles()) {
@@ -211,21 +231,22 @@ class Scene {
211
231
  let arkFile = new ArkFile_1.ArkFile();
212
232
  arkFile.setScene(this);
213
233
  (0, ArkFileBuilder_1.buildArkFileFromFile)(file, this.realProjectDir, arkFile, this.projectName);
214
- this.filesMap.set(arkFile.getFileSignature().toString(), arkFile);
234
+ this.filesMap.set(arkFile.getFileSignature().toMapKey(), arkFile);
215
235
  });
216
236
  this.buildAllMethodBody();
217
237
  this.addDefaultConstructors();
218
238
  }
219
239
  buildSdk(sdkName, sdkPath) {
220
- const allFiles = (0, getAllFiles_1.getAllFiles)(sdkPath, ['.ets', '.ts']);
240
+ const allFiles = (0, getAllFiles_1.getAllFiles)(sdkPath, ['.ets', '.ts'], this.options.ignoreFileNames);
221
241
  allFiles.forEach((file) => {
222
242
  logger.info('=== parse sdk file:', file);
223
243
  let arkFile = new ArkFile_1.ArkFile();
224
244
  arkFile.setScene(this);
225
245
  (0, ArkFileBuilder_1.buildArkFileFromFile)(file, path_1.default.normalize(sdkPath), arkFile, sdkName);
226
246
  ModelUtils_1.ModelUtils.getAllClassesInFile(arkFile).forEach(cls => { var _a; return (_a = cls.getDefaultArkMethod()) === null || _a === void 0 ? void 0 : _a.buildBody(); });
227
- const fileSig = arkFile.getFileSignature().toString();
247
+ const fileSig = arkFile.getFileSignature().toMapKey();
228
248
  this.sdkArkFilesMap.set(fileSig, arkFile);
249
+ ModelUtils_1.ModelUtils.buildGlobalMap(arkFile, this.sdkGlobalMap);
229
250
  });
230
251
  }
231
252
  /**
@@ -241,8 +262,8 @@ class Scene {
241
262
  }
242
263
  });
243
264
  this.modulePath2NameMap.forEach((value, key) => {
244
- let moduleScene = new ModuleScene();
245
- moduleScene.ModuleScenBuilder(value, key, this);
265
+ let moduleScene = new ModuleScene(this);
266
+ moduleScene.ModuleSceneBuilder(value, key);
246
267
  this.moduleScenesMap.set(value, moduleScene);
247
268
  });
248
269
  this.buildAllMethodBody();
@@ -286,8 +307,8 @@ class Scene {
286
307
  });
287
308
  }
288
309
  }
289
- let moduleScene = new ModuleScene();
290
- moduleScene.ModuleScenBuilder(moduleName, modulePath, this);
310
+ let moduleScene = new ModuleScene(this);
311
+ moduleScene.ModuleSceneBuilder(moduleName, modulePath);
291
312
  this.moduleScenesMap.set(moduleName, moduleScene);
292
313
  this.buildAllMethodBody();
293
314
  }
@@ -326,23 +347,29 @@ class Scene {
326
347
  * @example
327
348
  * 1. get ArkFile based on file signature.
328
349
 
329
- ```typescript
330
- if (...) {
331
- const fromSignature = new FileSignature();
332
- fromSignature.setProjectName(im.getDeclaringArkFile().getProjectName());
333
- fromSignature.setFileName(fileName);
334
- return scene.getFile(fromSignature);
335
- }
336
- ```
350
+ ```typescript
351
+ if (...) {
352
+ const fromSignature = new FileSignature();
353
+ fromSignature.setProjectName(im.getDeclaringArkFile().getProjectName());
354
+ fromSignature.setFileName(fileName);
355
+ return scene.getFile(fromSignature);
356
+ }
357
+ ```
337
358
  */
338
359
  getFile(fileSignature) {
339
360
  if (this.projectName === fileSignature.getProjectName()) {
340
- return this.filesMap.get(fileSignature.toString()) || null;
361
+ return this.filesMap.get(fileSignature.toMapKey()) || null;
341
362
  }
342
363
  else {
343
- return this.sdkArkFilesMap.get(fileSignature.toString()) || null;
364
+ return this.sdkArkFilesMap.get(fileSignature.toMapKey()) || null;
344
365
  }
345
366
  }
367
+ setFile(file) {
368
+ this.filesMap.set(file.getFileSignature().toMapKey(), file);
369
+ }
370
+ hasSdkFile(fileSignature) {
371
+ return this.sdkArkFilesMap.has(fileSignature.toMapKey());
372
+ }
346
373
  /**
347
374
  * 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.
348
375
  * @returns The array of {@link ArkFile} from `scene.filesMap.values()`.
@@ -373,8 +400,8 @@ class Scene {
373
400
  getFiles() {
374
401
  return Array.from(this.filesMap.values());
375
402
  }
376
- getSdkArkFilesMap() {
377
- return this.sdkArkFilesMap;
403
+ getSdkArkFiles() {
404
+ return Array.from(this.sdkArkFilesMap.values());
378
405
  }
379
406
  getModuleSdkMap() {
380
407
  return this.moduleSdkMap;
@@ -382,15 +409,17 @@ class Scene {
382
409
  getProjectSdkMap() {
383
410
  return this.projectSdkMap;
384
411
  }
385
- getFilesMap() {
386
- return this.filesMap;
387
- }
388
412
  getNamespace(namespaceSignature) {
413
+ var _a;
389
414
  if (this.projectName === namespaceSignature.getDeclaringFileSignature().getProjectName()) {
390
- return this.getNamespacesMap().get(namespaceSignature.toString()) || null;
415
+ return this.getNamespacesMap().get(namespaceSignature.toMapKey()) || null;
391
416
  }
392
417
  else {
393
- const arkFile = this.sdkArkFilesMap.get(namespaceSignature.getDeclaringFileSignature().toString());
418
+ const arkFile = this.getFile(namespaceSignature.getDeclaringFileSignature());
419
+ const parentNs = namespaceSignature.getDeclaringNamespaceSignature();
420
+ if (parentNs) {
421
+ return ((_a = arkFile === null || arkFile === void 0 ? void 0 : arkFile.getNamespace(parentNs)) === null || _a === void 0 ? void 0 : _a.getNamespace(namespaceSignature)) || null;
422
+ }
394
423
  return (arkFile === null || arkFile === void 0 ? void 0 : arkFile.getNamespace(namespaceSignature)) || null;
395
424
  }
396
425
  }
@@ -398,7 +427,7 @@ class Scene {
398
427
  if (this.namespacesMap.size === 0) {
399
428
  for (const file of this.getFiles()) {
400
429
  ModelUtils_1.ModelUtils.getAllNamespacesInFile(file).forEach((namespace) => {
401
- this.namespacesMap.set(namespace.getNamespaceSignature().toString(), namespace);
430
+ this.namespacesMap.set(namespace.getNamespaceSignature().toMapKey(), namespace);
402
431
  });
403
432
  }
404
433
  }
@@ -415,10 +444,10 @@ class Scene {
415
444
  getClass(classSignature, refresh) {
416
445
  var _a;
417
446
  if (this.projectName === classSignature.getDeclaringFileSignature().getProjectName()) {
418
- return this.getClassesMap(refresh).get(classSignature.toString()) || null;
447
+ return this.getClassesMap(refresh).get(classSignature.toMapKey()) || null;
419
448
  }
420
449
  else {
421
- const arkFile = this.sdkArkFilesMap.get(classSignature.getDeclaringFileSignature().toString());
450
+ const arkFile = this.getFile(classSignature.getDeclaringFileSignature());
422
451
  const namespaceSignature = classSignature.getDeclaringNamespaceSignature();
423
452
  if (namespaceSignature) {
424
453
  return ((_a = arkFile === null || arkFile === void 0 ? void 0 : arkFile.getNamespace(namespaceSignature)) === null || _a === void 0 ? void 0 : _a.getClass(classSignature)) || null;
@@ -431,12 +460,12 @@ class Scene {
431
460
  this.classesMap.clear();
432
461
  for (const file of this.getFiles()) {
433
462
  for (const cls of file.getClasses()) {
434
- this.classesMap.set(cls.getSignature().toString(), cls);
463
+ this.classesMap.set(cls.getSignature().toMapKey(), cls);
435
464
  }
436
465
  }
437
466
  for (const namespace of this.getNamespacesMap().values()) {
438
467
  for (const cls of namespace.getClasses()) {
439
- this.classesMap.set(cls.getSignature().toString(), cls);
468
+ this.classesMap.set(cls.getSignature().toMapKey(), cls);
440
469
  }
441
470
  }
442
471
  }
@@ -448,7 +477,7 @@ class Scene {
448
477
  getMethod(methodSignature, refresh) {
449
478
  var _a;
450
479
  if (this.projectName === methodSignature.getDeclaringClassSignature().getDeclaringFileSignature().getProjectName()) {
451
- return this.getMethodsMap(refresh).get(methodSignature.toString()) || null;
480
+ return this.getMethodsMap(refresh).get(methodSignature.toMapKey()) || null;
452
481
  }
453
482
  else {
454
483
  return ((_a = this.getClass(methodSignature.getDeclaringClassSignature())) === null || _a === void 0 ? void 0 : _a.getMethod(methodSignature)) || null;
@@ -459,7 +488,7 @@ class Scene {
459
488
  this.methodsMap.clear();
460
489
  for (const cls of this.getClassesMap().values()) {
461
490
  for (const method of cls.getMethods(true)) {
462
- this.methodsMap.set(method.getSignature().toString(), method);
491
+ this.methodsMap.set(method.getSignature().toMapKey(), method);
463
492
  }
464
493
  }
465
494
  }
@@ -482,19 +511,31 @@ class Scene {
482
511
  * @example
483
512
  * 1. get method from getMethod.
484
513
 
485
- ```typescript
486
- const methodSignatures = this.CHA.resolveCall(xxx, yyy);
487
- for (const methodSignature of methodSignatures) {
488
- const method = this.scene.getMethod(methodSignature);
489
- ... ...
490
- }
491
- ```
514
+ ```typescript
515
+ const methodSignatures = this.CHA.resolveCall(xxx, yyy);
516
+ for (const methodSignature of methodSignatures) {
517
+ const method = this.scene.getMethod(methodSignature);
518
+ ... ...
519
+ }
520
+ ```
492
521
  */
493
522
  getMethods(refresh) {
494
523
  return Array.from(this.getMethodsMap(refresh).values());
495
524
  }
496
525
  addToMethodsMap(method) {
497
- this.methodsMap.set(method.getSignature().toString(), method);
526
+ this.methodsMap.set(method.getSignature().toMapKey(), method);
527
+ }
528
+ removeMethod(method) {
529
+ return this.methodsMap.delete(method.getSignature().toMapKey());
530
+ }
531
+ removeClass(arkClass) {
532
+ return this.classesMap.delete(arkClass.getSignature().toMapKey());
533
+ }
534
+ removeNamespace(namespace) {
535
+ return this.namespacesMap.delete(namespace.getSignature().toMapKey());
536
+ }
537
+ removeFile(file) {
538
+ return this.filesMap.delete(file.getFileSignature().toMapKey());
498
539
  }
499
540
  hasMainMethod() {
500
541
  return false;
@@ -534,29 +575,28 @@ class Scene {
534
575
  * @example
535
576
  * 1. Infer the type of each class field and method field.
536
577
 
537
- ```typescript
538
- const scene = new Scene();
539
- scene.buildSceneFromProjectDir(sceneConfig);
540
- scene.inferTypes();
541
- ```
578
+ ```typescript
579
+ const scene = new Scene();
580
+ scene.buildSceneFromProjectDir(sceneConfig);
581
+ scene.inferTypes();
582
+ ```
542
583
  */
543
584
  inferTypes() {
544
- this.sdkArkFilesMap.forEach(file => {
545
- ModelUtils_1.ModelUtils.buildGlobalMap(file, this.sdkGlobalMap);
546
- });
547
- this.filesMap.forEach(file => {
548
- ModelUtils_1.ModelUtils.getAllClassesInFile(file).forEach(arkClass => {
549
- TypeInference_1.TypeInference.inferGenericType(arkClass.getGenericsTypes(), arkClass);
550
- arkClass.getFields().forEach(arkField => TypeInference_1.TypeInference.inferTypeInArkField(arkField));
551
- const defaultArkMethod = arkClass.getDefaultArkMethod();
552
- if (defaultArkMethod) {
553
- TypeInference_1.TypeInference.inferTypeInMethod(defaultArkMethod);
554
- }
555
- arkClass.getMethods().forEach(arkMethod => TypeInference_1.TypeInference.inferTypeInMethod(arkMethod));
556
- });
557
- });
585
+ this.filesMap.forEach(file => this.inferFile(file));
586
+ this.getClasses(true);
558
587
  this.getMethodsMap(true);
559
588
  }
589
+ inferFile(file) {
590
+ ModelUtils_1.ModelUtils.getAllClassesInFile(file).forEach(arkClass => {
591
+ TypeInference_1.TypeInference.inferGenericType(arkClass.getGenericsTypes(), arkClass);
592
+ const defaultArkMethod = arkClass.getDefaultArkMethod();
593
+ if (defaultArkMethod) {
594
+ TypeInference_1.TypeInference.inferTypeInMethod(defaultArkMethod);
595
+ }
596
+ arkClass.getFields().forEach(arkField => TypeInference_1.TypeInference.inferTypeInArkField(arkField));
597
+ arkClass.getMethods().forEach(arkMethod => TypeInference_1.TypeInference.inferTypeInMethod(arkMethod));
598
+ });
599
+ }
560
600
  /**
561
601
  * Iterate all assignment statements in methods,
562
602
  * and set the type of left operand based on the type of right operand
@@ -565,11 +605,11 @@ class Scene {
565
605
  * @example
566
606
  * 1. Infer simple type when scene building.
567
607
 
568
- ```typescript
569
- let scene = new Scene();
570
- scene.buildSceneFromProjectDir(config);
571
- scene.inferSimpleTypes();
572
- ```
608
+ ```typescript
609
+ let scene = new Scene();
610
+ scene.buildSceneFromProjectDir(config);
611
+ scene.inferSimpleTypes();
612
+ ```
573
613
  */
574
614
  inferSimpleTypes() {
575
615
  for (let arkFile of this.getFiles()) {
@@ -580,13 +620,6 @@ class Scene {
580
620
  }
581
621
  }
582
622
  }
583
- collectProjectImportInfos() {
584
- this.getFiles().forEach((arkFile) => {
585
- arkFile.getImportInfos().forEach((importInfo) => {
586
- this.globalImportInfos.push(importInfo);
587
- });
588
- });
589
- }
590
623
  getClassMap() {
591
624
  var _a, _b, _c, _d;
592
625
  const classMap = new Map();
@@ -669,7 +702,7 @@ class Scene {
669
702
  try {
670
703
  // 遗留问题:只统计了项目文件的namespace,没统计sdk文件内部的引入
671
704
  const importNameSpaceClasses = classMap.get(importNameSpace.getNamespaceSignature());
672
- importClasses.push(...importNameSpaceClasses.filter(c => !importClasses.includes(c) && c.getName() !== '_DEFAULT_ARK_CLASS'));
705
+ importClasses.push(...importNameSpaceClasses.filter(c => !importClasses.includes(c) && c.getName() !== Const_1.DEFAULT_ARK_CLASS_NAME));
673
706
  }
674
707
  catch (_e) {
675
708
  }
@@ -681,14 +714,14 @@ class Scene {
681
714
  const namespaceStack = [...file.getNamespaces()];
682
715
  for (const ns of namespaceStack) {
683
716
  const nsClasses = classMap.get(ns.getNamespaceSignature());
684
- nsClasses.push(...fileClasses.filter(c => !nsClasses.includes(c) && c.getName() !== '_DEFAULT_ARK_CLASS'));
717
+ nsClasses.push(...fileClasses.filter(c => !nsClasses.includes(c) && c.getName() !== Const_1.DEFAULT_ARK_CLASS_NAME));
685
718
  }
686
719
  while (namespaceStack.length > 0) {
687
720
  const ns = namespaceStack.shift();
688
721
  const nsClasses = classMap.get(ns.getNamespaceSignature());
689
722
  for (const nsns of ns.getNamespaces()) {
690
723
  const nsnsClasses = classMap.get(nsns.getNamespaceSignature());
691
- nsnsClasses.push(...nsClasses.filter(c => !nsnsClasses.includes(c) && c.getName() !== '_DEFAULT_ARK_CLASS'));
724
+ nsnsClasses.push(...nsClasses.filter(c => !nsnsClasses.includes(c) && c.getName() !== Const_1.DEFAULT_ARK_CLASS_NAME));
692
725
  namespaceStack.push(nsns);
693
726
  }
694
727
  }
@@ -780,7 +813,7 @@ class Scene {
780
813
  try {
781
814
  // 遗留问题:只统计了项目文件,没统计sdk文件内部的引入
782
815
  const importNameSpaceClasses = globalVariableMap.get(importNameSpace.getNamespaceSignature());
783
- importLocals.push(...importNameSpaceClasses.filter(c => !importLocals.includes(c) && c.getName() !== '_DEFAULT_ARK_CLASS'));
816
+ importLocals.push(...importNameSpaceClasses.filter(c => !importLocals.includes(c) && c.getName() !== Const_1.DEFAULT_ARK_CLASS_NAME));
784
817
  }
785
818
  catch (_h) {
786
819
  }
@@ -837,17 +870,16 @@ class Scene {
837
870
  }
838
871
  exports.Scene = Scene;
839
872
  class ModuleScene {
840
- constructor() {
841
- this.projectScene = new Scene();
873
+ constructor(projectScene) {
842
874
  this.moduleName = '';
843
875
  this.modulePath = '';
844
876
  this.moduleOhPkgFilePath = '';
845
877
  this.ohPkgContent = {};
878
+ this.projectScene = projectScene;
846
879
  }
847
- ModuleScenBuilder(moduleName, modulePath, projectScene, recursively = false) {
880
+ ModuleSceneBuilder(moduleName, modulePath, recursively = false) {
848
881
  this.moduleName = moduleName;
849
882
  this.modulePath = modulePath;
850
- this.projectScene = projectScene;
851
883
  this.getModuleOhPkgFilePath();
852
884
  if (this.moduleOhPkgFilePath) {
853
885
  this.ohPkgContent = (0, json5parser_1.fetchDependenciesFromFile)(this.moduleOhPkgFilePath);
@@ -883,14 +915,13 @@ class ModuleScene {
883
915
  return this.ohPkgContent;
884
916
  }
885
917
  genArkFiles() {
886
- (0, getAllFiles_1.getAllFiles)(this.modulePath, ['.ets', '.ts']).forEach((file) => {
918
+ (0, getAllFiles_1.getAllFiles)(this.modulePath, ['.ets', '.ts'], this.projectScene.getOptions().ignoreFileNames).forEach((file) => {
887
919
  logger.info('=== parse file:', file);
888
920
  let arkFile = new ArkFile_1.ArkFile();
889
921
  arkFile.setScene(this.projectScene);
890
922
  arkFile.setModuleScene(this);
891
923
  (0, ArkFileBuilder_1.buildArkFileFromFile)(file, this.projectScene.getRealProjectDir(), arkFile, this.projectScene.getProjectName());
892
- const fileSig = arkFile.getFileSignature().toString();
893
- this.projectScene.getFilesMap().set(fileSig, arkFile);
924
+ this.projectScene.setFile(arkFile);
894
925
  });
895
926
  }
896
927
  }
@@ -76,7 +76,7 @@ class AbstractAnalysis {
76
76
  while (this.workList.length !== 0) {
77
77
  const method = this.workList.shift();
78
78
  const cgNode = this.cg.getNode(method);
79
- if (this.processedMethod.has(method) || cgNode.getIsSdkMethod()) {
79
+ if (this.processedMethod.has(method) || cgNode.isSdkMethod()) {
80
80
  continue;
81
81
  }
82
82
  // pre process for RTA only
@@ -108,7 +108,7 @@ class PTAStat {
108
108
  let cg = this.pta.getCallGraph();
109
109
  this.pta.getUnhandledFuncs().forEach(funcID => {
110
110
  let cgNode = cg.getNode(funcID);
111
- if (cgNode.getIsSdkMethod()) {
111
+ if (cgNode.isSdkMethod()) {
112
112
  return;
113
113
  }
114
114
  let f = cg.getArkMethodByFuncID(funcID);
@@ -44,12 +44,12 @@ export declare class CallGraphEdge extends BaseEdge {
44
44
  }
45
45
  export declare class CallGraphNode extends BaseNode {
46
46
  private method;
47
- private isSdkMethod;
47
+ private ifSdkMethod;
48
48
  private isBlank;
49
49
  constructor(id: number, m: Method, k?: CallGraphNodeKind);
50
50
  getMethod(): Method;
51
51
  setSdkMethod(v: boolean): void;
52
- getIsSdkMethod(): boolean;
52
+ isSdkMethod(): boolean;
53
53
  get isBlankMethod(): boolean;
54
54
  set isBlankMethod(is: boolean);
55
55
  getDotAttr(): string;
@@ -90,5 +90,6 @@ export declare class CallGraph extends BaseGraph {
90
90
  printStat(): void;
91
91
  setDummyMainFuncID(dummyMainMethodID: number): void;
92
92
  getDummyMainFuncID(): FuncID | undefined;
93
+ isUnknownMethod(funcID: FuncID): boolean;
93
94
  }
94
95
  //# sourceMappingURL=CallGraph.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CallGraph.d.ts","sourceRoot":"","sources":["../../../src/callgraph/model/CallGraph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CallGraph.d.ts","sourceRoot":"","sources":["../../../src/callgraph/model/CallGraph.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,7 @@ const GraphPrinter_1 = require("../../save/GraphPrinter");
19
19
  const PrinterBuilder_1 = require("../../save/PrinterBuilder");
20
20
  const BaseGraph_1 = require("./BaseGraph");
21
21
  const Statistics_1 = require("../common/Statistics");
22
+ const Const_1 = require("../../core/common/Const");
22
23
  var CallGraphNodeKind;
23
24
  (function (CallGraphNodeKind) {
24
25
  CallGraphNodeKind[CallGraphNodeKind["real"] = 0] = "real";
@@ -93,7 +94,7 @@ exports.CallGraphEdge = CallGraphEdge;
93
94
  class CallGraphNode extends BaseGraph_1.BaseNode {
94
95
  constructor(id, m, k = CallGraphNodeKind.real) {
95
96
  super(id, k);
96
- this.isSdkMethod = false;
97
+ this.ifSdkMethod = false;
97
98
  this.isBlank = false;
98
99
  this.method = m;
99
100
  }
@@ -101,10 +102,10 @@ class CallGraphNode extends BaseGraph_1.BaseNode {
101
102
  return this.method;
102
103
  }
103
104
  setSdkMethod(v) {
104
- this.isSdkMethod = v;
105
+ this.ifSdkMethod = v;
105
106
  }
106
- getIsSdkMethod() {
107
- return this.isSdkMethod;
107
+ isSdkMethod() {
108
+ return this.ifSdkMethod;
108
109
  }
109
110
  get isBlankMethod() {
110
111
  return this.isBlank;
@@ -149,7 +150,7 @@ class CallGraph extends BaseGraph_1.BaseGraph {
149
150
  let id = this.nodeNum;
150
151
  let cgNode = new CallGraphNode(id, method, kind);
151
152
  // check if sdk method
152
- cgNode.setSdkMethod(this.scene.getSdkArkFilesMap().has(method.getDeclaringClassSignature().getDeclaringFileSignature().toString()));
153
+ cgNode.setSdkMethod(this.scene.hasSdkFile(method.getDeclaringClassSignature().getDeclaringFileSignature()));
153
154
  let arkMethod = this.scene.getMethod(method);
154
155
  if (!arkMethod || !arkMethod.getCfg()) {
155
156
  cgNode.isBlankMethod = true;
@@ -334,5 +335,14 @@ class CallGraph extends BaseGraph_1.BaseGraph {
334
335
  getDummyMainFuncID() {
335
336
  return this.dummyMainMethodID;
336
337
  }
338
+ isUnknownMethod(funcID) {
339
+ let method = this.getMethodByFuncID(funcID);
340
+ if (method) {
341
+ if (!(method.getDeclaringClassSignature().getDeclaringFileSignature().getFileName() === Const_1.UNKNOWN_FILE_NAME)) {
342
+ return false;
343
+ }
344
+ }
345
+ return true;
346
+ }
337
347
  }
338
348
  exports.CallGraph = CallGraph;
@@ -35,7 +35,7 @@ class CallGraphBuilder {
35
35
  for (const method of methods) {
36
36
  let m = method.getSignature();
37
37
  let kind = CallGraph_1.CallGraphNodeKind.real;
38
- if (method.isGenerated()) { // || method.getName() === '_DEFAULT_ARK_METHOD') {
38
+ if (method.isGenerated()) {
39
39
  kind = CallGraph_1.CallGraphNodeKind.intrinsic;
40
40
  }
41
41
  if (method.getName() === 'constructor') {