arkanalyzer 1.0.20 → 1.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/arkanalyzer.json +14 -13
- package/lib/Config.d.ts +70 -70
- package/lib/Config.js +198 -198
- package/lib/Scene.d.ts +316 -316
- package/lib/Scene.js +1316 -1316
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts +28 -28
- package/lib/callgraph/algorithm/AbstractAnalysis.js +144 -144
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.d.ts +10 -10
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.js +69 -69
- package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts +15 -15
- package/lib/callgraph/algorithm/RapidTypeAnalysis.js +146 -146
- package/lib/callgraph/common/Statistics.d.ts +57 -57
- package/lib/callgraph/common/Statistics.js +228 -228
- package/lib/callgraph/model/CallGraph.d.ts +96 -96
- package/lib/callgraph/model/CallGraph.js +354 -354
- package/lib/callgraph/model/builder/CallGraphBuilder.d.ts +15 -15
- package/lib/callgraph/model/builder/CallGraphBuilder.js +106 -106
- package/lib/callgraph/pointerAnalysis/Context.d.ts +37 -37
- package/lib/callgraph/pointerAnalysis/Context.js +155 -155
- package/lib/callgraph/pointerAnalysis/DummyCallCreator.d.ts +22 -22
- package/lib/callgraph/pointerAnalysis/DummyCallCreator.js +104 -104
- package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts +5 -5
- package/lib/callgraph/pointerAnalysis/PTAUtils.js +46 -46
- package/lib/callgraph/pointerAnalysis/Pag.d.ts +261 -261
- package/lib/callgraph/pointerAnalysis/Pag.js +930 -930
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +157 -157
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +1399 -1399
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts +72 -72
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +573 -573
- package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts +15 -15
- package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.js +81 -81
- package/lib/callgraph/pointerAnalysis/PtsDS.d.ts +80 -80
- package/lib/callgraph/pointerAnalysis/PtsDS.js +308 -308
- package/lib/core/base/Constant.d.ts +48 -48
- package/lib/core/base/Constant.js +103 -103
- package/lib/core/base/Decorator.d.ts +15 -15
- package/lib/core/base/Decorator.js +46 -46
- package/lib/core/base/DefUseChain.d.ts +8 -8
- package/lib/core/base/DefUseChain.js +25 -25
- package/lib/core/base/Expr.d.ts +340 -340
- package/lib/core/base/Expr.js +917 -917
- package/lib/core/base/Local.d.ts +104 -104
- package/lib/core/base/Local.js +176 -176
- package/lib/core/base/Position.d.ts +30 -30
- package/lib/core/base/Position.js +147 -147
- package/lib/core/base/Ref.d.ts +173 -173
- package/lib/core/base/Ref.d.ts.map +1 -1
- package/lib/core/base/Ref.js +373 -374
- package/lib/core/base/Stmt.d.ts +237 -237
- package/lib/core/base/Stmt.js +525 -525
- package/lib/core/base/Trap.d.ts +8 -8
- package/lib/core/base/Trap.js +30 -30
- package/lib/core/base/Type.d.ts +308 -308
- package/lib/core/base/Type.js +639 -639
- package/lib/core/base/TypeExpr.d.ts +71 -71
- package/lib/core/base/TypeExpr.js +155 -155
- package/lib/core/base/Value.d.ts +32 -32
- package/lib/core/base/Value.js +16 -16
- package/lib/core/common/ArkError.d.ts +14 -14
- package/lib/core/common/ArkError.js +28 -28
- package/lib/core/common/ArkIRTransformer.d.ts +68 -67
- package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkIRTransformer.js +705 -690
- package/lib/core/common/ArkValueTransformer.d.ts +89 -89
- package/lib/core/common/ArkValueTransformer.js +1478 -1478
- package/lib/core/common/Builtin.d.ts +36 -36
- package/lib/core/common/Builtin.js +81 -81
- package/lib/core/common/Const.d.ts +21 -21
- package/lib/core/common/Const.js +43 -43
- package/lib/core/common/DummyMainCreater.d.ts +46 -46
- package/lib/core/common/DummyMainCreater.js +319 -319
- package/lib/core/common/EtsConst.d.ts +73 -73
- package/lib/core/common/EtsConst.js +1021 -1021
- package/lib/core/common/ExprUseReplacer.d.ts +21 -21
- package/lib/core/common/ExprUseReplacer.js +124 -124
- package/lib/core/common/IRInference.d.ts +45 -36
- package/lib/core/common/IRInference.d.ts.map +1 -1
- package/lib/core/common/IRInference.js +731 -648
- package/lib/core/common/IRUtils.d.ts +18 -18
- package/lib/core/common/IRUtils.js +141 -141
- package/lib/core/common/ModelUtils.d.ts +70 -70
- package/lib/core/common/ModelUtils.d.ts.map +1 -1
- package/lib/core/common/ModelUtils.js +723 -712
- package/lib/core/common/RefUseReplacer.d.ts +13 -13
- package/lib/core/common/RefUseReplacer.js +52 -52
- package/lib/core/common/SdkUtils.d.ts +11 -8
- package/lib/core/common/SdkUtils.d.ts.map +1 -1
- package/lib/core/common/SdkUtils.js +127 -105
- package/lib/core/common/StmtDefReplacer.d.ts +12 -12
- package/lib/core/common/StmtDefReplacer.js +41 -41
- package/lib/core/common/StmtUseReplacer.d.ts +16 -16
- package/lib/core/common/StmtUseReplacer.js +108 -108
- package/lib/core/common/TSConst.d.ts +20 -18
- package/lib/core/common/TSConst.d.ts.map +1 -1
- package/lib/core/common/TSConst.js +38 -36
- package/lib/core/common/TypeInference.d.ts +105 -102
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +806 -748
- package/lib/core/common/ValueUtil.d.ts +12 -12
- package/lib/core/common/ValueUtil.js +54 -54
- package/lib/core/common/VisibleValue.d.ts +36 -36
- package/lib/core/common/VisibleValue.js +212 -212
- package/lib/core/dataflow/DataflowProblem.d.ts +20 -20
- package/lib/core/dataflow/DataflowProblem.js +20 -20
- package/lib/core/dataflow/DataflowResult.d.ts +7 -7
- package/lib/core/dataflow/DataflowResult.js +26 -26
- package/lib/core/dataflow/DataflowSolver.d.ts +43 -43
- package/lib/core/dataflow/DataflowSolver.js +307 -307
- package/lib/core/dataflow/Edge.d.ts +11 -11
- package/lib/core/dataflow/Edge.js +31 -31
- package/lib/core/dataflow/Fact.d.ts +6 -6
- package/lib/core/dataflow/Fact.js +24 -24
- package/lib/core/dataflow/GenericDataFlow.d.ts +142 -142
- package/lib/core/dataflow/GenericDataFlow.js +109 -109
- package/lib/core/dataflow/ReachingDef.d.ts +62 -62
- package/lib/core/dataflow/ReachingDef.js +168 -168
- package/lib/core/dataflow/UndefinedVariable.d.ts +45 -45
- package/lib/core/dataflow/UndefinedVariable.js +288 -288
- package/lib/core/dataflow/Util.d.ts +9 -9
- package/lib/core/dataflow/Util.js +64 -64
- package/lib/core/graph/BaseExplicitGraph.d.ts +58 -58
- package/lib/core/graph/BaseExplicitGraph.js +157 -157
- package/lib/core/graph/BaseImplicitGraph.d.ts +77 -77
- package/lib/core/graph/BaseImplicitGraph.js +78 -78
- package/lib/core/graph/BasicBlock.d.ts +104 -104
- package/lib/core/graph/BasicBlock.js +280 -280
- package/lib/core/graph/Cfg.d.ts +59 -59
- package/lib/core/graph/Cfg.js +282 -282
- package/lib/core/graph/DependsGraph.d.ts +35 -35
- package/lib/core/graph/DependsGraph.js +87 -87
- package/lib/core/graph/DominanceFinder.d.ts +15 -15
- package/lib/core/graph/DominanceFinder.js +121 -121
- package/lib/core/graph/DominanceTree.d.ts +12 -12
- package/lib/core/graph/DominanceTree.js +70 -70
- package/lib/core/graph/GraphTraits.d.ts +7 -7
- package/lib/core/graph/GraphTraits.js +16 -16
- package/lib/core/graph/Scc.d.ts +61 -61
- package/lib/core/graph/Scc.js +222 -222
- package/lib/core/graph/ViewTree.d.ts +114 -114
- package/lib/core/graph/ViewTree.js +16 -16
- package/lib/core/graph/builder/CfgBuilder.d.ts +176 -176
- package/lib/core/graph/builder/CfgBuilder.js +1139 -1139
- package/lib/core/graph/builder/ConditionBuilder.d.ts +15 -15
- package/lib/core/graph/builder/ConditionBuilder.js +252 -252
- package/lib/core/graph/builder/LoopBuilder.d.ts +20 -20
- package/lib/core/graph/builder/LoopBuilder.js +251 -251
- package/lib/core/graph/builder/SwitchBuilder.d.ts +11 -11
- package/lib/core/graph/builder/SwitchBuilder.js +152 -152
- package/lib/core/graph/builder/TrapBuilder.d.ts +16 -16
- package/lib/core/graph/builder/TrapBuilder.js +272 -272
- package/lib/core/graph/builder/ViewTreeBuilder.d.ts +203 -203
- package/lib/core/graph/builder/ViewTreeBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/ViewTreeBuilder.js +1058 -1055
- package/lib/core/model/ArkBaseModel.d.ts +59 -59
- package/lib/core/model/ArkBaseModel.js +274 -274
- package/lib/core/model/ArkBody.d.ts +24 -24
- package/lib/core/model/ArkBody.js +65 -65
- package/lib/core/model/ArkClass.d.ts +206 -206
- package/lib/core/model/ArkClass.d.ts.map +1 -1
- package/lib/core/model/ArkClass.js +442 -439
- package/lib/core/model/ArkExport.d.ts +72 -72
- package/lib/core/model/ArkExport.js +147 -147
- package/lib/core/model/ArkField.d.ts +62 -62
- package/lib/core/model/ArkField.js +113 -113
- package/lib/core/model/ArkFile.d.ts +131 -131
- package/lib/core/model/ArkFile.js +267 -267
- package/lib/core/model/ArkImport.d.ts +44 -44
- package/lib/core/model/ArkImport.js +108 -108
- package/lib/core/model/ArkMetadata.d.ts +31 -31
- package/lib/core/model/ArkMetadata.js +55 -55
- package/lib/core/model/ArkMethod.d.ts +261 -261
- package/lib/core/model/ArkMethod.js +592 -592
- package/lib/core/model/ArkNamespace.d.ts +66 -66
- package/lib/core/model/ArkNamespace.js +209 -209
- package/lib/core/model/ArkSignature.d.ts +167 -162
- package/lib/core/model/ArkSignature.d.ts.map +1 -1
- package/lib/core/model/ArkSignature.js +393 -379
- package/lib/core/model/builder/ArkClassBuilder.d.ts +12 -12
- package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkClassBuilder.js +423 -454
- package/lib/core/model/builder/ArkExportBuilder.d.ts +24 -24
- package/lib/core/model/builder/ArkExportBuilder.js +210 -210
- package/lib/core/model/builder/ArkFieldBuilder.d.ts +8 -8
- package/lib/core/model/builder/ArkFieldBuilder.js +193 -193
- package/lib/core/model/builder/ArkFileBuilder.d.ts +9 -9
- package/lib/core/model/builder/ArkFileBuilder.js +165 -165
- package/lib/core/model/builder/ArkImportBuilder.d.ts +4 -4
- package/lib/core/model/builder/ArkImportBuilder.js +128 -128
- package/lib/core/model/builder/ArkMethodBuilder.d.ts +63 -63
- package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkMethodBuilder.js +487 -486
- package/lib/core/model/builder/ArkNamespaceBuilder.d.ts +5 -5
- package/lib/core/model/builder/ArkNamespaceBuilder.js +205 -205
- package/lib/core/model/builder/ArkSignatureBuilder.d.ts +8 -8
- package/lib/core/model/builder/ArkSignatureBuilder.js +40 -40
- package/lib/core/model/builder/BodyBuilder.d.ts +55 -30
- package/lib/core/model/builder/BodyBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/BodyBuilder.js +542 -371
- package/lib/core/model/builder/builderUtils.d.ts +18 -18
- package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/core/model/builder/builderUtils.js +571 -558
- package/lib/index.d.ts +82 -80
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +201 -196
- package/lib/save/ArkStream.d.ts +23 -23
- package/lib/save/ArkStream.js +83 -83
- package/lib/save/DotPrinter.d.ts +43 -43
- package/lib/save/DotPrinter.js +170 -170
- package/lib/save/GraphPrinter.d.ts +16 -16
- package/lib/save/GraphPrinter.js +134 -134
- package/lib/save/JsonPrinter.d.ts +30 -30
- package/lib/save/JsonPrinter.js +580 -580
- package/lib/save/Printer.d.ts +12 -12
- package/lib/save/Printer.js +27 -27
- package/lib/save/PrinterBuilder.d.ts +53 -53
- package/lib/save/PrinterBuilder.js +145 -145
- package/lib/save/ViewTreePrinter.d.ts +14 -14
- package/lib/save/ViewTreePrinter.js +123 -123
- package/lib/save/arkir/ArkIRClassPrinter.d.ts +13 -13
- package/lib/save/arkir/ArkIRClassPrinter.js +92 -92
- package/lib/save/arkir/ArkIRFieldPrinter.d.ts +11 -11
- package/lib/save/arkir/ArkIRFieldPrinter.js +64 -64
- package/lib/save/arkir/ArkIRFilePrinter.d.ts +12 -12
- package/lib/save/arkir/ArkIRFilePrinter.js +54 -54
- package/lib/save/arkir/ArkIRMethodPrinter.d.ts +16 -16
- package/lib/save/arkir/ArkIRMethodPrinter.js +159 -159
- package/lib/save/arkir/ArkIRNamespacePrinter.d.ts +11 -11
- package/lib/save/arkir/ArkIRNamespacePrinter.js +66 -66
- package/lib/save/base/BasePrinter.d.ts +23 -23
- package/lib/save/base/BasePrinter.js +70 -70
- package/lib/save/base/ExportPrinter.d.ts +8 -8
- package/lib/save/base/ExportPrinter.js +67 -67
- package/lib/save/base/ImportPrinter.d.ts +9 -9
- package/lib/save/base/ImportPrinter.js +92 -92
- package/lib/save/base/PrinterUtils.d.ts +24 -24
- package/lib/save/base/PrinterUtils.js +208 -208
- package/lib/save/serializeArkIR.d.ts +8 -8
- package/lib/save/serializeArkIR.js +294 -294
- package/lib/save/source/SourceBase.d.ts +22 -22
- package/lib/save/source/SourceBase.js +64 -64
- package/lib/save/source/SourceBody.d.ts +58 -58
- package/lib/save/source/SourceBody.js +296 -296
- package/lib/save/source/SourceClass.d.ts +25 -25
- package/lib/save/source/SourceClass.js +187 -187
- package/lib/save/source/SourceField.d.ts +13 -13
- package/lib/save/source/SourceField.js +73 -73
- package/lib/save/source/SourceFilePrinter.d.ts +12 -12
- package/lib/save/source/SourceFilePrinter.js +69 -69
- package/lib/save/source/SourceMethod.d.ts +22 -22
- package/lib/save/source/SourceMethod.d.ts.map +1 -1
- package/lib/save/source/SourceMethod.js +196 -193
- package/lib/save/source/SourceNamespace.d.ts +11 -11
- package/lib/save/source/SourceNamespace.js +83 -83
- package/lib/save/source/SourceStmt.d.ts +178 -178
- package/lib/save/source/SourceStmt.js +838 -838
- package/lib/save/source/SourceTransformer.d.ts +46 -46
- package/lib/save/source/SourceTransformer.js +446 -446
- package/lib/transformer/FunctionTransformer.d.ts +2 -2
- package/lib/transformer/FunctionTransformer.js +17 -17
- package/lib/transformer/SceneTransformer.d.ts +2 -2
- package/lib/transformer/SceneTransformer.js +17 -17
- package/lib/transformer/StaticSingleAssignmentFormer.d.ts +12 -12
- package/lib/transformer/StaticSingleAssignmentFormer.js +259 -259
- package/lib/transformer/Transformer.d.ts +6 -6
- package/lib/transformer/Transformer.js +22 -22
- package/lib/utils/AstTreeUtils.d.ts +4 -4
- package/lib/utils/AstTreeUtils.js +26 -26
- package/lib/utils/CfgStructualAnalysis.d.ts +110 -110
- package/lib/utils/CfgStructualAnalysis.js +1277 -1277
- package/lib/utils/FileUtils.d.ts +18 -18
- package/lib/utils/FileUtils.js +135 -135
- package/lib/utils/SparseBitVector.d.ts +100 -100
- package/lib/utils/SparseBitVector.js +445 -445
- package/lib/utils/callGraphUtils.d.ts +30 -30
- package/lib/utils/callGraphUtils.js +205 -205
- package/lib/utils/crypto_utils.d.ts +5 -5
- package/lib/utils/crypto_utils.js +57 -57
- package/lib/utils/entryMethodUtils.d.ts +13 -13
- package/lib/utils/entryMethodUtils.js +110 -110
- package/lib/utils/getAllFiles.d.ts +9 -9
- package/lib/utils/getAllFiles.js +90 -90
- package/lib/utils/json5parser.d.ts +6 -6
- package/lib/utils/json5parser.js +146 -146
- package/lib/utils/logger.d.ts +18 -18
- package/lib/utils/logger.d.ts.map +1 -1
- package/lib/utils/logger.js +97 -90
- package/lib/utils/pathTransfer.d.ts +1 -1
- package/lib/utils/pathTransfer.js +25 -25
- package/node_modules/json5/lib/cli.js +0 -0
- package/node_modules/ohos-typescript/bin/tsc +0 -0
- package/node_modules/ohos-typescript/bin/tsserver +0 -0
- package/package.json +3 -3
|
@@ -1,648 +1,731 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.IRInference = void 0;
|
|
27
|
-
/*
|
|
28
|
-
* Copyright (c) 2024-2025 Huawei Device Co., Ltd.
|
|
29
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
30
|
-
* you may not use this file except in compliance with the License.
|
|
31
|
-
* You may obtain a copy of the License at
|
|
32
|
-
*
|
|
33
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
34
|
-
*
|
|
35
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
36
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
37
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
38
|
-
* See the License for the specific language governing permissions and
|
|
39
|
-
* limitations under the License.
|
|
40
|
-
*/
|
|
41
|
-
const ArkMethod_1 = require("../model/ArkMethod");
|
|
42
|
-
const Type_1 = require("../base/Type");
|
|
43
|
-
const Local_1 = require("../base/Local");
|
|
44
|
-
const TypeInference_1 = require("./TypeInference");
|
|
45
|
-
const Expr_1 = require("../base/Expr");
|
|
46
|
-
const logger_1 = __importStar(require("../../utils/logger"));
|
|
47
|
-
const ArkClass_1 = require("../model/ArkClass");
|
|
48
|
-
const ModelUtils_1 = require("./ModelUtils");
|
|
49
|
-
const ArkField_1 = require("../model/ArkField");
|
|
50
|
-
const EtsConst_1 = require("./EtsConst");
|
|
51
|
-
const ArkSignature_1 = require("../model/ArkSignature");
|
|
52
|
-
const TSConst_1 = require("./TSConst");
|
|
53
|
-
const Builtin_1 = require("./Builtin");
|
|
54
|
-
const Stmt_1 = require("../base/Stmt");
|
|
55
|
-
const Ref_1 = require("../base/Ref");
|
|
56
|
-
const Constant_1 = require("../base/Constant");
|
|
57
|
-
const Const_1 = require("./Const");
|
|
58
|
-
const ValueUtil_1 = require("./ValueUtil");
|
|
59
|
-
const TypeExpr_1 = require("../base/TypeExpr");
|
|
60
|
-
const ArkBaseModel_1 = require("../model/ArkBaseModel");
|
|
61
|
-
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'IRInference');
|
|
62
|
-
class IRInference {
|
|
63
|
-
static inferExportInfos(file) {
|
|
64
|
-
file.getExportInfos().forEach(exportInfo => {
|
|
65
|
-
if (exportInfo.getArkExport() === undefined) {
|
|
66
|
-
let arkExport = (0, ModelUtils_1.findArkExport)(exportInfo);
|
|
67
|
-
exportInfo.setArkExport(arkExport);
|
|
68
|
-
if (arkExport) {
|
|
69
|
-
exportInfo.setExportClauseType(arkExport.getExportType());
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
static inferImportInfos(file) {
|
|
75
|
-
file.getImportInfos().forEach(importInfo => {
|
|
76
|
-
importInfo.getLazyExportInfo();
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
static inferFile(file) {
|
|
80
|
-
this.inferImportInfos(file);
|
|
81
|
-
ModelUtils_1.ModelUtils.getAllClassesInFile(file).forEach(arkClass => {
|
|
82
|
-
TypeInference_1.TypeInference.inferGenericType(arkClass.getGenericsTypes(), arkClass);
|
|
83
|
-
const defaultArkMethod = arkClass.getDefaultArkMethod();
|
|
84
|
-
if (defaultArkMethod) {
|
|
85
|
-
TypeInference_1.TypeInference.inferTypeInMethod(defaultArkMethod);
|
|
86
|
-
}
|
|
87
|
-
arkClass.getFields().forEach(arkField => TypeInference_1.TypeInference.inferTypeInArkField(arkField));
|
|
88
|
-
const methods = arkClass.getMethods().sort((a, b) => {
|
|
89
|
-
const name = a.getName().split(Const_1.NAME_DELIMITER).reverse().join();
|
|
90
|
-
const anotherName = b.getName().split(Const_1.NAME_DELIMITER).reverse().join();
|
|
91
|
-
if (name.startsWith(anotherName)) {
|
|
92
|
-
return 1;
|
|
93
|
-
}
|
|
94
|
-
else if (anotherName.startsWith(name)) {
|
|
95
|
-
return -1;
|
|
96
|
-
}
|
|
97
|
-
return 0;
|
|
98
|
-
});
|
|
99
|
-
methods.forEach(arkMethod => TypeInference_1.TypeInference.inferTypeInMethod(arkMethod));
|
|
100
|
-
});
|
|
101
|
-
this.inferExportInfos(file);
|
|
102
|
-
}
|
|
103
|
-
static inferStaticInvokeExpr(expr, arkMethod) {
|
|
104
|
-
const arkClass = arkMethod.getDeclaringArkClass();
|
|
105
|
-
const methodName = expr.getMethodSignature().getMethodSubSignature().getMethodName();
|
|
106
|
-
if (methodName === TSConst_1.IMPORT) {
|
|
107
|
-
const arg = expr.getArg(0);
|
|
108
|
-
let type;
|
|
109
|
-
if (arg instanceof Constant_1.Constant) {
|
|
110
|
-
type = TypeInference_1.TypeInference.inferDynamicImportType(arg.getValue(), arkClass);
|
|
111
|
-
}
|
|
112
|
-
if (type) {
|
|
113
|
-
expr.getMethodSignature().getMethodSubSignature().setReturnType(type);
|
|
114
|
-
}
|
|
115
|
-
return expr;
|
|
116
|
-
}
|
|
117
|
-
const className = expr.getMethodSignature().getDeclaringClassSignature().getClassName();
|
|
118
|
-
if (className && className !== Const_1.UNKNOWN_CLASS_NAME) {
|
|
119
|
-
const baseType = TypeInference_1.TypeInference.inferUnclearRefName(className, arkClass);
|
|
120
|
-
if (baseType) {
|
|
121
|
-
let result = this.inferInvokeExpr(expr, baseType, methodName, arkClass.getDeclaringArkFile().getScene());
|
|
122
|
-
if (result) {
|
|
123
|
-
this.inferArgs(result, arkMethod);
|
|
124
|
-
return result;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
return expr;
|
|
128
|
-
}
|
|
129
|
-
this.inferStaticInvokeExprByMethodName(methodName, arkMethod, expr);
|
|
130
|
-
return expr;
|
|
131
|
-
}
|
|
132
|
-
static inferStaticInvokeExprByMethodName(methodName, arkMethod, expr) {
|
|
133
|
-
var _a, _b, _c, _d, _e;
|
|
134
|
-
const arkClass = arkMethod.getDeclaringArkClass();
|
|
135
|
-
const arkExport = (_d = (_c = (_b = (_a = ModelUtils_1.ModelUtils.getStaticMethodWithName(methodName, arkClass)) !== null && _a !== void 0 ? _a : arkMethod.getFunctionLocal(methodName)) !== null && _b !== void 0 ? _b : ModelUtils_1.ModelUtils.findDeclaredLocal(new Local_1.Local(methodName), arkMethod)) !== null && _c !== void 0 ? _c : ModelUtils_1.ModelUtils.getArkExportInImportInfoWithName(methodName, arkClass.getDeclaringArkFile())) !== null && _d !== void 0 ? _d : arkClass.getDeclaringArkFile().getScene().getSdkGlobal(methodName);
|
|
136
|
-
let method;
|
|
137
|
-
let signature;
|
|
138
|
-
if (arkExport instanceof ArkMethod_1.ArkMethod) {
|
|
139
|
-
method = arkExport;
|
|
140
|
-
}
|
|
141
|
-
else if (arkExport instanceof ArkClass_1.ArkClass) {
|
|
142
|
-
method = arkExport.getMethodWithName(TSConst_1.CONSTRUCTOR_NAME);
|
|
143
|
-
}
|
|
144
|
-
else if (arkExport instanceof Local_1.Local) {
|
|
145
|
-
const type = arkExport.getType();
|
|
146
|
-
if (type instanceof Type_1.ClassType) {
|
|
147
|
-
const cls = arkClass.getDeclaringArkFile().getScene().getClass(type.getClassSignature());
|
|
148
|
-
method = (_e = cls === null || cls === void 0 ? void 0 : cls.getMethodWithName(TSConst_1.CONSTRUCTOR_NAME)) !== null && _e !== void 0 ? _e : cls === null || cls === void 0 ? void 0 : cls.getMethodWithName(Const_1.CALL_SIGNATURE_NAME);
|
|
149
|
-
}
|
|
150
|
-
else if (type instanceof Type_1.FunctionType) {
|
|
151
|
-
signature = type.getMethodSignature();
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
else if (arkExport instanceof Type_1.AliasType && arkExport.getOriginalType() instanceof Type_1.FunctionType) {
|
|
155
|
-
signature = arkExport.getOriginalType().getMethodSignature();
|
|
156
|
-
}
|
|
157
|
-
if (method) {
|
|
158
|
-
signature = method.matchMethodSignature(expr.getArgs());
|
|
159
|
-
TypeInference_1.TypeInference.inferSignatureReturnType(signature, method);
|
|
160
|
-
}
|
|
161
|
-
if (signature) {
|
|
162
|
-
signature = this.generateNewMethodSignature(methodName, signature);
|
|
163
|
-
expr.setMethodSignature(signature);
|
|
164
|
-
this.inferArgs(expr, arkMethod);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
static generateNewMethodSignature(methodName, signature) {
|
|
168
|
-
if (signature.getMethodSubSignature().getMethodName().startsWith(Const_1.ANONYMOUS_METHOD_PREFIX)) {
|
|
169
|
-
const subSignature = signature.getMethodSubSignature();
|
|
170
|
-
const newSubSignature = new ArkSignature_1.MethodSubSignature(methodName, subSignature.getParameters(), subSignature.getReturnType(), subSignature.isStatic());
|
|
171
|
-
return new ArkSignature_1.MethodSignature(signature.getDeclaringClassSignature(), newSubSignature);
|
|
172
|
-
}
|
|
173
|
-
return signature;
|
|
174
|
-
}
|
|
175
|
-
static inferInstanceInvokeExpr(expr, arkMethod) {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
const
|
|
181
|
-
|
|
182
|
-
if (
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
}
|
|
274
|
-
if (
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
const
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
if (
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
.
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
}
|
|
564
|
-
else if (
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
const
|
|
613
|
-
if (
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.IRInference = void 0;
|
|
27
|
+
/*
|
|
28
|
+
* Copyright (c) 2024-2025 Huawei Device Co., Ltd.
|
|
29
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
30
|
+
* you may not use this file except in compliance with the License.
|
|
31
|
+
* You may obtain a copy of the License at
|
|
32
|
+
*
|
|
33
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
34
|
+
*
|
|
35
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
36
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
37
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
38
|
+
* See the License for the specific language governing permissions and
|
|
39
|
+
* limitations under the License.
|
|
40
|
+
*/
|
|
41
|
+
const ArkMethod_1 = require("../model/ArkMethod");
|
|
42
|
+
const Type_1 = require("../base/Type");
|
|
43
|
+
const Local_1 = require("../base/Local");
|
|
44
|
+
const TypeInference_1 = require("./TypeInference");
|
|
45
|
+
const Expr_1 = require("../base/Expr");
|
|
46
|
+
const logger_1 = __importStar(require("../../utils/logger"));
|
|
47
|
+
const ArkClass_1 = require("../model/ArkClass");
|
|
48
|
+
const ModelUtils_1 = require("./ModelUtils");
|
|
49
|
+
const ArkField_1 = require("../model/ArkField");
|
|
50
|
+
const EtsConst_1 = require("./EtsConst");
|
|
51
|
+
const ArkSignature_1 = require("../model/ArkSignature");
|
|
52
|
+
const TSConst_1 = require("./TSConst");
|
|
53
|
+
const Builtin_1 = require("./Builtin");
|
|
54
|
+
const Stmt_1 = require("../base/Stmt");
|
|
55
|
+
const Ref_1 = require("../base/Ref");
|
|
56
|
+
const Constant_1 = require("../base/Constant");
|
|
57
|
+
const Const_1 = require("./Const");
|
|
58
|
+
const ValueUtil_1 = require("./ValueUtil");
|
|
59
|
+
const TypeExpr_1 = require("../base/TypeExpr");
|
|
60
|
+
const ArkBaseModel_1 = require("../model/ArkBaseModel");
|
|
61
|
+
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'IRInference');
|
|
62
|
+
class IRInference {
|
|
63
|
+
static inferExportInfos(file) {
|
|
64
|
+
file.getExportInfos().forEach(exportInfo => {
|
|
65
|
+
if (exportInfo.getArkExport() === undefined) {
|
|
66
|
+
let arkExport = (0, ModelUtils_1.findArkExport)(exportInfo);
|
|
67
|
+
exportInfo.setArkExport(arkExport);
|
|
68
|
+
if (arkExport) {
|
|
69
|
+
exportInfo.setExportClauseType(arkExport.getExportType());
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
static inferImportInfos(file) {
|
|
75
|
+
file.getImportInfos().forEach(importInfo => {
|
|
76
|
+
importInfo.getLazyExportInfo();
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
static inferFile(file) {
|
|
80
|
+
this.inferImportInfos(file);
|
|
81
|
+
ModelUtils_1.ModelUtils.getAllClassesInFile(file).forEach(arkClass => {
|
|
82
|
+
TypeInference_1.TypeInference.inferGenericType(arkClass.getGenericsTypes(), arkClass);
|
|
83
|
+
const defaultArkMethod = arkClass.getDefaultArkMethod();
|
|
84
|
+
if (defaultArkMethod) {
|
|
85
|
+
TypeInference_1.TypeInference.inferTypeInMethod(defaultArkMethod);
|
|
86
|
+
}
|
|
87
|
+
arkClass.getFields().forEach(arkField => TypeInference_1.TypeInference.inferTypeInArkField(arkField));
|
|
88
|
+
const methods = arkClass.getMethods().sort((a, b) => {
|
|
89
|
+
const name = a.getName().split(Const_1.NAME_DELIMITER).reverse().join();
|
|
90
|
+
const anotherName = b.getName().split(Const_1.NAME_DELIMITER).reverse().join();
|
|
91
|
+
if (name.startsWith(anotherName)) {
|
|
92
|
+
return 1;
|
|
93
|
+
}
|
|
94
|
+
else if (anotherName.startsWith(name)) {
|
|
95
|
+
return -1;
|
|
96
|
+
}
|
|
97
|
+
return 0;
|
|
98
|
+
});
|
|
99
|
+
methods.forEach(arkMethod => TypeInference_1.TypeInference.inferTypeInMethod(arkMethod));
|
|
100
|
+
});
|
|
101
|
+
this.inferExportInfos(file);
|
|
102
|
+
}
|
|
103
|
+
static inferStaticInvokeExpr(expr, arkMethod) {
|
|
104
|
+
const arkClass = arkMethod.getDeclaringArkClass();
|
|
105
|
+
const methodName = expr.getMethodSignature().getMethodSubSignature().getMethodName();
|
|
106
|
+
if (methodName === TSConst_1.IMPORT) {
|
|
107
|
+
const arg = expr.getArg(0);
|
|
108
|
+
let type;
|
|
109
|
+
if (arg instanceof Constant_1.Constant) {
|
|
110
|
+
type = TypeInference_1.TypeInference.inferDynamicImportType(arg.getValue(), arkClass);
|
|
111
|
+
}
|
|
112
|
+
if (type) {
|
|
113
|
+
expr.getMethodSignature().getMethodSubSignature().setReturnType(type);
|
|
114
|
+
}
|
|
115
|
+
return expr;
|
|
116
|
+
}
|
|
117
|
+
const className = expr.getMethodSignature().getDeclaringClassSignature().getClassName();
|
|
118
|
+
if (className && className !== Const_1.UNKNOWN_CLASS_NAME) {
|
|
119
|
+
const baseType = TypeInference_1.TypeInference.inferUnclearRefName(className, arkClass);
|
|
120
|
+
if (baseType) {
|
|
121
|
+
let result = this.inferInvokeExpr(expr, baseType, methodName, arkClass.getDeclaringArkFile().getScene());
|
|
122
|
+
if (result) {
|
|
123
|
+
this.inferArgs(result, arkMethod);
|
|
124
|
+
return result;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return expr;
|
|
128
|
+
}
|
|
129
|
+
this.inferStaticInvokeExprByMethodName(methodName, arkMethod, expr);
|
|
130
|
+
return expr;
|
|
131
|
+
}
|
|
132
|
+
static inferStaticInvokeExprByMethodName(methodName, arkMethod, expr) {
|
|
133
|
+
var _a, _b, _c, _d, _e;
|
|
134
|
+
const arkClass = arkMethod.getDeclaringArkClass();
|
|
135
|
+
const arkExport = (_d = (_c = (_b = (_a = ModelUtils_1.ModelUtils.getStaticMethodWithName(methodName, arkClass)) !== null && _a !== void 0 ? _a : arkMethod.getFunctionLocal(methodName)) !== null && _b !== void 0 ? _b : ModelUtils_1.ModelUtils.findDeclaredLocal(new Local_1.Local(methodName), arkMethod)) !== null && _c !== void 0 ? _c : ModelUtils_1.ModelUtils.getArkExportInImportInfoWithName(methodName, arkClass.getDeclaringArkFile())) !== null && _d !== void 0 ? _d : arkClass.getDeclaringArkFile().getScene().getSdkGlobal(methodName);
|
|
136
|
+
let method;
|
|
137
|
+
let signature;
|
|
138
|
+
if (arkExport instanceof ArkMethod_1.ArkMethod) {
|
|
139
|
+
method = arkExport;
|
|
140
|
+
}
|
|
141
|
+
else if (arkExport instanceof ArkClass_1.ArkClass) {
|
|
142
|
+
method = arkExport.getMethodWithName(TSConst_1.CONSTRUCTOR_NAME);
|
|
143
|
+
}
|
|
144
|
+
else if (arkExport instanceof Local_1.Local) {
|
|
145
|
+
const type = arkExport.getType();
|
|
146
|
+
if (type instanceof Type_1.ClassType) {
|
|
147
|
+
const cls = arkClass.getDeclaringArkFile().getScene().getClass(type.getClassSignature());
|
|
148
|
+
method = (_e = cls === null || cls === void 0 ? void 0 : cls.getMethodWithName(TSConst_1.CONSTRUCTOR_NAME)) !== null && _e !== void 0 ? _e : cls === null || cls === void 0 ? void 0 : cls.getMethodWithName(Const_1.CALL_SIGNATURE_NAME);
|
|
149
|
+
}
|
|
150
|
+
else if (type instanceof Type_1.FunctionType) {
|
|
151
|
+
signature = type.getMethodSignature();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
else if (arkExport instanceof Type_1.AliasType && arkExport.getOriginalType() instanceof Type_1.FunctionType) {
|
|
155
|
+
signature = arkExport.getOriginalType().getMethodSignature();
|
|
156
|
+
}
|
|
157
|
+
if (method) {
|
|
158
|
+
signature = method.matchMethodSignature(expr.getArgs());
|
|
159
|
+
TypeInference_1.TypeInference.inferSignatureReturnType(signature, method);
|
|
160
|
+
}
|
|
161
|
+
if (signature) {
|
|
162
|
+
signature = this.generateNewMethodSignature(methodName, signature);
|
|
163
|
+
expr.setMethodSignature(signature);
|
|
164
|
+
this.inferArgs(expr, arkMethod);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
static generateNewMethodSignature(methodName, signature) {
|
|
168
|
+
if (signature.getMethodSubSignature().getMethodName().startsWith(Const_1.ANONYMOUS_METHOD_PREFIX)) {
|
|
169
|
+
const subSignature = signature.getMethodSubSignature();
|
|
170
|
+
const newSubSignature = new ArkSignature_1.MethodSubSignature(methodName, subSignature.getParameters(), subSignature.getReturnType(), subSignature.isStatic());
|
|
171
|
+
return new ArkSignature_1.MethodSignature(signature.getDeclaringClassSignature(), newSubSignature);
|
|
172
|
+
}
|
|
173
|
+
return signature;
|
|
174
|
+
}
|
|
175
|
+
static inferInstanceInvokeExpr(expr, arkMethod) {
|
|
176
|
+
var _a, _b, _c;
|
|
177
|
+
const arkClass = arkMethod.getDeclaringArkClass();
|
|
178
|
+
TypeInference_1.TypeInference.inferRealGenericTypes(expr.getRealGenericTypes(), arkClass);
|
|
179
|
+
this.inferLocal(expr.getBase(), arkMethod);
|
|
180
|
+
const baseType = TypeInference_1.TypeInference.replaceAliasType(expr.getBase().getType());
|
|
181
|
+
let methodName = expr.getMethodSignature().getMethodSubSignature().getMethodName();
|
|
182
|
+
if (methodName.startsWith(Const_1.NAME_PREFIX)) {
|
|
183
|
+
const declaringStmt = (_b = (_a = arkMethod.getBody()) === null || _a === void 0 ? void 0 : _a.getLocals().get(methodName)) === null || _b === void 0 ? void 0 : _b.getDeclaringStmt();
|
|
184
|
+
if (declaringStmt instanceof Stmt_1.ArkAssignStmt && declaringStmt.getRightOp() instanceof Ref_1.ArkInstanceFieldRef) {
|
|
185
|
+
const rightOp = declaringStmt.getRightOp();
|
|
186
|
+
methodName = rightOp.getBase().getName() + '.' + rightOp.getFieldName();
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
const scene = arkClass.getDeclaringArkFile().getScene();
|
|
190
|
+
if ((methodName === 'forEach') && (baseType instanceof Type_1.ArrayType)) {
|
|
191
|
+
this.processForEach(expr.getArg(0), baseType, scene);
|
|
192
|
+
return expr;
|
|
193
|
+
}
|
|
194
|
+
let result = (_c = this.inferInvokeExpr(expr, baseType, methodName, scene)) !== null && _c !== void 0 ? _c : this.processExtendFunc(expr, arkMethod, methodName);
|
|
195
|
+
if (result) {
|
|
196
|
+
this.inferArgs(result, arkMethod);
|
|
197
|
+
return result;
|
|
198
|
+
}
|
|
199
|
+
logger.warn('invoke ArkInstanceInvokeExpr MethodSignature type fail: ', expr.toString());
|
|
200
|
+
return expr;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* process arkUI function with Annotation @Extend @Styles @AnimatableExtend
|
|
204
|
+
* @param expr
|
|
205
|
+
* @param arkMethod
|
|
206
|
+
* @param methodName
|
|
207
|
+
*/
|
|
208
|
+
static processExtendFunc(expr, arkMethod, methodName) {
|
|
209
|
+
var _a, _b;
|
|
210
|
+
const type = TypeInference_1.TypeInference.inferBaseType(methodName, arkMethod.getDeclaringArkClass());
|
|
211
|
+
if (type instanceof Type_1.FunctionType) {
|
|
212
|
+
const methodSignature = type.getMethodSignature();
|
|
213
|
+
// because of last stmt is ArkReturnVoidStmt, the ArkInvokeStmt at -2 before ArkReturnVoidStmt.
|
|
214
|
+
const endIndex = -2;
|
|
215
|
+
const endStmt = (_b = (_a = arkMethod.getDeclaringArkFile().getScene().getMethod(methodSignature)) === null || _a === void 0 ? void 0 : _a.getCfg()) === null || _b === void 0 ? void 0 : _b.getStmts().at(endIndex);
|
|
216
|
+
if (endStmt instanceof Stmt_1.ArkInvokeStmt) {
|
|
217
|
+
methodSignature.getMethodSubSignature().setReturnType(endStmt.getInvokeExpr().getType());
|
|
218
|
+
}
|
|
219
|
+
expr.setMethodSignature(methodSignature);
|
|
220
|
+
return expr;
|
|
221
|
+
}
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
static inferFieldRef(ref, arkMethod) {
|
|
225
|
+
this.inferLocal(ref.getBase(), arkMethod);
|
|
226
|
+
const baseType = TypeInference_1.TypeInference.replaceAliasType(ref.getBase().getType());
|
|
227
|
+
if (baseType instanceof Type_1.ArrayType && ref.getFieldName() !== 'length') {
|
|
228
|
+
return new Ref_1.ArkArrayRef(ref.getBase(), ValueUtil_1.ValueUtil.createConst(ref.getFieldName()));
|
|
229
|
+
}
|
|
230
|
+
const arkClass = arkMethod.getDeclaringArkClass();
|
|
231
|
+
let newFieldSignature = this.generateNewFieldSignature(ref, arkClass, baseType);
|
|
232
|
+
if (newFieldSignature) {
|
|
233
|
+
if (newFieldSignature.isStatic()) {
|
|
234
|
+
return new Ref_1.ArkStaticFieldRef(newFieldSignature);
|
|
235
|
+
}
|
|
236
|
+
ref.setFieldSignature(newFieldSignature);
|
|
237
|
+
}
|
|
238
|
+
return ref;
|
|
239
|
+
}
|
|
240
|
+
static inferArgs(expr, arkMethod) {
|
|
241
|
+
const scene = arkMethod.getDeclaringArkFile().getScene();
|
|
242
|
+
const parameters = expr.getMethodSignature().getMethodSubSignature().getParameters();
|
|
243
|
+
let realTypes = [];
|
|
244
|
+
const len = expr.getArgs().length;
|
|
245
|
+
for (let index = 0; index < len; index++) {
|
|
246
|
+
const arg = expr.getArg(index);
|
|
247
|
+
TypeInference_1.TypeInference.inferValueType(arg, arkMethod);
|
|
248
|
+
if (index >= parameters.length) {
|
|
249
|
+
break;
|
|
250
|
+
}
|
|
251
|
+
const argType = arg.getType();
|
|
252
|
+
const paramType = parameters[index].getType();
|
|
253
|
+
this.inferArg(expr, argType, paramType, scene, realTypes);
|
|
254
|
+
}
|
|
255
|
+
if (realTypes.length > 0 && !expr.getRealGenericTypes()) {
|
|
256
|
+
expr.setRealGenericTypes(realTypes);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
static inferArg(expr, argType, paramType, scene, realTypes) {
|
|
260
|
+
if (paramType instanceof Type_1.UnionType) {
|
|
261
|
+
paramType.getTypes().forEach(t => this.inferArg(expr, argType, t, scene, realTypes));
|
|
262
|
+
}
|
|
263
|
+
else if (paramType instanceof Type_1.AliasType) {
|
|
264
|
+
this.inferArg(expr, argType, paramType.getOriginalType(), scene, realTypes);
|
|
265
|
+
}
|
|
266
|
+
else if (paramType instanceof Type_1.ArrayType && argType instanceof Type_1.ArrayType) {
|
|
267
|
+
this.inferArg(expr, argType.getBaseType(), paramType.getBaseType(), scene, realTypes);
|
|
268
|
+
}
|
|
269
|
+
else if (expr instanceof Expr_1.ArkInstanceInvokeExpr && expr.getBase().getType() instanceof Type_1.ArrayType) {
|
|
270
|
+
if (paramType instanceof Type_1.ArrayType && paramType.getBaseType() instanceof Type_1.GenericType) {
|
|
271
|
+
this.inferArg(expr, argType, expr.getBase().getType().getBaseType(), scene, realTypes);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
if (paramType instanceof Type_1.ClassType && scene.getProjectSdkMap().has(paramType.getClassSignature()
|
|
275
|
+
.getDeclaringFileSignature().getProjectName())) {
|
|
276
|
+
this.inferArgTypeWithSdk(paramType, scene, argType);
|
|
277
|
+
}
|
|
278
|
+
else if (paramType instanceof Type_1.GenericType || paramType instanceof Type_1.AnyType) {
|
|
279
|
+
realTypes.push(argType);
|
|
280
|
+
}
|
|
281
|
+
else if (paramType instanceof Type_1.FunctionType && argType instanceof Type_1.FunctionType) {
|
|
282
|
+
const method = scene.getMethod(argType.getMethodSignature());
|
|
283
|
+
if (method) {
|
|
284
|
+
TypeInference_1.TypeInference.inferTypeInMethod(method);
|
|
285
|
+
}
|
|
286
|
+
const realTypes = expr.getRealGenericTypes();
|
|
287
|
+
TypeInference_1.TypeInference.inferFunctionType(argType, paramType.getMethodSignature().getMethodSubSignature(), realTypes);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
static inferRightWithSdkType(leftType, rightType, ackClass) {
|
|
291
|
+
if (leftType instanceof Type_1.AliasType) {
|
|
292
|
+
this.inferRightWithSdkType(TypeInference_1.TypeInference.replaceAliasType(leftType), rightType, ackClass);
|
|
293
|
+
}
|
|
294
|
+
else if (leftType instanceof Type_1.UnionType) {
|
|
295
|
+
leftType.getTypes().forEach(t => this.inferRightWithSdkType(t, rightType, ackClass));
|
|
296
|
+
}
|
|
297
|
+
else if (leftType instanceof Type_1.ClassType) {
|
|
298
|
+
IRInference.inferArgTypeWithSdk(leftType, ackClass.getDeclaringArkFile().getScene(), rightType);
|
|
299
|
+
}
|
|
300
|
+
else if (rightType instanceof Type_1.ArrayType && leftType instanceof Type_1.ArrayType) {
|
|
301
|
+
const baseType = TypeInference_1.TypeInference.replaceAliasType(leftType.getBaseType());
|
|
302
|
+
if (baseType instanceof Type_1.ClassType) {
|
|
303
|
+
IRInference.inferArgTypeWithSdk(baseType, ackClass.getDeclaringArkFile().getScene(), rightType.getBaseType());
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
static inferArgTypeWithSdk(sdkType, scene, argType) {
|
|
308
|
+
var _a, _b;
|
|
309
|
+
if (!scene.getProjectSdkMap().has(sdkType.getClassSignature().getDeclaringFileSignature().getProjectName())) {
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
if (argType instanceof Type_1.UnionType) {
|
|
313
|
+
argType.getTypes().forEach(t => this.inferArgTypeWithSdk(sdkType, scene, t));
|
|
314
|
+
}
|
|
315
|
+
else if (argType instanceof Type_1.ClassType && argType.getClassSignature().getClassName().startsWith(Const_1.ANONYMOUS_CLASS_PREFIX)) {
|
|
316
|
+
this.inferAnonymousClass(scene.getClass(argType.getClassSignature()), sdkType.getClassSignature());
|
|
317
|
+
}
|
|
318
|
+
else if (argType instanceof Type_1.FunctionType) {
|
|
319
|
+
const param = (_b = (_a = scene.getClass(sdkType.getClassSignature())) === null || _a === void 0 ? void 0 : _a.getMethodWithName(Const_1.CALL_SIGNATURE_NAME)) === null || _b === void 0 ? void 0 : _b.getSignature().getMethodSubSignature();
|
|
320
|
+
const realTypes = sdkType.getRealGenericTypes();
|
|
321
|
+
TypeInference_1.TypeInference.inferFunctionType(argType, param, realTypes);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
static inferInvokeExpr(expr, baseType, methodName, scene) {
|
|
325
|
+
if (baseType instanceof Type_1.AliasType) {
|
|
326
|
+
return this.inferInvokeExpr(expr, baseType.getOriginalType(), methodName, scene);
|
|
327
|
+
}
|
|
328
|
+
else if (baseType instanceof Type_1.ArrayType) {
|
|
329
|
+
const arrayInterface = scene.getSdkGlobal(Builtin_1.Builtin.ARRAY);
|
|
330
|
+
if (arrayInterface instanceof ArkClass_1.ArkClass) {
|
|
331
|
+
return this.inferInvokeExpr(expr, new Type_1.ClassType(arrayInterface.getSignature(), [baseType.getBaseType()]), methodName, scene);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
else if (baseType instanceof Type_1.UnionType) {
|
|
335
|
+
for (let type of baseType.flatType()) {
|
|
336
|
+
if (type instanceof Type_1.UndefinedType || type instanceof Type_1.NullType) {
|
|
337
|
+
continue;
|
|
338
|
+
}
|
|
339
|
+
let result = this.inferInvokeExpr(expr, type, methodName, scene);
|
|
340
|
+
if (result) {
|
|
341
|
+
return result;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
if (baseType instanceof Type_1.ClassType) {
|
|
346
|
+
return this.inferInvokeExprWithDeclaredClass(expr, baseType, methodName, scene);
|
|
347
|
+
}
|
|
348
|
+
else if (baseType instanceof Type_1.AnnotationNamespaceType) {
|
|
349
|
+
const namespace = scene.getNamespace(baseType.getNamespaceSignature());
|
|
350
|
+
if (namespace) {
|
|
351
|
+
const foundMethod = ModelUtils_1.ModelUtils.findPropertyInNamespace(methodName, namespace);
|
|
352
|
+
if (foundMethod instanceof ArkMethod_1.ArkMethod) {
|
|
353
|
+
let signature = foundMethod.matchMethodSignature(expr.getArgs());
|
|
354
|
+
TypeInference_1.TypeInference.inferSignatureReturnType(signature, foundMethod);
|
|
355
|
+
expr.setMethodSignature(signature);
|
|
356
|
+
return expr instanceof Expr_1.ArkInstanceInvokeExpr ?
|
|
357
|
+
new Expr_1.ArkStaticInvokeExpr(signature, expr.getArgs(), expr.getRealGenericTypes()) : expr;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
else if (baseType instanceof Type_1.FunctionType) {
|
|
362
|
+
return IRInference.inferInvokeExprWithFunction(methodName, expr, baseType, scene);
|
|
363
|
+
}
|
|
364
|
+
else if (baseType instanceof Type_1.ArrayType) {
|
|
365
|
+
return IRInference.inferInvokeExprWithArray(methodName, expr, baseType, scene);
|
|
366
|
+
}
|
|
367
|
+
return null;
|
|
368
|
+
}
|
|
369
|
+
static inferInvokeExprWithArray(methodName, expr, baseType, scene) {
|
|
370
|
+
if (methodName === Builtin_1.Builtin.ITERATOR_FUNCTION) {
|
|
371
|
+
const returnType = expr.getMethodSignature().getMethodSubSignature().getReturnType();
|
|
372
|
+
if (returnType instanceof Type_1.ClassType && returnType.getClassSignature().getDeclaringFileSignature()
|
|
373
|
+
.getProjectName() === Builtin_1.Builtin.DUMMY_PROJECT_NAME) {
|
|
374
|
+
returnType.setRealGenericTypes([baseType.getBaseType()]);
|
|
375
|
+
return expr;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
const arrayInterface = scene.getSdkGlobal(Builtin_1.Builtin.ARRAY);
|
|
380
|
+
if (arrayInterface instanceof ArkClass_1.ArkClass) {
|
|
381
|
+
return this.inferInvokeExpr(expr, new Type_1.ClassType(arrayInterface.getSignature(), [baseType.getBaseType()]), methodName, scene);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
return null;
|
|
385
|
+
}
|
|
386
|
+
static inferInvokeExprWithFunction(methodName, expr, baseType, scene) {
|
|
387
|
+
if (methodName === Const_1.CALL_SIGNATURE_NAME) {
|
|
388
|
+
expr.setMethodSignature(baseType.getMethodSignature());
|
|
389
|
+
return expr;
|
|
390
|
+
}
|
|
391
|
+
const funcInterface = scene.getSdkGlobal(TSConst_1.FUNCTION);
|
|
392
|
+
if (funcInterface instanceof ArkClass_1.ArkClass) {
|
|
393
|
+
const method = ModelUtils_1.ModelUtils.findPropertyInClass(methodName, funcInterface);
|
|
394
|
+
if (method instanceof ArkMethod_1.ArkMethod) {
|
|
395
|
+
expr.setRealGenericTypes([baseType]);
|
|
396
|
+
expr.setMethodSignature(method.getSignature());
|
|
397
|
+
return expr;
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
return null;
|
|
401
|
+
}
|
|
402
|
+
static inferInvokeExprWithDeclaredClass(expr, baseType, methodName, scene) {
|
|
403
|
+
var _a;
|
|
404
|
+
let declaredClass = scene.getClass(baseType.getClassSignature());
|
|
405
|
+
if (!declaredClass) {
|
|
406
|
+
const globalClass = scene.getSdkGlobal(baseType.getClassSignature().getClassName());
|
|
407
|
+
if (globalClass instanceof ArkClass_1.ArkClass) {
|
|
408
|
+
declaredClass = globalClass;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
const method = declaredClass ? ModelUtils_1.ModelUtils.findPropertyInClass(methodName, declaredClass) : null;
|
|
412
|
+
if (method instanceof ArkMethod_1.ArkMethod) {
|
|
413
|
+
const methodSignature = method.matchMethodSignature(expr.getArgs());
|
|
414
|
+
TypeInference_1.TypeInference.inferSignatureReturnType(methodSignature, method);
|
|
415
|
+
expr.setMethodSignature(this.replaceMethodSignature(expr.getMethodSignature(), methodSignature));
|
|
416
|
+
expr.setRealGenericTypes(IRInference.getRealTypes(method, declaredClass, baseType));
|
|
417
|
+
if (method.isStatic() && expr instanceof Expr_1.ArkInstanceInvokeExpr) {
|
|
418
|
+
return new Expr_1.ArkStaticInvokeExpr(methodSignature, expr.getArgs(), expr.getRealGenericTypes());
|
|
419
|
+
}
|
|
420
|
+
return expr;
|
|
421
|
+
}
|
|
422
|
+
else if (method instanceof ArkField_1.ArkField) {
|
|
423
|
+
const type = method.getType();
|
|
424
|
+
if (type instanceof Type_1.FunctionType) {
|
|
425
|
+
expr.setMethodSignature(this.generateNewMethodSignature(methodName, type.getMethodSignature()));
|
|
426
|
+
return expr;
|
|
427
|
+
}
|
|
428
|
+
else if (type instanceof Type_1.ClassType && type.getClassSignature().getClassName().endsWith(EtsConst_1.CALL_BACK)) {
|
|
429
|
+
const callback = (_a = scene.getClass(type.getClassSignature())) === null || _a === void 0 ? void 0 : _a.getMethodWithName(Const_1.CALL_SIGNATURE_NAME);
|
|
430
|
+
if (callback) {
|
|
431
|
+
expr.setMethodSignature(callback.getSignature());
|
|
432
|
+
return expr;
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
else if (methodName === TSConst_1.CONSTRUCTOR_NAME) { //sdk隐式构造
|
|
437
|
+
const subSignature = new ArkSignature_1.MethodSubSignature(methodName, [], new Type_1.ClassType(baseType.getClassSignature()));
|
|
438
|
+
const signature = new ArkSignature_1.MethodSignature(baseType.getClassSignature(), subSignature);
|
|
439
|
+
expr.setMethodSignature(signature);
|
|
440
|
+
return expr;
|
|
441
|
+
}
|
|
442
|
+
else if (methodName === Builtin_1.Builtin.ITERATOR_NEXT) { //sdk隐式构造
|
|
443
|
+
const returnType = expr.getMethodSignature().getMethodSubSignature().getReturnType();
|
|
444
|
+
if (returnType instanceof Type_1.ClassType && returnType.getClassSignature().getDeclaringFileSignature()
|
|
445
|
+
.getProjectName() === Builtin_1.Builtin.DUMMY_PROJECT_NAME) {
|
|
446
|
+
returnType.setRealGenericTypes(baseType.getRealGenericTypes());
|
|
447
|
+
return expr;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
return null;
|
|
451
|
+
}
|
|
452
|
+
static getRealTypes(method, declaredClass, baseType) {
|
|
453
|
+
let realTypes;
|
|
454
|
+
if (method.getDeclaringArkClass() === declaredClass) {
|
|
455
|
+
realTypes = baseType.getRealGenericTypes();
|
|
456
|
+
}
|
|
457
|
+
else if (declaredClass === null || declaredClass === void 0 ? void 0 : declaredClass.getRealTypes()) {
|
|
458
|
+
realTypes = declaredClass === null || declaredClass === void 0 ? void 0 : declaredClass.getRealTypes();
|
|
459
|
+
}
|
|
460
|
+
else if (declaredClass === null || declaredClass === void 0 ? void 0 : declaredClass.hasComponentDecorator()) {
|
|
461
|
+
realTypes = [new Type_1.ClassType(declaredClass === null || declaredClass === void 0 ? void 0 : declaredClass.getSignature())];
|
|
462
|
+
}
|
|
463
|
+
return realTypes;
|
|
464
|
+
}
|
|
465
|
+
static replaceMethodSignature(init, declared) {
|
|
466
|
+
const className = init.getDeclaringClassSignature().getClassName();
|
|
467
|
+
let classSignature;
|
|
468
|
+
if (declared.getDeclaringClassSignature().getClassName().endsWith('Interface')) {
|
|
469
|
+
classSignature = new ArkSignature_1.AliasClassSignature(className, declared.getDeclaringClassSignature());
|
|
470
|
+
}
|
|
471
|
+
let newSubSignature;
|
|
472
|
+
if (classSignature || newSubSignature) {
|
|
473
|
+
return new ArkSignature_1.MethodSignature(classSignature !== null && classSignature !== void 0 ? classSignature : declared.getDeclaringClassSignature(), newSubSignature !== null && newSubSignature !== void 0 ? newSubSignature : declared.getMethodSubSignature());
|
|
474
|
+
}
|
|
475
|
+
return declared;
|
|
476
|
+
}
|
|
477
|
+
static processForEach(arg, baseType, scene) {
|
|
478
|
+
const argType = arg.getType();
|
|
479
|
+
if (argType instanceof Type_1.FunctionType) {
|
|
480
|
+
const argMethodSignature = argType.getMethodSignature();
|
|
481
|
+
const argMethod = scene.getMethod(argMethodSignature);
|
|
482
|
+
if (argMethod != null && argMethod.getBody()) {
|
|
483
|
+
const body = argMethod.getBody();
|
|
484
|
+
const firstStmt = body.getCfg().getStartingStmt();
|
|
485
|
+
if ((firstStmt instanceof Stmt_1.ArkAssignStmt) && (firstStmt.getRightOp() instanceof Ref_1.ArkParameterRef)) {
|
|
486
|
+
const parameterRef = firstStmt.getRightOp();
|
|
487
|
+
parameterRef.setType(baseType.getBaseType());
|
|
488
|
+
const argMethodParams = argMethod.getSignature().getMethodSubSignature().getParameters();
|
|
489
|
+
const actualParam = argMethodParams[argMethodParams.length - 1];
|
|
490
|
+
actualParam.setType(baseType.getBaseType());
|
|
491
|
+
}
|
|
492
|
+
TypeInference_1.TypeInference.inferTypeInMethod(argMethod);
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
else {
|
|
496
|
+
logger.warn(`arg of forEach must be callable`);
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
static inferLocal(base, arkMethod) {
|
|
500
|
+
var _a, _b, _c;
|
|
501
|
+
const arkClass = arkMethod.getDeclaringArkClass();
|
|
502
|
+
if (base.getName() === TSConst_1.THIS_NAME) {
|
|
503
|
+
if (arkClass.isAnonymousClass()) {
|
|
504
|
+
const thisType = TypeInference_1.TypeInference.inferBaseType(arkClass.getSignature().getDeclaringClassName(), arkClass);
|
|
505
|
+
if (thisType instanceof Type_1.ClassType) {
|
|
506
|
+
base.setType(thisType);
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
else {
|
|
510
|
+
base.setType(new Type_1.ClassType(arkClass.getSignature(), arkClass.getGenericsTypes()));
|
|
511
|
+
}
|
|
512
|
+
return;
|
|
513
|
+
}
|
|
514
|
+
let baseType = base.getType();
|
|
515
|
+
if (baseType instanceof Type_1.UnclearReferenceType) {
|
|
516
|
+
baseType = TypeInference_1.TypeInference.inferUnclearRefName(baseType.getName(), arkClass);
|
|
517
|
+
}
|
|
518
|
+
else if (TypeInference_1.TypeInference.isUnclearType(baseType)) {
|
|
519
|
+
const declaringStmt = base.getDeclaringStmt();
|
|
520
|
+
if (!declaringStmt || !declaringStmt.getOriginalText() || ((_a = declaringStmt.getOriginalText()) === null || _a === void 0 ? void 0 : _a.startsWith(base.getName()))) {
|
|
521
|
+
baseType = (_c = (_b = ModelUtils_1.ModelUtils.findDeclaredLocal(base, arkMethod)) === null || _b === void 0 ? void 0 : _b.getType()) !== null && _c !== void 0 ? _c : TypeInference_1.TypeInference.inferBaseType(base.getName(), arkClass);
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
if (baseType instanceof Type_1.UnionType || (baseType && !TypeInference_1.TypeInference.isUnclearType(baseType))) {
|
|
525
|
+
base.setType(baseType);
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
static generateNewFieldSignature(ref, arkClass, baseType) {
|
|
529
|
+
if (baseType instanceof Type_1.UnionType) {
|
|
530
|
+
for (let type of baseType.flatType()) {
|
|
531
|
+
if (type instanceof Type_1.UndefinedType || type instanceof Type_1.NullType) {
|
|
532
|
+
continue;
|
|
533
|
+
}
|
|
534
|
+
let newFieldSignature = this.generateNewFieldSignature(ref, arkClass, type);
|
|
535
|
+
if (!TypeInference_1.TypeInference.isUnclearType(newFieldSignature === null || newFieldSignature === void 0 ? void 0 : newFieldSignature.getType())) {
|
|
536
|
+
return newFieldSignature;
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
return null;
|
|
540
|
+
}
|
|
541
|
+
else if (baseType instanceof Type_1.AliasType) {
|
|
542
|
+
return this.generateNewFieldSignature(ref, arkClass, baseType.getOriginalType());
|
|
543
|
+
}
|
|
544
|
+
const fieldName = ref.getFieldName().replace(/[\"|\']/g, '');
|
|
545
|
+
const propertyAndType = TypeInference_1.TypeInference.inferFieldType(baseType, fieldName, arkClass);
|
|
546
|
+
let propertyType = propertyAndType === null || propertyAndType === void 0 ? void 0 : propertyAndType[1];
|
|
547
|
+
if (propertyType && TypeInference_1.TypeInference.isUnclearType(propertyType)) {
|
|
548
|
+
const newType = TypeInference_1.TypeInference.inferUnclearedType(propertyType, arkClass);
|
|
549
|
+
if (newType) {
|
|
550
|
+
propertyType = newType;
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
let staticFlag;
|
|
554
|
+
let signature;
|
|
555
|
+
if (baseType instanceof Type_1.ClassType) {
|
|
556
|
+
const property = propertyAndType === null || propertyAndType === void 0 ? void 0 : propertyAndType[0];
|
|
557
|
+
if (property instanceof ArkField_1.ArkField) {
|
|
558
|
+
return property.getSignature();
|
|
559
|
+
}
|
|
560
|
+
staticFlag = baseType.getClassSignature().getClassName() === Const_1.DEFAULT_ARK_CLASS_NAME ||
|
|
561
|
+
(property instanceof ArkMethod_1.ArkMethod && property.isStatic());
|
|
562
|
+
signature = property instanceof ArkMethod_1.ArkMethod ? property.getSignature().getDeclaringClassSignature() : baseType.getClassSignature();
|
|
563
|
+
}
|
|
564
|
+
else if (baseType instanceof Type_1.AnnotationNamespaceType) {
|
|
565
|
+
staticFlag = true;
|
|
566
|
+
signature = baseType.getNamespaceSignature();
|
|
567
|
+
}
|
|
568
|
+
else {
|
|
569
|
+
return null;
|
|
570
|
+
}
|
|
571
|
+
return new ArkSignature_1.FieldSignature(fieldName, signature, propertyType !== null && propertyType !== void 0 ? propertyType : ref.getType(), staticFlag);
|
|
572
|
+
}
|
|
573
|
+
static inferAnonymousClass(anon, declaredSignature, set = new Set()) {
|
|
574
|
+
var _a;
|
|
575
|
+
if (!anon) {
|
|
576
|
+
return;
|
|
577
|
+
}
|
|
578
|
+
const key = anon.getSignature().toString();
|
|
579
|
+
if (set.has(key)) {
|
|
580
|
+
return;
|
|
581
|
+
}
|
|
582
|
+
else {
|
|
583
|
+
set.add(key);
|
|
584
|
+
}
|
|
585
|
+
const scene = anon.getDeclaringArkFile().getScene();
|
|
586
|
+
const declaredClass = scene.getClass(declaredSignature);
|
|
587
|
+
if (!declaredClass) {
|
|
588
|
+
return;
|
|
589
|
+
}
|
|
590
|
+
for (const anonField of anon.getFields()) {
|
|
591
|
+
const property = ModelUtils_1.ModelUtils.findPropertyInClass(anonField.getName(), declaredClass);
|
|
592
|
+
if (property instanceof ArkField_1.ArkField) {
|
|
593
|
+
this.assignAnonField(property, anonField, scene, set);
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
for (const anonMethod of anon.getMethods()) {
|
|
597
|
+
const methodSignature = (_a = declaredClass.getMethodWithName(anonMethod.getName())) === null || _a === void 0 ? void 0 : _a.matchMethodSignature(anonMethod.getSubSignature().getParameters());
|
|
598
|
+
if (methodSignature) {
|
|
599
|
+
anonMethod.setImplementationSignature(methodSignature);
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
static assignAnonField(property, anonField, scene, set) {
|
|
604
|
+
function deepInfer(anonType, declaredSignature) {
|
|
605
|
+
if (anonType instanceof Type_1.ClassType && anonType.getClassSignature().getClassName().startsWith(Const_1.ANONYMOUS_CLASS_PREFIX)) {
|
|
606
|
+
IRInference.inferAnonymousClass(scene.getClass(anonType.getClassSignature()), declaredSignature, set);
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
const type = property.getSignature().getType();
|
|
610
|
+
const lastStmt = anonField.getInitializer().at(-1);
|
|
611
|
+
if (lastStmt instanceof Stmt_1.ArkAssignStmt) {
|
|
612
|
+
const rightType = lastStmt.getRightOp().getType();
|
|
613
|
+
if (type instanceof Type_1.ClassType) {
|
|
614
|
+
deepInfer(rightType, type.getClassSignature());
|
|
615
|
+
}
|
|
616
|
+
else if (type instanceof Type_1.ArrayType && type.getBaseType() instanceof Type_1.ClassType &&
|
|
617
|
+
rightType instanceof Type_1.ArrayType) {
|
|
618
|
+
const baseType = rightType.getBaseType();
|
|
619
|
+
const classSignature = type.getBaseType().getClassSignature();
|
|
620
|
+
if (baseType instanceof Type_1.UnionType) {
|
|
621
|
+
baseType.getTypes().forEach(t => deepInfer(t, classSignature));
|
|
622
|
+
}
|
|
623
|
+
else {
|
|
624
|
+
deepInfer(rightType.getBaseType(), classSignature);
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
else if (type instanceof Type_1.FunctionType && rightType instanceof Type_1.FunctionType) {
|
|
628
|
+
TypeInference_1.TypeInference.inferFunctionType(rightType, type.getMethodSignature().getMethodSubSignature(), type.getRealGenericTypes());
|
|
629
|
+
}
|
|
630
|
+
const leftOp = lastStmt.getLeftOp();
|
|
631
|
+
if (leftOp instanceof Ref_1.AbstractFieldRef) {
|
|
632
|
+
leftOp.setFieldSignature(property.getSignature());
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
anonField.setSignature(property.getSignature());
|
|
636
|
+
}
|
|
637
|
+
static inferAliasTypeExpr(expr, arkMethod) {
|
|
638
|
+
const originalObject = expr.getOriginalObject();
|
|
639
|
+
let model;
|
|
640
|
+
if (originalObject instanceof Local_1.Local) {
|
|
641
|
+
model = ModelUtils_1.ModelUtils.findArkModelByRefName(originalObject.getName(), arkMethod.getDeclaringArkClass());
|
|
642
|
+
}
|
|
643
|
+
else if (originalObject instanceof TypeExpr_1.AbstractTypeExpr) {
|
|
644
|
+
originalObject.inferType(arkMethod);
|
|
645
|
+
model = originalObject;
|
|
646
|
+
}
|
|
647
|
+
else if (originalObject instanceof Type_1.Type) {
|
|
648
|
+
const type = TypeInference_1.TypeInference.inferUnclearedType(originalObject, arkMethod.getDeclaringArkClass());
|
|
649
|
+
// If original Object is ClassType, AliasType or UnclearReferenceType with real generic types,
|
|
650
|
+
// the type after infer should be revert back to the object itself.
|
|
651
|
+
if (type instanceof Type_1.ClassType) {
|
|
652
|
+
const scene = arkMethod.getDeclaringArkFile().getScene();
|
|
653
|
+
model = ModelUtils_1.ModelUtils.findArkModelBySignature(type.getClassSignature(), scene);
|
|
654
|
+
}
|
|
655
|
+
else if (type instanceof Type_1.AliasType) {
|
|
656
|
+
const scene = arkMethod.getDeclaringArkFile().getScene();
|
|
657
|
+
model = ModelUtils_1.ModelUtils.findArkModelBySignature(type.getSignature(), scene);
|
|
658
|
+
}
|
|
659
|
+
else if (type) {
|
|
660
|
+
model = type;
|
|
661
|
+
}
|
|
662
|
+
if (expr.getRealGenericTypes() !== undefined && originalObject instanceof Type_1.UnclearReferenceType) {
|
|
663
|
+
expr.setRealGenericTypes(originalObject.getGenericTypes());
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
if (Expr_1.AliasTypeExpr.isAliasTypeOriginalModel(model)) {
|
|
667
|
+
expr.setOriginalObject(model);
|
|
668
|
+
}
|
|
669
|
+
return expr;
|
|
670
|
+
}
|
|
671
|
+
static inferTypeQueryExpr(expr, arkMethod) {
|
|
672
|
+
var _a;
|
|
673
|
+
let gTypes = expr.getGenerateTypes();
|
|
674
|
+
if (gTypes) {
|
|
675
|
+
for (let i = 0; i < gTypes.length; i++) {
|
|
676
|
+
const newType = TypeInference_1.TypeInference.inferUnclearedType(gTypes[i], arkMethod.getDeclaringArkClass());
|
|
677
|
+
if (newType) {
|
|
678
|
+
gTypes[i] = newType;
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
const opValue = expr.getOpValue();
|
|
683
|
+
let opValueType;
|
|
684
|
+
if (opValue instanceof ArkBaseModel_1.ArkBaseModel) {
|
|
685
|
+
opValueType = (_a = ModelUtils_1.ModelUtils.parseArkBaseModel2Type(opValue)) !== null && _a !== void 0 ? _a : Type_1.UnknownType.getInstance();
|
|
686
|
+
}
|
|
687
|
+
else {
|
|
688
|
+
opValueType = opValue.getType();
|
|
689
|
+
}
|
|
690
|
+
if (!TypeInference_1.TypeInference.isUnclearType(opValueType)) {
|
|
691
|
+
return;
|
|
692
|
+
}
|
|
693
|
+
if (opValue instanceof Local_1.Local) {
|
|
694
|
+
const newOpValueType = TypeInference_1.TypeInference.inferUnclearRefName(opValue.getName(), arkMethod.getDeclaringArkClass());
|
|
695
|
+
const scene = arkMethod.getDeclaringArkFile().getScene();
|
|
696
|
+
if (newOpValueType instanceof Type_1.ClassType) {
|
|
697
|
+
const newOpValue = ModelUtils_1.ModelUtils.findArkModelBySignature(newOpValueType.getClassSignature(), scene);
|
|
698
|
+
if (newOpValue instanceof ArkBaseModel_1.ArkBaseModel) {
|
|
699
|
+
expr.setOpValue(newOpValue);
|
|
700
|
+
}
|
|
701
|
+
}
|
|
702
|
+
else if (newOpValueType instanceof Type_1.FunctionType) {
|
|
703
|
+
const newOpValue = ModelUtils_1.ModelUtils.findArkModelBySignature(newOpValueType.getMethodSignature(), scene);
|
|
704
|
+
if (newOpValue instanceof ArkBaseModel_1.ArkBaseModel) {
|
|
705
|
+
expr.setOpValue(newOpValue);
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
else {
|
|
709
|
+
this.inferLocal(opValue, arkMethod);
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
else if (opValue instanceof Ref_1.AbstractRef || opValue instanceof Expr_1.AbstractExpr) {
|
|
713
|
+
expr.setOpValue(opValue.inferType(arkMethod));
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
static inferKeyofTypeExpr(expr, arkMethod) {
|
|
717
|
+
const opType = expr.getOpType();
|
|
718
|
+
if (TypeInference_1.TypeInference.isUnclearType(opType)) {
|
|
719
|
+
if (opType instanceof TypeExpr_1.TypeQueryExpr) {
|
|
720
|
+
this.inferTypeQueryExpr(opType, arkMethod);
|
|
721
|
+
}
|
|
722
|
+
else {
|
|
723
|
+
const type = TypeInference_1.TypeInference.inferUnclearedType(opType, arkMethod.getDeclaringArkClass());
|
|
724
|
+
if (type) {
|
|
725
|
+
expr.setOpType(type);
|
|
726
|
+
}
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
exports.IRInference = IRInference;
|