arkanalyzer 1.0.32 → 1.0.33
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 +1 -0
- package/lib/Config.d.ts +1 -0
- package/lib/Config.d.ts.map +1 -1
- package/lib/Config.js +26 -18
- package/lib/Scene.d.ts +5 -5
- package/lib/Scene.d.ts.map +1 -1
- package/lib/Scene.js +21 -19
- package/lib/VFG/DVFG.d.ts.map +1 -1
- package/lib/VFG/builder/DVFGBuilder.d.ts +2 -2
- package/lib/VFG/builder/DVFGBuilder.d.ts.map +1 -1
- package/lib/VFG/builder/DVFGBuilder.js +15 -7
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts +1 -0
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/AbstractAnalysis.js +24 -8
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.js +3 -2
- package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/RapidTypeAnalysis.js +4 -3
- package/lib/callgraph/common/Statistics.d.ts +9 -7
- package/lib/callgraph/common/Statistics.d.ts.map +1 -1
- package/lib/callgraph/common/Statistics.js +18 -6
- package/lib/callgraph/model/CallGraph.d.ts +2 -0
- package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
- package/lib/callgraph/model/CallGraph.js +14 -8
- package/lib/callgraph/model/builder/CallGraphBuilder.d.ts +1 -0
- package/lib/callgraph/model/builder/CallGraphBuilder.d.ts.map +1 -1
- package/lib/callgraph/model/builder/CallGraphBuilder.js +9 -4
- package/lib/callgraph/pointerAnalysis/Context.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/Context.js +2 -2
- package/lib/callgraph/pointerAnalysis/DummyCallCreator.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/DummyCallCreator.js +4 -2
- package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PTAUtils.js +2 -3
- package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.js +27 -35
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +63 -46
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +12 -12
- package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PtsDS.d.ts +1 -1
- package/lib/callgraph/pointerAnalysis/PtsDS.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PtsDS.js +10 -6
- package/lib/core/base/Constant.js +2 -2
- package/lib/core/base/DefUseChain.d.ts.map +1 -1
- package/lib/core/base/DefUseChain.js +1 -1
- package/lib/core/base/Expr.d.ts.map +1 -1
- package/lib/core/base/Expr.js +3 -5
- package/lib/core/base/Local.d.ts.map +1 -1
- package/lib/core/base/Local.js +7 -2
- package/lib/core/base/Position.d.ts.map +1 -1
- package/lib/core/base/Position.js +1 -1
- package/lib/core/base/Ref.d.ts.map +1 -1
- package/lib/core/base/Ref.js +3 -1
- package/lib/core/base/Stmt.d.ts.map +1 -1
- package/lib/core/base/Stmt.js +1 -4
- package/lib/core/base/Trap.js +1 -1
- package/lib/core/base/Type.d.ts.map +1 -1
- package/lib/core/base/Type.js +2 -2
- package/lib/core/base/Value.d.ts +1 -1
- package/lib/core/base/Value.d.ts.map +1 -1
- package/lib/core/base/Value.js +1 -1
- package/lib/core/common/ArkError.js +1 -1
- package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkIRTransformer.js +46 -36
- package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkValueTransformer.js +295 -109
- package/lib/core/common/Builtin.d.ts.map +1 -1
- package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
- package/lib/core/common/DummyMainCreater.js +10 -4
- package/lib/core/common/EtsConst.d.ts.map +1 -1
- package/lib/core/common/EtsConst.js +3 -12
- package/lib/core/common/ExprUseReplacer.js +1 -1
- package/lib/core/common/IRInference.d.ts.map +1 -1
- package/lib/core/common/IRInference.js +31 -20
- package/lib/core/common/IRUtils.d.ts.map +1 -1
- package/lib/core/common/IRUtils.js +5 -4
- package/lib/core/common/ModelUtils.d.ts +0 -1
- package/lib/core/common/ModelUtils.d.ts.map +1 -1
- package/lib/core/common/ModelUtils.js +36 -29
- package/lib/core/common/RefUseReplacer.js +1 -1
- package/lib/core/common/SdkUtils.d.ts +3 -0
- package/lib/core/common/SdkUtils.d.ts.map +1 -1
- package/lib/core/common/SdkUtils.js +29 -10
- package/lib/core/common/StmtDefReplacer.d.ts.map +1 -1
- package/lib/core/common/StmtDefReplacer.js +1 -1
- package/lib/core/common/StmtUseReplacer.d.ts.map +1 -1
- package/lib/core/common/StmtUseReplacer.js +1 -1
- package/lib/core/common/TSConst.d.ts.map +1 -1
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +25 -17
- package/lib/core/common/ValueUtil.d.ts.map +1 -1
- package/lib/core/common/ValueUtil.js +1 -1
- package/lib/core/common/VisibleValue.d.ts.map +1 -1
- package/lib/core/common/VisibleValue.js +5 -5
- package/lib/core/dataflow/DataflowProblem.d.ts.map +1 -1
- package/lib/core/dataflow/DataflowProblem.js +1 -1
- package/lib/core/dataflow/DataflowResult.js +1 -1
- package/lib/core/dataflow/DataflowSolver.d.ts.map +1 -1
- package/lib/core/dataflow/DataflowSolver.js +5 -3
- package/lib/core/dataflow/Edge.d.ts.map +1 -1
- package/lib/core/dataflow/Edge.js +1 -1
- package/lib/core/dataflow/Fact.js +1 -1
- package/lib/core/dataflow/GenericDataFlow.js +5 -5
- package/lib/core/dataflow/ReachingDef.js +4 -4
- package/lib/core/dataflow/UndefinedVariable.d.ts.map +1 -1
- package/lib/core/dataflow/UndefinedVariable.js +17 -13
- package/lib/core/dataflow/Util.d.ts +4 -4
- package/lib/core/dataflow/Util.d.ts.map +1 -1
- package/lib/core/dataflow/Util.js +3 -5
- package/lib/core/graph/BaseExplicitGraph.d.ts.map +1 -1
- package/lib/core/graph/BaseExplicitGraph.js +1 -1
- package/lib/core/graph/BaseImplicitGraph.d.ts.map +1 -1
- package/lib/core/graph/BasicBlock.d.ts.map +1 -1
- package/lib/core/graph/BasicBlock.js +11 -7
- package/lib/core/graph/Cfg.d.ts.map +1 -1
- package/lib/core/graph/Cfg.js +10 -4
- package/lib/core/graph/DependsGraph.d.ts.map +1 -1
- package/lib/core/graph/DependsGraph.js +1 -1
- package/lib/core/graph/DominanceFinder.d.ts.map +1 -1
- package/lib/core/graph/DominanceFinder.js +4 -4
- package/lib/core/graph/DominanceTree.js +1 -1
- package/lib/core/graph/GraphTraits.js +1 -1
- package/lib/core/graph/Scc.js +2 -2
- package/lib/core/graph/ViewTree.js +1 -1
- package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/CfgBuilder.js +22 -13
- package/lib/core/graph/builder/ConditionBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/ConditionBuilder.js +21 -22
- package/lib/core/graph/builder/LoopBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/LoopBuilder.js +13 -10
- package/lib/core/graph/builder/SwitchBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/SwitchBuilder.js +7 -4
- package/lib/core/graph/builder/TrapBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/TrapBuilder.js +4 -3
- package/lib/core/graph/builder/ViewTreeBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/ViewTreeBuilder.js +18 -19
- package/lib/core/model/ArkBaseModel.d.ts.map +1 -1
- package/lib/core/model/ArkBaseModel.js +8 -5
- package/lib/core/model/ArkBody.d.ts +1 -0
- package/lib/core/model/ArkBody.d.ts.map +1 -1
- package/lib/core/model/ArkBody.js +11 -1
- package/lib/core/model/ArkClass.d.ts.map +1 -1
- package/lib/core/model/ArkClass.js +3 -5
- package/lib/core/model/ArkExport.d.ts +4 -0
- package/lib/core/model/ArkExport.d.ts.map +1 -1
- package/lib/core/model/ArkExport.js +8 -1
- package/lib/core/model/ArkField.d.ts.map +1 -1
- package/lib/core/model/ArkField.js +2 -2
- package/lib/core/model/ArkFile.d.ts +1 -0
- package/lib/core/model/ArkFile.d.ts.map +1 -1
- package/lib/core/model/ArkFile.js +21 -6
- package/lib/core/model/ArkImport.d.ts.map +1 -1
- package/lib/core/model/ArkImport.js +1 -1
- package/lib/core/model/ArkMetadata.d.ts.map +1 -1
- package/lib/core/model/ArkMetadata.js +1 -1
- package/lib/core/model/ArkMethod.d.ts +6 -5
- package/lib/core/model/ArkMethod.d.ts.map +1 -1
- package/lib/core/model/ArkMethod.js +27 -13
- package/lib/core/model/ArkNamespace.d.ts +1 -1
- package/lib/core/model/ArkNamespace.d.ts.map +1 -1
- package/lib/core/model/ArkNamespace.js +5 -6
- package/lib/core/model/ArkSignature.d.ts +4 -2
- package/lib/core/model/ArkSignature.d.ts.map +1 -1
- package/lib/core/model/ArkSignature.js +17 -17
- package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkClassBuilder.js +15 -16
- package/lib/core/model/builder/ArkExportBuilder.d.ts +2 -1
- package/lib/core/model/builder/ArkExportBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkExportBuilder.js +17 -11
- package/lib/core/model/builder/ArkFieldBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkFieldBuilder.js +6 -7
- package/lib/core/model/builder/ArkFileBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkFileBuilder.js +22 -11
- package/lib/core/model/builder/ArkImportBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkImportBuilder.js +13 -8
- package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkMethodBuilder.js +3 -3
- package/lib/core/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkNamespaceBuilder.js +7 -9
- package/lib/core/model/builder/ArkSignatureBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkSignatureBuilder.js +1 -1
- package/lib/core/model/builder/BodyBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/BodyBuilder.js +8 -5
- package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/core/model/builder/builderUtils.js +15 -13
- package/lib/index.d.ts.map +1 -1
- package/lib/save/ArkStream.d.ts.map +1 -1
- package/lib/save/ArkStream.js +1 -1
- package/lib/save/DotPrinter.d.ts.map +1 -1
- package/lib/save/DotPrinter.js +2 -4
- package/lib/save/GraphPrinter.d.ts.map +1 -1
- package/lib/save/GraphPrinter.js +2 -3
- package/lib/save/JsonPrinter.d.ts.map +1 -1
- package/lib/save/JsonPrinter.js +29 -29
- package/lib/save/Printer.js +1 -1
- package/lib/save/PrinterBuilder.d.ts.map +1 -1
- package/lib/save/PrinterBuilder.js +1 -1
- package/lib/save/ViewTreePrinter.d.ts.map +1 -1
- package/lib/save/ViewTreePrinter.js +3 -3
- package/lib/save/arkir/ArkIRClassPrinter.js +1 -1
- package/lib/save/arkir/ArkIRMethodPrinter.js +5 -5
- package/lib/save/arkir/ArkIRNamespacePrinter.d.ts.map +1 -1
- package/lib/save/arkir/ArkIRNamespacePrinter.js +2 -3
- package/lib/save/base/BasePrinter.js +2 -2
- package/lib/save/base/ExportPrinter.d.ts.map +1 -1
- package/lib/save/base/ExportPrinter.js +3 -6
- package/lib/save/base/ImportPrinter.d.ts.map +1 -1
- package/lib/save/base/ImportPrinter.js +2 -6
- package/lib/save/base/PrinterUtils.d.ts.map +1 -1
- package/lib/save/base/PrinterUtils.js +2 -4
- package/lib/save/serializeArkIR.d.ts.map +1 -1
- package/lib/save/serializeArkIR.js +2 -2
- package/lib/save/source/SourceBase.d.ts.map +1 -1
- package/lib/save/source/SourceBase.js +1 -3
- package/lib/save/source/SourceBody.d.ts.map +1 -1
- package/lib/save/source/SourceBody.js +1 -5
- package/lib/save/source/SourceClass.d.ts.map +1 -1
- package/lib/save/source/SourceClass.js +2 -3
- package/lib/save/source/SourceField.js +2 -2
- package/lib/save/source/SourceFilePrinter.d.ts.map +1 -1
- package/lib/save/source/SourceMethod.d.ts.map +1 -1
- package/lib/save/source/SourceMethod.js +5 -6
- package/lib/save/source/SourceNamespace.d.ts.map +1 -1
- package/lib/save/source/SourceNamespace.js +2 -3
- package/lib/save/source/SourceStmt.d.ts.map +1 -1
- package/lib/save/source/SourceStmt.js +9 -14
- package/lib/save/source/SourceTransformer.d.ts.map +1 -1
- package/lib/save/source/SourceTransformer.js +6 -10
- package/lib/transformer/FunctionTransformer.d.ts.map +1 -1
- package/lib/transformer/FunctionTransformer.js +1 -1
- package/lib/transformer/SceneTransformer.d.ts.map +1 -1
- package/lib/transformer/SceneTransformer.js +1 -1
- package/lib/transformer/StaticSingleAssignmentFormer.d.ts.map +1 -1
- package/lib/transformer/StaticSingleAssignmentFormer.js +1 -1
- package/lib/transformer/Transformer.d.ts.map +1 -1
- package/lib/transformer/Transformer.js +2 -3
- package/lib/utils/AstTreeUtils.d.ts.map +1 -1
- package/lib/utils/AstTreeUtils.js +1 -1
- package/lib/utils/CfgStructualAnalysis.d.ts.map +1 -1
- package/lib/utils/CfgStructualAnalysis.js +6 -18
- package/lib/utils/FileUtils.d.ts.map +1 -1
- package/lib/utils/FileUtils.js +7 -7
- package/lib/utils/SparseBitVector.d.ts.map +1 -1
- package/lib/utils/SparseBitVector.js +6 -5
- package/lib/utils/callGraphUtils.d.ts.map +1 -1
- package/lib/utils/callGraphUtils.js +9 -7
- package/lib/utils/crypto_utils.d.ts.map +1 -1
- package/lib/utils/crypto_utils.js +2 -2
- package/lib/utils/entryMethodUtils.d.ts.map +1 -1
- package/lib/utils/entryMethodUtils.js +18 -18
- package/lib/utils/getAllFiles.d.ts.map +1 -1
- package/lib/utils/json5parser.d.ts.map +1 -1
- package/lib/utils/json5parser.js +1 -1
- package/lib/utils/logger.d.ts.map +1 -1
- package/lib/utils/pathTransfer.d.ts +0 -1
- package/lib/utils/pathTransfer.d.ts.map +1 -1
- package/lib/utils/pathTransfer.js +2 -11
- package/package.json +2 -2
package/config/arkanalyzer.json
CHANGED
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;
|
|
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;IASzH;;;;;;;;;;;;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/Config.js
CHANGED
|
@@ -45,7 +45,6 @@ const fs_1 = __importDefault(require("fs"));
|
|
|
45
45
|
const path_1 = __importDefault(require("path"));
|
|
46
46
|
const logger_1 = __importStar(require("./utils/logger"));
|
|
47
47
|
const getAllFiles_1 = require("./utils/getAllFiles");
|
|
48
|
-
const pathTransfer_1 = require("./utils/pathTransfer");
|
|
49
48
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'Config');
|
|
50
49
|
const CONFIG_FILENAME = 'arkanalyzer.json';
|
|
51
50
|
const DEFAULT_CONFIG_FILE = path_1.default.join(__dirname, '../config', CONFIG_FILENAME);
|
|
@@ -116,14 +115,14 @@ class SceneConfig {
|
|
|
116
115
|
}
|
|
117
116
|
processFilePaths(fileOrDirectory, projectDir) {
|
|
118
117
|
let absoluteFilePath = '';
|
|
119
|
-
if (
|
|
118
|
+
if (path_1.default.isAbsolute(fileOrDirectory)) {
|
|
120
119
|
absoluteFilePath = fileOrDirectory;
|
|
121
120
|
}
|
|
122
121
|
else {
|
|
123
122
|
absoluteFilePath = path_1.default.join(projectDir, fileOrDirectory);
|
|
124
123
|
}
|
|
125
124
|
if (fs_1.default.statSync(absoluteFilePath).isDirectory()) {
|
|
126
|
-
(0, getAllFiles_1.getAllFiles)(absoluteFilePath, this.getOptions().supportFileExts, this.options.ignoreFileNames).forEach(
|
|
125
|
+
(0, getAllFiles_1.getAllFiles)(absoluteFilePath, this.getOptions().supportFileExts, this.options.ignoreFileNames).forEach(filePath => {
|
|
127
126
|
if (!this.projectFiles.includes(filePath)) {
|
|
128
127
|
this.projectFiles.push(filePath);
|
|
129
128
|
}
|
|
@@ -135,15 +134,14 @@ class SceneConfig {
|
|
|
135
134
|
}
|
|
136
135
|
setLanguageTagForFiles(fileOrDirectory, projectDir, languageTag) {
|
|
137
136
|
let absoluteFilePath = '';
|
|
138
|
-
if (
|
|
137
|
+
if (path_1.default.isAbsolute(fileOrDirectory)) {
|
|
139
138
|
absoluteFilePath = fileOrDirectory;
|
|
140
139
|
}
|
|
141
140
|
else {
|
|
142
141
|
absoluteFilePath = path_1.default.join(projectDir, fileOrDirectory);
|
|
143
142
|
}
|
|
144
143
|
if (fs_1.default.statSync(absoluteFilePath).isDirectory()) {
|
|
145
|
-
(0, getAllFiles_1.getAllFiles)(absoluteFilePath, this.getOptions().supportFileExts, this.options.ignoreFileNames)
|
|
146
|
-
.forEach((filePath) => {
|
|
144
|
+
(0, getAllFiles_1.getAllFiles)(absoluteFilePath, this.getOptions().supportFileExts, this.options.ignoreFileNames).forEach(filePath => {
|
|
147
145
|
this.fileLanguages.set(filePath, languageTag);
|
|
148
146
|
});
|
|
149
147
|
}
|
|
@@ -171,9 +169,7 @@ class SceneConfig {
|
|
|
171
169
|
return;
|
|
172
170
|
}
|
|
173
171
|
const targetProjectName = configurations.targetProjectName ? configurations.targetProjectName : '';
|
|
174
|
-
const targetProjectDirectory = configurations.targetProjectDirectory
|
|
175
|
-
? configurations.targetProjectDirectory
|
|
176
|
-
: '';
|
|
172
|
+
const targetProjectDirectory = configurations.targetProjectDirectory ? configurations.targetProjectDirectory : '';
|
|
177
173
|
const sdks = configurations.sdks ? configurations.sdks : [];
|
|
178
174
|
if (configurations.options) {
|
|
179
175
|
this.options = Object.assign(Object.assign({}, this.options), configurations.options);
|
|
@@ -208,16 +204,28 @@ class SceneConfig {
|
|
|
208
204
|
getSdksObj() {
|
|
209
205
|
return this.sdksObj;
|
|
210
206
|
}
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
configFile =
|
|
207
|
+
getDefaultConfigPath() {
|
|
208
|
+
try {
|
|
209
|
+
const moduleRoot = path_1.default.dirname(path_1.default.dirname(require.resolve('arkanalyzer')));
|
|
210
|
+
return path_1.default.join(moduleRoot, 'config', CONFIG_FILENAME);
|
|
211
|
+
}
|
|
212
|
+
catch (e) {
|
|
213
|
+
logger.info(`Failed to resolve default config file from dependency path with error: ${e}`);
|
|
214
|
+
let configFile = DEFAULT_CONFIG_FILE;
|
|
215
|
+
if (!fs_1.default.existsSync(configFile)) {
|
|
216
|
+
logger.debug(`default config file '${DEFAULT_CONFIG_FILE}' not found.`);
|
|
217
|
+
configFile = path_1.default.join(__dirname, 'config', CONFIG_FILENAME);
|
|
218
|
+
logger.debug(`use new config file '${configFile}'.`);
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
logger.debug(`default config file '${DEFAULT_CONFIG_FILE}' found, use it.`);
|
|
222
|
+
}
|
|
223
|
+
return configFile;
|
|
219
224
|
}
|
|
220
|
-
|
|
225
|
+
}
|
|
226
|
+
loadDefaultConfig(options) {
|
|
227
|
+
const configFile = this.getDefaultConfigPath();
|
|
228
|
+
logger.debug(`try to parse config file ${configFile}`);
|
|
221
229
|
try {
|
|
222
230
|
this.options = Object.assign(Object.assign({}, this.options), JSON.parse(fs_1.default.readFileSync(configFile, 'utf-8')));
|
|
223
231
|
}
|
package/lib/Scene.d.ts
CHANGED
|
@@ -164,7 +164,7 @@ export declare class Scene {
|
|
|
164
164
|
* @example
|
|
165
165
|
* 1. In inferSimpleTypes() to check arkClass and arkMethod.
|
|
166
166
|
* ```typescript
|
|
167
|
-
* public inferSimpleTypes() {
|
|
167
|
+
* public inferSimpleTypes(): void {
|
|
168
168
|
* for (let arkFile of this.getFiles()) {
|
|
169
169
|
* for (let arkClass of arkFile.getClasses()) {
|
|
170
170
|
* for (let arkMethod of arkClass.getMethods()) {
|
|
@@ -236,14 +236,14 @@ export declare class Scene {
|
|
|
236
236
|
removeNamespace(namespace: ArkNamespace): boolean;
|
|
237
237
|
removeFile(file: ArkFile): boolean;
|
|
238
238
|
hasMainMethod(): boolean;
|
|
239
|
-
getEntryPoints():
|
|
239
|
+
getEntryPoints(): MethodSignature[];
|
|
240
240
|
/** get values that is visible in curr scope */
|
|
241
241
|
getVisibleValue(): VisibleValue;
|
|
242
242
|
getOhPkgContent(): {
|
|
243
|
-
[
|
|
243
|
+
[p: string]: unknown;
|
|
244
244
|
};
|
|
245
245
|
getOhPkgContentMap(): Map<string, {
|
|
246
|
-
[
|
|
246
|
+
[p: string]: unknown;
|
|
247
247
|
}>;
|
|
248
248
|
getOhPkgFilePath(): string;
|
|
249
249
|
makeCallGraphCHA(entryPoints: MethodSignature[]): CallGraph;
|
|
@@ -316,7 +316,7 @@ export declare class ModuleScene {
|
|
|
316
316
|
getModulePath(): string;
|
|
317
317
|
getOhPkgFilePath(): string;
|
|
318
318
|
getOhPkgContent(): {
|
|
319
|
-
[
|
|
319
|
+
[p: string]: unknown;
|
|
320
320
|
};
|
|
321
321
|
getModuleFilesMap(): Map<string, ArkFile>;
|
|
322
322
|
addArkFile(arkFile: ArkFile): void;
|
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;AAUxD,aAAK,eAAe;IAChB,UAAU,IAAA;IACV,UAAU,IAAA;IACV,WAAW,IAAA;IACX,eAAe,IAAA;IACf,gBAAgB,IAAA;IAChB,YAAY,IAAA;IACZ,aAAa,IAAA;CAChB;AAED;;;GAGG;AACH,qBAAa,KAAK;IACd,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,cAAc,CAAc;IAEpC,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,kBAAkB,CAAkD;IAE5E,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,aAAa,CAA+B;IAGpD,OAAO,CAAC,YAAY,CAAoC;IAGxD,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,UAAU,CAAqC;IAEvD,OAAO,CAAC,cAAc,CAAmC;IACzD,OAAO,CAAC,YAAY,CAAwD;IAC5E,OAAO,CAAC,eAAe,CAAsF;IAC7G,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,qBAAqB,CAAmC;IAChE,OAAO,CAAC,wBAAwB,CAAC,
|
|
1
|
+
{"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../src/Scene.ts"],"names":[],"mappings":"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"}
|
package/lib/Scene.js
CHANGED
|
@@ -74,7 +74,6 @@ var SceneBuildStage;
|
|
|
74
74
|
SceneBuildStage[SceneBuildStage["SDK_INFERRED"] = 5] = "SDK_INFERRED";
|
|
75
75
|
SceneBuildStage[SceneBuildStage["TYPE_INFERRED"] = 6] = "TYPE_INFERRED";
|
|
76
76
|
})(SceneBuildStage || (SceneBuildStage = {}));
|
|
77
|
-
;
|
|
78
77
|
/**
|
|
79
78
|
* The Scene class includes everything in the analyzed project.
|
|
80
79
|
* We should be able to re-generate the project's code based on this class.
|
|
@@ -193,7 +192,7 @@ class Scene {
|
|
|
193
192
|
logger.warn('This project has no tsconfig.json!');
|
|
194
193
|
}
|
|
195
194
|
// handle sdks
|
|
196
|
-
(_a = sceneConfig.getSdksObj()) === null || _a === void 0 ? void 0 : _a.forEach(
|
|
195
|
+
(_a = sceneConfig.getSdksObj()) === null || _a === void 0 ? void 0 : _a.forEach(sdk => {
|
|
197
196
|
if (!sdk.moduleName) {
|
|
198
197
|
this.buildSdk(sdk.name, sdk.path);
|
|
199
198
|
this.projectSdkMap.set(sdk.name, sdk);
|
|
@@ -224,7 +223,7 @@ class Scene {
|
|
|
224
223
|
const buildProfileJson = (0, json5parser_1.parseJsonText)(configurationsText);
|
|
225
224
|
const modules = buildProfileJson.modules;
|
|
226
225
|
if (modules instanceof Array) {
|
|
227
|
-
modules.forEach(
|
|
226
|
+
modules.forEach(module => {
|
|
228
227
|
this.modulePath2NameMap.set(path_1.default.resolve(this.realProjectDir, path_1.default.join(module.srcPath)), module.name);
|
|
229
228
|
});
|
|
230
229
|
}
|
|
@@ -312,7 +311,7 @@ class Scene {
|
|
|
312
311
|
this.buildStage = SceneBuildStage.METHOD_DONE;
|
|
313
312
|
}
|
|
314
313
|
genArkFiles() {
|
|
315
|
-
this.projectFiles.forEach(
|
|
314
|
+
this.projectFiles.forEach(file => {
|
|
316
315
|
logger.info('=== parse file:', file);
|
|
317
316
|
try {
|
|
318
317
|
const arkFile = new ArkFile_1.ArkFile(FileUtils_1.FileUtils.getFileLanguage(file, this.fileLanguages));
|
|
@@ -416,7 +415,7 @@ class Scene {
|
|
|
416
415
|
findDependenciesByTsConfig(from, arkFile) {
|
|
417
416
|
if (this.globalModule2PathMapping) {
|
|
418
417
|
const paths = this.globalModule2PathMapping;
|
|
419
|
-
Object.keys(paths).forEach(
|
|
418
|
+
Object.keys(paths).forEach(key => this.parseTsConfigParms(paths, key, from, arkFile));
|
|
420
419
|
}
|
|
421
420
|
}
|
|
422
421
|
parseTsConfigParms(paths, key, from, arkFile) {
|
|
@@ -426,7 +425,7 @@ class Scene {
|
|
|
426
425
|
}
|
|
427
426
|
else if (from.startsWith(key)) {
|
|
428
427
|
let tail = from.substring(key.length, from.length);
|
|
429
|
-
module2pathMapping.forEach(
|
|
428
|
+
module2pathMapping.forEach(pathMapping => {
|
|
430
429
|
let originPath = path_1.default.join(this.getRealProjectDir(), pathMapping, tail);
|
|
431
430
|
if (this.baseUrl) {
|
|
432
431
|
originPath = path_1.default.resolve(this.baseUrl, originPath);
|
|
@@ -439,7 +438,7 @@ class Scene {
|
|
|
439
438
|
key = key.substring(0, key.indexOf(TSConst_1.ALL) - 1);
|
|
440
439
|
if (from.substring(0, key.indexOf(TSConst_1.ALL) - 1) === key) {
|
|
441
440
|
let tail = from.substring(key.indexOf(TSConst_1.ALL) - 1, from.length);
|
|
442
|
-
module2pathMapping.forEach(
|
|
441
|
+
module2pathMapping.forEach(pathMapping => {
|
|
443
442
|
pathMapping = pathMapping.substring(0, pathMapping.indexOf(TSConst_1.ALL) - 1);
|
|
444
443
|
let originPath = path_1.default.join(this.getRealProjectDir(), pathMapping, tail);
|
|
445
444
|
if (this.baseUrl) {
|
|
@@ -478,7 +477,7 @@ class Scene {
|
|
|
478
477
|
findRelativeDependenciesByOhPkg(from, arkFile) {
|
|
479
478
|
//relative path ../from ./from
|
|
480
479
|
//order
|
|
481
|
-
//1. ../from/oh-package.json5 -> [[name]] -> overRides/overRideDependencyMap? ->
|
|
480
|
+
//1. ../from/oh-package.json5 -> [[name]] -> overRides/overRideDependencyMap? ->
|
|
482
481
|
//[[main]] -> file path ->dependencies(priority)+devDependencies? dynamicDependencies(not support) ->
|
|
483
482
|
//key overRides/overRideDependencyMap?
|
|
484
483
|
//2. ../from/index.ets(ts)
|
|
@@ -541,7 +540,7 @@ class Scene {
|
|
|
541
540
|
}
|
|
542
541
|
buildSdk(sdkName, sdkPath) {
|
|
543
542
|
const allFiles = (0, getAllFiles_1.getAllFiles)(sdkPath, this.options.supportFileExts, this.options.ignoreFileNames);
|
|
544
|
-
allFiles.forEach(
|
|
543
|
+
allFiles.forEach(file => {
|
|
545
544
|
logger.info('=== parse sdk file:', file);
|
|
546
545
|
try {
|
|
547
546
|
const arkFile = new ArkFile_1.ArkFile(FileUtils_1.FileUtils.getFileLanguage(file, this.fileLanguages));
|
|
@@ -554,6 +553,7 @@ class Scene {
|
|
|
554
553
|
});
|
|
555
554
|
const fileSig = arkFile.getFileSignature().toMapKey();
|
|
556
555
|
this.sdkArkFilesMap.set(fileSig, arkFile);
|
|
556
|
+
SdkUtils_1.SdkUtils.buildSdkImportMap(arkFile);
|
|
557
557
|
SdkUtils_1.SdkUtils.buildGlobalMap(arkFile, this.sdkGlobalMap);
|
|
558
558
|
}
|
|
559
559
|
catch (error) {
|
|
@@ -616,7 +616,7 @@ class Scene {
|
|
|
616
616
|
processModuleOhPkgContent(dependencies, moduleOhPkgFilePath, supportFileExts) {
|
|
617
617
|
Object.entries(dependencies).forEach(([k, v]) => {
|
|
618
618
|
const pattern = new RegExp('^(\\.\\.\\/\|\\.\\/)');
|
|
619
|
-
if (typeof
|
|
619
|
+
if (typeof v === 'string') {
|
|
620
620
|
let dependencyModulePath = '';
|
|
621
621
|
if (pattern.test(v)) {
|
|
622
622
|
dependencyModulePath = path_1.default.join(moduleOhPkgFilePath, v);
|
|
@@ -710,7 +710,7 @@ class Scene {
|
|
|
710
710
|
* @example
|
|
711
711
|
* 1. In inferSimpleTypes() to check arkClass and arkMethod.
|
|
712
712
|
* ```typescript
|
|
713
|
-
* public inferSimpleTypes() {
|
|
713
|
+
* public inferSimpleTypes(): void {
|
|
714
714
|
* for (let arkFile of this.getFiles()) {
|
|
715
715
|
* for (let arkClass of arkFile.getClasses()) {
|
|
716
716
|
* for (let arkMethod of arkClass.getMethods()) {
|
|
@@ -775,7 +775,7 @@ class Scene {
|
|
|
775
775
|
getNamespacesMap() {
|
|
776
776
|
if (this.buildStage === SceneBuildStage.CLASS_DONE) {
|
|
777
777
|
for (const file of this.getFiles()) {
|
|
778
|
-
ModelUtils_1.ModelUtils.getAllNamespacesInFile(file).forEach(
|
|
778
|
+
ModelUtils_1.ModelUtils.getAllNamespacesInFile(file).forEach(namespace => {
|
|
779
779
|
this.namespacesMap.set(namespace.getNamespaceSignature().toMapKey(), namespace);
|
|
780
780
|
});
|
|
781
781
|
}
|
|
@@ -1055,8 +1055,7 @@ class Scene {
|
|
|
1055
1055
|
const importNameSpaceClasses = classMap.get(importNameSpace.getNamespaceSignature());
|
|
1056
1056
|
importClasses.push(...importNameSpaceClasses.filter(c => !importClasses.includes(c) && c.getName() !== Const_1.DEFAULT_ARK_CLASS_NAME));
|
|
1057
1057
|
}
|
|
1058
|
-
catch (_a) {
|
|
1059
|
-
}
|
|
1058
|
+
catch (_a) { }
|
|
1060
1059
|
}
|
|
1061
1060
|
}
|
|
1062
1061
|
const fileClasses = classMap.get(file.getFileSignature());
|
|
@@ -1108,7 +1107,10 @@ class Scene {
|
|
|
1108
1107
|
while (namespaceStack.length > 0) {
|
|
1109
1108
|
const ns = namespaceStack.shift();
|
|
1110
1109
|
const nsGlobalLocals = [];
|
|
1111
|
-
(_a = ns
|
|
1110
|
+
(_a = ns
|
|
1111
|
+
.getDefaultClass()
|
|
1112
|
+
.getDefaultArkMethod()
|
|
1113
|
+
.getBody()) === null || _a === void 0 ? void 0 : _a.getLocals().forEach(local => {
|
|
1112
1114
|
if (local.getDeclaringStmt() && local.getName() !== 'this' && local.getName()[0] !== '$') {
|
|
1113
1115
|
nsGlobalLocals.push(local);
|
|
1114
1116
|
}
|
|
@@ -1174,8 +1176,7 @@ class Scene {
|
|
|
1174
1176
|
const importNameSpaceClasses = globalVariableMap.get(importNameSpace.getNamespaceSignature());
|
|
1175
1177
|
importLocals.push(...importNameSpaceClasses.filter(c => !importLocals.includes(c) && c.getName() !== Const_1.DEFAULT_ARK_CLASS_NAME));
|
|
1176
1178
|
}
|
|
1177
|
-
catch (_a) {
|
|
1178
|
-
}
|
|
1179
|
+
catch (_a) { }
|
|
1179
1180
|
}
|
|
1180
1181
|
}
|
|
1181
1182
|
const fileLocals = globalVariableMap.get(file.getFileSignature());
|
|
@@ -1217,7 +1218,8 @@ class Scene {
|
|
|
1217
1218
|
const parentMap = new Map();
|
|
1218
1219
|
const finalNamespaces = [];
|
|
1219
1220
|
const globalLocals = [];
|
|
1220
|
-
(_b = (_a = file
|
|
1221
|
+
(_b = (_a = file
|
|
1222
|
+
.getDefaultClass()) === null || _a === void 0 ? void 0 : _a.getDefaultArkMethod().getBody()) === null || _b === void 0 ? void 0 : _b.getLocals().forEach(local => {
|
|
1221
1223
|
if (local.getDeclaringStmt() && local.getName() !== 'this' && local.getName()[0] !== '$') {
|
|
1222
1224
|
globalLocals.push(local);
|
|
1223
1225
|
}
|
|
@@ -1327,7 +1329,7 @@ class ModuleScene {
|
|
|
1327
1329
|
this.moduleFileMap.set(arkFile.getFileSignature().toMapKey(), arkFile);
|
|
1328
1330
|
}
|
|
1329
1331
|
genArkFiles(supportFileExts) {
|
|
1330
|
-
(0, getAllFiles_1.getAllFiles)(this.modulePath, supportFileExts, this.projectScene.getOptions().ignoreFileNames).forEach(
|
|
1332
|
+
(0, getAllFiles_1.getAllFiles)(this.modulePath, supportFileExts, this.projectScene.getOptions().ignoreFileNames).forEach(file => {
|
|
1331
1333
|
logger.info('=== parse file:', file);
|
|
1332
1334
|
try {
|
|
1333
1335
|
const arkFile = new ArkFile_1.ArkFile(FileUtils_1.FileUtils.getFileLanguage(file, this.projectScene.getFileLanguages()));
|
package/lib/VFG/DVFG.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DVFG.d.ts","sourceRoot":"","sources":["../../src/VFG/DVFG.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAChG,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAiB,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAIxD;;;;GAIG;AACH,qBAAa,IAAK,SAAQ,iBAAiB;IACvC,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,YAAY,CAAoB;gBAC5B,EAAE,EAAE,SAAS;IAMlB,KAAK,IAAI,SAAS;IAIlB,YAAY,IAAI,MAAM;IAItB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ;IAiBtC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,GAAG,QAAQ;IASrD,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO;IAalD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAIlC;AAED,oBAAY,YAAY;IACpB,MAAM,IAAA;
|
|
1
|
+
{"version":3,"file":"DVFG.d.ts","sourceRoot":"","sources":["../../src/VFG/DVFG.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAChG,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAiB,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAIxD;;;;GAIG;AACH,qBAAa,IAAK,SAAQ,iBAAiB;IACvC,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,YAAY,CAAoB;gBAC5B,EAAE,EAAE,SAAS;IAMlB,KAAK,IAAI,SAAS;IAIlB,YAAY,IAAI,MAAM;IAItB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ;IAiBtC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,GAAG,QAAQ;IASrD,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO;IAalD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAIlC;AAED,oBAAY,YAAY;IACpB,MAAM,IAAA;IACN,IAAI,IAAA;IACJ,KAAK,IAAA;IACL,IAAI,IAAA;IACJ,IAAI,IAAA;IACJ,EAAE,IAAA;IACF,UAAU,IAAA;IACV,UAAU,IAAA;IACV,SAAS,IAAA;IACT,SAAS,IAAA;IACT,KAAK,KAAA;IACL,MAAM,KAAA;IACN,MAAM,KAAA;CACT;AAED,qBAAa,QAAS,SAAQ,QAAQ;IAClC,OAAO,CAAC,IAAI,CAAO;gBAEP,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI;IAKxC,WAAW,IAAI,MAAM;IAMrB,OAAO,IAAI,IAAI;CAGzB;AAED,qBAAa,QAAS,SAAQ,QAAQ;CAAG"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Stmt } from '../../core/base/Stmt';
|
|
2
2
|
import { ArkMethod } from '../../core/model/ArkMethod';
|
|
3
3
|
import { Scene } from '../../Scene';
|
|
4
|
-
import { DVFG } from '../DVFG';
|
|
4
|
+
import { DVFG, DVFGNode } from '../DVFG';
|
|
5
5
|
export declare class DVFGBuilder {
|
|
6
6
|
private dvfg;
|
|
7
7
|
private scene;
|
|
@@ -10,7 +10,7 @@ export declare class DVFGBuilder {
|
|
|
10
10
|
buildForSingleMethod(m: ArkMethod): void;
|
|
11
11
|
private getStmtUsedValues;
|
|
12
12
|
private getUsedValues;
|
|
13
|
-
getOrNewDVFGNode(stmt: Stmt):
|
|
13
|
+
getOrNewDVFGNode(stmt: Stmt): DVFGNode;
|
|
14
14
|
addDVFGNodes(): void;
|
|
15
15
|
addDVFGEdges(): void;
|
|
16
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DVFGBuilder.d.ts","sourceRoot":"","sources":["../../../src/VFG/builder/DVFGBuilder.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAwE,IAAI,EAA6C,MAAM,sBAAsB,CAAC;AAM7J,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"DVFGBuilder.d.ts","sourceRoot":"","sources":["../../../src/VFG/builder/DVFGBuilder.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAwE,IAAI,EAA6C,MAAM,sBAAsB,CAAC;AAM7J,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEzC,qBAAa,WAAW;IACpB,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,KAAK,CAAQ;gBAET,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK;IAKzB,KAAK,IAAI,IAAI;IAQb,oBAAoB,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI;IA2C/C,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,aAAa;IAkBd,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ;IAItC,YAAY,IAAI,IAAI;IAEpB,YAAY,IAAI,IAAI;CAC9B"}
|
|
@@ -27,16 +27,20 @@ class DVFGBuilder {
|
|
|
27
27
|
this.scene = s;
|
|
28
28
|
}
|
|
29
29
|
build() {
|
|
30
|
-
this.scene.getMethods().forEach(m => {
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
this.scene.getMethods().forEach(m => {
|
|
31
|
+
if (m.getCfg()) {
|
|
32
|
+
this.buildForSingleMethod(m);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
33
35
|
}
|
|
34
36
|
buildForSingleMethod(m) {
|
|
35
37
|
let problem = new ReachingDef_1.ReachingDefProblem(m);
|
|
36
38
|
let solver = new GenericDataFlow_1.MFPDataFlowSolver();
|
|
37
39
|
let solution = solver.calculateMopSolutionForwards(problem);
|
|
38
40
|
let defMap = new Map();
|
|
39
|
-
m.getCfg()
|
|
41
|
+
m.getCfg()
|
|
42
|
+
.getStmts()
|
|
43
|
+
.forEach(s => {
|
|
40
44
|
var _a;
|
|
41
45
|
let def = s.getDef();
|
|
42
46
|
if (def != null) {
|
|
@@ -63,7 +67,7 @@ class DVFGBuilder {
|
|
|
63
67
|
if (target instanceof Ref_1.AbstractFieldRef) {
|
|
64
68
|
target = target.getFieldSignature();
|
|
65
69
|
}
|
|
66
|
-
(_a = defMap.get(target)) === null || _a === void 0 ? void 0 : _a.forEach(
|
|
70
|
+
(_a = defMap.get(target)) === null || _a === void 0 ? void 0 : _a.forEach(defStmt => {
|
|
67
71
|
let defId = problem.flowGraph.getNodeID(defStmt);
|
|
68
72
|
addNewNodes(defId, defStmt, reachStmt);
|
|
69
73
|
});
|
|
@@ -96,10 +100,14 @@ class DVFGBuilder {
|
|
|
96
100
|
getUsedValues(val) {
|
|
97
101
|
if (val instanceof Expr_1.AbstractExpr) {
|
|
98
102
|
if (val instanceof Expr_1.AbstractInvokeExpr) {
|
|
99
|
-
return val.getArgs().flatMap(
|
|
103
|
+
return val.getArgs().flatMap(current => {
|
|
104
|
+
return this.getUsedValues(current);
|
|
105
|
+
}, []);
|
|
100
106
|
}
|
|
101
107
|
else {
|
|
102
|
-
return val.getUses().flatMap(
|
|
108
|
+
return val.getUses().flatMap(current => {
|
|
109
|
+
return this.getUsedValues(current);
|
|
110
|
+
}, []);
|
|
103
111
|
}
|
|
104
112
|
}
|
|
105
113
|
if (val instanceof Constant_1.Constant) {
|
|
@@ -22,6 +22,7 @@ export declare abstract class AbstractAnalysis {
|
|
|
22
22
|
resolveInvokeExpr(invokeExpr: AbstractInvokeExpr): ArkMethod | undefined;
|
|
23
23
|
getClassHierarchy(arkClass: ArkClass): ArkClass[];
|
|
24
24
|
start(displayGeneratedMethod: boolean): void;
|
|
25
|
+
projectStart(displayGeneratedMethod: boolean): void;
|
|
25
26
|
private processCallSite;
|
|
26
27
|
protected init(): void;
|
|
27
28
|
protected processMethod(methodID: FuncID): CallSite[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/AbstractAnalysis.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAiB,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAA2B,cAAc,EAAqB,MAAM,0BAA0B,CAAC;AAItG,8BAAsB,gBAAgB;IAClC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;IACvB,SAAS,CAAC,EAAE,EAAG,SAAS,CAAC;IACzB,SAAS,CAAC,SAAS,EAAG,gBAAgB,CAAC;IACvC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAM;IAClC,SAAS,CAAC,eAAe,EAAG,cAAc,CAAC,MAAM,CAAC,CAAC;gBAEvC,CAAC,EAAE,KAAK;IAIb,QAAQ,IAAI,KAAK;IAIjB,YAAY,IAAI,SAAS;IAIhC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IAClF,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAExD,iBAAiB,CAAC,UAAU,EAAE,kBAAkB,GAAG,SAAS,GAAG,SAAS;
|
|
1
|
+
{"version":3,"file":"AbstractAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/AbstractAnalysis.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAiB,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAA2B,cAAc,EAAqB,MAAM,0BAA0B,CAAC;AAItG,8BAAsB,gBAAgB;IAClC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;IACvB,SAAS,CAAC,EAAE,EAAG,SAAS,CAAC;IACzB,SAAS,CAAC,SAAS,EAAG,gBAAgB,CAAC;IACvC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAM;IAClC,SAAS,CAAC,eAAe,EAAG,cAAc,CAAC,MAAM,CAAC,CAAC;gBAEvC,CAAC,EAAE,KAAK;IAIb,QAAQ,IAAI,KAAK;IAIjB,YAAY,IAAI,SAAS;IAIhC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IAClF,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAExD,iBAAiB,CAAC,UAAU,EAAE,kBAAkB,GAAG,SAAS,GAAG,SAAS;IAQxE,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,EAAE;IAgBjD,KAAK,CAAC,sBAAsB,EAAE,OAAO,GAAG,IAAI;IAqB5C,YAAY,CAAC,sBAAsB,EAAE,OAAO,GAAG,IAAI;IAgB1D,OAAO,CAAC,eAAe;IAqBvB,SAAS,CAAC,IAAI,IAAI,IAAI;IAOtB,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE;IA0BrD,SAAS,CAAC,uBAAuB,CAAC,UAAU,EAAE,kBAAkB,GAAG,eAAe,EAAE;IAapF,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,sBAAsB,EAAE,OAAO,GAAG,IAAI;CAU5H"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
* Copyright (c) 2024 Huawei Device Co., Ltd.
|
|
3
|
+
* Copyright (c) 2024-2025 Huawei Device Co., Ltd.
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
6
6
|
* You may obtain a copy of the License at
|
|
@@ -58,6 +58,7 @@ class AbstractAnalysis {
|
|
|
58
58
|
if (method != null) {
|
|
59
59
|
return method;
|
|
60
60
|
}
|
|
61
|
+
return undefined;
|
|
61
62
|
}
|
|
62
63
|
getClassHierarchy(arkClass) {
|
|
63
64
|
// TODO: remove abstract class
|
|
@@ -89,12 +90,27 @@ class AbstractAnalysis {
|
|
|
89
90
|
});
|
|
90
91
|
}
|
|
91
92
|
}
|
|
92
|
-
|
|
93
|
+
projectStart(displayGeneratedMethod) {
|
|
94
|
+
this.scene.getMethods().forEach((method) => {
|
|
95
|
+
let cgNode = this.cg.getCallGraphNodeByMethod(method.getSignature());
|
|
96
|
+
if (cgNode.isSdkMethod()) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
this.preProcessMethod(cgNode.getID());
|
|
100
|
+
this.processMethod(cgNode.getID()).forEach((cs) => {
|
|
101
|
+
this.processCallSite(cgNode.getID(), cs, displayGeneratedMethod, true);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
processCallSite(method, cs, displayGeneratedMethod, isProject = false) {
|
|
93
106
|
var _a;
|
|
94
107
|
let me = this.cg.getArkMethodByFuncID(cs.calleeFuncID);
|
|
95
108
|
let meNode = this.cg.getNode(cs.calleeFuncID);
|
|
96
|
-
this.processedMethod.insert(cs.callerFuncID);
|
|
97
109
|
this.addCallGraphEdge(method, me, cs, displayGeneratedMethod);
|
|
110
|
+
if (isProject) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
this.processedMethod.insert(cs.callerFuncID);
|
|
98
114
|
if (this.processedMethod.contains(cs.calleeFuncID) || meNode.isSdkMethod()) {
|
|
99
115
|
return;
|
|
100
116
|
}
|
|
@@ -105,7 +121,7 @@ class AbstractAnalysis {
|
|
|
105
121
|
}
|
|
106
122
|
init() {
|
|
107
123
|
this.processedMethod = new ((0, PtsDS_1.createPtsCollectionCtor)(PtsDS_1.PtsCollectionType.BitVector))();
|
|
108
|
-
this.cg.getEntries().forEach(
|
|
124
|
+
this.cg.getEntries().forEach(entryFunc => {
|
|
109
125
|
this.workList.push(entryFunc);
|
|
110
126
|
});
|
|
111
127
|
}
|
|
@@ -114,15 +130,15 @@ class AbstractAnalysis {
|
|
|
114
130
|
let arkMethod = this.scene.getMethod(cgNode.getMethod(), true);
|
|
115
131
|
let calleeMethods = [];
|
|
116
132
|
if (!arkMethod) {
|
|
117
|
-
throw new Error(
|
|
133
|
+
throw new Error('can not find method');
|
|
118
134
|
}
|
|
119
135
|
const cfg = arkMethod.getCfg();
|
|
120
136
|
if (!cfg) {
|
|
121
137
|
return [];
|
|
122
138
|
}
|
|
123
|
-
cfg.getStmts().forEach(
|
|
139
|
+
cfg.getStmts().forEach(stmt => {
|
|
124
140
|
if (stmt.containsInvokeExpr()) {
|
|
125
|
-
this.resolveCall(cgNode.getID(), stmt).forEach(
|
|
141
|
+
this.resolveCall(cgNode.getID(), stmt).forEach(callSite => {
|
|
126
142
|
calleeMethods.push(callSite);
|
|
127
143
|
this.cg.addStmtToCallSiteMap(stmt, callSite);
|
|
128
144
|
this.cg.addMethodToCallSiteMap(callSite.calleeFuncID, callSite);
|
|
@@ -133,7 +149,7 @@ class AbstractAnalysis {
|
|
|
133
149
|
}
|
|
134
150
|
getParamAnonymousMethod(invokeExpr) {
|
|
135
151
|
let paramMethod = [];
|
|
136
|
-
invokeExpr.getArgs().forEach(
|
|
152
|
+
invokeExpr.getArgs().forEach(args => {
|
|
137
153
|
let argsType = args.getType();
|
|
138
154
|
if (argsType instanceof Type_1.FunctionType) {
|
|
139
155
|
paramMethod.push(argsType.getMethodSignature());
|
|
@@ -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;AAEtD,qBAAa,sBAAuB,SAAQ,gBAAgB;
|
|
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;AAEtD,qBAAa,sBAAuB,SAAQ,gBAAgB;gBAC5C,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS;IAKhC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IAkDtE,SAAS,CAAC,gBAAgB,IAAI,QAAQ,EAAE;CAI3C"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
* Copyright (c) 2024 Huawei Device Co., Ltd.
|
|
3
|
+
* Copyright (c) 2024-2025 Huawei Device Co., Ltd.
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
6
6
|
* You may obtain a copy of the License at
|
|
@@ -49,7 +49,8 @@ class ClassHierarchyAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
49
49
|
return;
|
|
50
50
|
}
|
|
51
51
|
let possibleCalleeMethod = arkClass.getMethodWithName(calleeMethod.getName());
|
|
52
|
-
if (possibleCalleeMethod &&
|
|
52
|
+
if (possibleCalleeMethod &&
|
|
53
|
+
possibleCalleeMethod.isGenerated() &&
|
|
53
54
|
arkClass.getSignature().toString() !== declareClass.getSignature().toString()) {
|
|
54
55
|
// remove the generated method in extended classes
|
|
55
56
|
return;
|
|
@@ -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;IAKhC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IA8DtE,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,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;IAKhC,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,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
* Copyright (c) 2024 Huawei Device Co., Ltd.
|
|
3
|
+
* Copyright (c) 2024-2025 Huawei Device Co., Ltd.
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
6
6
|
* You may obtain a copy of the License at
|
|
@@ -78,7 +78,8 @@ class RapidTypeAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
78
78
|
return;
|
|
79
79
|
}
|
|
80
80
|
let possibleCalleeMethod = arkClass.getMethodWithName(calleeMethod.getName());
|
|
81
|
-
if (possibleCalleeMethod &&
|
|
81
|
+
if (possibleCalleeMethod &&
|
|
82
|
+
possibleCalleeMethod.isGenerated() &&
|
|
82
83
|
arkClass.getSignature().toString() !== declareClass.getSignature().toString()) {
|
|
83
84
|
// remove the generated method in extended classes
|
|
84
85
|
return;
|
|
@@ -103,7 +104,7 @@ class RapidTypeAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
103
104
|
newlyInstancedClasses.forEach(sig => {
|
|
104
105
|
let ignoredCalls = this.ignoredCalls.get(sig);
|
|
105
106
|
if (ignoredCalls) {
|
|
106
|
-
ignoredCalls.forEach(
|
|
107
|
+
ignoredCalls.forEach(call => {
|
|
107
108
|
this.cg.addDynamicCallEdge(call.caller, call.callee, call.callStmt);
|
|
108
109
|
newCallSites.push(new CallGraph_1.CallSite(call.callStmt, undefined, call.callee, call.caller));
|
|
109
110
|
});
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import { CallGraphNodeKind } from
|
|
2
|
-
import { PointerAnalysis } from
|
|
1
|
+
import { CallGraphNodeKind } from '../model/CallGraph';
|
|
2
|
+
import { PointerAnalysis } from '../pointerAnalysis/PointerAnalysis';
|
|
3
3
|
declare abstract class StatTraits {
|
|
4
|
+
TotalTime: number;
|
|
5
|
+
startTime: number;
|
|
6
|
+
endTime: number;
|
|
4
7
|
getStat(): string;
|
|
5
8
|
printStat(): void;
|
|
6
9
|
}
|
|
7
|
-
export declare class PTAStat
|
|
10
|
+
export declare class PTAStat extends StatTraits {
|
|
8
11
|
pta: PointerAnalysis;
|
|
9
12
|
numProcessedAddr: number;
|
|
10
13
|
numProcessedCopy: number;
|
|
@@ -22,9 +25,6 @@ export declare class PTAStat implements StatTraits {
|
|
|
22
25
|
numNotInferedUnknownValue: number;
|
|
23
26
|
numUnhandledFunc: number;
|
|
24
27
|
iterTimes: number;
|
|
25
|
-
TotalTime: number;
|
|
26
|
-
startTime: number;
|
|
27
|
-
endTime: number;
|
|
28
28
|
startMemUsage: any;
|
|
29
29
|
endMemUsage: any;
|
|
30
30
|
rssUsed: number;
|
|
@@ -38,7 +38,7 @@ export declare class PTAStat implements StatTraits {
|
|
|
38
38
|
getStat(): string;
|
|
39
39
|
printStat(): void;
|
|
40
40
|
}
|
|
41
|
-
export declare class PAGStat
|
|
41
|
+
export declare class PAGStat extends StatTraits {
|
|
42
42
|
numDynamicCall: number;
|
|
43
43
|
numTotalFunction: number;
|
|
44
44
|
numTotalNode: number;
|
|
@@ -51,6 +51,8 @@ export declare class CGStat extends StatTraits {
|
|
|
51
51
|
numVirtual: number;
|
|
52
52
|
numIntrinsic: number;
|
|
53
53
|
numConstructor: number;
|
|
54
|
+
startStat(): void;
|
|
55
|
+
endStat(): void;
|
|
54
56
|
addNodeStat(kind: CallGraphNodeKind): void;
|
|
55
57
|
getStat(): string;
|
|
56
58
|
}
|