arkanalyzer 1.0.86 → 1.0.88
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/README.en.md +69 -65
- package/README.md +56 -70
- package/config/arkanalyzer.json +7 -2
- package/docs/cppFrontend/ArkAnalyzer-cpp_usage_guide.md +245 -0
- package/docs/cppFrontend/cpp_frontend_build_guide.md +126 -0
- package/docs/cppFrontend/cpp_frontend_user_guide.md +175 -0
- package/docs/cppFrontend/img.png +0 -0
- package/docs/cppFrontend/img_1.png +0 -0
- package/docs/cppFrontend/img_10.png +0 -0
- package/docs/cppFrontend/img_11.png +0 -0
- package/docs/cppFrontend/img_12.png +0 -0
- package/docs/cppFrontend/img_13.png +0 -0
- package/docs/cppFrontend/img_14.png +0 -0
- package/docs/cppFrontend/img_15.png +0 -0
- package/docs/cppFrontend/img_16.png +0 -0
- package/docs/cppFrontend/img_17.png +0 -0
- package/docs/cppFrontend/img_18.png +0 -0
- package/docs/cppFrontend/img_19.png +0 -0
- package/docs/cppFrontend/img_2.png +0 -0
- package/docs/cppFrontend/img_20.png +0 -0
- package/docs/cppFrontend/img_21.png +0 -0
- package/docs/cppFrontend/img_22.png +0 -0
- package/docs/cppFrontend/img_23.png +0 -0
- package/docs/cppFrontend/img_3.png +0 -0
- package/docs/cppFrontend/img_4.png +0 -0
- package/docs/cppFrontend/img_5.png +0 -0
- package/docs/cppFrontend/img_6.png +0 -0
- package/docs/cppFrontend/img_7.png +0 -0
- package/docs/cppFrontend/img_8.png +0 -0
- package/docs/cppFrontend/img_9.png +0 -0
- package/docs/sig_programanalysis.en.md +66 -0
- package/docs/sig_programanalysis.md +73 -0
- package/lib/Config.d.ts +35 -1
- package/lib/Config.d.ts.map +1 -1
- package/lib/Config.js +91 -2
- package/lib/Scene.d.ts +25 -2
- package/lib/Scene.d.ts.map +1 -1
- package/lib/Scene.js +151 -44
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts +4 -3
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/AbstractAnalysis.js +17 -17
- package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts +6 -1
- package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/RapidTypeAnalysis.js +117 -14
- package/lib/callgraph/common/Statistics.d.ts +4 -2
- package/lib/callgraph/common/Statistics.d.ts.map +1 -1
- package/lib/callgraph/common/Statistics.js +14 -2
- package/lib/callgraph/model/CallGraph.d.ts +12 -8
- package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
- package/lib/callgraph/model/CallGraph.js +53 -29
- 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 +5 -1
- package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.js +3 -0
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +4 -2
- package/lib/cli/cli.d.ts +3 -0
- package/lib/cli/cli.d.ts.map +1 -0
- package/lib/cli/cli.js +82 -0
- package/lib/cli/commands/cg.d.ts +53 -0
- package/lib/cli/commands/cg.d.ts.map +1 -0
- package/lib/cli/commands/cg.js +404 -0
- package/lib/cli/commands/index.d.ts +6 -0
- package/lib/cli/commands/index.d.ts.map +1 -0
- package/lib/cli/commands/index.js +64 -0
- package/lib/cli/commands/ir.d.ts +26 -0
- package/lib/cli/commands/ir.d.ts.map +1 -0
- package/lib/cli/commands/ir.js +94 -0
- package/lib/core/base/Constant.d.ts +1 -1
- package/lib/core/base/Constant.d.ts.map +1 -1
- package/lib/core/base/Constant.js +1 -1
- package/lib/core/base/Expr.d.ts +29 -5
- package/lib/core/base/Expr.d.ts.map +1 -1
- package/lib/core/base/Expr.js +145 -23
- package/lib/core/base/Position.d.ts +14 -0
- package/lib/core/base/Position.d.ts.map +1 -1
- package/lib/core/base/Position.js +27 -0
- package/lib/core/base/Ref.d.ts +1 -0
- package/lib/core/base/Ref.d.ts.map +1 -1
- package/lib/core/base/Ref.js +4 -1
- package/lib/core/base/Type.d.ts +64 -24
- package/lib/core/base/Type.d.ts.map +1 -1
- package/lib/core/base/Type.js +144 -49
- package/lib/core/common/ArkError.d.ts +26 -2
- package/lib/core/common/ArkError.d.ts.map +1 -1
- package/lib/core/common/ArkError.js +56 -2
- package/lib/core/common/ArkIRTransformer.d.ts +11 -10
- package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkIRTransformer.js +1 -1
- package/lib/core/common/ArkValueTransformer.d.ts +14 -12
- package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkValueTransformer.js +1 -5
- package/lib/core/common/Const.d.ts +4 -0
- package/lib/core/common/Const.d.ts.map +1 -1
- package/lib/core/common/Const.js +5 -1
- package/lib/core/common/DummyMainCreater.d.ts +23 -13
- package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
- package/lib/core/common/DummyMainCreater.js +66 -43
- package/lib/core/common/EtsConst.d.ts +11 -0
- package/lib/core/common/EtsConst.d.ts.map +1 -1
- package/lib/core/common/EtsConst.js +12 -1
- package/lib/core/common/IRInference.d.ts.map +1 -1
- package/lib/core/common/IRInference.js +6 -2
- package/lib/core/common/IRUtils.d.ts.map +1 -1
- package/lib/core/common/IRUtils.js +3 -33
- package/lib/core/common/ModelUtils.d.ts +4 -7
- package/lib/core/common/ModelUtils.d.ts.map +1 -1
- package/lib/core/common/ModelUtils.js +77 -110
- package/lib/core/common/SdkUtils.d.ts +1 -1
- package/lib/core/common/SdkUtils.d.ts.map +1 -1
- package/lib/core/common/SdkUtils.js +14 -5
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +9 -3
- package/lib/core/graph/BaseExplicitGraph.d.ts +4 -4
- package/lib/core/graph/BaseExplicitGraph.d.ts.map +1 -1
- package/lib/core/graph/BaseExplicitGraph.js +15 -8
- package/lib/core/graph/BasicBlock.d.ts.map +1 -1
- package/lib/core/graph/Scc.d.ts.map +1 -1
- package/lib/core/graph/Scc.js +7 -2
- package/lib/core/graph/builder/CfgBuilder.d.ts +10 -7
- package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/CfgBuilder.js +12 -5
- package/lib/core/inference/Inference.d.ts.map +1 -1
- package/lib/core/inference/Inference.js +7 -0
- package/lib/core/inference/ModelInference.d.ts +1 -1
- package/lib/core/inference/ModelInference.d.ts.map +1 -1
- package/lib/core/inference/ValueInference.d.ts +3 -2
- package/lib/core/inference/ValueInference.d.ts.map +1 -1
- package/lib/core/inference/ValueInference.js +64 -12
- package/lib/core/inference/abc/AbcInference.d.ts +28 -2
- package/lib/core/inference/abc/AbcInference.d.ts.map +1 -1
- package/lib/core/inference/abc/AbcInference.js +105 -4
- package/lib/core/model/ArkBaseModel.d.ts +14 -1
- package/lib/core/model/ArkBaseModel.d.ts.map +1 -1
- package/lib/core/model/ArkBaseModel.js +61 -2
- package/lib/core/model/ArkBody.d.ts.map +1 -1
- package/lib/core/model/ArkBody.js +1 -3
- package/lib/core/model/ArkClass.d.ts +25 -2
- package/lib/core/model/ArkClass.d.ts.map +1 -1
- package/lib/core/model/ArkClass.js +72 -30
- package/lib/core/model/ArkField.d.ts.map +1 -1
- package/lib/core/model/ArkField.js +3 -1
- package/lib/core/model/ArkFile.d.ts +4 -1
- package/lib/core/model/ArkFile.d.ts.map +1 -1
- package/lib/core/model/ArkFile.js +44 -3
- package/lib/core/model/ArkImport.d.ts.map +1 -1
- package/lib/core/model/ArkImport.js +9 -1
- package/lib/core/model/ArkMetadata.d.ts +32 -1
- package/lib/core/model/ArkMetadata.d.ts.map +1 -1
- package/lib/core/model/ArkMetadata.js +28 -2
- package/lib/core/model/ArkMethod.d.ts +5 -0
- package/lib/core/model/ArkMethod.d.ts.map +1 -1
- package/lib/core/model/ArkMethod.js +33 -1
- package/lib/core/model/ArkNamespace.d.ts +2 -0
- package/lib/core/model/ArkNamespace.d.ts.map +1 -1
- package/lib/core/model/ArkNamespace.js +11 -0
- package/lib/core/model/ArkSignature.d.ts +3 -3
- package/lib/core/model/ArkSignature.d.ts.map +1 -1
- package/lib/core/model/ArkSignature.js +14 -9
- package/lib/core/model/builder/ArkClassBuilder.d.ts +2 -0
- package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkClassBuilder.js +3 -3
- package/lib/core/model/builder/ArkMetadataBuilder.d.ts +21 -0
- package/lib/core/model/builder/ArkMetadataBuilder.d.ts.map +1 -0
- package/lib/core/model/builder/ArkMetadataBuilder.js +160 -0
- package/lib/core/model/builder/ArkMethodBuilder.d.ts +4 -1
- package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkMethodBuilder.js +50 -29
- package/lib/core/model/builder/ArkNamespaceBuilder.d.ts +1 -0
- package/lib/core/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkNamespaceBuilder.js +2 -1
- package/lib/core/model/builder/BodyBuilder.d.ts +4 -0
- package/lib/core/model/builder/BodyBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/builderUtils.d.ts +1 -0
- package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/core/model/builder/builderUtils.js +7 -3
- package/lib/frontend/cppFrontend/ast/ArkCxxAstNode.d.ts +296 -0
- package/lib/frontend/cppFrontend/ast/ArkCxxAstNode.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/ArkCxxAstNode.js +145 -0
- package/lib/frontend/cppFrontend/ast/astJsonNapi/napiApi.d.ts +8 -0
- package/lib/frontend/cppFrontend/ast/astJsonNapi/napiApi.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/astJsonNapi/napiApi.js +90 -0
- package/lib/frontend/cppFrontend/ast/astJsonNapi/napiRunner.d.ts +8 -0
- package/lib/frontend/cppFrontend/ast/astJsonNapi/napiRunner.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/astJsonNapi/napiRunner.js +183 -0
- package/lib/frontend/cppFrontend/ast/astParser.d.ts +25 -0
- package/lib/frontend/cppFrontend/ast/astParser.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/astParser.js +280 -0
- package/lib/frontend/cppFrontend/ast/astUtils.d.ts +18 -0
- package/lib/frontend/cppFrontend/ast/astUtils.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/astUtils.js +158 -0
- package/lib/frontend/cppFrontend/ast/const.d.ts +17 -0
- package/lib/frontend/cppFrontend/ast/const.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/const.js +58 -0
- package/lib/frontend/cppFrontend/ast/index.d.ts +5 -0
- package/lib/frontend/cppFrontend/ast/index.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/index.js +31 -0
- package/lib/frontend/cppFrontend/base/Constant.d.ts +9 -0
- package/lib/frontend/cppFrontend/base/Constant.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/base/Constant.js +33 -0
- package/lib/frontend/cppFrontend/base/Expr.d.ts +174 -0
- package/lib/frontend/cppFrontend/base/Expr.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/base/Expr.js +530 -0
- package/lib/frontend/cppFrontend/base/Ref.d.ts +25 -0
- package/lib/frontend/cppFrontend/base/Ref.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/base/Ref.js +53 -0
- package/lib/frontend/cppFrontend/base/Trap.d.ts +8 -0
- package/lib/frontend/cppFrontend/base/Trap.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/base/Trap.js +28 -0
- package/lib/frontend/cppFrontend/base/Type.d.ts +264 -0
- package/lib/frontend/cppFrontend/base/Type.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/base/Type.js +600 -0
- package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts +109 -0
- package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/common/ArkIRTransformer.js +925 -0
- package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts +477 -0
- package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/common/ArkValueTransformer.js +2746 -0
- package/lib/frontend/cppFrontend/common/Builtin.d.ts +57 -0
- package/lib/frontend/cppFrontend/common/Builtin.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/common/Builtin.js +106 -0
- package/lib/frontend/cppFrontend/common/IRInference.d.ts +94 -0
- package/lib/frontend/cppFrontend/common/IRInference.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/common/IRInference.js +1087 -0
- package/lib/frontend/cppFrontend/common/IRUtils.d.ts +23 -0
- package/lib/frontend/cppFrontend/common/IRUtils.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/common/IRUtils.js +168 -0
- package/lib/frontend/cppFrontend/common/ModelUtils.d.ts +44 -0
- package/lib/frontend/cppFrontend/common/ModelUtils.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/common/ModelUtils.js +567 -0
- package/lib/frontend/cppFrontend/common/TypeInference.d.ts +278 -0
- package/lib/frontend/cppFrontend/common/TypeInference.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/common/TypeInference.js +1354 -0
- package/lib/frontend/cppFrontend/common/ValueUtil.d.ts +16 -0
- package/lib/frontend/cppFrontend/common/ValueUtil.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/common/ValueUtil.js +61 -0
- package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts +182 -0
- package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.js +1435 -0
- package/lib/frontend/cppFrontend/graph/builder/ConditionBuilder.d.ts +21 -0
- package/lib/frontend/cppFrontend/graph/builder/ConditionBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/graph/builder/ConditionBuilder.js +303 -0
- package/lib/frontend/cppFrontend/graph/builder/IfBuilder.d.ts +15 -0
- package/lib/frontend/cppFrontend/graph/builder/IfBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/graph/builder/IfBuilder.js +161 -0
- package/lib/frontend/cppFrontend/graph/builder/LoopBuilder.d.ts +21 -0
- package/lib/frontend/cppFrontend/graph/builder/LoopBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/graph/builder/LoopBuilder.js +261 -0
- package/lib/frontend/cppFrontend/graph/builder/SwitchBuilder.d.ts +12 -0
- package/lib/frontend/cppFrontend/graph/builder/SwitchBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/graph/builder/SwitchBuilder.js +155 -0
- package/lib/frontend/cppFrontend/graph/builder/TrapBuilder.d.ts +29 -0
- package/lib/frontend/cppFrontend/graph/builder/TrapBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/graph/builder/TrapBuilder.js +302 -0
- package/lib/frontend/cppFrontend/inference/CxxInference.d.ts +10 -0
- package/lib/frontend/cppFrontend/inference/CxxInference.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/inference/CxxInference.js +41 -0
- package/lib/frontend/cppFrontend/inference/CxxModelInference.d.ts +28 -0
- package/lib/frontend/cppFrontend/inference/CxxModelInference.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/inference/CxxModelInference.js +98 -0
- package/lib/frontend/cppFrontend/inference/CxxValueInference.d.ts +20 -0
- package/lib/frontend/cppFrontend/inference/CxxValueInference.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/inference/CxxValueInference.js +128 -0
- package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts +11 -0
- package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.js +413 -0
- package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts +5 -0
- package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.js +61 -0
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts +17 -0
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.js +284 -0
- package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.d.ts +6 -0
- package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.js +57 -0
- package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts +14 -0
- package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.js +422 -0
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts +8 -0
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.js +194 -0
- package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts +59 -0
- package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/model/builder/BodyBuilder.js +605 -0
- package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts +46 -0
- package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/model/builder/builderUtils.js +499 -0
- package/lib/frontend/cppFrontend/utils/cmakeUtils.d.ts +44 -0
- package/lib/frontend/cppFrontend/utils/cmakeUtils.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/utils/cmakeUtils.js +240 -0
- package/lib/index.d.ts +2 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +8 -1
- package/lib/node_modules/ohos-typescript/.ohos-typescript-version +1 -0
- package/{node_modules → lib/node_modules}/ohos-typescript/package.json +2 -1
- package/lib/save/CGJsonPrinter.d.ts +8 -0
- package/lib/save/CGJsonPrinter.d.ts.map +1 -0
- package/lib/save/CGJsonPrinter.js +41 -0
- package/lib/save/GraphPrinter.js +2 -2
- package/lib/save/json/JsonDto.d.ts +86 -2
- package/lib/save/json/JsonDto.d.ts.map +1 -1
- package/lib/save/json/JsonSerialization.d.ts +1 -1
- package/lib/save/json/JsonSerialization.d.ts.map +1 -1
- package/lib/save/json/JsonSerialization.js +235 -145
- package/lib/save/source/SourceStmt.d.ts.map +1 -1
- package/lib/save/source/SourceStmt.js +3 -1
- package/lib/save/source/SourceTransformer.d.ts.map +1 -1
- package/lib/save/source/SourceTransformer.js +0 -3
- package/lib/utils/CxxSceneUtils.d.ts +11 -0
- package/lib/utils/CxxSceneUtils.d.ts.map +1 -0
- package/lib/utils/CxxSceneUtils.js +178 -0
- package/lib/utils/FileUtils.d.ts +8 -8
- package/lib/utils/FileUtils.d.ts.map +1 -1
- package/lib/utils/FileUtils.js +35 -45
- package/lib/utils/LRUCacheDecorator.d.ts +20 -0
- package/lib/utils/LRUCacheDecorator.d.ts.map +1 -0
- package/lib/utils/LRUCacheDecorator.js +89 -0
- package/lib/utils/ModuleUtils.d.ts +39 -0
- package/lib/utils/ModuleUtils.d.ts.map +1 -0
- package/lib/utils/ModuleUtils.js +261 -0
- package/package.json +13 -7
- /package/{node_modules → lib/node_modules}/ohos-typescript/LICENSE +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/README.OpenSource +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/README.md +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/SECURITY.md +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/ThirdPartyNoticeText.txt +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/bin/tsc +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/bin/tsserver +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/README.md +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/cancellationToken.js +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/cs/diagnosticMessages.generated.json +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/de/diagnosticMessages.generated.json +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/es/diagnosticMessages.generated.json +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/fr/diagnosticMessages.generated.json +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/it/diagnosticMessages.generated.json +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/ja/diagnosticMessages.generated.json +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/ko/diagnosticMessages.generated.json +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.dom.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.dom.iterable.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.collection.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.core.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.generator.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.iterable.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.promise.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.proxy.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.reflect.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.symbol.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.symbol.wellknown.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2016.array.include.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2016.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2016.full.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.full.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.intl.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.object.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.sharedmemory.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.string.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.typedarrays.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.asyncgenerator.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.asynciterable.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.full.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.intl.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.promise.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.regexp.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.array.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.full.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.intl.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.object.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.string.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.symbol.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.bigint.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.date.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.full.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.intl.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.number.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.promise.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.sharedmemory.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.string.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.symbol.wellknown.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.full.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.intl.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.promise.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.string.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.weakref.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.array.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.error.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.full.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.intl.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.object.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.sharedmemory.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.string.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es5.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es6.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.esnext.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.esnext.full.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.esnext.intl.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.scripthost.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.webworker.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.webworker.importscripts.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.webworker.iterable.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/pl/diagnosticMessages.generated.json +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/pt-br/diagnosticMessages.generated.json +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/ru/diagnosticMessages.generated.json +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tr/diagnosticMessages.generated.json +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tsc.js +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tsserver.js +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tsserverlibrary.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tsserverlibrary.js +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/typesMap.json +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/typescript.d.ts +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/typescript.js +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/typingsInstaller.js +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/watchGuard.js +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/zh-cn/diagnosticMessages.generated.json +0 -0
- /package/{node_modules → lib/node_modules}/ohos-typescript/lib/zh-tw/diagnosticMessages.generated.json +0 -0
package/lib/Config.js
CHANGED
|
@@ -40,15 +40,54 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
40
40
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
41
41
|
};
|
|
42
42
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
-
exports.SceneConfig = void 0;
|
|
43
|
+
exports.SceneConfig = exports.buildSceneConfigFromProject = void 0;
|
|
44
44
|
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
48
|
const FileUtils_1 = require("./utils/FileUtils");
|
|
49
|
+
const ast_1 = require("./frontend/cppFrontend/ast");
|
|
49
50
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'Config');
|
|
51
|
+
function collectSdksFromOhosSdkHome(explicitHome) {
|
|
52
|
+
const sdkHome = explicitHome || process.env.OHOS_SDK_HOME;
|
|
53
|
+
if (!sdkHome) {
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
const candidates = [
|
|
57
|
+
{ name: 'etsSdk', path: path_1.default.join(sdkHome, 'openharmony', 'ets') },
|
|
58
|
+
{ name: 'hmsSdk', path: path_1.default.join(sdkHome, 'hms', 'ets') },
|
|
59
|
+
];
|
|
60
|
+
const sdks = [];
|
|
61
|
+
for (const c of candidates) {
|
|
62
|
+
if (fs_1.default.existsSync(c.path)) {
|
|
63
|
+
sdks.push({ moduleName: '', name: c.name, path: c.path });
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return sdks;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Build a SceneConfig from a project directory and optional OHOS SDK home.
|
|
70
|
+
*
|
|
71
|
+
* SDK resolution order:
|
|
72
|
+
* 1) explicit `ohosSdkHome` (must contain at least one valid SDK directory:
|
|
73
|
+
* `<ohosSdkHome>/openharmony/ets` or `<ohosSdkHome>/hms/ets`)
|
|
74
|
+
* 2) environment variable `OHOS_SDK_HOME`
|
|
75
|
+
*
|
|
76
|
+
* @param project Project root directory path.
|
|
77
|
+
* @param ohosSdkHome Optional OHOS SDK home path.
|
|
78
|
+
* @param options Optional SceneOptions.
|
|
79
|
+
* @returns SceneConfig initialized with project files and discovered SDKs.
|
|
80
|
+
*/
|
|
81
|
+
function buildSceneConfigFromProject(project, ohosSdkHome, options) {
|
|
82
|
+
const config = new SceneConfig(options);
|
|
83
|
+
const sdks = collectSdksFromOhosSdkHome(ohosSdkHome);
|
|
84
|
+
config.buildConfig(path_1.default.basename(project), project, sdks);
|
|
85
|
+
return config;
|
|
86
|
+
}
|
|
87
|
+
exports.buildSceneConfigFromProject = buildSceneConfigFromProject;
|
|
50
88
|
const CONFIG_FILENAME = 'arkanalyzer.json';
|
|
51
89
|
const DEFAULT_CONFIG_FILE = path_1.default.join(__dirname, '../config', CONFIG_FILENAME);
|
|
90
|
+
const CPP_SOURCE_FILE_EXTS = (0, ast_1.getCxxSourceFileExtensions)();
|
|
52
91
|
class SceneConfig {
|
|
53
92
|
constructor(options) {
|
|
54
93
|
this.targetProjectName = '';
|
|
@@ -58,9 +97,14 @@ class SceneConfig {
|
|
|
58
97
|
this.sdkFiles = [];
|
|
59
98
|
this.sdkFilesMap = new Map();
|
|
60
99
|
this.projectFiles = [];
|
|
100
|
+
this.includeDirs = []; // Include directories that the C++ project depends on.
|
|
61
101
|
this.fileLanguages = new Map();
|
|
102
|
+
this.ccjsonPath = '';
|
|
103
|
+
this.cppAstPath = '';
|
|
104
|
+
// Seed defaults before merging `config/arkanalyzer.json`. Same values remain if that file is missing or invalid.
|
|
62
105
|
this.options = { supportFileExts: ['.ets', '.ts'] };
|
|
63
106
|
this.loadDefaultConfig(options);
|
|
107
|
+
this.appendCppExtsToDefaultOptionsIfAstJsonDumperAvailable();
|
|
64
108
|
}
|
|
65
109
|
getOptions() {
|
|
66
110
|
return this.options;
|
|
@@ -87,6 +131,7 @@ class SceneConfig {
|
|
|
87
131
|
* targetProjectDirectory property of the sceneConfig object.
|
|
88
132
|
* @param targetProjectDirectory - the target project directory, such as xxx/xxx/xxx, started from project
|
|
89
133
|
* directory.
|
|
134
|
+
* @param includeDirs - Header file directories that the CXX project depends on.
|
|
90
135
|
* @example
|
|
91
136
|
* 1. build a sceneConfig object.
|
|
92
137
|
```typescript
|
|
@@ -95,8 +140,17 @@ class SceneConfig {
|
|
|
95
140
|
sceneConfig.buildFromProjectDir(projectDir);
|
|
96
141
|
```
|
|
97
142
|
*/
|
|
98
|
-
buildFromProjectDir(targetProjectDirectory) {
|
|
143
|
+
buildFromProjectDir(targetProjectDirectory, includeDirs = []) {
|
|
99
144
|
this.targetProjectDirectory = targetProjectDirectory;
|
|
145
|
+
// Callers should prefer passing de-duplicated includeDirs to avoid redundant work in hot paths.
|
|
146
|
+
// Keep this defensive, order-preserving de-duplication as a fallback and reuse the target array.
|
|
147
|
+
// Intentionally avoid Set allocation here.
|
|
148
|
+
this.includeDirs.length = 0;
|
|
149
|
+
for (const includeDir of includeDirs) {
|
|
150
|
+
if (!this.includeDirs.includes(includeDir)) {
|
|
151
|
+
this.includeDirs.push(includeDir);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
100
154
|
this.targetProjectName = path_1.default.basename(targetProjectDirectory);
|
|
101
155
|
this.projectFiles = (0, getAllFiles_1.getAllFiles)(targetProjectDirectory, this.options.supportFileExts, this.options.ignoreFileNames);
|
|
102
156
|
}
|
|
@@ -191,6 +245,30 @@ class SceneConfig {
|
|
|
191
245
|
getProjectFiles() {
|
|
192
246
|
return this.projectFiles;
|
|
193
247
|
}
|
|
248
|
+
/** Obtain the header file directories of the input C++ project dependencies. */
|
|
249
|
+
getIncludeDirs() {
|
|
250
|
+
return this.includeDirs;
|
|
251
|
+
}
|
|
252
|
+
setCcjsonPath(ccjsonPath) {
|
|
253
|
+
this.ccjsonPath = ccjsonPath;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Returns compile_commands.json path configured by the project.
|
|
257
|
+
*
|
|
258
|
+
* If ccjson is not configured, this value is empty initially. Before AST generation,
|
|
259
|
+
* astUtils may auto-discover a compile database near source files (for DevEco projects
|
|
260
|
+
* that load compilation databases). The discovered path is used directly by Scene and is
|
|
261
|
+
* not backfilled into this config field.
|
|
262
|
+
*/
|
|
263
|
+
getCcjsonPath() {
|
|
264
|
+
return this.ccjsonPath;
|
|
265
|
+
}
|
|
266
|
+
setCppAstPath(cppAstPath) {
|
|
267
|
+
this.cppAstPath = cppAstPath;
|
|
268
|
+
}
|
|
269
|
+
getCppAstPath() {
|
|
270
|
+
return this.cppAstPath;
|
|
271
|
+
}
|
|
194
272
|
getFileLanguages() {
|
|
195
273
|
return this.fileLanguages;
|
|
196
274
|
}
|
|
@@ -238,5 +316,16 @@ class SceneConfig {
|
|
|
238
316
|
this.options = Object.assign(Object.assign({}, this.options), options);
|
|
239
317
|
}
|
|
240
318
|
}
|
|
319
|
+
appendCppExtsToDefaultOptionsIfAstJsonDumperAvailable() {
|
|
320
|
+
if (!(0, ast_1.isAstJsonDumperAvailable)()) {
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
const configuredExts = Array.isArray(this.options.supportFileExts) ? this.options.supportFileExts : [];
|
|
324
|
+
const missingCppExts = CPP_SOURCE_FILE_EXTS.filter(ext => !configuredExts.includes(ext));
|
|
325
|
+
if (missingCppExts.length === 0) {
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
this.options.supportFileExts = [...configuredExts, ...missingCppExts];
|
|
329
|
+
}
|
|
241
330
|
}
|
|
242
331
|
exports.SceneConfig = SceneConfig;
|
package/lib/Scene.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ import { ClassSignature, FileSignature, MethodSignature, NamespaceSignature } fr
|
|
|
8
8
|
import { Local } from './core/base/Local';
|
|
9
9
|
import { ArkExport } from './core/model/ArkExport';
|
|
10
10
|
import { CallGraph } from './callgraph/model/CallGraph';
|
|
11
|
-
declare enum SceneBuildStage {
|
|
11
|
+
export declare enum SceneBuildStage {
|
|
12
12
|
BUILD_INIT = 0,
|
|
13
13
|
SDK_INFERRED = 1,
|
|
14
14
|
CLASS_DONE = 2,
|
|
@@ -25,6 +25,9 @@ export declare class Scene {
|
|
|
25
25
|
private projectName;
|
|
26
26
|
private projectFiles;
|
|
27
27
|
private realProjectDir;
|
|
28
|
+
private includeDirs;
|
|
29
|
+
private ccjsonPath;
|
|
30
|
+
private cppAstPath;
|
|
28
31
|
private moduleScenesMap;
|
|
29
32
|
private modulePath2NameMap;
|
|
30
33
|
private moduleSdkMap;
|
|
@@ -51,6 +54,7 @@ export declare class Scene {
|
|
|
51
54
|
constructor();
|
|
52
55
|
dispose(): void;
|
|
53
56
|
getOptions(): SceneOptions;
|
|
57
|
+
getBuildStage(): SceneBuildStage;
|
|
54
58
|
getOverRides(): Map<string, string>;
|
|
55
59
|
getOverRideDependencyMap(): Map<string, unknown>;
|
|
56
60
|
clear(): void;
|
|
@@ -86,8 +90,18 @@ export declare class Scene {
|
|
|
86
90
|
private parseOhPackage;
|
|
87
91
|
private findTsConfigInfoDeeply;
|
|
88
92
|
private addTsConfigInfo;
|
|
93
|
+
/**
|
|
94
|
+
* Update or add default constructors for all classes in the scene.
|
|
95
|
+
*
|
|
96
|
+
* This function iterates through all files and classes in the scene,
|
|
97
|
+
* builds default constructors for each class, and processes existing constructors
|
|
98
|
+
* by replacing super constructor calls and adding initialization logic.
|
|
99
|
+
*
|
|
100
|
+
* @returns {void}
|
|
101
|
+
*/
|
|
89
102
|
private updateOrAddDefaultConstructors;
|
|
90
103
|
private buildAllMethodBody;
|
|
104
|
+
private findCCJsonPath;
|
|
91
105
|
private genArkFiles;
|
|
92
106
|
private getFilesOrderByDependency;
|
|
93
107
|
private getDependencyFilesDeeply;
|
|
@@ -106,7 +120,13 @@ export declare class Scene {
|
|
|
106
120
|
private getDependenciesMapping;
|
|
107
121
|
private getOriginPath;
|
|
108
122
|
private addFileNode2DependencyGrap;
|
|
123
|
+
/**
|
|
124
|
+
* Loads SDK sources into the scene. C++ SDK files are intentionally skipped: they are not parsed or registered
|
|
125
|
+
* here (only non-C++ SDK sources are processed).
|
|
126
|
+
*/
|
|
109
127
|
private buildSdk;
|
|
128
|
+
private collectSdkFiles;
|
|
129
|
+
private parseAndRegisterSdkFile;
|
|
110
130
|
/**
|
|
111
131
|
* Build the scene for harmony project. It resolves the file path of the project first, and then fetches
|
|
112
132
|
* dependencies from this file. Next, build a `ModuleScene` for this project to generate {@link ArkFile}. Finally,
|
|
@@ -248,6 +268,10 @@ export declare class Scene {
|
|
|
248
268
|
getOhPkgFilePath(): string;
|
|
249
269
|
makeCallGraphCHA(entryPoints: MethodSignature[]): CallGraph;
|
|
250
270
|
makeCallGraphRTA(entryPoints: MethodSignature[]): CallGraph;
|
|
271
|
+
/** Obtain the header file directories of the input C++ project dependencies. */
|
|
272
|
+
getIncludeDirs(): string[];
|
|
273
|
+
getCcjsonPath(): string;
|
|
274
|
+
getCppAstPath(): string;
|
|
251
275
|
/**
|
|
252
276
|
* Infer type for each non-default method. It infers the type of each field/local/reference.
|
|
253
277
|
* For example, the statement `let b = 5;`, the type of local `b` is `NumberType`; and for the statement `let s =
|
|
@@ -329,5 +353,4 @@ export declare class ModuleScene {
|
|
|
329
353
|
addArkFile(arkFile: ArkFile): void;
|
|
330
354
|
private genArkFiles;
|
|
331
355
|
}
|
|
332
|
-
export {};
|
|
333
356
|
//# sourceMappingURL=Scene.d.ts.map
|
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;
|
|
1
|
+
{"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../src/Scene.ts"],"names":[],"mappings":"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"}
|
package/lib/Scene.js
CHANGED
|
@@ -40,7 +40,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
40
40
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
41
41
|
};
|
|
42
42
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
-
exports.ModuleScene = exports.Scene = void 0;
|
|
43
|
+
exports.ModuleScene = exports.Scene = exports.SceneBuildStage = void 0;
|
|
44
44
|
const fs_1 = __importDefault(require("fs"));
|
|
45
45
|
const path_1 = __importDefault(require("path"));
|
|
46
46
|
const ModelUtils_1 = require("./core/common/ModelUtils");
|
|
@@ -56,17 +56,23 @@ const getAllFiles_1 = require("./utils/getAllFiles");
|
|
|
56
56
|
const FileUtils_1 = require("./utils/FileUtils");
|
|
57
57
|
const ArkExport_1 = require("./core/model/ArkExport");
|
|
58
58
|
const ArkMethodBuilder_1 = require("./core/model/builder/ArkMethodBuilder");
|
|
59
|
+
const ArkMethodBuilder_2 = require("./frontend/cppFrontend/model/builder/ArkMethodBuilder");
|
|
60
|
+
const ast_1 = require("./frontend/cppFrontend/ast");
|
|
59
61
|
const Const_1 = require("./core/common/Const");
|
|
60
62
|
const CallGraph_1 = require("./callgraph/model/CallGraph");
|
|
61
63
|
const CallGraphBuilder_1 = require("./callgraph/model/builder/CallGraphBuilder");
|
|
64
|
+
const ArkFileBuilder_2 = require("./frontend/cppFrontend/model/builder/ArkFileBuilder");
|
|
65
|
+
const IRInference_1 = require("./frontend/cppFrontend/common/IRInference");
|
|
62
66
|
const TSConst_1 = require("./core/common/TSConst");
|
|
63
67
|
const EtsConst_1 = require("./core/common/EtsConst");
|
|
64
68
|
const SdkUtils_1 = require("./core/common/SdkUtils");
|
|
65
69
|
const PointerAnalysisConfig_1 = require("./callgraph/pointerAnalysis/PointerAnalysisConfig");
|
|
66
70
|
const ValueUtil_1 = require("./core/common/ValueUtil");
|
|
67
71
|
const Inference_1 = require("./core/inference/Inference");
|
|
68
|
-
const
|
|
72
|
+
const IRInference_2 = require("./core/common/IRInference");
|
|
73
|
+
const ModuleUtils_1 = require("./utils/ModuleUtils");
|
|
69
74
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'Scene');
|
|
75
|
+
const CXX_HEADER_EXTENSION_SET = (0, ast_1.getCxxHeaderFileExtensionSet)();
|
|
70
76
|
var SceneBuildStage;
|
|
71
77
|
(function (SceneBuildStage) {
|
|
72
78
|
SceneBuildStage[SceneBuildStage["BUILD_INIT"] = 0] = "BUILD_INIT";
|
|
@@ -76,7 +82,7 @@ var SceneBuildStage;
|
|
|
76
82
|
SceneBuildStage[SceneBuildStage["CLASS_COLLECTED"] = 4] = "CLASS_COLLECTED";
|
|
77
83
|
SceneBuildStage[SceneBuildStage["METHOD_COLLECTED"] = 5] = "METHOD_COLLECTED";
|
|
78
84
|
SceneBuildStage[SceneBuildStage["TYPE_INFERRED"] = 6] = "TYPE_INFERRED";
|
|
79
|
-
})(SceneBuildStage || (SceneBuildStage = {}));
|
|
85
|
+
})(SceneBuildStage = exports.SceneBuildStage || (exports.SceneBuildStage = {}));
|
|
80
86
|
/**
|
|
81
87
|
* The Scene class includes everything in the analyzed project.
|
|
82
88
|
* We should be able to re-generate the project's code based on this class.
|
|
@@ -86,6 +92,9 @@ class Scene {
|
|
|
86
92
|
this.projectName = '';
|
|
87
93
|
this.projectFiles = [];
|
|
88
94
|
this.realProjectDir = '';
|
|
95
|
+
this.includeDirs = []; // Include directories that the C++ project depends on.
|
|
96
|
+
this.ccjsonPath = '';
|
|
97
|
+
this.cppAstPath = '';
|
|
89
98
|
this.moduleScenesMap = new Map();
|
|
90
99
|
this.modulePath2NameMap = new Map();
|
|
91
100
|
this.moduleSdkMap = new Map();
|
|
@@ -123,6 +132,9 @@ class Scene {
|
|
|
123
132
|
getOptions() {
|
|
124
133
|
return this.options;
|
|
125
134
|
}
|
|
135
|
+
getBuildStage() {
|
|
136
|
+
return this.buildStage;
|
|
137
|
+
}
|
|
126
138
|
getOverRides() {
|
|
127
139
|
return this.overRides;
|
|
128
140
|
}
|
|
@@ -185,6 +197,9 @@ class Scene {
|
|
|
185
197
|
this.projectName = sceneConfig.getTargetProjectName();
|
|
186
198
|
this.realProjectDir = fs_1.default.realpathSync(sceneConfig.getTargetProjectDirectory());
|
|
187
199
|
this.projectFiles = sceneConfig.getProjectFiles();
|
|
200
|
+
this.includeDirs = sceneConfig.getIncludeDirs();
|
|
201
|
+
this.ccjsonPath = sceneConfig.getCcjsonPath();
|
|
202
|
+
this.cppAstPath = sceneConfig.getCppAstPath();
|
|
188
203
|
this.parseBuildProfile();
|
|
189
204
|
this.parseOhPackage();
|
|
190
205
|
let tsConfigFilePath;
|
|
@@ -202,7 +217,7 @@ class Scene {
|
|
|
202
217
|
logger.warn('This project has no tsconfig.json!');
|
|
203
218
|
}
|
|
204
219
|
this.buildOhPkgContentMap();
|
|
205
|
-
|
|
220
|
+
ModuleUtils_1.ModuleUtils.generateModuleMap(this.ohPkgContentMap);
|
|
206
221
|
// handle sdks
|
|
207
222
|
if (this.options.enableBuiltIn && !sceneConfig.getSdksObj().find(sdk => sdk.name === SdkUtils_1.SdkUtils.BUILT_IN_NAME)) {
|
|
208
223
|
sceneConfig.getSdksObj().unshift(SdkUtils_1.SdkUtils.getBuiltInSdk());
|
|
@@ -224,6 +239,10 @@ class Scene {
|
|
|
224
239
|
});
|
|
225
240
|
if (this.buildStage < SceneBuildStage.SDK_INFERRED) {
|
|
226
241
|
this.sdkArkFilesMap.forEach(file => {
|
|
242
|
+
// CXXTodo: C++ does not handle SDK files.
|
|
243
|
+
if (file.getLanguage() === ArkFile_1.Language.CXX) {
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
227
246
|
Inference_1.InferenceManager.getInstance().getInference(file.getLanguage()).doInfer(file);
|
|
228
247
|
SdkUtils_1.SdkUtils.mergeGlobalAPI(file, this.sdkGlobalMap);
|
|
229
248
|
});
|
|
@@ -306,22 +325,45 @@ class Scene {
|
|
|
306
325
|
this.baseUrl = tsConfigObj.compilerOptions.baseUrl;
|
|
307
326
|
}
|
|
308
327
|
}
|
|
328
|
+
/**
|
|
329
|
+
* Update or add default constructors for all classes in the scene.
|
|
330
|
+
*
|
|
331
|
+
* This function iterates through all files and classes in the scene,
|
|
332
|
+
* builds default constructors for each class, and processes existing constructors
|
|
333
|
+
* by replacing super constructor calls and adding initialization logic.
|
|
334
|
+
*
|
|
335
|
+
* @returns {void}
|
|
336
|
+
*/
|
|
309
337
|
updateOrAddDefaultConstructors() {
|
|
310
338
|
for (const file of this.getFiles()) {
|
|
339
|
+
// CXXTodo: Select the appropriate initialization function based on file type
|
|
340
|
+
const initInConstructorFn = file.getLanguage() === ArkFile_1.Language.CXX ? ArkMethodBuilder_2.addInitInConstructor : ArkMethodBuilder_1.addInitInConstructor;
|
|
311
341
|
for (const cls of ModelUtils_1.ModelUtils.getAllClassesInFile(file)) {
|
|
312
342
|
(0, ArkMethodBuilder_1.buildDefaultConstructor)(cls);
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
343
|
+
// CXXTodo: Use the interface 'getAllMethodsWithName' for obtaining all methods with the same name.
|
|
344
|
+
const constructors = cls.getAllMethodsWithName(TSConst_1.CONSTRUCTOR_NAME);
|
|
345
|
+
if (cls.isDefaultArkClass()) {
|
|
346
|
+
continue;
|
|
317
347
|
}
|
|
348
|
+
constructors.forEach(constructor => {
|
|
349
|
+
(0, ArkMethodBuilder_1.replaceSuper2Constructor)(constructor);
|
|
350
|
+
initInConstructorFn(constructor);
|
|
351
|
+
});
|
|
318
352
|
}
|
|
319
353
|
}
|
|
320
354
|
}
|
|
321
355
|
buildAllMethodBody() {
|
|
356
|
+
var _a;
|
|
322
357
|
this.buildStage = SceneBuildStage.CLASS_DONE;
|
|
323
358
|
const methods = [];
|
|
324
359
|
for (const file of this.getFiles()) {
|
|
360
|
+
if (!this.options.enableOhModulesBody && file.getName().includes(EtsConst_1.OH_MODULES)) {
|
|
361
|
+
const defaultArkMethod = file.getDefaultClass().getDefaultArkMethod();
|
|
362
|
+
if (defaultArkMethod) {
|
|
363
|
+
methods.push(defaultArkMethod);
|
|
364
|
+
}
|
|
365
|
+
continue;
|
|
366
|
+
}
|
|
325
367
|
for (const cls of file.getClasses()) {
|
|
326
368
|
for (const method of cls.getMethods(true)) {
|
|
327
369
|
methods.push(method);
|
|
@@ -329,6 +371,13 @@ class Scene {
|
|
|
329
371
|
}
|
|
330
372
|
}
|
|
331
373
|
for (const namespace of this.getNamespacesMap().values()) {
|
|
374
|
+
if (!this.options.enableOhModulesBody && namespace.getDeclaringArkFile().getName().includes(EtsConst_1.OH_MODULES)) {
|
|
375
|
+
const defaultArkMethod = namespace.getDefaultClass().getDefaultArkMethod();
|
|
376
|
+
if (defaultArkMethod) {
|
|
377
|
+
methods.push(defaultArkMethod);
|
|
378
|
+
}
|
|
379
|
+
continue;
|
|
380
|
+
}
|
|
332
381
|
for (const cls of namespace.getClasses()) {
|
|
333
382
|
for (const method of cls.getMethods(true)) {
|
|
334
383
|
methods.push(method);
|
|
@@ -343,19 +392,42 @@ class Scene {
|
|
|
343
392
|
logger.error('Error building body:', method.getSignature(), error);
|
|
344
393
|
}
|
|
345
394
|
finally {
|
|
346
|
-
|
|
395
|
+
// CXXTodo: Distinguish between C++ and TS/ArkTS.
|
|
396
|
+
const isCxxFile = ((_a = method.getDeclaringArkFile()) === null || _a === void 0 ? void 0 : _a.getLanguage()) === ArkFile_1.Language.CXX;
|
|
397
|
+
if (isCxxFile) {
|
|
398
|
+
method.freeCxxBodyBuilder();
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
method.freeBodyBuilder();
|
|
402
|
+
}
|
|
347
403
|
}
|
|
348
404
|
}
|
|
349
405
|
ModelUtils_1.ModelUtils.dispose();
|
|
350
406
|
this.buildStage = SceneBuildStage.METHOD_DONE;
|
|
351
407
|
}
|
|
408
|
+
findCCJsonPath(file, ccjsonPath) {
|
|
409
|
+
const ext = path_1.default.extname(file).toLowerCase();
|
|
410
|
+
const isHeader = CXX_HEADER_EXTENSION_SET.has(ext);
|
|
411
|
+
let currentCcjsonPath = '';
|
|
412
|
+
if (!isHeader) {
|
|
413
|
+
currentCcjsonPath = (0, ast_1.findCompileCommands)(file);
|
|
414
|
+
}
|
|
415
|
+
return currentCcjsonPath === '' ? ccjsonPath : currentCcjsonPath;
|
|
416
|
+
}
|
|
352
417
|
genArkFiles() {
|
|
353
418
|
this.projectFiles.forEach(file => {
|
|
354
419
|
logger.trace('=== parse file:', file);
|
|
355
420
|
try {
|
|
356
421
|
const arkFile = new ArkFile_1.ArkFile(FileUtils_1.FileUtils.getFileLanguage(file, this.fileLanguages));
|
|
357
422
|
arkFile.setScene(this);
|
|
358
|
-
|
|
423
|
+
// CXXTodo: Distinguish between C++ and TS/ArkTS. Call different builder functions based on file language.
|
|
424
|
+
if (arkFile.getLanguage() === ArkFile_1.Language.CXX) {
|
|
425
|
+
this.ccjsonPath = this.findCCJsonPath(file, this.ccjsonPath);
|
|
426
|
+
(0, ArkFileBuilder_2.buildArkFileFromFile)(file, this.realProjectDir, arkFile, this.projectName, this.includeDirs);
|
|
427
|
+
}
|
|
428
|
+
else {
|
|
429
|
+
(0, ArkFileBuilder_1.buildArkFileFromFile)(file, this.realProjectDir, arkFile, this.projectName);
|
|
430
|
+
}
|
|
359
431
|
this.setFile(arkFile);
|
|
360
432
|
}
|
|
361
433
|
catch (error) {
|
|
@@ -387,7 +459,13 @@ class Scene {
|
|
|
387
459
|
try {
|
|
388
460
|
const arkFile = new ArkFile_1.ArkFile(FileUtils_1.FileUtils.getFileLanguage(projectFile, this.fileLanguages));
|
|
389
461
|
arkFile.setScene(this);
|
|
390
|
-
|
|
462
|
+
// CXXTodo: Distinguish between C++ and TS/ArkTS.
|
|
463
|
+
if (arkFile.getLanguage() === ArkFile_1.Language.CXX) {
|
|
464
|
+
(0, ArkFileBuilder_2.buildArkFileFromFile)(projectFile, this.getRealProjectDir(), arkFile, this.getProjectName(), this.includeDirs);
|
|
465
|
+
}
|
|
466
|
+
else {
|
|
467
|
+
(0, ArkFileBuilder_1.buildArkFileFromFile)(projectFile, this.getRealProjectDir(), arkFile, this.getProjectName());
|
|
468
|
+
}
|
|
391
469
|
for (const [modulePath, moduleName] of this.modulePath2NameMap) {
|
|
392
470
|
if (arkFile.getFilePath().startsWith(modulePath)) {
|
|
393
471
|
this.addArkFile2ModuleScene(modulePath, moduleName, arkFile);
|
|
@@ -409,10 +487,10 @@ class Scene {
|
|
|
409
487
|
}
|
|
410
488
|
}
|
|
411
489
|
isRepeatBuildFile(projectFile) {
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
490
|
+
const relativePath = path_1.default.relative(this.getRealProjectDir(), projectFile);
|
|
491
|
+
if (!relativePath.startsWith('..') && !path_1.default.isAbsolute(relativePath)) {
|
|
492
|
+
const mapKey = (0, FileUtils_1.getFileSignatureMapKey)(this.getProjectName(), relativePath);
|
|
493
|
+
return this.filesMap.has(mapKey);
|
|
416
494
|
}
|
|
417
495
|
return false;
|
|
418
496
|
}
|
|
@@ -588,40 +666,50 @@ class Scene {
|
|
|
588
666
|
addFileNode2DependencyGrap(filePath) {
|
|
589
667
|
this.getDependencyFilesDeeply(filePath);
|
|
590
668
|
}
|
|
669
|
+
/**
|
|
670
|
+
* Loads SDK sources into the scene. C++ SDK files are intentionally skipped: they are not parsed or registered
|
|
671
|
+
* here (only non-C++ SDK sources are processed).
|
|
672
|
+
*/
|
|
591
673
|
buildSdk(sdkName, sdkPath) {
|
|
674
|
+
const allFiles = this.collectSdkFiles(sdkName, sdkPath);
|
|
675
|
+
allFiles.forEach((file) => {
|
|
676
|
+
if (FileUtils_1.FileUtils.getFileLanguage(file, this.fileLanguages) === ArkFile_1.Language.CXX) {
|
|
677
|
+
return;
|
|
678
|
+
}
|
|
679
|
+
this.parseAndRegisterSdkFile(file, sdkPath, sdkName);
|
|
680
|
+
});
|
|
681
|
+
}
|
|
682
|
+
collectSdkFiles(sdkName, sdkPath) {
|
|
592
683
|
var _a;
|
|
593
|
-
let allFiles;
|
|
594
684
|
if (sdkName === SdkUtils_1.SdkUtils.BUILT_IN_NAME) {
|
|
595
|
-
|
|
596
|
-
if (
|
|
685
|
+
const builtInFiles = SdkUtils_1.SdkUtils.fetchBuiltInFiles(sdkPath);
|
|
686
|
+
if (builtInFiles.length > 0) {
|
|
597
687
|
(_a = this.getOptions().sdkGlobalFolders) === null || _a === void 0 ? void 0 : _a.push(sdkPath);
|
|
598
688
|
}
|
|
689
|
+
return builtInFiles;
|
|
599
690
|
}
|
|
600
|
-
|
|
601
|
-
|
|
691
|
+
return (0, getAllFiles_1.getAllFiles)(sdkPath, this.options.supportFileExts, this.options.ignoreFileNames);
|
|
692
|
+
}
|
|
693
|
+
parseAndRegisterSdkFile(file, sdkPath, sdkName) {
|
|
694
|
+
logger.trace('=== parse sdk file:', file);
|
|
695
|
+
try {
|
|
696
|
+
const arkFile = new ArkFile_1.ArkFile(FileUtils_1.FileUtils.getFileLanguage(file, this.fileLanguages));
|
|
697
|
+
arkFile.setScene(this);
|
|
698
|
+
(0, ArkFileBuilder_1.buildArkFileFromFile)(file, sdkPath, arkFile, sdkName);
|
|
699
|
+
ModelUtils_1.ModelUtils.getAllClassesInFile(arkFile).forEach(cls => {
|
|
700
|
+
var _a, _b;
|
|
701
|
+
(_a = cls.getDefaultArkMethod()) === null || _a === void 0 ? void 0 : _a.buildBody();
|
|
702
|
+
(_b = cls.getDefaultArkMethod()) === null || _b === void 0 ? void 0 : _b.freeBodyBuilder();
|
|
703
|
+
});
|
|
704
|
+
const fileSig = arkFile.getFileSignature().toMapKey();
|
|
705
|
+
this.sdkArkFilesMap.set(fileSig, arkFile);
|
|
706
|
+
SdkUtils_1.SdkUtils.buildSdkImportMap(arkFile);
|
|
707
|
+
SdkUtils_1.SdkUtils.loadGlobalAPI(arkFile, this.sdkGlobalMap);
|
|
708
|
+
}
|
|
709
|
+
catch (error) {
|
|
710
|
+
logger.error('Error parsing file:', file, error);
|
|
711
|
+
this.unhandledSdkFilePaths.push(file);
|
|
602
712
|
}
|
|
603
|
-
allFiles.forEach(file => {
|
|
604
|
-
logger.trace('=== parse sdk file:', file);
|
|
605
|
-
try {
|
|
606
|
-
const arkFile = new ArkFile_1.ArkFile(FileUtils_1.FileUtils.getFileLanguage(file, this.fileLanguages));
|
|
607
|
-
arkFile.setScene(this);
|
|
608
|
-
(0, ArkFileBuilder_1.buildArkFileFromFile)(file, sdkPath, arkFile, sdkName);
|
|
609
|
-
ModelUtils_1.ModelUtils.getAllClassesInFile(arkFile).forEach(cls => {
|
|
610
|
-
var _a, _b;
|
|
611
|
-
(_a = cls.getDefaultArkMethod()) === null || _a === void 0 ? void 0 : _a.buildBody();
|
|
612
|
-
(_b = cls.getDefaultArkMethod()) === null || _b === void 0 ? void 0 : _b.freeBodyBuilder();
|
|
613
|
-
});
|
|
614
|
-
const fileSig = arkFile.getFileSignature().toMapKey();
|
|
615
|
-
this.sdkArkFilesMap.set(fileSig, arkFile);
|
|
616
|
-
SdkUtils_1.SdkUtils.buildSdkImportMap(arkFile);
|
|
617
|
-
SdkUtils_1.SdkUtils.loadGlobalAPI(arkFile, this.sdkGlobalMap);
|
|
618
|
-
}
|
|
619
|
-
catch (error) {
|
|
620
|
-
logger.error('Error parsing file:', file, error);
|
|
621
|
-
this.unhandledSdkFilePaths.push(file);
|
|
622
|
-
return;
|
|
623
|
-
}
|
|
624
|
-
});
|
|
625
713
|
}
|
|
626
714
|
/**
|
|
627
715
|
* Build the scene for harmony project. It resolves the file path of the project first, and then fetches
|
|
@@ -998,6 +1086,16 @@ class Scene {
|
|
|
998
1086
|
callGraphBuilder.buildRapidTypeCallGraph(entryPoints);
|
|
999
1087
|
return callGraph;
|
|
1000
1088
|
}
|
|
1089
|
+
/** Obtain the header file directories of the input C++ project dependencies. */
|
|
1090
|
+
getIncludeDirs() {
|
|
1091
|
+
return this.includeDirs;
|
|
1092
|
+
}
|
|
1093
|
+
getCcjsonPath() {
|
|
1094
|
+
return this.ccjsonPath;
|
|
1095
|
+
}
|
|
1096
|
+
getCppAstPath() {
|
|
1097
|
+
return this.cppAstPath;
|
|
1098
|
+
}
|
|
1001
1099
|
/**
|
|
1002
1100
|
* Infer type for each non-default method. It infers the type of each field/local/reference.
|
|
1003
1101
|
* For example, the statement `let b = 5;`, the type of local `b` is `NumberType`; and for the statement `let s =
|
|
@@ -1019,6 +1117,7 @@ class Scene {
|
|
|
1019
1117
|
this.buildStage = SceneBuildStage.TYPE_INFERRED;
|
|
1020
1118
|
}
|
|
1021
1119
|
SdkUtils_1.SdkUtils.dispose();
|
|
1120
|
+
ModuleUtils_1.ModuleUtils.dispose();
|
|
1022
1121
|
}
|
|
1023
1122
|
/**
|
|
1024
1123
|
* @deprecated This method is deprecated and will be removed in the next major release.
|
|
@@ -1027,9 +1126,12 @@ class Scene {
|
|
|
1027
1126
|
* Scheduled for removal: one month from deprecation date.
|
|
1028
1127
|
*/
|
|
1029
1128
|
inferTypesOld() {
|
|
1129
|
+
// CXXTodo: Building the mapping between declarations and implementations of C++ functions in cross-file scenarios.
|
|
1130
|
+
IRInference_1.IRInference.mapCxxDeclAndImpl(this);
|
|
1030
1131
|
this.filesMap.forEach(file => {
|
|
1031
1132
|
try {
|
|
1032
|
-
|
|
1133
|
+
// CXXTodo: Distinguish between C++ and TS/ArkTS.
|
|
1134
|
+
file.getLanguage() === ArkFile_1.Language.CXX ? IRInference_1.IRInference.inferFile(file) : IRInference_2.IRInference.inferFile(file);
|
|
1033
1135
|
}
|
|
1034
1136
|
catch (error) {
|
|
1035
1137
|
logger.error('Error inferring types of project file:', file.getFileSignature(), error);
|
|
@@ -1415,7 +1517,12 @@ class ModuleScene {
|
|
|
1415
1517
|
const arkFile = new ArkFile_1.ArkFile(FileUtils_1.FileUtils.getFileLanguage(file, this.projectScene.getFileLanguages()));
|
|
1416
1518
|
arkFile.setScene(this.projectScene);
|
|
1417
1519
|
arkFile.setModuleScene(this);
|
|
1418
|
-
|
|
1520
|
+
if (arkFile.getLanguage() === ArkFile_1.Language.CXX) {
|
|
1521
|
+
(0, ArkFileBuilder_2.buildArkFileFromFile)(file, this.projectScene.getRealProjectDir(), arkFile, this.projectScene.getProjectName(), this.projectScene.getIncludeDirs());
|
|
1522
|
+
}
|
|
1523
|
+
else {
|
|
1524
|
+
(0, ArkFileBuilder_1.buildArkFileFromFile)(file, this.projectScene.getRealProjectDir(), arkFile, this.projectScene.getProjectName());
|
|
1525
|
+
}
|
|
1419
1526
|
this.projectScene.setFile(arkFile);
|
|
1420
1527
|
}
|
|
1421
1528
|
catch (error) {
|
|
@@ -4,6 +4,7 @@ import { Stmt } from '../../core/base/Stmt';
|
|
|
4
4
|
import { ArkClass } from '../../core/model/ArkClass';
|
|
5
5
|
import { ArkMethod } from '../../core/model/ArkMethod';
|
|
6
6
|
import { MethodSignature } from '../../core/model/ArkSignature';
|
|
7
|
+
import { IntWorkList } from '../../utils/IntWorkList';
|
|
7
8
|
import { NodeID } from '../../core/graph/BaseExplicitGraph';
|
|
8
9
|
import { CallGraph, FuncID, CallSite } from '../model/CallGraph';
|
|
9
10
|
import { CallGraphBuilder } from '../model/builder/CallGraphBuilder';
|
|
@@ -12,7 +13,7 @@ export declare abstract class AbstractAnalysis {
|
|
|
12
13
|
protected scene: Scene;
|
|
13
14
|
protected cg: CallGraph;
|
|
14
15
|
protected cgBuilder: CallGraphBuilder;
|
|
15
|
-
protected workList:
|
|
16
|
+
protected workList: IntWorkList;
|
|
16
17
|
protected processedMethod: IPtsCollection<FuncID>;
|
|
17
18
|
private classHierarchyCache;
|
|
18
19
|
constructor(s: Scene, cg: CallGraph);
|
|
@@ -24,9 +25,9 @@ export declare abstract class AbstractAnalysis {
|
|
|
24
25
|
getClassHierarchy(arkClass: ArkClass): ArkClass[];
|
|
25
26
|
start(displayGeneratedMethod: boolean): void;
|
|
26
27
|
projectStart(displayGeneratedMethod: boolean): void;
|
|
27
|
-
|
|
28
|
+
protected processCallSite(method: FuncID, cs: CallSite, displayGeneratedMethod: boolean, isProject?: boolean): void;
|
|
28
29
|
protected init(): void;
|
|
29
|
-
protected processMethod(methodID: FuncID):
|
|
30
|
+
protected processMethod(methodID: FuncID, displayGeneratedMethod: boolean, isProject?: boolean): void;
|
|
30
31
|
protected getParamAnonymousMethod(invokeExpr: AbstractInvokeExpr): MethodSignature[];
|
|
31
32
|
protected addCallGraphEdge(caller: FuncID, callee: ArkMethod | null, cs: CallSite, displayGeneratedMethod: boolean): void;
|
|
32
33
|
}
|
|
@@ -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,
|
|
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,EAAgC,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE1E,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,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,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,EAAE,SAAS,CAAC;IACxB,SAAS,CAAC,SAAS,EAAG,gBAAgB,CAAC;IACvC,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAqB;IACpD,SAAS,CAAC,eAAe,EAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACnD,OAAO,CAAC,mBAAmB,CAAsC;gBAErD,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS;IAK5B,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;IAwBjD,KAAK,CAAC,sBAAsB,EAAE,OAAO,GAAG,IAAI;IAmB5C,YAAY,CAAC,sBAAsB,EAAE,OAAO,GAAG,IAAI;IAkB1D,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,sBAAsB,EAAE,OAAO,EAAE,SAAS,GAAE,OAAe,GAAG,IAAI;IAqB1H,SAAS,CAAC,IAAI,IAAI,IAAI;IAOtB,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,sBAAsB,EAAE,OAAO,EAAE,SAAS,GAAE,OAAe,GAAG,IAAI;IA2B5G,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"}
|