arkanalyzer 1.0.85 → 1.0.87
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 +32 -1
- package/lib/Config.d.ts.map +1 -1
- package/lib/Config.js +76 -2
- package/lib/Scene.d.ts +25 -2
- package/lib/Scene.d.ts.map +1 -1
- package/lib/Scene.js +148 -40
- 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 +32 -0
- package/lib/cli/commands/cg.d.ts.map +1 -0
- package/lib/cli/commands/cg.js +401 -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 +144 -22
- 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 +3 -0
- package/lib/core/common/Const.d.ts.map +1 -1
- package/lib/core/common/Const.js +4 -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 +5 -1
- 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 +22 -2
- package/lib/core/model/ArkClass.d.ts.map +1 -1
- package/lib/core/model/ArkClass.js +59 -28
- 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/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/ArkMethodBuilder.d.ts +4 -1
- package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkMethodBuilder.js +19 -6
- 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/astUtils.d.ts +51 -0
- package/lib/frontend/cppFrontend/ast/astUtils.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/astUtils.js +470 -0
- package/lib/frontend/cppFrontend/ast/const.d.ts +30 -0
- package/lib/frontend/cppFrontend/ast/const.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/const.js +134 -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 +285 -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 +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +7 -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/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 +7 -8
- package/lib/utils/FileUtils.d.ts.map +1 -1
- package/lib/utils/FileUtils.js +27 -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 +15 -12
- /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
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2024-2025 Huawei Device Co., Ltd.
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
19
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
20
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
21
|
+
}
|
|
22
|
+
Object.defineProperty(o, k2, desc);
|
|
23
|
+
}) : (function(o, m, k, k2) {
|
|
24
|
+
if (k2 === undefined) k2 = k;
|
|
25
|
+
o[k2] = m[k];
|
|
26
|
+
}));
|
|
27
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
28
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
29
|
+
}) : function(o, v) {
|
|
30
|
+
o["default"] = v;
|
|
31
|
+
});
|
|
32
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.isMethodImplementation = exports.addInitInConstructor = exports.buildInitMethod = exports.buildDefaultConstructor = exports.recursivelyCheckAndBuildSuperConstructor = exports.buildArkMethodFromArkClass = exports.handleFunctionTemplateDecl = exports.buildDefaultArkMethodFromArkClass = void 0;
|
|
41
|
+
const Type_1 = require("../../../../core/base/Type");
|
|
42
|
+
const BodyBuilder_1 = require("./BodyBuilder");
|
|
43
|
+
const ArkMethod_1 = require("../../../../core/model/ArkMethod");
|
|
44
|
+
const builderUtils_1 = require("./builderUtils");
|
|
45
|
+
const Ref_1 = require("../../../../core/base/Ref");
|
|
46
|
+
const ArkBody_1 = require("../../../../core/model/ArkBody");
|
|
47
|
+
const Cfg_1 = require("../../../../core/graph/Cfg");
|
|
48
|
+
const Expr_1 = require("../../../../core/base/Expr");
|
|
49
|
+
const ArkSignature_1 = require("../../../../core/model/ArkSignature");
|
|
50
|
+
const Stmt_1 = require("../../../../core/base/Stmt");
|
|
51
|
+
const BasicBlock_1 = require("../../../../core/graph/BasicBlock");
|
|
52
|
+
const Local_1 = require("../../../../core/base/Local");
|
|
53
|
+
const Const_1 = require("../../../../core/common/Const");
|
|
54
|
+
const IRUtils_1 = require("../../common/IRUtils");
|
|
55
|
+
const ArkMethodBuilder_1 = require("../../../../core/model/builder/ArkMethodBuilder");
|
|
56
|
+
const builderUtils_2 = require("../../../../core/model/builder/builderUtils");
|
|
57
|
+
const TSConst_1 = require("../../../../core/common/TSConst");
|
|
58
|
+
const ArkSignatureBuilder_1 = require("../../../../core/model/builder/ArkSignatureBuilder");
|
|
59
|
+
const logger_1 = __importStar(require("../../../../utils/logger"));
|
|
60
|
+
const ArkCxxAstNode_1 = require("../../ast/ArkCxxAstNode");
|
|
61
|
+
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'ArkMethodBuilder');
|
|
62
|
+
function getSpecificNodes(methodNode, targetNode) {
|
|
63
|
+
if (!methodNode || !methodNode.inner) {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
// Handle Cpp lambda functions
|
|
67
|
+
if (methodNode.type && !((0, builderUtils_1.isCxxFunctionPointer)(methodNode.type.qualType)) &&
|
|
68
|
+
!['FunctionDecl', 'CXXMethodDecl', 'CXXConstructorDecl', 'CXXDestructorDecl', 'FriendDecl', 'LambdaExpr', 'FunctionTemplateDecl'].includes(methodNode.kind) &&
|
|
69
|
+
methodNode.inner) {
|
|
70
|
+
return getSpecificNodes(methodNode.inner[0], targetNode);
|
|
71
|
+
}
|
|
72
|
+
let result = [];
|
|
73
|
+
methodNode.inner.forEach((childNode) => {
|
|
74
|
+
if (childNode.kind.toString() === targetNode) {
|
|
75
|
+
result.push(childNode);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
return result.length > 0 ? result : [];
|
|
79
|
+
}
|
|
80
|
+
function buildDefaultArkMethodFromArkClass(declaringClass, mtd, sourceFile, node) {
|
|
81
|
+
mtd.setDeclaringArkClass(declaringClass);
|
|
82
|
+
const methodSubSignature = ArkSignatureBuilder_1.ArkSignatureBuilder.buildMethodSubSignatureFromMethodName(Const_1.DEFAULT_ARK_METHOD_NAME, true);
|
|
83
|
+
const methodSignature = new ArkSignature_1.MethodSignature(mtd.getDeclaringArkClass().getSignature(), methodSubSignature);
|
|
84
|
+
mtd.setImplementationSignature(methodSignature);
|
|
85
|
+
mtd.setLineCol(0);
|
|
86
|
+
const defaultMethodNode = node ? node : sourceFile;
|
|
87
|
+
let bodyBuilder = new BodyBuilder_1.CxxBodyBuilder(mtd.getSignature(), defaultMethodNode, mtd, sourceFile);
|
|
88
|
+
mtd.setCxxBodyBuilder(bodyBuilder);
|
|
89
|
+
}
|
|
90
|
+
exports.buildDefaultArkMethodFromArkClass = buildDefaultArkMethodFromArkClass;
|
|
91
|
+
function handleFunctionTemplateDecl(methodNode, mtd, sourceFile) {
|
|
92
|
+
if (methodNode.kind !== 'FunctionTemplateDecl' && methodNode.kind !== 'LambdaExpr') {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
mtd.isGenericsMethod();
|
|
96
|
+
let templateTypesArray = [];
|
|
97
|
+
let index = -1;
|
|
98
|
+
for (const innerNode of methodNode.inner) {
|
|
99
|
+
if (innerNode.kind !== 'TemplateTypeParmVarDecl' && innerNode.kind !== 'TemplateTypeParmDecl') {
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
let typename = innerNode.name;
|
|
103
|
+
// Template for handling parameter folding
|
|
104
|
+
if (innerNode.code.includes('...')) {
|
|
105
|
+
typename = typename + '...';
|
|
106
|
+
}
|
|
107
|
+
let defaultType;
|
|
108
|
+
if (innerNode.defaultArg) {
|
|
109
|
+
defaultType = (0, builderUtils_1.cxxNode2Type)(innerNode, undefined);
|
|
110
|
+
}
|
|
111
|
+
let templateType = new Type_1.GenericType(typename, defaultType);
|
|
112
|
+
templateType.setIndex(++index);
|
|
113
|
+
templateTypesArray.push(templateType);
|
|
114
|
+
}
|
|
115
|
+
mtd.setGenericTypes(templateTypesArray);
|
|
116
|
+
}
|
|
117
|
+
exports.handleFunctionTemplateDecl = handleFunctionTemplateDecl;
|
|
118
|
+
function buildArkMethodFromArkClass(methodNode, declaringClass, mtd, sourceFile, declaringMethod) {
|
|
119
|
+
mtd.setDeclaringArkClass(declaringClass);
|
|
120
|
+
if (declaringMethod !== undefined) {
|
|
121
|
+
mtd.setOuterMethod(declaringMethod);
|
|
122
|
+
}
|
|
123
|
+
if (methodNode.kind === 'FunctionDecl' || methodNode.kind === 'FunctionTemplateDecl') {
|
|
124
|
+
mtd.setAsteriskToken(false);
|
|
125
|
+
}
|
|
126
|
+
handleFunctionTemplateDecl(methodNode, mtd, sourceFile);
|
|
127
|
+
// After processing the template parameters, proceed to the corresponding functions below
|
|
128
|
+
methodNode = methodNode.kind === 'FunctionTemplateDecl' ? methodNode.inner[methodNode.inner.length - 1] : methodNode;
|
|
129
|
+
mtd.setCode(methodNode.code);
|
|
130
|
+
mtd.addModifier((0, builderUtils_1.buildModifiers)(methodNode));
|
|
131
|
+
if (methodNode.kind === 'FriendDecl' && methodNode.inner.length > 0) {
|
|
132
|
+
methodNode = methodNode.inner[0];
|
|
133
|
+
}
|
|
134
|
+
const methodName = buildMethodName(methodNode, declaringClass, sourceFile, declaringMethod);
|
|
135
|
+
const methodParameters = [];
|
|
136
|
+
const parameters = getSpecificNodes(methodNode, 'ParmVarDecl');
|
|
137
|
+
(0, builderUtils_1.buildParameters)(parameters, mtd, sourceFile).forEach(parameter => {
|
|
138
|
+
(0, builderUtils_2.buildGenericType)(parameter.getType(), mtd);
|
|
139
|
+
methodParameters.push(parameter);
|
|
140
|
+
});
|
|
141
|
+
let returnType = Type_1.UnknownType.getInstance();
|
|
142
|
+
if (methodNode.type) {
|
|
143
|
+
returnType = (0, builderUtils_2.buildGenericType)((0, builderUtils_1.buildReturnType)(methodNode, sourceFile, mtd), mtd);
|
|
144
|
+
}
|
|
145
|
+
if (isRelatedToCXXInheritedCtorInitExpr(methodNode)) {
|
|
146
|
+
addParamsToCXXInheritedCtorInitExpr(methodNode, mtd, methodParameters);
|
|
147
|
+
returnType = Type_1.VoidType.getInstance();
|
|
148
|
+
}
|
|
149
|
+
reCheckModifiers(methodName, declaringClass, mtd, methodParameters);
|
|
150
|
+
const methodSubSignature = new ArkSignature_1.MethodSubSignature(methodName, methodParameters, returnType, mtd.isStatic());
|
|
151
|
+
const methodSignature = new ArkSignature_1.MethodSignature(mtd.getDeclaringArkClass().getSignature(), methodSubSignature);
|
|
152
|
+
const nodePos = (0, ArkCxxAstNode_1.getNodeStartLineAndCol)(methodNode);
|
|
153
|
+
if (isMethodImplementation(methodNode)) {
|
|
154
|
+
mtd.setImplementationSignature(methodSignature);
|
|
155
|
+
mtd.setLine(nodePos.line);
|
|
156
|
+
mtd.setColumn(nodePos.col);
|
|
157
|
+
let bodyBuilder = new BodyBuilder_1.CxxBodyBuilder(mtd.getSignature(), methodNode, mtd, sourceFile);
|
|
158
|
+
mtd.setCxxBodyBuilder(bodyBuilder);
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
mtd.setDeclareSignatures(methodSignature);
|
|
162
|
+
mtd.setDeclareLinesAndCols([nodePos.line], [nodePos.col]);
|
|
163
|
+
}
|
|
164
|
+
checkAndUpdateCxxMethod(mtd, declaringClass);
|
|
165
|
+
declaringClass.addMethod(mtd);
|
|
166
|
+
IRUtils_1.IRUtils.setComments(mtd, methodNode, sourceFile, mtd.getDeclaringArkFile().getScene().getOptions());
|
|
167
|
+
}
|
|
168
|
+
exports.buildArkMethodFromArkClass = buildArkMethodFromArkClass;
|
|
169
|
+
// When a function is implemented outside the class, it retrieves the modifier at the original definition
|
|
170
|
+
function reCheckModifiers(methodName, cls, method, parameters) {
|
|
171
|
+
let methodsWithSameName = cls.getAllMethodsWithName(methodName);
|
|
172
|
+
if (methodsWithSameName.length === 0) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
for (const preMtd of methodsWithSameName) {
|
|
176
|
+
let preParameters = preMtd.getSubSignature().getParameters();
|
|
177
|
+
if (compareParameters(preParameters, parameters)) {
|
|
178
|
+
method.addModifier(preMtd.getModifiers());
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
function compareParameters(preParameters, parameters) {
|
|
183
|
+
if (preParameters.length !== parameters.length) {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
for (let i = 0; i < parameters.length; i++) {
|
|
187
|
+
if (parameters[i].getType().toString() !== preParameters[i].getType().toString()) {
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return true;
|
|
192
|
+
}
|
|
193
|
+
function checkAndUpdateCxxMethod(method, cls) {
|
|
194
|
+
const methodName = method.getName();
|
|
195
|
+
const methodSignature = method.getSignature();
|
|
196
|
+
let methodsWithSameName = cls.getAllMethodsWithName(methodName);
|
|
197
|
+
if (methodsWithSameName.length === 0) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
for (const preMtd of methodsWithSameName) {
|
|
201
|
+
if (preMtd.getSignature().isMatch(methodSignature)) {
|
|
202
|
+
(0, ArkMethodBuilder_1.updateMethodSignaturesAndLineCols)(method, preMtd);
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
function isRelatedToCXXInheritedCtorInitExpr(node) {
|
|
208
|
+
if (!node) {
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
let innerNodes = node.inner;
|
|
212
|
+
while (innerNodes) {
|
|
213
|
+
if (innerNodes.length === 0) {
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
if (innerNodes[0].kind === 'CXXInheritedCtorInitExpr') {
|
|
217
|
+
return true;
|
|
218
|
+
}
|
|
219
|
+
innerNodes = innerNodes[0].inner;
|
|
220
|
+
}
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
function addParamsToCXXInheritedCtorInitExpr(mtdNode, mtd, methodParameters) {
|
|
224
|
+
var _a, _b, _c;
|
|
225
|
+
const cls = mtd.getDeclaringArkClass();
|
|
226
|
+
const superClassName = (_c = (_b = (_a = mtdNode.inner) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.baseInit) === null || _c === void 0 ? void 0 : _c.qualType;
|
|
227
|
+
if (!superClassName) {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
let superClass = cls.getHeritageClass(superClassName);
|
|
231
|
+
if (!superClass) {
|
|
232
|
+
cls.addHeritageClassName(superClassName);
|
|
233
|
+
superClass = cls.getDeclaringArkFile().getClassWithName(superClassName);
|
|
234
|
+
if (!superClass) {
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
buildDefaultConstructor(superClass);
|
|
239
|
+
const superConstructor = superClass.getMethodWithName(TSConst_1.CONSTRUCTOR_NAME);
|
|
240
|
+
if (!superConstructor) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
superConstructor.getParameters().forEach(param => {
|
|
244
|
+
(0, builderUtils_2.buildGenericType)(param.getType(), mtd);
|
|
245
|
+
methodParameters.push(param);
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
function buildMethodName(node, declaringClass, sourceFile, declaringMethod) {
|
|
249
|
+
let name = '';
|
|
250
|
+
let declType = node.kind.toString();
|
|
251
|
+
switch (declType) {
|
|
252
|
+
case 'CXXMethodDecl':
|
|
253
|
+
case 'FunctionDecl':
|
|
254
|
+
case 'CXXDestructorDecl':
|
|
255
|
+
case 'FunctionTemplateDecl':
|
|
256
|
+
name = node.name.toString();
|
|
257
|
+
break;
|
|
258
|
+
case 'CXXConstructorDecl':
|
|
259
|
+
name = 'constructor';
|
|
260
|
+
break;
|
|
261
|
+
case 'LambdaExpr':
|
|
262
|
+
name = buildAnonymousMethodName(node, declaringClass);
|
|
263
|
+
break;
|
|
264
|
+
case 'VarDecl':
|
|
265
|
+
case 'ParmVarDecl':
|
|
266
|
+
if ((0, builderUtils_1.isCxxFunctionPointer)(node.type.qualType)) {
|
|
267
|
+
name = buildAnonymousMethodName(node, declaringClass);
|
|
268
|
+
}
|
|
269
|
+
break;
|
|
270
|
+
default:
|
|
271
|
+
break;
|
|
272
|
+
}
|
|
273
|
+
if (declaringMethod !== undefined && !declaringMethod.isDefaultArkMethod()) {
|
|
274
|
+
name = (0, ArkMethodBuilder_1.buildNestedMethodName)(name, declaringMethod.getName());
|
|
275
|
+
}
|
|
276
|
+
return name;
|
|
277
|
+
}
|
|
278
|
+
function buildAnonymousMethodName(node, declaringClass) {
|
|
279
|
+
return `${Const_1.ANONYMOUS_METHOD_PREFIX}${declaringClass.getAnonymousMethodNumber()}`;
|
|
280
|
+
}
|
|
281
|
+
function recursivelyCheckAndBuildSuperConstructor(arkClass) {
|
|
282
|
+
const superClasses = arkClass.getAllHeritageClasses();
|
|
283
|
+
if (!superClasses) {
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
for (const superClass of superClasses) {
|
|
287
|
+
if (superClass.getMethodWithName(TSConst_1.CONSTRUCTOR_NAME) === null) {
|
|
288
|
+
buildDefaultConstructor(superClass);
|
|
289
|
+
}
|
|
290
|
+
recursivelyCheckAndBuildSuperConstructor(superClass);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
exports.recursivelyCheckAndBuildSuperConstructor = recursivelyCheckAndBuildSuperConstructor;
|
|
294
|
+
function buildDefaultConstructor(arkClass) {
|
|
295
|
+
var _a;
|
|
296
|
+
if (!(0, ArkMethodBuilder_1.needDefaultConstructorInClass)(arkClass)) {
|
|
297
|
+
return false;
|
|
298
|
+
}
|
|
299
|
+
recursivelyCheckAndBuildSuperConstructor(arkClass);
|
|
300
|
+
const defaultConstructor = new ArkMethod_1.ArkMethod();
|
|
301
|
+
defaultConstructor.setDeclaringArkClass(arkClass);
|
|
302
|
+
defaultConstructor.setCode(arkClass.getName());
|
|
303
|
+
defaultConstructor.setIsGeneratedFlag(false);
|
|
304
|
+
const thisLocal = new Local_1.Local(TSConst_1.THIS_NAME, new Type_1.ClassType(arkClass.getSignature()));
|
|
305
|
+
const locals = new Set([thisLocal]);
|
|
306
|
+
const basicBlock = new BasicBlock_1.BasicBlock();
|
|
307
|
+
basicBlock.setId(0);
|
|
308
|
+
let parameters = [];
|
|
309
|
+
let parameterArgs = [];
|
|
310
|
+
const superConstructor = (_a = arkClass.getSuperClass()) === null || _a === void 0 ? void 0 : _a.getMethodWithName(TSConst_1.CONSTRUCTOR_NAME);
|
|
311
|
+
if (superConstructor) {
|
|
312
|
+
parameters = superConstructor.getParameters();
|
|
313
|
+
for (let index = 0; index < parameters.length; index++) {
|
|
314
|
+
const parameterRef = new Ref_1.ArkParameterRef(index, parameters[index].getType());
|
|
315
|
+
const parameterLocal = new Local_1.Local(parameters[index].getName(), parameterRef.getType());
|
|
316
|
+
locals.add(parameterLocal);
|
|
317
|
+
parameterArgs.push(parameterLocal);
|
|
318
|
+
basicBlock.addStmt(new Stmt_1.ArkAssignStmt(parameterLocal, parameterRef));
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
basicBlock.addStmt(new Stmt_1.ArkAssignStmt(thisLocal, new Ref_1.ArkThisRef(new Type_1.ClassType(arkClass.getSignature()))));
|
|
322
|
+
if (superConstructor) {
|
|
323
|
+
const superMethodSubSignature = new ArkSignature_1.MethodSubSignature(TSConst_1.SUPER_NAME, parameters, superConstructor.getReturnType());
|
|
324
|
+
const superMethodSignature = new ArkSignature_1.MethodSignature(arkClass.getSignature(), superMethodSubSignature);
|
|
325
|
+
const superInvokeExpr = new Expr_1.ArkStaticInvokeExpr(superMethodSignature, parameterArgs);
|
|
326
|
+
basicBlock.addStmt(new Stmt_1.ArkInvokeStmt(superInvokeExpr));
|
|
327
|
+
}
|
|
328
|
+
const methodSubSignature = new ArkSignature_1.MethodSubSignature(TSConst_1.CONSTRUCTOR_NAME, parameters, thisLocal.getType(), defaultConstructor.isStatic());
|
|
329
|
+
defaultConstructor.setImplementationSignature(new ArkSignature_1.MethodSignature(arkClass.getSignature(), methodSubSignature));
|
|
330
|
+
basicBlock.addStmt(new Stmt_1.ArkReturnStmt(thisLocal));
|
|
331
|
+
const cfg = new Cfg_1.Cfg();
|
|
332
|
+
cfg.addBlock(basicBlock);
|
|
333
|
+
cfg.setStartingStmt(basicBlock.getHead());
|
|
334
|
+
cfg.setDeclaringMethod(defaultConstructor);
|
|
335
|
+
cfg.getStmts().forEach(s => s.setCfg(cfg));
|
|
336
|
+
defaultConstructor.setBody(new ArkBody_1.ArkBody(locals, cfg));
|
|
337
|
+
checkAndUpdateCxxMethod(defaultConstructor, arkClass);
|
|
338
|
+
arkClass.addMethod(defaultConstructor);
|
|
339
|
+
return true;
|
|
340
|
+
}
|
|
341
|
+
exports.buildDefaultConstructor = buildDefaultConstructor;
|
|
342
|
+
function buildInitMethod(initMethod, fieldInitializerStmts, thisLocal) {
|
|
343
|
+
const classType = new Type_1.ClassType(initMethod.getDeclaringArkClass().getSignature());
|
|
344
|
+
const assignStmt = new Stmt_1.ArkAssignStmt(thisLocal, new Ref_1.ArkThisRef(classType));
|
|
345
|
+
const block = new BasicBlock_1.BasicBlock();
|
|
346
|
+
block.setId(0);
|
|
347
|
+
block.addStmt(assignStmt);
|
|
348
|
+
const locals = new Set([thisLocal]);
|
|
349
|
+
for (const stmt of fieldInitializerStmts) {
|
|
350
|
+
block.addStmt(stmt);
|
|
351
|
+
if (stmt.getDef() && stmt.getDef() instanceof Local_1.Local) {
|
|
352
|
+
locals.add(stmt.getDef());
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
block.addStmt(new Stmt_1.ArkReturnVoidStmt());
|
|
356
|
+
const cfg = new Cfg_1.Cfg();
|
|
357
|
+
cfg.addBlock(block);
|
|
358
|
+
for (const stmt of block.getStmts()) {
|
|
359
|
+
stmt.setCfg(cfg);
|
|
360
|
+
}
|
|
361
|
+
cfg.setStartingStmt(assignStmt);
|
|
362
|
+
cfg.buildDefUseStmt(locals);
|
|
363
|
+
cfg.setDeclaringMethod(initMethod);
|
|
364
|
+
initMethod.setBody(new ArkBody_1.ArkBody(locals, cfg));
|
|
365
|
+
}
|
|
366
|
+
exports.buildInitMethod = buildInitMethod;
|
|
367
|
+
function addInitInConstructor(constructor) {
|
|
368
|
+
var _a, _b;
|
|
369
|
+
const thisLocal = (_a = constructor.getBody()) === null || _a === void 0 ? void 0 : _a.getLocals().get(TSConst_1.THIS_NAME);
|
|
370
|
+
if (!thisLocal) {
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
const cfg = constructor.getCfg();
|
|
374
|
+
if (cfg === undefined) {
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
const blocks = (_b = constructor.getCfg()) === null || _b === void 0 ? void 0 : _b.getBlocks();
|
|
378
|
+
if (!blocks) {
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
const firstBlockStmts = [...blocks][0].getStmts();
|
|
382
|
+
let index = 0;
|
|
383
|
+
for (let i = 0; i < firstBlockStmts.length; i++) {
|
|
384
|
+
const stmt = firstBlockStmts[i];
|
|
385
|
+
if ((stmt.getDef() instanceof Local_1.Local && stmt.getDef().getName() === TSConst_1.THIS_NAME) ||
|
|
386
|
+
(stmt instanceof Stmt_1.ArkInvokeStmt && stmt.getInvokeExpr().getMethodSignature().getMethodSubSignature().getMethodName() === TSConst_1.CONSTRUCTOR_NAME)) {
|
|
387
|
+
index = i + 1;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
let initInvokeStmt;
|
|
391
|
+
try {
|
|
392
|
+
initInvokeStmt = new Stmt_1.ArkInvokeStmt(new Expr_1.ArkInstanceInvokeExpr(thisLocal, constructor.getDeclaringArkClass().getInstanceInitMethod().getSignature(), []));
|
|
393
|
+
}
|
|
394
|
+
catch (e) {
|
|
395
|
+
logger.warn('addInitInConstructor: failed to build initInvokeStmt due to exception: ', e);
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
if (initInvokeStmt) {
|
|
399
|
+
initInvokeStmt.setCfg(cfg);
|
|
400
|
+
firstBlockStmts.splice(index, 0, initInvokeStmt);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
exports.addInitInConstructor = addInitInConstructor;
|
|
404
|
+
function isMethodImplementation(node) {
|
|
405
|
+
var _a;
|
|
406
|
+
switch (node.kind) {
|
|
407
|
+
case 'LambdaExpr':
|
|
408
|
+
return (node.inner && node.inner.length > 0);
|
|
409
|
+
case 'CXXMethodDecl':
|
|
410
|
+
case 'CXXConstructorDecl':
|
|
411
|
+
case 'CXXDestructorDecl':
|
|
412
|
+
case 'FunctionDecl':
|
|
413
|
+
case 'FunctionTemplateDecl':
|
|
414
|
+
case 'FriendDecl':
|
|
415
|
+
// CXXConstructorDecl-CXXCtorInitializer: using Base::Base
|
|
416
|
+
// ==> The constructor of the subclass has the same implementation as that of the parent class.
|
|
417
|
+
return !!((_a = node.inner) === null || _a === void 0 ? void 0 : _a.find((inn) => (inn.kind === 'CompoundStmt' || inn.kind === 'CXXCtorInitializer')));
|
|
418
|
+
default:
|
|
419
|
+
return false;
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
exports.isMethodImplementation = isMethodImplementation;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ArkFile } from '../../../../core/model/ArkFile';
|
|
2
|
+
import { ArkNamespace } from '../../../../core/model/ArkNamespace';
|
|
3
|
+
import { ArkClass } from '../../../../core/model/ArkClass';
|
|
4
|
+
import { CxxAstNode } from '../../ast/ArkCxxAstNode';
|
|
5
|
+
export declare function buildDefaultArkClassFromArkNamespace(arkNamespace: ArkNamespace, defaultClass: ArkClass, nsNode: CxxAstNode, sourceFile: CxxAstNode): void;
|
|
6
|
+
export declare function genDefaultArkClass(ns: ArkNamespace, node: CxxAstNode, sourceFile: CxxAstNode): void;
|
|
7
|
+
export declare function buildArkNamespace(node: CxxAstNode, declaringInstance: ArkFile | ArkNamespace, ns: ArkNamespace, sourceFile: CxxAstNode): void;
|
|
8
|
+
//# sourceMappingURL=ArkNamespaceBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArkNamespaceBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAGnE,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAG3D,OAAO,EAAE,UAAU,EAA0B,MAAM,yBAAyB,CAAC;AAuB7E,wBAAgB,oCAAoC,CAChD,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,QAAQ,EACtB,MAAM,EAAE,UAAU,EAClB,UAAU,EAAE,UAAU,GACvB,IAAI,CAIN;AAGD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CAMnG;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,iBAAiB,EAAE,OAAO,GAAG,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CAsC7I"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2024-2025 Huawei Device Co., Ltd.
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
19
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
20
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
21
|
+
}
|
|
22
|
+
Object.defineProperty(o, k2, desc);
|
|
23
|
+
}) : (function(o, m, k, k2) {
|
|
24
|
+
if (k2 === undefined) k2 = k;
|
|
25
|
+
o[k2] = m[k];
|
|
26
|
+
}));
|
|
27
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
28
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
29
|
+
}) : function(o, v) {
|
|
30
|
+
o["default"] = v;
|
|
31
|
+
});
|
|
32
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.buildArkNamespace = exports.genDefaultArkClass = exports.buildDefaultArkClassFromArkNamespace = void 0;
|
|
41
|
+
const ArkClassBuilder_1 = require("./ArkClassBuilder");
|
|
42
|
+
const ArkFile_1 = require("../../../../core/model/ArkFile");
|
|
43
|
+
const ArkMethodBuilder_1 = require("./ArkMethodBuilder");
|
|
44
|
+
const ArkNamespace_1 = require("../../../../core/model/ArkNamespace");
|
|
45
|
+
const builderUtils_1 = require("./builderUtils");
|
|
46
|
+
const logger_1 = __importStar(require("../../../../utils/logger"));
|
|
47
|
+
const ArkClass_1 = require("../../../../core/model/ArkClass");
|
|
48
|
+
const ArkMethod_1 = require("../../../../core/model/ArkMethod");
|
|
49
|
+
const ArkSignature_1 = require("../../../../core/model/ArkSignature");
|
|
50
|
+
const ArkCxxAstNode_1 = require("../../ast/ArkCxxAstNode");
|
|
51
|
+
const Const_1 = require("../../../../core/common/Const");
|
|
52
|
+
const ArkMethodBuilder_2 = require("./ArkMethodBuilder");
|
|
53
|
+
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'ArkNamespaceBuilder');
|
|
54
|
+
function buildDefaultArkClass(cls, sourceFile, node) {
|
|
55
|
+
var _a;
|
|
56
|
+
const defaultArkClassSignature = new ArkSignature_1.ClassSignature(Const_1.DEFAULT_ARK_CLASS_NAME, cls.getDeclaringArkFile().getFileSignature(), ((_a = cls.getDeclaringArkNamespace()) === null || _a === void 0 ? void 0 : _a.getSignature()) || null);
|
|
57
|
+
cls.setSignature(defaultArkClassSignature);
|
|
58
|
+
genDefaultArkMethod(cls, sourceFile, node);
|
|
59
|
+
}
|
|
60
|
+
function genDefaultArkMethod(cls, sourceFile, node) {
|
|
61
|
+
let defaultMethod = new ArkMethod_1.ArkMethod();
|
|
62
|
+
(0, ArkMethodBuilder_2.buildDefaultArkMethodFromArkClass)(cls, defaultMethod, sourceFile, node);
|
|
63
|
+
cls.setDefaultArkMethod(defaultMethod);
|
|
64
|
+
}
|
|
65
|
+
function buildDefaultArkClassFromArkNamespace(arkNamespace, defaultClass, nsNode, sourceFile) {
|
|
66
|
+
defaultClass.setDeclaringArkNamespace(arkNamespace);
|
|
67
|
+
defaultClass.setDeclaringArkFile(arkNamespace.getDeclaringArkFile());
|
|
68
|
+
buildDefaultArkClass(defaultClass, sourceFile, nsNode);
|
|
69
|
+
}
|
|
70
|
+
exports.buildDefaultArkClassFromArkNamespace = buildDefaultArkClassFromArkNamespace;
|
|
71
|
+
function genDefaultArkClass(ns, node, sourceFile) {
|
|
72
|
+
let defaultClass = new ArkClass_1.ArkClass();
|
|
73
|
+
buildDefaultArkClassFromArkNamespace(ns, defaultClass, node, sourceFile);
|
|
74
|
+
ns.setDefaultClass(defaultClass);
|
|
75
|
+
ns.addArkClass(defaultClass);
|
|
76
|
+
}
|
|
77
|
+
exports.genDefaultArkClass = genDefaultArkClass;
|
|
78
|
+
function buildArkNamespace(node, declaringInstance, ns, sourceFile) {
|
|
79
|
+
var _a;
|
|
80
|
+
// modifiers
|
|
81
|
+
if (node.modifiers) {
|
|
82
|
+
ns.setModifiers((0, builderUtils_1.buildModifiers)(node));
|
|
83
|
+
ns.setDecorators((0, builderUtils_1.buildDecorators)(node, sourceFile));
|
|
84
|
+
}
|
|
85
|
+
if (declaringInstance instanceof ArkFile_1.ArkFile) {
|
|
86
|
+
ns.setDeclaringArkFile(declaringInstance);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
ns.setDeclaringArkNamespace(declaringInstance);
|
|
90
|
+
ns.setDeclaringArkFile(declaringInstance.getDeclaringArkFile());
|
|
91
|
+
}
|
|
92
|
+
ns.setDeclaringInstance(declaringInstance);
|
|
93
|
+
const namespaceName = genNamespaceName(node.name ? node.name : '', declaringInstance);
|
|
94
|
+
const namespaceSignature = new ArkSignature_1.NamespaceSignature(namespaceName, ns.getDeclaringArkFile().getFileSignature(), ((_a = ns.getDeclaringArkNamespace()) === null || _a === void 0 ? void 0 : _a.getSignature()) || null);
|
|
95
|
+
ns.setSignature(namespaceSignature);
|
|
96
|
+
// TODO: whether needed?
|
|
97
|
+
ns.setCode(node.code);
|
|
98
|
+
// set line and column
|
|
99
|
+
const nodePos = (0, ArkCxxAstNode_1.getNodeStartLineAndCol)(node);
|
|
100
|
+
ns.setLine(nodePos.line);
|
|
101
|
+
ns.setColumn(nodePos.col);
|
|
102
|
+
genDefaultArkClass(ns, node, sourceFile);
|
|
103
|
+
// build ns member
|
|
104
|
+
if (node.inner) {
|
|
105
|
+
buildNamespaceMembers(node, ns, sourceFile);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
logger.warn('JSDocNamespaceDeclaration found.');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
exports.buildArkNamespace = buildArkNamespace;
|
|
112
|
+
function genNamespaceName(name, declaringInstance) {
|
|
113
|
+
if (!name) {
|
|
114
|
+
const num = declaringInstance.getAnonymousNamespaceNumber();
|
|
115
|
+
name = Const_1.ANONYMOUS_NAMESPACE_PREFIX + num;
|
|
116
|
+
}
|
|
117
|
+
return name;
|
|
118
|
+
}
|
|
119
|
+
function processUsingDeclInNamespace(usingDeclNode, namespace) {
|
|
120
|
+
// CXXTodo: using NS::Member, scenario 'NS is from other file' is not handled.
|
|
121
|
+
const curArkFile = namespace.getDeclaringArkFile();
|
|
122
|
+
let curNS;
|
|
123
|
+
if (usingDeclNode.name.includes('::')) {
|
|
124
|
+
const namespaceName = usingDeclNode.name.substring(0, usingDeclNode.name.indexOf('::'));
|
|
125
|
+
const memberName = usingDeclNode.name.substring(usingDeclNode.name.indexOf('::') + 2);
|
|
126
|
+
curNS = curArkFile.getNamespaceWithName(namespaceName);
|
|
127
|
+
let usingFunc = curNS === null || curNS === void 0 ? void 0 : curNS.getDefaultClass().getMethodWithName(memberName);
|
|
128
|
+
if (usingFunc) {
|
|
129
|
+
namespace.getDefaultClass().addMethod(usingFunc);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// TODO: check and update
|
|
135
|
+
function buildNamespaceMembers(node, namespace, sourceFile) {
|
|
136
|
+
const statements = node.inner;
|
|
137
|
+
statements.forEach((child) => {
|
|
138
|
+
switch (child.kind) {
|
|
139
|
+
case 'NamespaceDecl': {
|
|
140
|
+
let childNs = new ArkNamespace_1.ArkNamespace();
|
|
141
|
+
childNs.setDeclaringArkNamespace(namespace);
|
|
142
|
+
childNs.setDeclaringArkFile(namespace.getDeclaringArkFile());
|
|
143
|
+
buildArkNamespace(child, namespace, childNs, sourceFile);
|
|
144
|
+
namespace.addNamespace(childNs);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
case 'CXXRecordDecl':
|
|
148
|
+
case 'ClassTemplateDecl': {
|
|
149
|
+
let cls = new ArkClass_1.ArkClass();
|
|
150
|
+
(0, ArkClassBuilder_1.buildNormalArkClassFromArkNamespace)(child, namespace, cls, sourceFile);
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
case 'CXXConstructorDecl':
|
|
154
|
+
case 'CXXDestructorDecl':
|
|
155
|
+
case 'CXXMethodDecl': {
|
|
156
|
+
buildArkMethodForClassMethodInNamespace(child, namespace, sourceFile);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
case 'FunctionTemplateDecl':
|
|
160
|
+
case 'FunctionDecl':
|
|
161
|
+
case 'FriendDecl': {
|
|
162
|
+
let mthd = new ArkMethod_1.ArkMethod();
|
|
163
|
+
(0, ArkMethodBuilder_1.buildArkMethodFromArkClass)(child, namespace.getDefaultClass(), mthd, sourceFile);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
case 'UsingDecl':
|
|
167
|
+
// CXXTodo: using NS::Member, scenario 'NS is from other file' is not handled.
|
|
168
|
+
processUsingDeclInNamespace(child, namespace);
|
|
169
|
+
return;
|
|
170
|
+
default:
|
|
171
|
+
logger.trace('Child joined default method of arkFile: ', child.kind);
|
|
172
|
+
// join default method
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
function buildArkMethodForClassMethodInNamespace(methodNode, namespace, sourceFile) {
|
|
177
|
+
var _a;
|
|
178
|
+
let className = methodNode.mangledName;
|
|
179
|
+
if (!className) {
|
|
180
|
+
logger.trace('Declaration class not found', methodNode);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
let arkClass = namespace.getClassWithName(className);
|
|
184
|
+
if (!arkClass) {
|
|
185
|
+
arkClass = new ArkClass_1.ArkClass();
|
|
186
|
+
arkClass.setDeclaringArkNamespace(namespace);
|
|
187
|
+
arkClass.setDeclaringArkFile(namespace.getDeclaringArkFile());
|
|
188
|
+
const classSignature = new ArkSignature_1.ClassSignature(className, arkClass.getDeclaringArkFile().getFileSignature(), ((_a = arkClass.getDeclaringArkNamespace()) === null || _a === void 0 ? void 0 : _a.getSignature()) || null);
|
|
189
|
+
arkClass.setSignature(classSignature);
|
|
190
|
+
namespace.addArkClass(arkClass, className);
|
|
191
|
+
}
|
|
192
|
+
let mtd = new ArkMethod_1.ArkMethod();
|
|
193
|
+
(0, ArkMethodBuilder_1.buildArkMethodFromArkClass)(methodNode, arkClass, mtd, sourceFile);
|
|
194
|
+
}
|