arkanalyzer 1.0.39 → 1.0.41

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 (103) hide show
  1. package/config/arkanalyzer.json +6 -2
  2. package/lib/Config.d.ts +1 -0
  3. package/lib/Config.d.ts.map +1 -1
  4. package/lib/Scene.d.ts +6 -5
  5. package/lib/Scene.d.ts.map +1 -1
  6. package/lib/Scene.js +36 -18
  7. package/lib/callgraph/algorithm/ClassHierarchyAnalysis.d.ts.map +1 -1
  8. package/lib/callgraph/algorithm/ClassHierarchyAnalysis.js +3 -4
  9. package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts.map +1 -1
  10. package/lib/callgraph/algorithm/RapidTypeAnalysis.js +7 -8
  11. package/lib/callgraph/model/CallGraph.d.ts +5 -5
  12. package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
  13. package/lib/callgraph/model/CallGraph.js +18 -21
  14. package/lib/callgraph/model/CallSite.d.ts +16 -6
  15. package/lib/callgraph/model/CallSite.d.ts.map +1 -1
  16. package/lib/callgraph/model/CallSite.js +48 -8
  17. package/lib/callgraph/model/builder/CallGraphBuilder.d.ts +0 -1
  18. package/lib/callgraph/model/builder/CallGraphBuilder.d.ts.map +1 -1
  19. package/lib/callgraph/model/builder/CallGraphBuilder.js +0 -8
  20. package/lib/callgraph/pointerAnalysis/Pag.d.ts +3 -6
  21. package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
  22. package/lib/callgraph/pointerAnalysis/Pag.js +6 -29
  23. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +6 -15
  24. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
  25. package/lib/callgraph/pointerAnalysis/PagBuilder.js +61 -85
  26. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts +2 -1
  27. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
  28. package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +12 -8
  29. package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts +10 -3
  30. package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts.map +1 -1
  31. package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.js +20 -5
  32. package/lib/callgraph/pointerAnalysis/context/Context.d.ts +69 -0
  33. package/lib/callgraph/pointerAnalysis/context/Context.d.ts.map +1 -0
  34. package/lib/callgraph/pointerAnalysis/context/Context.js +202 -0
  35. package/lib/callgraph/pointerAnalysis/context/ContextItem.d.ts +40 -0
  36. package/lib/callgraph/pointerAnalysis/context/ContextItem.d.ts.map +1 -0
  37. package/lib/callgraph/pointerAnalysis/context/ContextItem.js +99 -0
  38. package/lib/callgraph/pointerAnalysis/context/ContextSelector.d.ts +46 -0
  39. package/lib/callgraph/pointerAnalysis/context/ContextSelector.d.ts.map +1 -0
  40. package/lib/callgraph/pointerAnalysis/context/ContextSelector.js +138 -0
  41. package/lib/core/base/Expr.d.ts.map +1 -1
  42. package/lib/core/base/Expr.js +11 -1
  43. package/lib/core/base/Local.js +1 -1
  44. package/lib/core/common/ArkIRTransformer.d.ts +2 -0
  45. package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
  46. package/lib/core/common/ArkIRTransformer.js +90 -0
  47. package/lib/core/common/ArkValueTransformer.d.ts +1 -1
  48. package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
  49. package/lib/core/common/ArkValueTransformer.js +48 -33
  50. package/lib/core/common/Builtin.d.ts.map +1 -1
  51. package/lib/core/common/Builtin.js +2 -2
  52. package/lib/core/common/DummyMainCreater.js +1 -1
  53. package/lib/core/common/IRInference.d.ts +1 -0
  54. package/lib/core/common/IRInference.d.ts.map +1 -1
  55. package/lib/core/common/IRInference.js +60 -44
  56. package/lib/core/common/ModelUtils.d.ts +1 -0
  57. package/lib/core/common/ModelUtils.d.ts.map +1 -1
  58. package/lib/core/common/ModelUtils.js +7 -0
  59. package/lib/core/common/SdkUtils.d.ts +14 -1
  60. package/lib/core/common/SdkUtils.d.ts.map +1 -1
  61. package/lib/core/common/SdkUtils.js +118 -24
  62. package/lib/core/common/TypeInference.d.ts +2 -1
  63. package/lib/core/common/TypeInference.d.ts.map +1 -1
  64. package/lib/core/common/TypeInference.js +21 -12
  65. package/lib/core/common/ValueUtil.d.ts +1 -0
  66. package/lib/core/common/ValueUtil.d.ts.map +1 -1
  67. package/lib/core/common/ValueUtil.js +7 -0
  68. package/lib/core/graph/BaseExplicitGraph.d.ts +1 -0
  69. package/lib/core/graph/BaseExplicitGraph.d.ts.map +1 -1
  70. package/lib/core/graph/BaseExplicitGraph.js +3 -0
  71. package/lib/core/graph/Scc.js +1 -1
  72. package/lib/core/graph/builder/CfgBuilder.d.ts +2 -0
  73. package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
  74. package/lib/core/graph/builder/CfgBuilder.js +59 -7
  75. package/lib/core/model/ArkImport.js +1 -1
  76. package/lib/core/model/ArkMethod.d.ts.map +1 -1
  77. package/lib/core/model/ArkMethod.js +8 -2
  78. package/lib/core/model/builder/ArkClassBuilder.js +21 -1
  79. package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
  80. package/lib/core/model/builder/ArkMethodBuilder.js +2 -2
  81. package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
  82. package/lib/core/model/builder/builderUtils.js +2 -1
  83. package/lib/index.d.ts +0 -1
  84. package/lib/index.d.ts.map +1 -1
  85. package/lib/index.js +2 -4
  86. package/lib/save/JsonPrinter.d.ts +1 -0
  87. package/lib/save/JsonPrinter.d.ts.map +1 -1
  88. package/lib/save/JsonPrinter.js +15 -5
  89. package/lib/save/arkir/ArkIRMethodPrinter.d.ts.map +1 -1
  90. package/lib/save/arkir/ArkIRMethodPrinter.js +13 -5
  91. package/lib/save/source/SourceBody.d.ts +1 -1
  92. package/lib/save/source/SourceBody.d.ts.map +1 -1
  93. package/lib/save/source/SourceBody.js +3 -2
  94. package/lib/save/source/SourceStmt.d.ts.map +1 -1
  95. package/lib/save/source/SourceStmt.js +12 -4
  96. package/lib/save/source/SourceTransformer.d.ts +3 -3
  97. package/lib/save/source/SourceTransformer.d.ts.map +1 -1
  98. package/lib/save/source/SourceTransformer.js +11 -10
  99. package/lib/transformer/StaticSingleAssignmentFormer.js +1 -1
  100. package/package.json +7 -7
  101. package/lib/callgraph/pointerAnalysis/Context.d.ts +0 -38
  102. package/lib/callgraph/pointerAnalysis/Context.d.ts.map +0 -1
  103. package/lib/callgraph/pointerAnalysis/Context.js +0 -154
@@ -7,15 +7,19 @@
7
7
  ".d.ts"
8
8
  ],
9
9
  "enableLeadingComments": false,
10
+ "enableBuiltIn": true,
10
11
  "ignoreFileNames": [
11
12
  "oh_modules",
12
13
  "node_modules",
13
14
  "build-tools",
14
- "hvigorfile.ts"
15
+ "hvigorfile.ts",
16
+ "hvigorfile.js",
17
+ "hvigor-wrapper.js"
15
18
  ],
16
19
  "sdkGlobalFolders": [
17
20
  "component",
18
- "@internal"
21
+ "@internal",
22
+ "ohos-typescript"
19
23
  ],
20
24
  "tsconfig": "tsconfig.json"
21
25
  }
package/lib/Config.d.ts CHANGED
@@ -19,6 +19,7 @@ export interface SceneOptions {
19
19
  ignoreFileNames?: string[];
20
20
  enableLeadingComments?: boolean;
21
21
  enableTrailingComments?: boolean;
22
+ enableBuiltIn?: boolean;
22
23
  tsconfig?: string;
23
24
  isScanAbc?: boolean;
24
25
  sdkGlobalFolders?: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../src/Config.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAIhD,MAAM,WAAW,GAAG;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE;YACJ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;SAC3B,CAAC;KACL,CAAC;CACL;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,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,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;IACpC,OAAO,CAAC,aAAa,CAAoC;IAEzD,OAAO,CAAC,OAAO,CAAe;gBAElB,OAAO,CAAC,EAAE,YAAY;IAK3B,UAAU,IAAI,YAAY;IAIjC;;;;;;;OAOG;IACI,WAAW,CAAC,iBAAiB,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAUzH;;;;;;;;;;;;OAYG;IACI,mBAAmB,CAAC,sBAAsB,EAAE,MAAM,GAAG,IAAI;IAMzD,qBAAqB,CACxB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,kBAAkB,EAAE,MAAM,EAAE,EAC5B,IAAI,CAAC,EAAE,GAAG,EAAE,EACZ,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,GACrC,IAAI;IAgBP,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,sBAAsB;IAgBvB,aAAa,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAiC3C,oBAAoB,IAAI,MAAM;IAI9B,yBAAyB,IAAI,MAAM;IAInC,eAAe,IAAI,MAAM,EAAE;IAI3B,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;IAIzC,WAAW,IAAI,MAAM,EAAE;IAIvB,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC;IAIvC,aAAa,IAAI,MAAM;IAIvB,UAAU,IAAI,GAAG,EAAE;IAI1B,OAAO,CAAC,oBAAoB;IAkB5B,OAAO,CAAC,iBAAiB;CAY5B"}
1
+ {"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../src/Config.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAIhD,MAAM,WAAW,GAAG;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE;YACJ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;SAC3B,CAAC;KACL,CAAC;CACL;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,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,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;IACpC,OAAO,CAAC,aAAa,CAAoC;IAEzD,OAAO,CAAC,OAAO,CAAe;gBAElB,OAAO,CAAC,EAAE,YAAY;IAK3B,UAAU,IAAI,YAAY;IAIjC;;;;;;;OAOG;IACI,WAAW,CAAC,iBAAiB,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAUzH;;;;;;;;;;;;OAYG;IACI,mBAAmB,CAAC,sBAAsB,EAAE,MAAM,GAAG,IAAI;IAMzD,qBAAqB,CACxB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,kBAAkB,EAAE,MAAM,EAAE,EAC5B,IAAI,CAAC,EAAE,GAAG,EAAE,EACZ,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,GACrC,IAAI;IAgBP,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,sBAAsB;IAgBvB,aAAa,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAiC3C,oBAAoB,IAAI,MAAM;IAI9B,yBAAyB,IAAI,MAAM;IAInC,eAAe,IAAI,MAAM,EAAE;IAI3B,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;IAIzC,WAAW,IAAI,MAAM,EAAE;IAIvB,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC;IAIvC,aAAa,IAAI,MAAM;IAIvB,UAAU,IAAI,GAAG,EAAE;IAI1B,OAAO,CAAC,oBAAoB;IAkB5B,OAAO,CAAC,iBAAiB;CAY5B"}
package/lib/Scene.d.ts CHANGED
@@ -10,11 +10,11 @@ import { ArkExport } from './core/model/ArkExport';
10
10
  import { CallGraph } from './callgraph/model/CallGraph';
11
11
  declare enum SceneBuildStage {
12
12
  BUILD_INIT = 0,
13
- CLASS_DONE = 1,
14
- METHOD_DONE = 2,
15
- CLASS_COLLECTED = 3,
16
- METHOD_COLLECTED = 4,
17
- SDK_INFERRED = 5,
13
+ SDK_INFERRED = 1,
14
+ CLASS_DONE = 2,
15
+ METHOD_DONE = 3,
16
+ CLASS_COLLECTED = 4,
17
+ METHOD_COLLECTED = 5,
18
18
  TYPE_INFERRED = 6
19
19
  }
20
20
  /**
@@ -50,6 +50,7 @@ export declare class Scene {
50
50
  private unhandledFilePaths;
51
51
  private unhandledSdkFilePaths;
52
52
  constructor();
53
+ dispose(): void;
53
54
  getOptions(): SceneOptions;
54
55
  getOverRides(): Map<string, string>;
55
56
  getOverRideDependencyMap(): Map<string, unknown>;
@@ -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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"}
package/lib/Scene.js CHANGED
@@ -63,15 +63,17 @@ const IRInference_1 = require("./core/common/IRInference");
63
63
  const TSConst_1 = require("./core/common/TSConst");
64
64
  const EtsConst_1 = require("./core/common/EtsConst");
65
65
  const SdkUtils_1 = require("./core/common/SdkUtils");
66
+ const PointerAnalysisConfig_1 = require("./callgraph/pointerAnalysis/PointerAnalysisConfig");
67
+ const ValueUtil_1 = require("./core/common/ValueUtil");
66
68
  const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'Scene');
67
69
  var SceneBuildStage;
68
70
  (function (SceneBuildStage) {
69
71
  SceneBuildStage[SceneBuildStage["BUILD_INIT"] = 0] = "BUILD_INIT";
70
- SceneBuildStage[SceneBuildStage["CLASS_DONE"] = 1] = "CLASS_DONE";
71
- SceneBuildStage[SceneBuildStage["METHOD_DONE"] = 2] = "METHOD_DONE";
72
- SceneBuildStage[SceneBuildStage["CLASS_COLLECTED"] = 3] = "CLASS_COLLECTED";
73
- SceneBuildStage[SceneBuildStage["METHOD_COLLECTED"] = 4] = "METHOD_COLLECTED";
74
- SceneBuildStage[SceneBuildStage["SDK_INFERRED"] = 5] = "SDK_INFERRED";
72
+ SceneBuildStage[SceneBuildStage["SDK_INFERRED"] = 1] = "SDK_INFERRED";
73
+ SceneBuildStage[SceneBuildStage["CLASS_DONE"] = 2] = "CLASS_DONE";
74
+ SceneBuildStage[SceneBuildStage["METHOD_DONE"] = 3] = "METHOD_DONE";
75
+ SceneBuildStage[SceneBuildStage["CLASS_COLLECTED"] = 4] = "CLASS_COLLECTED";
76
+ SceneBuildStage[SceneBuildStage["METHOD_COLLECTED"] = 5] = "METHOD_COLLECTED";
75
77
  SceneBuildStage[SceneBuildStage["TYPE_INFERRED"] = 6] = "TYPE_INFERRED";
76
78
  })(SceneBuildStage || (SceneBuildStage = {}));
77
79
  /**
@@ -108,6 +110,16 @@ class Scene {
108
110
  this.unhandledFilePaths = [];
109
111
  this.unhandledSdkFilePaths = [];
110
112
  }
113
+ /*
114
+ * Set all static field to be null, then all related objects could be freed by GC.
115
+ * This method could be called before drop Scene.
116
+ */
117
+ dispose() {
118
+ PointerAnalysisConfig_1.PointerAnalysisConfig.dispose();
119
+ SdkUtils_1.SdkUtils.dispose();
120
+ ValueUtil_1.ValueUtil.dispose();
121
+ ModelUtils_1.ModelUtils.dispose();
122
+ }
111
123
  getOptions() {
112
124
  return this.options;
113
125
  }
@@ -192,6 +204,9 @@ class Scene {
192
204
  logger.warn('This project has no tsconfig.json!');
193
205
  }
194
206
  // handle sdks
207
+ if (this.options.enableBuiltIn && !sceneConfig.getSdksObj().find(sdk => sdk.name === SdkUtils_1.SdkUtils.BUILT_IN_NAME)) {
208
+ sceneConfig.getSdksObj().unshift(SdkUtils_1.SdkUtils.BUILT_IN_SDK);
209
+ }
195
210
  (_a = sceneConfig.getSdksObj()) === null || _a === void 0 ? void 0 : _a.forEach(sdk => {
196
211
  if (!sdk.moduleName) {
197
212
  this.buildSdk(sdk.name, sdk.path);
@@ -207,6 +222,16 @@ class Scene {
207
222
  }
208
223
  }
209
224
  });
225
+ if (this.buildStage < SceneBuildStage.SDK_INFERRED) {
226
+ this.sdkArkFilesMap.forEach(file => {
227
+ IRInference_1.IRInference.inferFile(file);
228
+ SdkUtils_1.SdkUtils.mergeGlobalAPI(file, this.sdkGlobalMap);
229
+ });
230
+ this.sdkArkFilesMap.forEach(file => {
231
+ SdkUtils_1.SdkUtils.postInferredSdk(file, this.sdkGlobalMap);
232
+ });
233
+ this.buildStage = SceneBuildStage.SDK_INFERRED;
234
+ }
210
235
  this.fileLanguages = sceneConfig.getFileLanguages();
211
236
  }
212
237
  parseBuildProfile() {
@@ -221,6 +246,7 @@ class Scene {
221
246
  return;
222
247
  }
223
248
  const buildProfileJson = (0, json5parser_1.parseJsonText)(configurationsText);
249
+ SdkUtils_1.SdkUtils.setEsVersion(buildProfileJson);
224
250
  const modules = buildProfileJson.modules;
225
251
  if (modules instanceof Array) {
226
252
  modules.forEach(module => {
@@ -318,6 +344,7 @@ class Scene {
318
344
  method.freeBodyBuilder();
319
345
  }
320
346
  }
347
+ ModelUtils_1.ModelUtils.dispose();
321
348
  this.buildStage = SceneBuildStage.METHOD_DONE;
322
349
  }
323
350
  genArkFiles() {
@@ -549,7 +576,8 @@ class Scene {
549
576
  this.filesMap.set(arkFile.getFileSignature().toMapKey(), arkFile);
550
577
  }
551
578
  buildSdk(sdkName, sdkPath) {
552
- const allFiles = (0, getAllFiles_1.getAllFiles)(sdkPath, this.options.supportFileExts, this.options.ignoreFileNames);
579
+ const allFiles = sdkName === SdkUtils_1.SdkUtils.BUILT_IN_NAME ? SdkUtils_1.SdkUtils.fetchBuiltInFiles() :
580
+ (0, getAllFiles_1.getAllFiles)(sdkPath, this.options.supportFileExts, this.options.ignoreFileNames);
553
581
  allFiles.forEach(file => {
554
582
  logger.trace('=== parse sdk file:', file);
555
583
  try {
@@ -564,7 +592,7 @@ class Scene {
564
592
  const fileSig = arkFile.getFileSignature().toMapKey();
565
593
  this.sdkArkFilesMap.set(fileSig, arkFile);
566
594
  SdkUtils_1.SdkUtils.buildSdkImportMap(arkFile);
567
- SdkUtils_1.SdkUtils.buildGlobalMap(arkFile, this.sdkGlobalMap);
595
+ SdkUtils_1.SdkUtils.loadGlobalAPI(arkFile, this.sdkGlobalMap);
568
596
  }
569
597
  catch (error) {
570
598
  logger.error('Error parsing file:', file, error);
@@ -963,17 +991,6 @@ class Scene {
963
991
  ```
964
992
  */
965
993
  inferTypes() {
966
- if (this.buildStage < SceneBuildStage.SDK_INFERRED) {
967
- this.sdkArkFilesMap.forEach(file => {
968
- try {
969
- IRInference_1.IRInference.inferFile(file);
970
- }
971
- catch (error) {
972
- logger.error('Error inferring types of sdk file:', file.getFileSignature(), error);
973
- }
974
- });
975
- this.buildStage = SceneBuildStage.SDK_INFERRED;
976
- }
977
994
  this.filesMap.forEach(file => {
978
995
  try {
979
996
  IRInference_1.IRInference.inferFile(file);
@@ -986,6 +1003,7 @@ class Scene {
986
1003
  this.getMethodsMap(true);
987
1004
  this.buildStage = SceneBuildStage.TYPE_INFERRED;
988
1005
  }
1006
+ SdkUtils_1.SdkUtils.dispose();
989
1007
  }
990
1008
  /**
991
1009
  * Iterate all assignment statements in methods,
@@ -1 +1 @@
1
- {"version":3,"file":"ClassHierarchyAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/ClassHierarchyAnalysis.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAErE,qBAAa,sBAAuB,SAAQ,gBAAgB;gBAC5C,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,gBAAgB;IAKtD,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IAkDtE,SAAS,CAAC,gBAAgB,IAAI,QAAQ,EAAE;CAI3C"}
1
+ {"version":3,"file":"ClassHierarchyAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/ClassHierarchyAnalysis.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAErE,qBAAa,sBAAuB,SAAQ,gBAAgB;gBAC5C,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,gBAAgB;IAKtD,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IA2DtE,SAAS,CAAC,gBAAgB,IAAI,QAAQ,EAAE;CAI3C"}
@@ -16,7 +16,6 @@
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.ClassHierarchyAnalysis = void 0;
18
18
  const Expr_1 = require("../../core/base/Expr");
19
- const CallGraph_1 = require("../model/CallGraph");
20
19
  const AbstractAnalysis_1 = require("./AbstractAnalysis");
21
20
  class ClassHierarchyAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
22
21
  constructor(scene, cg, cb) {
@@ -31,7 +30,7 @@ class ClassHierarchyAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
31
30
  }
32
31
  // process anonymous method call
33
32
  this.getParamAnonymousMethod(invokeExpr).forEach(method => {
34
- resolveResult.push(new CallGraph_1.CallSite(invokeStmt, undefined, this.cg.getCallGraphNodeByMethod(method).getID(), callerMethod));
33
+ resolveResult.push(this.cg.getCallSiteManager().newCallSite(invokeStmt, undefined, this.cg.getCallGraphNodeByMethod(method).getID(), callerMethod));
35
34
  });
36
35
  let calleeMethod = this.resolveInvokeExpr(invokeExpr);
37
36
  if (!calleeMethod) {
@@ -39,7 +38,7 @@ class ClassHierarchyAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
39
38
  }
40
39
  if (invokeExpr instanceof Expr_1.ArkStaticInvokeExpr) {
41
40
  // get specific method
42
- resolveResult.push(new CallGraph_1.CallSite(invokeStmt, undefined, this.cg.getCallGraphNodeByMethod(calleeMethod.getSignature()).getID(), callerMethod));
41
+ resolveResult.push(this.cg.getCallSiteManager().newCallSite(invokeStmt, undefined, this.cg.getCallGraphNodeByMethod(calleeMethod.getSignature()).getID(), callerMethod));
43
42
  }
44
43
  else {
45
44
  let declareClass = calleeMethod.getDeclaringArkClass();
@@ -56,7 +55,7 @@ class ClassHierarchyAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
56
55
  return;
57
56
  }
58
57
  if (possibleCalleeMethod && !possibleCalleeMethod.isAbstract()) {
59
- resolveResult.push(new CallGraph_1.CallSite(invokeStmt, undefined, this.cg.getCallGraphNodeByMethod(possibleCalleeMethod.getSignature()).getID(), callerMethod));
58
+ resolveResult.push(this.cg.getCallSiteManager().newCallSite(invokeStmt, undefined, this.cg.getCallGraphNodeByMethod(possibleCalleeMethod.getSignature()).getID(), callerMethod));
60
59
  }
61
60
  });
62
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RapidTypeAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/RapidTypeAnalysis.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAMtD,qBAAa,iBAAkB,SAAQ,gBAAgB;IAEnD,OAAO,CAAC,gBAAgB,CAAkC;IAE1D,OAAO,CAAC,YAAY,CAA2F;gBAEnG,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS;IAIhC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IA8DtE,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAmBtD,OAAO,CAAC,+BAA+B;IA4BhC,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,IAAI;CAK/G"}
1
+ {"version":3,"file":"RapidTypeAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/RapidTypeAnalysis.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAMtD,qBAAa,iBAAkB,SAAQ,gBAAgB;IAEnD,OAAO,CAAC,gBAAgB,CAAkC;IAE1D,OAAO,CAAC,YAAY,CAA2F;gBAEnG,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS;IAIhC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IAgEtE,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAqBtD,OAAO,CAAC,+BAA+B;IA4BhC,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,IAAI;CAK/G"}
@@ -39,7 +39,6 @@ var __importStar = (this && this.__importStar) || function (mod) {
39
39
  Object.defineProperty(exports, "__esModule", { value: true });
40
40
  exports.RapidTypeAnalysis = void 0;
41
41
  const Expr_1 = require("../../core/base/Expr");
42
- const CallGraph_1 = require("../model/CallGraph");
43
42
  const AbstractAnalysis_1 = require("./AbstractAnalysis");
44
43
  const logger_1 = __importStar(require("../../utils/logger"));
45
44
  const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'RTA');
@@ -59,7 +58,7 @@ class RapidTypeAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
59
58
  }
60
59
  // process anonymous method call
61
60
  this.getParamAnonymousMethod(invokeExpr).forEach(method => {
62
- resolveResult.push(new CallGraph_1.CallSite(invokeStmt, undefined, this.cg.getCallGraphNodeByMethod(method).getID(), callerMethod));
61
+ resolveResult.push(this.cg.getCallSiteManager().newCallSite(invokeStmt, undefined, this.cg.getCallGraphNodeByMethod(method).getID(), callerMethod));
63
62
  });
64
63
  let calleeMethod = this.resolveInvokeExpr(invokeExpr);
65
64
  if (!calleeMethod) {
@@ -67,7 +66,7 @@ class RapidTypeAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
67
66
  }
68
67
  if (invokeExpr instanceof Expr_1.ArkStaticInvokeExpr) {
69
68
  // get specific method
70
- resolveResult.push(new CallGraph_1.CallSite(invokeStmt, undefined, this.cg.getCallGraphNodeByMethod(calleeMethod.getSignature()).getID(), callerMethod));
69
+ resolveResult.push(this.cg.getCallSiteManager().newCallSite(invokeStmt, undefined, this.cg.getCallGraphNodeByMethod(calleeMethod.getSignature()).getID(), callerMethod));
71
70
  }
72
71
  else {
73
72
  let declareClass = calleeMethod.getDeclaringArkClass();
@@ -77,8 +76,7 @@ class RapidTypeAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
77
76
  return;
78
77
  }
79
78
  let possibleCalleeMethod = arkClass.getMethodWithName(calleeMethod.getName());
80
- if (possibleCalleeMethod &&
81
- possibleCalleeMethod.isGenerated() &&
79
+ if (possibleCalleeMethod && possibleCalleeMethod.isGenerated() &&
82
80
  arkClass.getSignature().toString() !== declareClass.getSignature().toString()) {
83
81
  // remove the generated method in extended classes
84
82
  return;
@@ -86,11 +84,12 @@ class RapidTypeAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
86
84
  if (!(possibleCalleeMethod && !possibleCalleeMethod.isAbstract())) {
87
85
  return;
88
86
  }
87
+ let calleeNode = this.cg.getCallGraphNodeByMethod(possibleCalleeMethod.getSignature());
89
88
  if (!this.instancedClasses.has(arkClass.getSignature())) {
90
- this.addIgnoredCalls(arkClass.getSignature(), callerMethod, this.cg.getCallGraphNodeByMethod(possibleCalleeMethod.getSignature()).getID(), invokeStmt);
89
+ this.addIgnoredCalls(arkClass.getSignature(), callerMethod, calleeNode.getID(), invokeStmt);
91
90
  }
92
91
  else {
93
- resolveResult.push(new CallGraph_1.CallSite(invokeStmt, undefined, this.cg.getCallGraphNodeByMethod(possibleCalleeMethod.getSignature()).getID(), callerMethod));
92
+ resolveResult.push(this.cg.getCallSiteManager().newCallSite(invokeStmt, undefined, calleeNode.getID(), callerMethod));
94
93
  }
95
94
  });
96
95
  }
@@ -105,7 +104,7 @@ class RapidTypeAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
105
104
  if (ignoredCalls) {
106
105
  ignoredCalls.forEach(call => {
107
106
  this.cg.addDynamicCallEdge(call.caller, call.callee, call.callStmt);
108
- newCallSites.push(new CallGraph_1.CallSite(call.callStmt, undefined, call.callee, call.caller));
107
+ newCallSites.push(this.cg.getCallSiteManager().newCallSite(call.callStmt, undefined, call.callee, call.caller));
109
108
  });
110
109
  }
111
110
  this.instancedClasses.add(sig);
@@ -3,7 +3,7 @@ import { Stmt } from '../../core/base/Stmt';
3
3
  import { Scene } from '../../Scene';
4
4
  import { ArkMethod } from '../../core/model/ArkMethod';
5
5
  import { BaseEdge, BaseNode, BaseExplicitGraph, NodeID } from '../../core/graph/BaseExplicitGraph';
6
- import { CallSite, DynCallSite, ICallSite } from './CallSite';
6
+ import { CallSite, CallSiteID, CallSiteManager, DynCallSite, ICallSite } from './CallSite';
7
7
  export type Method = MethodSignature;
8
8
  export type FuncID = number;
9
9
  export { CallSite, DynCallSite, ICallSite };
@@ -37,14 +37,12 @@ export declare class CallGraphNode extends BaseNode {
37
37
  }
38
38
  export declare class CallGraph extends BaseExplicitGraph {
39
39
  private scene;
40
- private idToCallSiteMap;
41
- private callSiteToIdMap;
40
+ private csManager;
42
41
  private stmtToCallSitemap;
43
42
  private stmtToDynCallSitemap;
44
43
  private methodToCGNodeMap;
45
44
  private callPairToEdgeMap;
46
45
  private methodToCallSiteMap;
47
- private callSiteNum;
48
46
  private entries;
49
47
  private cgStat;
50
48
  private dummyMainMethodID;
@@ -58,7 +56,7 @@ export declare class CallGraph extends BaseExplicitGraph {
58
56
  removeCallGraphEdge(nodeID: NodeID): void;
59
57
  addDynamicCallInfo(callStmt: Stmt, caller: Method, protentialCallee?: Method): void;
60
58
  addDynamicCallEdge(callerID: NodeID, calleeID: NodeID, callStmt: Stmt): void;
61
- getDynCallsiteByStmt(stmt: Stmt): DynCallSite | undefined;
59
+ getDynCallSiteByStmt(stmt: Stmt): DynCallSite | undefined;
62
60
  addStmtToCallSiteMap(stmt: Stmt, cs: CallSite): boolean;
63
61
  getCallSiteByStmt(stmt: Stmt): CallSite[];
64
62
  addMethodToCallSiteMap(funcID: FuncID, cs: CallSite): void;
@@ -79,5 +77,7 @@ export declare class CallGraph extends BaseExplicitGraph {
79
77
  getDummyMainFuncID(): FuncID | undefined;
80
78
  isUnknownMethod(funcID: FuncID): boolean;
81
79
  getGraphName(): string;
80
+ getCallSiteManager(): CallSiteManager;
81
+ getCallSiteInfo(csID: CallSiteID): string;
82
82
  }
83
83
  //# 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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"}
@@ -53,9 +53,6 @@ class CallGraphEdge extends BaseExplicitGraph_1.BaseEdge {
53
53
  const indirectCallNums = this.indirectCalls.size;
54
54
  const directCallNums = this.directCalls.size;
55
55
  const specialCallNums = this.specialCalls.size;
56
- if ([CallGraphNodeKind.intrinsic, CallGraphNodeKind.constructor].includes(this.getDstNode().getKind())) {
57
- return '';
58
- }
59
56
  if (indirectCallNums !== 0 && directCallNums === 0) {
60
57
  return 'color=red';
61
58
  }
@@ -90,9 +87,6 @@ class CallGraphNode extends BaseExplicitGraph_1.BaseNode {
90
87
  return this.kind === CallGraphNodeKind.blank;
91
88
  }
92
89
  getDotAttr() {
93
- if ([CallGraphNodeKind.intrinsic, CallGraphNodeKind.constructor].includes(this.getKind())) {
94
- return '';
95
- }
96
90
  return 'shape=box';
97
91
  }
98
92
  getDotLabel() {
@@ -105,14 +99,12 @@ exports.CallGraphNode = CallGraphNode;
105
99
  class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
106
100
  constructor(s) {
107
101
  super();
108
- this.idToCallSiteMap = new Map();
109
- this.callSiteToIdMap = new Map();
102
+ this.csManager = new CallSite_1.CallSiteManager();
110
103
  this.stmtToCallSitemap = new Map();
111
104
  this.stmtToDynCallSitemap = new Map();
112
105
  this.methodToCGNodeMap = new Map();
113
106
  this.callPairToEdgeMap = new Map();
114
107
  this.methodToCallSiteMap = new Map();
115
- this.callSiteNum = 0;
116
108
  this.scene = s;
117
109
  this.cgStat = new Statistics_1.CGStat();
118
110
  }
@@ -160,16 +152,7 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
160
152
  let callerNode = this.getCallGraphNodeByMethod(caller);
161
153
  let calleeNode = this.getCallGraphNodeByMethod(callee);
162
154
  let args = (_a = callStmt.getInvokeExpr()) === null || _a === void 0 ? void 0 : _a.getArgs();
163
- let cs = new CallSite_1.CallSite(callStmt, args, calleeNode.getID(), callerNode.getID());
164
- let csID;
165
- if (!this.callSiteToIdMap.has(cs)) {
166
- csID = this.callSiteNum++;
167
- this.idToCallSiteMap.set(csID, cs);
168
- this.callSiteToIdMap.set(cs, csID);
169
- }
170
- else {
171
- csID = this.callSiteToIdMap.get(cs);
172
- }
155
+ let cs = this.csManager.newCallSite(callStmt, args, calleeNode.getID(), callerNode.getID());
173
156
  if (this.addStmtToCallSiteMap(callStmt, cs)) {
174
157
  // TODO: check stmt exists
175
158
  }
@@ -180,6 +163,7 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
180
163
  callEdge.getSrcNode().addOutgoingEdge(callEdge);
181
164
  callEdge.getDstNode().addIncomingEdge(callEdge);
182
165
  this.callPairToEdgeMap.set(this.getCallPairString(callerNode.getID(), calleeNode.getID()), callEdge);
166
+ this.edgeNum++;
183
167
  }
184
168
  if (isDirectCall) {
185
169
  callEdge.addDirectCallSite(callStmt);
@@ -205,7 +189,7 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
205
189
  calleeNode = this.getCallGraphNodeByMethod(protentialCallee);
206
190
  }
207
191
  let args = (_a = callStmt.getInvokeExpr()) === null || _a === void 0 ? void 0 : _a.getArgs();
208
- let cs = new CallSite_1.DynCallSite(callStmt, args, calleeNode === null || calleeNode === void 0 ? void 0 : calleeNode.getID(), callerNode.getID());
192
+ let cs = this.csManager.newDynCallSite(callStmt, args, calleeNode === null || calleeNode === void 0 ? void 0 : calleeNode.getID(), callerNode.getID());
209
193
  this.stmtToDynCallSitemap.set(callStmt, cs);
210
194
  }
211
195
  addDynamicCallEdge(callerID, calleeID, callStmt) {
@@ -217,10 +201,11 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
217
201
  callEdge.getSrcNode().addOutgoingEdge(callEdge);
218
202
  callEdge.getDstNode().addIncomingEdge(callEdge);
219
203
  this.callPairToEdgeMap.set(this.getCallPairString(callerNode.getID(), calleeNode.getID()), callEdge);
204
+ this.edgeNum++;
220
205
  }
221
206
  callEdge.addInDirectCallSite(callStmt);
222
207
  }
223
- getDynCallsiteByStmt(stmt) {
208
+ getDynCallSiteByStmt(stmt) {
224
209
  return this.stmtToDynCallSitemap.get(stmt);
225
210
  }
226
211
  addStmtToCallSiteMap(stmt, cs) {
@@ -359,5 +344,17 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
359
344
  getGraphName() {
360
345
  return 'CG';
361
346
  }
347
+ getCallSiteManager() {
348
+ return this.csManager;
349
+ }
350
+ getCallSiteInfo(csID) {
351
+ const callSite = this.csManager.getCallSiteById(csID);
352
+ if (!callSite) {
353
+ return '';
354
+ }
355
+ const callerMethod = this.getMethodByFuncID(callSite.callerFuncID);
356
+ const calleeMethod = this.getMethodByFuncID(callSite.getCalleeFuncID());
357
+ return `CS[${csID}]: {${callerMethod.toString()} -> ${calleeMethod.toString()}}`;
358
+ }
362
359
  }
363
360
  exports.CallGraph = CallGraph;
@@ -1,29 +1,39 @@
1
1
  import { Stmt } from '../../core/base/Stmt';
2
2
  import { Value } from '../../core/base/Value';
3
- import { ContextID } from '../pointerAnalysis/Context';
4
3
  import { FuncID } from './CallGraph';
5
4
  export type CallSiteID = number;
6
5
  export interface ICallSite {
6
+ id: CallSiteID;
7
7
  callStmt: Stmt;
8
8
  args: Value[] | undefined;
9
9
  callerFuncID: FuncID;
10
+ getCalleeFuncID(): FuncID | undefined;
10
11
  }
11
12
  export declare class CallSite implements ICallSite {
13
+ id: CallSiteID;
12
14
  callStmt: Stmt;
13
15
  args: Value[] | undefined;
14
16
  calleeFuncID: FuncID;
15
17
  callerFuncID: FuncID;
16
- constructor(s: Stmt, a: Value[] | undefined, ce: FuncID, cr: FuncID);
18
+ constructor(id: CallSiteID, s: Stmt, a: Value[] | undefined, ce: FuncID, cr: FuncID);
19
+ getCalleeFuncID(): FuncID | undefined;
17
20
  }
18
21
  export declare class DynCallSite implements ICallSite {
22
+ id: CallSiteID;
19
23
  callStmt: Stmt;
20
24
  args: Value[] | undefined;
21
25
  protentialCalleeFuncID: FuncID | undefined;
22
26
  callerFuncID: FuncID;
23
- constructor(s: Stmt, a: Value[] | undefined, ptcCallee: FuncID | undefined, caller: FuncID);
27
+ constructor(id: CallSiteID, s: Stmt, a: Value[] | undefined, ptcCallee: FuncID | undefined, caller: FuncID);
28
+ getCalleeFuncID(): FuncID | undefined;
24
29
  }
25
- export declare class CSCallSite extends CallSite {
26
- cid: ContextID;
27
- constructor(id: ContextID, cs: CallSite);
30
+ export declare class CallSiteManager {
31
+ private idToCallSiteMap;
32
+ private callSiteToIdMap;
33
+ private dynToStaticMap;
34
+ newCallSite(s: Stmt, a: Value[] | undefined, ce: FuncID, cr: FuncID): CallSite;
35
+ newDynCallSite(s: Stmt, a: Value[] | undefined, ptcCallee: FuncID | undefined, caller: FuncID): DynCallSite;
36
+ cloneCallSiteFromDyn(dynCallSite: DynCallSite, calleeFuncID: FuncID): CallSite;
37
+ getCallSiteById(id: CallSiteID): ICallSite | undefined;
28
38
  }
29
39
  //# sourceMappingURL=CallSite.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CallSite.d.ts","sourceRoot":"","sources":["../../../src/callgraph/model/CallSite.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC,MAAM,WAAW,SAAS;IACtB,QAAQ,EAAE,IAAI,CAAC;IACf,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,QAAS,YAAW,SAAS;IAC/B,QAAQ,EAAE,IAAI,CAAC;IACf,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;gBAEhB,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;CAMtE;AAED,qBAAa,WAAY,YAAW,SAAS;IAClC,QAAQ,EAAE,IAAI,CAAC;IACf,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC1B,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,YAAY,EAAE,MAAM,CAAC;gBAEhB,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM;CAM7F;AAED,qBAAa,UAAW,SAAQ,QAAQ;IAC7B,GAAG,EAAE,SAAS,CAAC;gBAEV,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ;CAI1C"}
1
+ {"version":3,"file":"CallSite.d.ts","sourceRoot":"","sources":["../../../src/callgraph/model/CallSite.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC,MAAM,WAAW,SAAS;IACtB,EAAE,EAAE,UAAU,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,IAAI,MAAM,GAAG,SAAS,CAAC;CACzC;AAED,qBAAa,QAAS,YAAW,SAAS;IAC/B,EAAE,EAAE,UAAU,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;gBAEhB,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAQ5E,eAAe,IAAI,MAAM,GAAG,SAAS;CAG/C;AAED,qBAAa,WAAY,YAAW,SAAS;IAClC,EAAE,EAAE,UAAU,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC1B,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,YAAY,EAAE,MAAM,CAAC;gBAEhB,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM;IAQnG,eAAe,IAAI,MAAM,GAAG,SAAS;CAG/C;AAED,qBAAa,eAAe;IACxB,OAAO,CAAC,eAAe,CAAyC;IAChE,OAAO,CAAC,eAAe,CAAyC;IAChE,OAAO,CAAC,cAAc,CAA4C;IAE3D,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,QAAQ;IAQ9E,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW;IAQ3G,oBAAoB,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,GAAG,QAAQ;IAkB9E,eAAe,CAAC,EAAE,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS;CAGhE"}
@@ -14,29 +14,69 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.CSCallSite = exports.DynCallSite = exports.CallSite = void 0;
17
+ exports.CallSiteManager = exports.DynCallSite = exports.CallSite = void 0;
18
18
  class CallSite {
19
- constructor(s, a, ce, cr) {
19
+ constructor(id, s, a, ce, cr) {
20
+ this.id = id;
20
21
  this.callStmt = s;
21
22
  this.args = a;
22
23
  this.calleeFuncID = ce;
23
24
  this.callerFuncID = cr;
24
25
  }
26
+ getCalleeFuncID() {
27
+ return this.calleeFuncID;
28
+ }
25
29
  }
26
30
  exports.CallSite = CallSite;
27
31
  class DynCallSite {
28
- constructor(s, a, ptcCallee, caller) {
32
+ constructor(id, s, a, ptcCallee, caller) {
33
+ this.id = id;
29
34
  this.callerFuncID = caller;
30
35
  this.callStmt = s;
31
36
  this.args = a;
32
37
  this.protentialCalleeFuncID = ptcCallee;
33
38
  }
39
+ getCalleeFuncID() {
40
+ return this.protentialCalleeFuncID;
41
+ }
34
42
  }
35
43
  exports.DynCallSite = DynCallSite;
36
- class CSCallSite extends CallSite {
37
- constructor(id, cs) {
38
- super(cs.callStmt, cs.args, cs.calleeFuncID, cs.callerFuncID);
39
- this.cid = id;
44
+ class CallSiteManager {
45
+ constructor() {
46
+ this.idToCallSiteMap = new Map();
47
+ this.callSiteToIdMap = new Map();
48
+ this.dynToStaticMap = new Map();
49
+ }
50
+ newCallSite(s, a, ce, cr) {
51
+ let id = this.idToCallSiteMap.size;
52
+ let callSite = new CallSite(id, s, a, ce, cr);
53
+ this.idToCallSiteMap.set(id, callSite);
54
+ this.callSiteToIdMap.set(callSite, id);
55
+ return callSite;
56
+ }
57
+ newDynCallSite(s, a, ptcCallee, caller) {
58
+ let id = this.idToCallSiteMap.size;
59
+ let callSite = new DynCallSite(id, s, a, ptcCallee, caller);
60
+ this.idToCallSiteMap.set(id, callSite);
61
+ this.callSiteToIdMap.set(callSite, id);
62
+ return callSite;
63
+ }
64
+ cloneCallSiteFromDyn(dynCallSite, calleeFuncID) {
65
+ var _a;
66
+ let clonedCS = (_a = this.dynToStaticMap.get(dynCallSite.id)) !== null && _a !== void 0 ? _a : [];
67
+ let foundCS = clonedCS
68
+ .map(id => this.idToCallSiteMap.get(id))
69
+ .find(cs => cs.calleeFuncID === calleeFuncID);
70
+ if (foundCS) {
71
+ return foundCS;
72
+ }
73
+ let staticCS = this.newCallSite(dynCallSite.callStmt, dynCallSite.args, calleeFuncID, dynCallSite.callerFuncID);
74
+ clonedCS.push(staticCS.id);
75
+ this.dynToStaticMap.set(dynCallSite.id, clonedCS);
76
+ return staticCS;
77
+ }
78
+ getCallSiteById(id) {
79
+ return this.idToCallSiteMap.get(id);
40
80
  }
41
81
  }
42
- exports.CSCallSite = CSCallSite;
82
+ exports.CallSiteManager = CallSiteManager;
@@ -12,7 +12,6 @@ export declare class CallGraphBuilder {
12
12
  buildCHA4WholeProject(displayGeneratedMethod?: boolean): void;
13
13
  buildRapidTypeCallGraph(entries: Method[], displayGeneratedMethod?: boolean): void;
14
14
  private getDCCallee;
15
- private isConstructor;
16
15
  setEntries(): void;
17
16
  }
18
17
  //# sourceMappingURL=CallGraphBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CallGraphBuilder.d.ts","sourceRoot":"","sources":["../../../../src/callgraph/model/builder/CallGraphBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,EAAoC,MAAM,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAKvC,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE1D,qBAAa,gBAAgB;IACzB,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,KAAK,CAAQ;gBAET,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK;IAK3B,4BAA4B,IAAI,IAAI;IAWpC,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI;IAgBxC,oBAAoB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI;IAgChD,4BAA4B,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,sBAAsB,GAAE,OAAe,GAAG,IAAI;IAW9F,qBAAqB,CAAC,sBAAsB,GAAE,OAAe,GAAG,IAAI;IAKpE,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,sBAAsB,GAAE,OAAe,GAAG,IAAI;IAYhG,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,aAAa;IAId,UAAU,IAAI,IAAI;CAO5B"}
1
+ {"version":3,"file":"CallGraphBuilder.d.ts","sourceRoot":"","sources":["../../../../src/callgraph/model/builder/CallGraphBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,EAAoC,MAAM,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAKvC,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE1D,qBAAa,gBAAgB;IACzB,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,KAAK,CAAQ;gBAET,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK;IAK3B,4BAA4B,IAAI,IAAI;IAWpC,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI;IAgBxC,oBAAoB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI;IA2BhD,4BAA4B,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,sBAAsB,GAAE,OAAe,GAAG,IAAI;IAW9F,qBAAqB,CAAC,sBAAsB,GAAE,OAAe,GAAG,IAAI;IAKpE,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,sBAAsB,GAAE,OAAe,GAAG,IAAI;IAYhG,OAAO,CAAC,WAAW;IAIZ,UAAU,IAAI,IAAI;CAO5B"}