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.
- package/config/arkanalyzer.json +6 -2
- package/lib/Config.d.ts +1 -0
- package/lib/Config.d.ts.map +1 -1
- package/lib/Scene.d.ts +6 -5
- package/lib/Scene.d.ts.map +1 -1
- package/lib/Scene.js +36 -18
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.js +3 -4
- package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/RapidTypeAnalysis.js +7 -8
- package/lib/callgraph/model/CallGraph.d.ts +5 -5
- package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
- package/lib/callgraph/model/CallGraph.js +18 -21
- package/lib/callgraph/model/CallSite.d.ts +16 -6
- package/lib/callgraph/model/CallSite.d.ts.map +1 -1
- package/lib/callgraph/model/CallSite.js +48 -8
- package/lib/callgraph/model/builder/CallGraphBuilder.d.ts +0 -1
- package/lib/callgraph/model/builder/CallGraphBuilder.d.ts.map +1 -1
- package/lib/callgraph/model/builder/CallGraphBuilder.js +0 -8
- package/lib/callgraph/pointerAnalysis/Pag.d.ts +3 -6
- package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.js +6 -29
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +6 -15
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +61 -85
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts +2 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +12 -8
- package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts +10 -3
- package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.js +20 -5
- package/lib/callgraph/pointerAnalysis/context/Context.d.ts +69 -0
- package/lib/callgraph/pointerAnalysis/context/Context.d.ts.map +1 -0
- package/lib/callgraph/pointerAnalysis/context/Context.js +202 -0
- package/lib/callgraph/pointerAnalysis/context/ContextItem.d.ts +40 -0
- package/lib/callgraph/pointerAnalysis/context/ContextItem.d.ts.map +1 -0
- package/lib/callgraph/pointerAnalysis/context/ContextItem.js +99 -0
- package/lib/callgraph/pointerAnalysis/context/ContextSelector.d.ts +46 -0
- package/lib/callgraph/pointerAnalysis/context/ContextSelector.d.ts.map +1 -0
- package/lib/callgraph/pointerAnalysis/context/ContextSelector.js +138 -0
- package/lib/core/base/Expr.d.ts.map +1 -1
- package/lib/core/base/Expr.js +11 -1
- package/lib/core/base/Local.js +1 -1
- package/lib/core/common/ArkIRTransformer.d.ts +2 -0
- package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkIRTransformer.js +90 -0
- package/lib/core/common/ArkValueTransformer.d.ts +1 -1
- package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkValueTransformer.js +48 -33
- package/lib/core/common/Builtin.d.ts.map +1 -1
- package/lib/core/common/Builtin.js +2 -2
- package/lib/core/common/DummyMainCreater.js +1 -1
- package/lib/core/common/IRInference.d.ts +1 -0
- package/lib/core/common/IRInference.d.ts.map +1 -1
- package/lib/core/common/IRInference.js +60 -44
- package/lib/core/common/ModelUtils.d.ts +1 -0
- package/lib/core/common/ModelUtils.d.ts.map +1 -1
- package/lib/core/common/ModelUtils.js +7 -0
- package/lib/core/common/SdkUtils.d.ts +14 -1
- package/lib/core/common/SdkUtils.d.ts.map +1 -1
- package/lib/core/common/SdkUtils.js +118 -24
- package/lib/core/common/TypeInference.d.ts +2 -1
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +21 -12
- package/lib/core/common/ValueUtil.d.ts +1 -0
- package/lib/core/common/ValueUtil.d.ts.map +1 -1
- package/lib/core/common/ValueUtil.js +7 -0
- package/lib/core/graph/BaseExplicitGraph.d.ts +1 -0
- package/lib/core/graph/BaseExplicitGraph.d.ts.map +1 -1
- package/lib/core/graph/BaseExplicitGraph.js +3 -0
- package/lib/core/graph/Scc.js +1 -1
- package/lib/core/graph/builder/CfgBuilder.d.ts +2 -0
- package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/CfgBuilder.js +59 -7
- package/lib/core/model/ArkImport.js +1 -1
- package/lib/core/model/ArkMethod.d.ts.map +1 -1
- package/lib/core/model/ArkMethod.js +8 -2
- package/lib/core/model/builder/ArkClassBuilder.js +21 -1
- package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkMethodBuilder.js +2 -2
- package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/core/model/builder/builderUtils.js +2 -1
- package/lib/index.d.ts +0 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -4
- package/lib/save/JsonPrinter.d.ts +1 -0
- package/lib/save/JsonPrinter.d.ts.map +1 -1
- package/lib/save/JsonPrinter.js +15 -5
- package/lib/save/arkir/ArkIRMethodPrinter.d.ts.map +1 -1
- package/lib/save/arkir/ArkIRMethodPrinter.js +13 -5
- package/lib/save/source/SourceBody.d.ts +1 -1
- package/lib/save/source/SourceBody.d.ts.map +1 -1
- package/lib/save/source/SourceBody.js +3 -2
- package/lib/save/source/SourceStmt.d.ts.map +1 -1
- package/lib/save/source/SourceStmt.js +12 -4
- package/lib/save/source/SourceTransformer.d.ts +3 -3
- package/lib/save/source/SourceTransformer.d.ts.map +1 -1
- package/lib/save/source/SourceTransformer.js +11 -10
- package/lib/transformer/StaticSingleAssignmentFormer.js +1 -1
- package/package.json +7 -7
- package/lib/callgraph/pointerAnalysis/Context.d.ts +0 -38
- package/lib/callgraph/pointerAnalysis/Context.d.ts.map +0 -1
- package/lib/callgraph/pointerAnalysis/Context.js +0 -154
package/config/arkanalyzer.json
CHANGED
|
@@ -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
package/lib/Config.d.ts.map
CHANGED
|
@@ -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
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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>;
|
package/lib/Scene.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../src/Scene.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,EAAY,MAAM,UAAU,CAAC;AAGpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/G,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAK1C,OAAO,EAAE,SAAS,EAA0B,MAAM,wBAAwB,CAAC;AAG3E,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;
|
|
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["
|
|
71
|
-
SceneBuildStage[SceneBuildStage["
|
|
72
|
-
SceneBuildStage[SceneBuildStage["
|
|
73
|
-
SceneBuildStage[SceneBuildStage["
|
|
74
|
-
SceneBuildStage[SceneBuildStage["
|
|
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 =
|
|
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.
|
|
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;
|
|
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(
|
|
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(
|
|
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(
|
|
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;
|
|
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(
|
|
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(
|
|
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,
|
|
89
|
+
this.addIgnoredCalls(arkClass.getSignature(), callerMethod, calleeNode.getID(), invokeStmt);
|
|
91
90
|
}
|
|
92
91
|
else {
|
|
93
|
-
resolveResult.push(
|
|
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(
|
|
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
|
|
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
|
-
|
|
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":"AAeA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAGvD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAGnG,OAAO,EAAE,QAAQ,
|
|
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.
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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
|
|
26
|
-
|
|
27
|
-
|
|
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,
|
|
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.
|
|
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
|
|
37
|
-
constructor(
|
|
38
|
-
|
|
39
|
-
this.
|
|
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.
|
|
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;
|
|
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"}
|