arkanalyzer 1.0.94 → 2.0.0-beta1
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/lib/Config.d.ts +7 -0
- package/lib/Config.d.ts.map +1 -1
- package/lib/Scene.d.ts +134 -170
- package/lib/Scene.d.ts.map +1 -1
- package/lib/Scene.js +412 -976
- package/lib/callgraph/algorithm/AbstractAnalysis.js +3 -2
- package/lib/callgraph/algorithm/RapidTypeAnalysis.js +1 -1
- package/lib/callgraph/model/CallGraph.js +1 -1
- package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts +1 -3
- package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PTAUtils.js +17 -7
- package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.js +4 -14
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +2 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +1 -2
- package/lib/callgraph/pointerAnalysis/plugins/WorkerPlugin.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/plugins/WorkerPlugin.js +0 -1
- package/lib/cli/commands/cg.d.ts +1 -0
- package/lib/cli/commands/cg.d.ts.map +1 -1
- package/lib/cli/commands/cg.js +22 -18
- package/lib/cli/commands/ir.d.ts +1 -0
- package/lib/cli/commands/ir.d.ts.map +1 -1
- package/lib/cli/commands/ir.js +5 -2
- package/lib/core/base/Constant.d.ts +5 -5
- package/lib/core/base/Constant.d.ts.map +1 -1
- package/lib/core/base/Constant.js +12 -9
- package/lib/core/base/Expr.d.ts +36 -20
- package/lib/core/base/Expr.d.ts.map +1 -1
- package/lib/core/base/Expr.js +206 -94
- package/lib/core/base/Local.d.ts +10 -20
- package/lib/core/base/Local.d.ts.map +1 -1
- package/lib/core/base/Local.js +25 -28
- package/lib/core/base/Position.d.ts +6 -0
- package/lib/core/base/Position.d.ts.map +1 -1
- package/lib/core/base/Position.js +37 -11
- package/lib/core/base/Ref.d.ts +45 -33
- package/lib/core/base/Ref.d.ts.map +1 -1
- package/lib/core/base/Ref.js +225 -51
- package/lib/core/base/Stmt.d.ts +19 -9
- package/lib/core/base/Stmt.d.ts.map +1 -1
- package/lib/core/base/Stmt.js +135 -52
- package/lib/core/base/Type.d.ts +67 -4
- package/lib/core/base/Type.d.ts.map +1 -1
- package/lib/core/base/Type.js +391 -20
- package/lib/core/base/TypeExpr.d.ts +6 -4
- package/lib/core/base/TypeExpr.d.ts.map +1 -1
- package/lib/core/base/TypeExpr.js +34 -10
- package/lib/core/base/Value.d.ts +20 -2
- package/lib/core/base/Value.d.ts.map +1 -1
- package/lib/core/base/Value.js +12 -0
- package/lib/core/common/ArkIRTransformer.d.ts +18 -0
- package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkIRTransformer.js +94 -75
- package/lib/core/common/ArkValueTransformer.d.ts +21 -3
- package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkValueTransformer.js +455 -265
- package/lib/core/common/Builtin.d.ts +48 -24
- package/lib/core/common/Builtin.d.ts.map +1 -1
- package/lib/core/common/Builtin.js +90 -52
- package/lib/core/common/CanonicalizerValidator.d.ts +308 -0
- package/lib/core/common/CanonicalizerValidator.d.ts.map +1 -0
- package/lib/core/common/CanonicalizerValidator.js +888 -0
- package/lib/core/common/Const.d.ts +3 -3
- package/lib/core/common/Const.d.ts.map +1 -1
- package/lib/core/common/Const.js +3 -3
- package/lib/core/common/DummyMainCreater.d.ts +2 -21
- package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
- package/lib/core/common/DummyMainCreater.js +8 -105
- package/lib/core/common/IRInference.d.ts +55 -3
- package/lib/core/common/IRInference.d.ts.map +1 -1
- package/lib/core/common/IRInference.js +407 -126
- package/lib/core/common/IRUtils.d.ts +1 -0
- package/lib/core/common/IRUtils.d.ts.map +1 -1
- package/lib/core/common/IRUtils.js +44 -13
- package/lib/core/common/ModelUtils.d.ts +44 -20
- package/lib/core/common/ModelUtils.d.ts.map +1 -1
- package/lib/core/common/ModelUtils.js +378 -208
- package/lib/core/common/SdkUtils.d.ts +35 -5
- package/lib/core/common/SdkUtils.d.ts.map +1 -1
- package/lib/core/common/SdkUtils.js +181 -53
- package/lib/core/common/SignatureCanonicalizer.d.ts +95 -0
- package/lib/core/common/SignatureCanonicalizer.d.ts.map +1 -0
- package/lib/core/common/SignatureCanonicalizer.js +116 -0
- package/lib/core/common/SignatureCanonicalizerRegistry.d.ts +176 -0
- package/lib/core/common/SignatureCanonicalizerRegistry.d.ts.map +1 -0
- package/lib/core/common/SignatureCanonicalizerRegistry.js +343 -0
- package/lib/core/common/SignatureModelCanonicalizer.d.ts +69 -0
- package/lib/core/common/SignatureModelCanonicalizer.d.ts.map +1 -0
- package/lib/core/common/SignatureModelCanonicalizer.js +109 -0
- package/lib/core/common/StmtUseReplacer.d.ts +1 -0
- package/lib/core/common/StmtUseReplacer.d.ts.map +1 -1
- package/lib/core/common/StmtUseReplacer.js +9 -0
- package/lib/core/common/StringUtils.d.ts +12 -1
- package/lib/core/common/StringUtils.d.ts.map +1 -1
- package/lib/core/common/StringUtils.js +36 -17
- package/lib/core/common/TempSignatureCanonicalizer.d.ts +82 -0
- package/lib/core/common/TempSignatureCanonicalizer.d.ts.map +1 -0
- package/lib/core/common/TempSignatureCanonicalizer.js +177 -0
- package/lib/core/common/TypeInference.d.ts +24 -6
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +243 -117
- package/lib/core/common/ValueUtil.d.ts +2 -1
- package/lib/core/common/ValueUtil.d.ts.map +1 -1
- package/lib/core/common/ValueUtil.js +4 -1
- package/lib/core/graph/Cfg.d.ts.map +1 -1
- package/lib/core/graph/Cfg.js +21 -6
- package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/CfgBuilder.js +46 -33
- package/lib/core/graph/builder/IfBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/IfBuilder.js +6 -2
- package/lib/core/graph/builder/ViewTreeBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/ViewTreeBuilder.js +6 -2
- package/lib/core/inference/ModelInference.d.ts +24 -4
- package/lib/core/inference/ModelInference.d.ts.map +1 -1
- package/lib/core/inference/ModelInference.js +273 -79
- 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 +90 -40
- package/lib/core/inference/abc/AbcInference.d.ts.map +1 -1
- package/lib/core/inference/abc/AbcInference.js +28 -15
- package/lib/core/inference/arkts/ArkTsInference.d.ts +9 -3
- package/lib/core/inference/arkts/ArkTsInference.d.ts.map +1 -1
- package/lib/core/inference/arkts/ArkTsInference.js +54 -16
- package/lib/core/model/ArkClass.d.ts +192 -18
- package/lib/core/model/ArkClass.d.ts.map +1 -1
- package/lib/core/model/ArkClass.js +852 -122
- package/lib/core/model/ArkExport.d.ts.map +1 -1
- package/lib/core/model/ArkExport.js +1 -2
- package/lib/core/model/ArkField.d.ts +34 -2
- package/lib/core/model/ArkField.d.ts.map +1 -1
- package/lib/core/model/ArkField.js +89 -14
- package/lib/core/model/ArkFile.d.ts +72 -12
- package/lib/core/model/ArkFile.d.ts.map +1 -1
- package/lib/core/model/ArkFile.js +275 -65
- package/lib/core/model/ArkImport.d.ts.map +1 -1
- package/lib/core/model/ArkImport.js +1 -2
- package/lib/core/model/ArkMethod.d.ts +101 -15
- package/lib/core/model/ArkMethod.d.ts.map +1 -1
- package/lib/core/model/ArkMethod.js +252 -39
- package/lib/core/model/ArkModule.d.ts +1 -1
- package/lib/core/model/ArkModule.js +1 -1
- package/lib/core/model/ArkNamespace.d.ts +80 -10
- package/lib/core/model/ArkNamespace.d.ts.map +1 -1
- package/lib/core/model/ArkNamespace.js +309 -76
- package/lib/core/model/ArkSignature.d.ts +242 -18
- package/lib/core/model/ArkSignature.d.ts.map +1 -1
- package/lib/core/model/ArkSignature.js +725 -95
- package/lib/core/model/builder/ArkClassBuilder.d.ts +6 -3
- package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkClassBuilder.js +116 -71
- package/lib/core/model/builder/ArkExportBuilder.d.ts +1 -1
- package/lib/core/model/builder/ArkExportBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkExportBuilder.js +1 -1
- package/lib/core/model/builder/ArkFieldBuilder.d.ts +0 -2
- package/lib/core/model/builder/ArkFieldBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkFieldBuilder.js +9 -43
- package/lib/core/model/builder/ArkFileBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkFileBuilder.js +32 -33
- package/lib/core/model/builder/ArkMethodBuilder.d.ts +10 -3
- package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkMethodBuilder.js +40 -26
- package/lib/core/model/builder/ArkNamespaceBuilder.d.ts +3 -2
- package/lib/core/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkNamespaceBuilder.js +45 -77
- package/lib/core/model/builder/ArkSignatureBuilder.d.ts +9 -0
- package/lib/core/model/builder/ArkSignatureBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkSignatureBuilder.js +26 -3
- package/lib/core/model/builder/BodyBuilder.d.ts +1 -0
- package/lib/core/model/builder/BodyBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/BodyBuilder.js +37 -11
- package/lib/core/model/builder/builderUtils.d.ts +11 -1
- package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/core/model/builder/builderUtils.js +124 -90
- package/lib/frontend/FrontendBuilder.d.ts +10 -6
- package/lib/frontend/FrontendBuilder.d.ts.map +1 -1
- package/lib/frontend/FrontendBuilder.js +19 -45
- package/lib/frontend/ModuleScene.d.ts +43 -0
- package/lib/frontend/ModuleScene.d.ts.map +1 -0
- package/lib/frontend/ModuleScene.js +143 -0
- package/lib/frontend/SceneBuildStage.d.ts +15 -0
- package/lib/frontend/SceneBuildStage.d.ts.map +1 -0
- package/lib/frontend/SceneBuildStage.js +32 -0
- package/lib/frontend/SceneBuilder.d.ts +153 -0
- package/lib/frontend/SceneBuilder.d.ts.map +1 -0
- package/lib/frontend/SceneBuilder.js +859 -0
- package/lib/frontend/arktsFrontend/ArktsFrontend.d.ts +0 -2
- package/lib/frontend/arktsFrontend/ArktsFrontend.d.ts.map +1 -1
- package/lib/frontend/arktsFrontend/ArktsFrontend.js +0 -18
- package/lib/frontend/arktsFrontend/FileBodyRemount.d.ts +17 -0
- package/lib/frontend/arktsFrontend/FileBodyRemount.d.ts.map +1 -0
- package/lib/frontend/arktsFrontend/FileBodyRemount.js +187 -0
- package/lib/frontend/common/ModuleBuilder.d.ts +4 -2
- package/lib/frontend/common/ModuleBuilder.d.ts.map +1 -1
- package/lib/frontend/common/ModuleBuilder.js +19 -9
- package/lib/frontend/cppFrontend/CppFrontend.d.ts +0 -6
- package/lib/frontend/cppFrontend/CppFrontend.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/CppFrontend.js +0 -56
- package/lib/frontend/cppFrontend/base/Type.d.ts +7 -0
- package/lib/frontend/cppFrontend/base/Type.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/base/Type.js +29 -0
- package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/ArkIRTransformer.js +56 -56
- package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts +1 -1
- package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/ArkValueTransformer.js +124 -113
- package/lib/frontend/cppFrontend/common/Builtin.d.ts +29 -19
- package/lib/frontend/cppFrontend/common/Builtin.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/Builtin.js +56 -35
- package/lib/frontend/cppFrontend/common/IRInference.d.ts +7 -2
- package/lib/frontend/cppFrontend/common/IRInference.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/IRInference.js +61 -28
- package/lib/frontend/cppFrontend/common/IRUtils.d.ts +1 -0
- package/lib/frontend/cppFrontend/common/IRUtils.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/IRUtils.js +22 -10
- package/lib/frontend/cppFrontend/common/ModelUtils.d.ts +19 -0
- package/lib/frontend/cppFrontend/common/ModelUtils.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/ModelUtils.js +84 -3
- package/lib/frontend/cppFrontend/common/TypeInference.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/TypeInference.js +44 -54
- package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.js +2 -1
- package/lib/frontend/cppFrontend/inference/CxxModelInference.d.ts +1 -1
- package/lib/frontend/cppFrontend/inference/CxxModelInference.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/inference/CxxValueInference.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/inference/CxxValueInference.js +41 -5
- package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.js +18 -28
- package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.js +2 -3
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts +2 -2
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.js +31 -24
- package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.js +10 -16
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts +0 -2
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.js +19 -37
- package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts +1 -0
- package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/BodyBuilder.js +30 -3
- package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/builderUtils.js +8 -4
- package/lib/index.d.ts +3 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +10 -2
- package/lib/save/json/JsonSerialization.js +2 -2
- package/lib/save/source/SourceStmt.js +1 -1
- package/lib/save/source/SourceTransformer.d.ts.map +1 -1
- package/lib/save/source/SourceTransformer.js +0 -9
- package/lib/statistics/StageStatistics.d.ts +195 -0
- package/lib/statistics/StageStatistics.d.ts.map +1 -0
- package/lib/statistics/StageStatistics.js +346 -0
- package/lib/statistics/StageStatisticsReporter.d.ts +58 -0
- package/lib/statistics/StageStatisticsReporter.d.ts.map +1 -0
- package/lib/statistics/StageStatisticsReporter.js +255 -0
- package/lib/utils/Canonicalizer.d.ts +9 -2
- package/lib/utils/Canonicalizer.d.ts.map +1 -1
- package/lib/utils/Canonicalizer.js +19 -2
- package/lib/utils/CxxSceneUtils.d.ts +7 -0
- package/lib/utils/CxxSceneUtils.d.ts.map +1 -1
- package/lib/utils/CxxSceneUtils.js +10 -1
- package/lib/utils/FileUtils.d.ts +0 -1
- package/lib/utils/FileUtils.d.ts.map +1 -1
- package/lib/utils/FileUtils.js +1 -9
- package/lib/utils/HashUtils.d.ts +9 -0
- package/lib/utils/HashUtils.d.ts.map +1 -0
- package/lib/utils/HashUtils.js +65 -0
- package/lib/utils/ModuleUtils.d.ts.map +1 -1
- package/lib/utils/ModuleUtils.js +24 -5
- package/lib/utils/VisitedSegment.d.ts +23 -0
- package/lib/utils/VisitedSegment.d.ts.map +1 -0
- package/lib/utils/VisitedSegment.js +64 -0
- package/lib/utils/callGraphUtils.d.ts.map +1 -1
- package/lib/utils/callGraphUtils.js +7 -7
- package/lib/utils/getAllFiles.d.ts.map +1 -1
- package/lib/utils/getAllFiles.js +11 -8
- package/lib/utils/logger.d.ts +4 -0
- package/lib/utils/logger.d.ts.map +1 -1
- package/lib/utils/logger.js +16 -0
- package/lib/utils/parseArkSourceFile.d.ts +33 -0
- package/lib/utils/parseArkSourceFile.d.ts.map +1 -0
- package/lib/utils/parseArkSourceFile.js +131 -0
- package/package.json +1 -1
- package/lib/utils/DependenciesSort.d.ts +0 -3
- package/lib/utils/DependenciesSort.d.ts.map +0 -1
- package/lib/utils/DependenciesSort.js +0 -72
- package/lib/utils/crypto_utils.d.ts +0 -6
- package/lib/utils/crypto_utils.d.ts.map +0 -1
- package/lib/utils/crypto_utils.js +0 -57
|
@@ -56,9 +56,11 @@ const ArkClass_1 = require("../ArkClass");
|
|
|
56
56
|
const ArkMethod_1 = require("../ArkMethod");
|
|
57
57
|
const Position_1 = require("../../base/Position");
|
|
58
58
|
const EtsConst_1 = require("../../common/EtsConst");
|
|
59
|
+
const parseArkSourceFile_1 = require("../../../utils/parseArkSourceFile");
|
|
59
60
|
const ArkSignature_1 = require("../ArkSignature");
|
|
60
61
|
const Const_1 = require("../../common/Const");
|
|
61
62
|
const StringUtils_1 = require("../../common/StringUtils");
|
|
63
|
+
const SignatureCanonicalizerRegistry_1 = require("../../common/SignatureCanonicalizerRegistry");
|
|
62
64
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'ArkFileBuilder');
|
|
63
65
|
exports.notStmtOrExprKind = [
|
|
64
66
|
'ModuleDeclaration',
|
|
@@ -95,7 +97,7 @@ function buildArkFileFromFile(absoluteFilePath, projectDir, arkFile, projectName
|
|
|
95
97
|
sourceText = fs_1.default.readFileSync(arkFile.getFilePath(), 'utf8');
|
|
96
98
|
}
|
|
97
99
|
catch (error) {
|
|
98
|
-
logger.error(
|
|
100
|
+
logger.error(`Failed to read file: ${error}`);
|
|
99
101
|
return;
|
|
100
102
|
}
|
|
101
103
|
const options = arkFile.getScene().getOptions();
|
|
@@ -103,7 +105,7 @@ function buildArkFileFromFile(absoluteFilePath, projectDir, arkFile, projectName
|
|
|
103
105
|
if (eagerLoad && arkFile.getScene().getProjectName() === arkFile.getProjectName()) {
|
|
104
106
|
arkFile.setCode(sourceText);
|
|
105
107
|
}
|
|
106
|
-
const sourceFile =
|
|
108
|
+
const sourceFile = (0, parseArkSourceFile_1.parseArkSourceFile)(arkFile.getName(), sourceText, true, EtsConst_1.ETS_COMPILER_OPTIONS);
|
|
107
109
|
// save ast source file, if enabled ast and file is from the project (not from sdk)
|
|
108
110
|
if (arkFile.getScene().getOptions().enableAST && arkFile.getScene().getProjectName() === arkFile.getProjectName()) {
|
|
109
111
|
arkFile.setAST(sourceFile);
|
|
@@ -123,10 +125,12 @@ exports.buildArkFileFromFile = buildArkFileFromFile;
|
|
|
123
125
|
* which would duplicate `export *` entries (their temp keys are process-level auto-increment).
|
|
124
126
|
*/
|
|
125
127
|
function buildArkFile(arkFile, astRoot, skipImportExport = false) {
|
|
126
|
-
const namespaces = [];
|
|
127
128
|
for (const child of astRoot.statements) {
|
|
129
|
+
if (ohos_typescript_1.default.isTypeAliasDeclaration(child)) {
|
|
130
|
+
(0, ArkClassBuilder_1.registerTypeAliasTypeLiteral)(child);
|
|
131
|
+
}
|
|
128
132
|
if (ohos_typescript_1.default.isModuleDeclaration(child)) {
|
|
129
|
-
buildAndCollectNamespace(child, arkFile, astRoot
|
|
133
|
+
buildAndCollectNamespace(child, arkFile, astRoot);
|
|
130
134
|
}
|
|
131
135
|
else if (ohos_typescript_1.default.isClassDeclaration(child) || ohos_typescript_1.default.isInterfaceDeclaration(child) || ohos_typescript_1.default.isEnumDeclaration(child) || ohos_typescript_1.default.isStructDeclaration(child)) {
|
|
132
136
|
buildAndExportClass(child, arkFile, astRoot);
|
|
@@ -146,27 +150,30 @@ function buildArkFile(arkFile, astRoot, skipImportExport = false) {
|
|
|
146
150
|
logger.trace('Child joined default method of arkFile: ', ohos_typescript_1.default.SyntaxKind[child.kind]);
|
|
147
151
|
}
|
|
148
152
|
}
|
|
149
|
-
mergeAndAddNamespaces(namespaces, arkFile);
|
|
150
153
|
}
|
|
151
|
-
function buildAndCollectNamespace(child, arkFile, astRoot
|
|
152
|
-
const
|
|
153
|
-
ns.
|
|
154
|
-
|
|
155
|
-
|
|
154
|
+
function buildAndCollectNamespace(child, arkFile, astRoot) {
|
|
155
|
+
const namespaceSig = (0, ArkNamespaceBuilder_1.buildNamespaceSignature)(child, arkFile);
|
|
156
|
+
let ns = SignatureCanonicalizerRegistry_1.SignatureCanonicalizerRegistry.getInstance().getNamespaceBySig(namespaceSig);
|
|
157
|
+
if (!ns) {
|
|
158
|
+
ns = new ArkNamespace_1.ArkNamespace(arkFile.getFileSigID(), undefined, namespaceSig);
|
|
159
|
+
arkFile.addNamespace(ns);
|
|
160
|
+
}
|
|
161
|
+
(0, ArkNamespaceBuilder_1.buildArkNamespace)(child, ns, astRoot);
|
|
156
162
|
if (ns.isExported()) {
|
|
157
163
|
arkFile.addExportInfo((0, ArkExportBuilder_1.buildExportInfo)(ns, arkFile, Position_1.FullPosition.buildFromNode(child, astRoot)));
|
|
158
164
|
}
|
|
159
165
|
}
|
|
160
166
|
function buildAndExportClass(child, arkFile, astRoot) {
|
|
161
|
-
const cls = new ArkClass_1.ArkClass();
|
|
167
|
+
const cls = new ArkClass_1.ArkClass(arkFile.getFileSigID());
|
|
162
168
|
(0, ArkClassBuilder_1.buildNormalArkClassFromArkFile)(child, arkFile, cls, astRoot);
|
|
163
169
|
if (cls.isExported()) {
|
|
164
170
|
arkFile.addExportInfo((0, ArkExportBuilder_1.buildExportInfo)(cls, arkFile, Position_1.FullPosition.buildFromNode(child, astRoot)));
|
|
165
171
|
}
|
|
166
172
|
}
|
|
167
173
|
function buildAndExportMethod(child, arkFile, astRoot) {
|
|
168
|
-
const
|
|
169
|
-
|
|
174
|
+
const defaultClass = arkFile.getDefaultClass();
|
|
175
|
+
const mthd = new ArkMethod_1.ArkMethod(defaultClass.getClassSigID());
|
|
176
|
+
(0, ArkMethodBuilder_1.buildArkMethodFromArkClass)(child, defaultClass, mthd, astRoot);
|
|
170
177
|
if (mthd.isExported()) {
|
|
171
178
|
arkFile.addExportInfo((0, ArkExportBuilder_1.buildExportInfo)(mthd, arkFile, Position_1.FullPosition.buildFromNode(child, astRoot)));
|
|
172
179
|
}
|
|
@@ -202,22 +209,10 @@ function tryBuildImportExport(child, arkFile, astRoot) {
|
|
|
202
209
|
}
|
|
203
210
|
return false;
|
|
204
211
|
}
|
|
205
|
-
function mergeAndAddNamespaces(namespaces, arkFile) {
|
|
206
|
-
const merged = (0, ArkNamespaceBuilder_1.mergeNameSpaces)(namespaces);
|
|
207
|
-
merged.forEach(ns => {
|
|
208
|
-
arkFile.addNamespace(ns);
|
|
209
|
-
if (ns.isExport()) {
|
|
210
|
-
const positions = ns.getOriginFullPositions();
|
|
211
|
-
if (positions.length > 0) {
|
|
212
|
-
arkFile.addExportInfo((0, ArkExportBuilder_1.buildExportInfo)(ns, arkFile, positions[0]));
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
});
|
|
216
|
-
}
|
|
217
212
|
function genDefaultArkClass(arkFile, astRoot) {
|
|
218
|
-
let defaultClass = new ArkClass_1.ArkClass();
|
|
219
|
-
(0, ArkClassBuilder_1.buildDefaultArkClassFromArkFile)(
|
|
220
|
-
arkFile.
|
|
213
|
+
let defaultClass = new ArkClass_1.ArkClass(arkFile.getFileSigID());
|
|
214
|
+
(0, ArkClassBuilder_1.buildDefaultArkClassFromArkFile)(defaultClass, astRoot);
|
|
215
|
+
arkFile.setDefaultClassID(defaultClass.getClassSigID());
|
|
221
216
|
arkFile.addArkClass(defaultClass);
|
|
222
217
|
}
|
|
223
218
|
/**
|
|
@@ -227,16 +222,20 @@ function genDefaultArkClass(arkFile, astRoot) {
|
|
|
227
222
|
* @returns
|
|
228
223
|
*/
|
|
229
224
|
function buildImportExportInfoFromFile(arkFile) {
|
|
225
|
+
var _a;
|
|
230
226
|
let sourceText;
|
|
231
227
|
try {
|
|
232
228
|
sourceText = fs_1.default.readFileSync(arkFile.getFilePath(), 'utf8');
|
|
233
229
|
}
|
|
234
230
|
catch (error) {
|
|
235
|
-
logger.error(
|
|
231
|
+
logger.error(`Failed to read file: ${error}`);
|
|
236
232
|
return;
|
|
237
233
|
}
|
|
238
|
-
arkFile.
|
|
239
|
-
|
|
234
|
+
const eagerLoad = (_a = arkFile.getScene().getOptions().saveSourceCodeByDefault) !== null && _a !== void 0 ? _a : false;
|
|
235
|
+
if (eagerLoad && arkFile.getScene().getProjectName() === arkFile.getProjectName()) {
|
|
236
|
+
arkFile.setCode(sourceText);
|
|
237
|
+
}
|
|
238
|
+
const sourceFile = (0, parseArkSourceFile_1.parseArkSourceFile)(arkFile.getName(), sourceText, true, EtsConst_1.ETS_COMPILER_OPTIONS);
|
|
240
239
|
buildImportExportInfo(arkFile, sourceFile);
|
|
241
240
|
}
|
|
242
241
|
exports.buildImportExportInfoFromFile = buildImportExportInfoFromFile;
|
|
@@ -291,10 +290,10 @@ function buildArkFileSignaturesFromFile(arkFile) {
|
|
|
291
290
|
sourceText = fs_1.default.readFileSync(arkFile.getFilePath(), 'utf8');
|
|
292
291
|
}
|
|
293
292
|
catch (error) {
|
|
294
|
-
logger.error(
|
|
293
|
+
logger.error(`Failed to read file: ${error}`);
|
|
295
294
|
return;
|
|
296
295
|
}
|
|
297
|
-
const sourceFile =
|
|
296
|
+
const sourceFile = (0, parseArkSourceFile_1.parseArkSourceFile)(arkFile.getName(), sourceText, true, EtsConst_1.ETS_COMPILER_OPTIONS);
|
|
298
297
|
if (arkFile.getScene().getOptions().enableAST && arkFile.getScene().getProjectName() === arkFile.getProjectName()) {
|
|
299
298
|
arkFile.setAST(sourceFile);
|
|
300
299
|
}
|
|
@@ -7,7 +7,7 @@ import { Stmt } from '../../base/Stmt';
|
|
|
7
7
|
import { Local } from '../../base/Local';
|
|
8
8
|
import { Value } from '../../base/Value';
|
|
9
9
|
export type MethodLikeNode = ts.FunctionDeclaration | ts.MethodDeclaration | ts.ConstructorDeclaration | ts.ArrowFunction | ts.AccessorDeclaration | ts.FunctionExpression | ts.MethodSignature | ts.ConstructSignatureDeclaration | ts.CallSignatureDeclaration | ts.FunctionTypeNode;
|
|
10
|
-
export declare function buildDefaultArkMethodFromArkClass(
|
|
10
|
+
export declare function buildDefaultArkMethodFromArkClass(mtd: ArkMethod, sourceFile: ts.SourceFile, node?: ts.ModuleDeclaration): void;
|
|
11
11
|
export declare function buildArkMethodFromArkClass(methodNode: MethodLikeNode, declaringClass: ArkClass, mtd: ArkMethod, sourceFile: ts.SourceFile, declaringMethod?: ArkMethod): void;
|
|
12
12
|
export declare function buildNestedMethodName(originName: string, declaringMethodName: string): string;
|
|
13
13
|
export declare class ObjectBindingPatternParameter {
|
|
@@ -56,10 +56,17 @@ export declare class MethodParameter implements Value {
|
|
|
56
56
|
addArrayElement(element: ArrayBindingPatternParameter): void;
|
|
57
57
|
getArrayElements(): ArrayBindingPatternParameter[];
|
|
58
58
|
setArrayElements(arrayElements: ArrayBindingPatternParameter[]): void;
|
|
59
|
-
getUses(): Value[];
|
|
59
|
+
getUses(acc?: Value[]): Value[];
|
|
60
60
|
}
|
|
61
61
|
export declare function needDefaultConstructorInClass(arkClass: ArkClass): boolean;
|
|
62
|
-
|
|
62
|
+
/**
|
|
63
|
+
* On-demand variant of {@link buildDefaultConstructor} with the isLibraryClass guard
|
|
64
|
+
* lifted: callers decide by construction stage / SDK batch whether library classes
|
|
65
|
+
* get default constructors (the batch-level parameter replaces the per-class project
|
|
66
|
+
* name comparison on this hot path). The remaining static guards are unchanged.
|
|
67
|
+
*/
|
|
68
|
+
export declare function ensureDefaultConstructor(arkClass: ArkClass): boolean;
|
|
69
|
+
export declare function buildDefaultConstructor(arkClass: ArkClass, visited?: Set<number>, force?: boolean): boolean;
|
|
63
70
|
export declare function buildInitMethod(initMethod: ArkMethod, fieldInitializerStmts: Stmt[], thisLocal: Local, globals?: Map<string, GlobalRef> | null): void;
|
|
64
71
|
export declare function addInitInConstructor(constructor: ArkMethod): void;
|
|
65
72
|
export declare function isMethodImplementation(node: MethodLikeNode): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArkMethodBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/ArkMethodBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAa,IAAI,EAAe,MAAM,iBAAiB,CAAC;AAG/D,OAAO,EAAE,QAAQ,EAAiB,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAYjC,OAAO,EAAgD,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAKzF,OAAO,EAAkE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvG,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAmBzC,MAAM,MAAM,cAAc,GACpB,EAAE,CAAC,mBAAmB,GACtB,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,sBAAsB,GACzB,EAAE,CAAC,aAAa,GAChB,EAAE,CAAC,mBAAmB,GACtB,EAAE,CAAC,kBAAkB,GACrB,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,6BAA6B,GAChC,EAAE,CAAC,wBAAwB,GAC3B,EAAE,CAAC,gBAAgB,CAAC;AAE1B,wBAAgB,iCAAiC,CAAC,
|
|
1
|
+
{"version":3,"file":"ArkMethodBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/ArkMethodBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,7 +40,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
40
40
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
41
41
|
};
|
|
42
42
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
-
exports.replaceSuper2Constructor = exports.updateMethodSignaturesAndLineCols = exports.checkAndUpdateMethod = exports.isMethodImplementation = exports.addInitInConstructor = exports.buildInitMethod = exports.buildDefaultConstructor = exports.needDefaultConstructorInClass = exports.MethodParameter = exports.ArrayBindingPatternParameter = exports.ObjectBindingPatternParameter = exports.buildNestedMethodName = exports.buildArkMethodFromArkClass = exports.buildDefaultArkMethodFromArkClass = void 0;
|
|
43
|
+
exports.replaceSuper2Constructor = exports.updateMethodSignaturesAndLineCols = exports.checkAndUpdateMethod = exports.isMethodImplementation = exports.addInitInConstructor = exports.buildInitMethod = exports.buildDefaultConstructor = exports.ensureDefaultConstructor = exports.needDefaultConstructorInClass = exports.MethodParameter = exports.ArrayBindingPatternParameter = exports.ObjectBindingPatternParameter = exports.buildNestedMethodName = exports.buildArkMethodFromArkClass = exports.buildDefaultArkMethodFromArkClass = void 0;
|
|
44
44
|
const Type_1 = require("../../base/Type");
|
|
45
45
|
const BodyBuilder_1 = require("./BodyBuilder");
|
|
46
46
|
const ViewTreeBuilder_1 = require("../../graph/builder/ViewTreeBuilder");
|
|
@@ -65,10 +65,9 @@ const IRUtils_1 = require("../../common/IRUtils");
|
|
|
65
65
|
const ArkError_1 = require("../../common/ArkError");
|
|
66
66
|
const Position_1 = require("../../base/Position");
|
|
67
67
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'ArkMethodBuilder');
|
|
68
|
-
function buildDefaultArkMethodFromArkClass(
|
|
69
|
-
mtd.setDeclaringArkClass(declaringClass);
|
|
68
|
+
function buildDefaultArkMethodFromArkClass(mtd, sourceFile, node) {
|
|
70
69
|
const methodSubSignature = ArkSignatureBuilder_1.ArkSignatureBuilder.buildMethodSubSignatureFromMethodName(Const_1.DEFAULT_ARK_METHOD_NAME, true);
|
|
71
|
-
const methodSignature = new ArkSignature_1.MethodSignature(mtd.getDeclaringArkClass().
|
|
70
|
+
const methodSignature = new ArkSignature_1.MethodSignature(mtd.getDeclaringArkClass().getClassSigID(), methodSubSignature);
|
|
72
71
|
mtd.setImplementationSignature(methodSignature);
|
|
73
72
|
mtd.setImplOriginFullPosition(new Position_1.FullPosition(0, 0, 0, 0));
|
|
74
73
|
const defaultMethodNode = node ? node : sourceFile;
|
|
@@ -77,10 +76,7 @@ function buildDefaultArkMethodFromArkClass(declaringClass, mtd, sourceFile, node
|
|
|
77
76
|
}
|
|
78
77
|
exports.buildDefaultArkMethodFromArkClass = buildDefaultArkMethodFromArkClass;
|
|
79
78
|
function buildArkMethodFromArkClass(methodNode, declaringClass, mtd, sourceFile, declaringMethod) {
|
|
80
|
-
mtd.setDeclaringArkClass(declaringClass);
|
|
81
79
|
if (declaringMethod !== undefined && !declaringMethod.isGenerated() && !declaringMethod.isDefaultArkMethod()) {
|
|
82
|
-
// If declaringMethod is %dflt, %instInit, %statInit, then the method should be taken as nested method of them.
|
|
83
|
-
// Otherwise, it will fail to handle global vars of this method or failed to do the free of bodyBuilder.
|
|
84
80
|
mtd.setOuterMethod(declaringMethod);
|
|
85
81
|
}
|
|
86
82
|
ohos_typescript_1.default.isFunctionDeclaration(methodNode) && mtd.setAsteriskToken(methodNode.asteriskToken !== undefined);
|
|
@@ -104,7 +100,7 @@ function buildArkMethodFromArkClass(methodNode, declaringClass, mtd, sourceFile,
|
|
|
104
100
|
returnType = (0, builderUtils_1.buildGenericType)((0, builderUtils_1.buildReturnType)(methodNode.type, sourceFile, mtd), mtd);
|
|
105
101
|
}
|
|
106
102
|
const methodSubSignature = new ArkSignature_1.MethodSubSignature(methodName, methodParameters, returnType, mtd.isStatic());
|
|
107
|
-
const methodSignature = new ArkSignature_1.MethodSignature(mtd.getDeclaringArkClass().
|
|
103
|
+
const methodSignature = new ArkSignature_1.MethodSignature(mtd.getDeclaringArkClass().getClassSigID(), methodSubSignature);
|
|
108
104
|
if (isMethodImplementation(methodNode)) {
|
|
109
105
|
mtd.setImplementationSignature(methodSignature);
|
|
110
106
|
mtd.setImplOriginFullPosition(Position_1.FullPosition.buildFromNode(methodNode, sourceFile));
|
|
@@ -130,11 +126,11 @@ exports.buildArkMethodFromArkClass = buildArkMethodFromArkClass;
|
|
|
130
126
|
function buildMethodName(node, declaringClass, sourceFile, declaringMethod) {
|
|
131
127
|
let name = '';
|
|
132
128
|
if (ohos_typescript_1.default.isFunctionDeclaration(node) || ohos_typescript_1.default.isFunctionExpression(node)) {
|
|
133
|
-
name = node.name ? (0, StringUtils_1.cloneText)(node.name.text) : buildAnonymousMethodName(
|
|
129
|
+
name = node.name ? (0, StringUtils_1.cloneText)(node.name.text) : buildAnonymousMethodName(declaringClass);
|
|
134
130
|
}
|
|
135
131
|
else if (ohos_typescript_1.default.isFunctionTypeNode(node)) {
|
|
136
132
|
//TODO: check name type
|
|
137
|
-
name = node.name ? (0, StringUtils_1.cloneText)(node.name.getText(sourceFile)) : buildAnonymousMethodName(
|
|
133
|
+
name = node.name ? (0, StringUtils_1.cloneText)(node.name.getText(sourceFile)) : buildAnonymousMethodName(declaringClass);
|
|
138
134
|
}
|
|
139
135
|
else if (ohos_typescript_1.default.isMethodDeclaration(node) || ohos_typescript_1.default.isMethodSignature(node)) {
|
|
140
136
|
if (ohos_typescript_1.default.isIdentifier(node.name)) {
|
|
@@ -172,14 +168,14 @@ function buildMethodName(node, declaringClass, sourceFile, declaringMethod) {
|
|
|
172
168
|
name = Const_1.SETTER_PREFIX + (0, StringUtils_1.cloneText)(node.name.text);
|
|
173
169
|
}
|
|
174
170
|
else if (ohos_typescript_1.default.isArrowFunction(node)) {
|
|
175
|
-
name = buildAnonymousMethodName(
|
|
171
|
+
name = buildAnonymousMethodName(declaringClass);
|
|
176
172
|
}
|
|
177
173
|
if (declaringMethod !== undefined && !declaringMethod.isDefaultArkMethod()) {
|
|
178
174
|
name = buildNestedMethodName(name, declaringMethod.getName());
|
|
179
175
|
}
|
|
180
176
|
return name;
|
|
181
177
|
}
|
|
182
|
-
function buildAnonymousMethodName(
|
|
178
|
+
function buildAnonymousMethodName(declaringClass) {
|
|
183
179
|
return `${Const_1.ANONYMOUS_METHOD_PREFIX}${declaringClass.getAnonymousMethodNumber()}`;
|
|
184
180
|
}
|
|
185
181
|
function buildNestedMethodName(originName, declaringMethodName) {
|
|
@@ -289,8 +285,8 @@ class MethodParameter {
|
|
|
289
285
|
setArrayElements(arrayElements) {
|
|
290
286
|
this.arrayElements = arrayElements;
|
|
291
287
|
}
|
|
292
|
-
getUses() {
|
|
293
|
-
return
|
|
288
|
+
getUses(acc = []) {
|
|
289
|
+
return acc;
|
|
294
290
|
}
|
|
295
291
|
}
|
|
296
292
|
exports.MethodParameter = MethodParameter;
|
|
@@ -303,14 +299,31 @@ function needDefaultConstructorInClass(arkClass) {
|
|
|
303
299
|
!arkClass.isDeclare());
|
|
304
300
|
}
|
|
305
301
|
exports.needDefaultConstructorInClass = needDefaultConstructorInClass;
|
|
302
|
+
/**
|
|
303
|
+
* On-demand variant of {@link buildDefaultConstructor} with the isLibraryClass guard
|
|
304
|
+
* lifted: callers decide by construction stage / SDK batch whether library classes
|
|
305
|
+
* get default constructors (the batch-level parameter replaces the per-class project
|
|
306
|
+
* name comparison on this hot path). The remaining static guards are unchanged.
|
|
307
|
+
*/
|
|
308
|
+
function ensureDefaultConstructor(arkClass) {
|
|
309
|
+
const category = arkClass.getCategory();
|
|
310
|
+
if (arkClass.getMethodWithName(TSConst_1.CONSTRUCTOR_NAME) !== null ||
|
|
311
|
+
(category !== ArkClass_1.ClassCategory.CLASS && category !== ArkClass_1.ClassCategory.OBJECT) ||
|
|
312
|
+
arkClass.isDefaultArkClass() ||
|
|
313
|
+
arkClass.isDeclare()) {
|
|
314
|
+
return false;
|
|
315
|
+
}
|
|
316
|
+
return buildDefaultConstructor(arkClass, new Set(), true);
|
|
317
|
+
}
|
|
318
|
+
exports.ensureDefaultConstructor = ensureDefaultConstructor;
|
|
306
319
|
function recursivelyCheckAndBuildSuperConstructor(arkClass, visited = new Set()) {
|
|
307
|
-
if (visited.has(arkClass)) {
|
|
320
|
+
if (visited.has(arkClass.getClassSigID())) {
|
|
308
321
|
return;
|
|
309
322
|
}
|
|
310
|
-
visited.add(arkClass);
|
|
323
|
+
visited.add(arkClass.getClassSigID());
|
|
311
324
|
let superClass = arkClass.getSuperClass();
|
|
312
325
|
while (superClass !== null) {
|
|
313
|
-
if (visited.has(superClass)) {
|
|
326
|
+
if (visited.has(superClass.getClassSigID())) {
|
|
314
327
|
break;
|
|
315
328
|
}
|
|
316
329
|
if (superClass.getMethodWithName(TSConst_1.CONSTRUCTOR_NAME) === null) {
|
|
@@ -319,16 +332,12 @@ function recursivelyCheckAndBuildSuperConstructor(arkClass, visited = new Set())
|
|
|
319
332
|
superClass = superClass.getSuperClass();
|
|
320
333
|
}
|
|
321
334
|
}
|
|
322
|
-
function buildDefaultConstructor(arkClass, visited = new Set()) {
|
|
335
|
+
function buildDefaultConstructor(arkClass, visited = new Set(), force = false) {
|
|
323
336
|
var _a;
|
|
324
337
|
recursivelyCheckAndBuildSuperConstructor(arkClass, visited);
|
|
325
|
-
if (!needDefaultConstructorInClass(arkClass)) {
|
|
338
|
+
if (!force && !needDefaultConstructorInClass(arkClass)) {
|
|
326
339
|
return false;
|
|
327
340
|
}
|
|
328
|
-
const defaultConstructor = new ArkMethod_1.ArkMethod();
|
|
329
|
-
defaultConstructor.setDeclaringArkClass(arkClass);
|
|
330
|
-
defaultConstructor.setIsGeneratedFlag(true);
|
|
331
|
-
defaultConstructor.setImplOriginFullPosition(new Position_1.FullPosition(0, 0, 0, 0));
|
|
332
341
|
const thisLocal = new Local_1.Local(TSConst_1.THIS_NAME, new Type_1.ClassType(arkClass.getSignature()));
|
|
333
342
|
const thisDefStmt = new Stmt_1.ArkAssignStmt(thisLocal, new Ref_1.ArkThisRef(new Type_1.ClassType(arkClass.getSignature())));
|
|
334
343
|
thisLocal.setDeclaringStmt(thisDefStmt);
|
|
@@ -353,8 +362,10 @@ function buildDefaultConstructor(arkClass, visited = new Set()) {
|
|
|
353
362
|
const superInvokeExpr = new Expr_1.ArkInstanceInvokeExpr(thisLocal, superConstructor.getSignature(), parameterArgs);
|
|
354
363
|
basicBlock.addStmt(new Stmt_1.ArkInvokeStmt(superInvokeExpr));
|
|
355
364
|
}
|
|
356
|
-
const methodSubSignature = new ArkSignature_1.MethodSubSignature(TSConst_1.CONSTRUCTOR_NAME, parameters, thisLocal.getType()
|
|
357
|
-
defaultConstructor.
|
|
365
|
+
const methodSubSignature = new ArkSignature_1.MethodSubSignature(TSConst_1.CONSTRUCTOR_NAME, parameters, thisLocal.getType());
|
|
366
|
+
const defaultConstructor = new ArkMethod_1.ArkMethod(arkClass.getClassSigID(), new ArkSignature_1.MethodSignature(arkClass.getClassSigID(), methodSubSignature));
|
|
367
|
+
defaultConstructor.setIsGeneratedFlag(true);
|
|
368
|
+
defaultConstructor.setImplOriginFullPosition(new Position_1.FullPosition(0, 0, 0, 0));
|
|
358
369
|
basicBlock.addStmt(new Stmt_1.ArkReturnStmt(thisLocal));
|
|
359
370
|
const cfg = new Cfg_1.Cfg();
|
|
360
371
|
cfg.addBlock(basicBlock);
|
|
@@ -423,7 +434,7 @@ function addInitInConstructor(constructor) {
|
|
|
423
434
|
}
|
|
424
435
|
break;
|
|
425
436
|
}
|
|
426
|
-
const initInvokeStmt = new Stmt_1.ArkInvokeStmt(new Expr_1.ArkInstanceInvokeExpr(thisLocal, constructor.getDeclaringArkClass().
|
|
437
|
+
const initInvokeStmt = new Stmt_1.ArkInvokeStmt(new Expr_1.ArkInstanceInvokeExpr(thisLocal, constructor.getDeclaringArkClass().getInstanceInitMethodOrNull().getSignature(), []));
|
|
427
438
|
initInvokeStmt.setCfg(cfg);
|
|
428
439
|
firstBlockStmts.splice(index, 0, initInvokeStmt);
|
|
429
440
|
}
|
|
@@ -535,6 +546,9 @@ function replaceSuper2Constructor(constructor) {
|
|
|
535
546
|
logger.error(`Can not find local this in constructor method ${constructor.getSignature().toString()}`);
|
|
536
547
|
return;
|
|
537
548
|
}
|
|
549
|
+
// 替换埋葬:旧 super invoke expr 被整体替换且无后续持有者——其 (UNKNOWN, super) stub 的 temp 行在此显式 retire(原每显式 super() 构造调用
|
|
550
|
+
// 留 1 行钉活到 dispose)。
|
|
551
|
+
superInvokeStmt.getInvokeExpr().retireTemp();
|
|
538
552
|
const newInvokeExpr = new Expr_1.ArkInstanceInvokeExpr(base, superConstructor.getSignature(), superInvokeStmt.getInvokeExpr().getArgs());
|
|
539
553
|
superInvokeStmt.replaceInvokeExpr(newInvokeExpr);
|
|
540
554
|
return;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { ArkFile } from '../ArkFile';
|
|
2
2
|
import ts from 'ohos-typescript';
|
|
3
3
|
import { ArkNamespace } from '../ArkNamespace';
|
|
4
|
-
|
|
4
|
+
import { NamespaceSignature } from '../ArkSignature';
|
|
5
|
+
export declare function buildNamespaceSignature(node: ts.ModuleDeclaration, declaringInstance: ArkFile | ArkNamespace): NamespaceSignature;
|
|
6
|
+
export declare function buildArkNamespace(node: ts.ModuleDeclaration, ns: ArkNamespace, sourceFile: ts.SourceFile): void;
|
|
5
7
|
export declare function genDefaultArkClass(ns: ArkNamespace, node: ts.ModuleDeclaration, sourceFile: ts.SourceFile): void;
|
|
6
|
-
export declare function mergeNameSpaces(arkNamespaces: ArkNamespace[]): ArkNamespace[];
|
|
7
8
|
//# sourceMappingURL=ArkNamespaceBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArkNamespaceBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/ArkNamespaceBuilder.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"ArkNamespaceBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/ArkNamespaceBuilder.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAO/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAMrD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,OAAO,GAAG,YAAY,GAAG,kBAAkB,CAMjI;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,IAAI,CAwC/G;AA0DD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,IAAI,CAMhH"}
|
|
@@ -40,10 +40,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
40
40
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
41
41
|
};
|
|
42
42
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
-
exports.
|
|
43
|
+
exports.genDefaultArkClass = exports.buildArkNamespace = exports.buildNamespaceSignature = void 0;
|
|
44
44
|
const Position_1 = require("../../base/Position");
|
|
45
45
|
const ArkClassBuilder_1 = require("./ArkClassBuilder");
|
|
46
|
-
const ArkFile_1 = require("../ArkFile");
|
|
47
46
|
const ArkMethodBuilder_1 = require("./ArkMethodBuilder");
|
|
48
47
|
const ohos_typescript_1 = __importDefault(require("ohos-typescript"));
|
|
49
48
|
const ArkNamespace_1 = require("../ArkNamespace");
|
|
@@ -55,29 +54,26 @@ const ArkClass_1 = require("../ArkClass");
|
|
|
55
54
|
const ArkMethod_1 = require("../ArkMethod");
|
|
56
55
|
const ArkSignature_1 = require("../ArkSignature");
|
|
57
56
|
const IRUtils_1 = require("../../common/IRUtils");
|
|
57
|
+
const SignatureCanonicalizerRegistry_1 = require("../../common/SignatureCanonicalizerRegistry");
|
|
58
58
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'ArkNamespaceBuilder');
|
|
59
|
-
function
|
|
60
|
-
|
|
59
|
+
function buildNamespaceSignature(node, declaringInstance) {
|
|
60
|
+
const namespaceName = (0, StringUtils_1.cloneText)(node.name.text);
|
|
61
|
+
if (declaringInstance instanceof ArkNamespace_1.ArkNamespace) {
|
|
62
|
+
return new ArkSignature_1.NamespaceSignature(namespaceName, declaringInstance.getDeclaringFileID(), declaringInstance.getNamespaceSigID());
|
|
63
|
+
}
|
|
64
|
+
return new ArkSignature_1.NamespaceSignature(namespaceName, declaringInstance.getFileSigID());
|
|
65
|
+
}
|
|
66
|
+
exports.buildNamespaceSignature = buildNamespaceSignature;
|
|
67
|
+
function buildArkNamespace(node, ns, sourceFile) {
|
|
61
68
|
// modifiers
|
|
62
69
|
if (node.modifiers) {
|
|
63
70
|
ns.setModifiers((0, builderUtils_1.buildModifiers)(node));
|
|
64
71
|
ns.setDecorators((0, builderUtils_1.buildDecorators)(node, sourceFile));
|
|
65
72
|
}
|
|
66
|
-
if (declaringInstance instanceof ArkFile_1.ArkFile) {
|
|
67
|
-
ns.setDeclaringArkFile(declaringInstance);
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
ns.setDeclaringArkNamespace(declaringInstance);
|
|
71
|
-
ns.setDeclaringArkFile(declaringInstance.getDeclaringArkFile());
|
|
72
|
-
}
|
|
73
|
-
ns.setDeclaringInstance(declaringInstance);
|
|
74
|
-
const namespaceName = (0, StringUtils_1.cloneText)(node.name.text);
|
|
75
|
-
const namespaceSignature = new ArkSignature_1.NamespaceSignature(namespaceName, ns.getDeclaringArkFile().getFileSignature(), ((_a = ns.getDeclaringArkNamespace()) === null || _a === void 0 ? void 0 : _a.getSignature()) || null);
|
|
76
|
-
ns.setSignature(namespaceSignature);
|
|
77
73
|
// set line and column
|
|
78
74
|
const { line, character } = ohos_typescript_1.default.getLineAndCharacterOfPosition(sourceFile, node.getStart(sourceFile));
|
|
79
75
|
const endPos = ohos_typescript_1.default.getLineAndCharacterOfPosition(sourceFile, node.getEnd());
|
|
80
|
-
ns.setOriginFullPositions([new Position_1.FullPosition(line + 1, character + 1, endPos.line + 1, endPos.character + 1)]);
|
|
76
|
+
ns.setOriginFullPositions([...ns.getOriginFullPositions(), new Position_1.FullPosition(line + 1, character + 1, endPos.line + 1, endPos.character + 1)]);
|
|
81
77
|
genDefaultArkClass(ns, node, sourceFile);
|
|
82
78
|
// build ns member
|
|
83
79
|
if (node.body) {
|
|
@@ -88,9 +84,13 @@ function buildArkNamespace(node, declaringInstance, ns, sourceFile) {
|
|
|
88
84
|
//TODO: Check
|
|
89
85
|
else if (ohos_typescript_1.default.isModuleDeclaration(node.body)) {
|
|
90
86
|
logger.trace('This ModuleBody is an NamespaceDeclaration.');
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
87
|
+
const namespaceSig = buildNamespaceSignature(node.body, ns);
|
|
88
|
+
let childNs = SignatureCanonicalizerRegistry_1.SignatureCanonicalizerRegistry.getInstance().getNamespaceBySig(namespaceSig);
|
|
89
|
+
if (!childNs) {
|
|
90
|
+
childNs = new ArkNamespace_1.ArkNamespace(ns.getDeclaringFileID(), ns.getNamespaceSigID(), namespaceSig);
|
|
91
|
+
ns.addNamespace(childNs);
|
|
92
|
+
}
|
|
93
|
+
buildArkNamespace(node.body, childNs, sourceFile);
|
|
94
94
|
}
|
|
95
95
|
else if (ohos_typescript_1.default.isIdentifier(node.body)) {
|
|
96
96
|
logger.warn('ModuleBody is Identifier');
|
|
@@ -108,34 +108,40 @@ exports.buildArkNamespace = buildArkNamespace;
|
|
|
108
108
|
// TODO: check and update
|
|
109
109
|
function buildNamespaceMembers(node, namespace, sourceFile) {
|
|
110
110
|
const statements = node.statements;
|
|
111
|
-
const nestedNamespaces = [];
|
|
112
111
|
statements.forEach(child => {
|
|
112
|
+
if (ohos_typescript_1.default.isTypeAliasDeclaration(child)) {
|
|
113
|
+
(0, ArkClassBuilder_1.registerTypeAliasTypeLiteral)(child);
|
|
114
|
+
}
|
|
113
115
|
if (ohos_typescript_1.default.isModuleDeclaration(child)) {
|
|
114
|
-
|
|
115
|
-
childNs.
|
|
116
|
-
childNs
|
|
117
|
-
|
|
118
|
-
|
|
116
|
+
const childNsSig = buildNamespaceSignature(child, namespace);
|
|
117
|
+
let childNs = SignatureCanonicalizerRegistry_1.SignatureCanonicalizerRegistry.getInstance().getNamespaceBySig(childNsSig);
|
|
118
|
+
if (!childNs) {
|
|
119
|
+
childNs = new ArkNamespace_1.ArkNamespace(namespace.getDeclaringFileID(), namespace.getNamespaceSigID(), childNsSig);
|
|
120
|
+
namespace.addNamespace(childNs);
|
|
121
|
+
}
|
|
122
|
+
buildArkNamespace(child, childNs, sourceFile);
|
|
123
|
+
if (childNs.isExported()) {
|
|
124
|
+
namespace.addExportInfo((0, ArkExportBuilder_1.buildExportInfo)(childNs, namespace.getDeclaringArkFile(), Position_1.FullPosition.buildFromNode(child, sourceFile)));
|
|
125
|
+
}
|
|
119
126
|
}
|
|
120
127
|
else if (ohos_typescript_1.default.isClassDeclaration(child) || ohos_typescript_1.default.isInterfaceDeclaration(child) || ohos_typescript_1.default.isEnumDeclaration(child) || ohos_typescript_1.default.isStructDeclaration(child)) {
|
|
121
|
-
|
|
122
|
-
|
|
128
|
+
const classSig = (0, ArkClassBuilder_1.buildClassSignature)(child, namespace);
|
|
129
|
+
let cls = SignatureCanonicalizerRegistry_1.SignatureCanonicalizerRegistry.getInstance().getClassBySig(classSig);
|
|
130
|
+
if (!cls) {
|
|
131
|
+
cls = new ArkClass_1.ArkClass(namespace.getDeclaringFileID(), namespace.getNamespaceSigID(), classSig);
|
|
132
|
+
namespace.addArkClass(cls);
|
|
133
|
+
}
|
|
134
|
+
(0, ArkClassBuilder_1.buildNormalArkClassFromArkNamespace)(child, cls, sourceFile);
|
|
123
135
|
if (cls.isExported()) {
|
|
124
136
|
namespace.addExportInfo((0, ArkExportBuilder_1.buildExportInfo)(cls, namespace.getDeclaringArkFile(), Position_1.FullPosition.buildFromNode(child, sourceFile)));
|
|
125
137
|
}
|
|
126
138
|
}
|
|
127
139
|
// TODO: Check
|
|
128
|
-
else if (ohos_typescript_1.default.isMethodDeclaration(child)) {
|
|
140
|
+
else if (ohos_typescript_1.default.isMethodDeclaration(child) || ohos_typescript_1.default.isFunctionDeclaration(child)) {
|
|
129
141
|
logger.trace('This is a MethodDeclaration in ArkNamespace.');
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
namespace.addExportInfo((0, ArkExportBuilder_1.buildExportInfo)(mthd, namespace.getDeclaringArkFile(), Position_1.FullPosition.buildFromNode(child, sourceFile)));
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
else if (ohos_typescript_1.default.isFunctionDeclaration(child)) {
|
|
137
|
-
let mthd = new ArkMethod_1.ArkMethod();
|
|
138
|
-
(0, ArkMethodBuilder_1.buildArkMethodFromArkClass)(child, namespace.getDefaultClass(), mthd, sourceFile);
|
|
142
|
+
const defaultClass = namespace.getDefaultClass();
|
|
143
|
+
let mthd = new ArkMethod_1.ArkMethod(defaultClass.getClassSigID());
|
|
144
|
+
(0, ArkMethodBuilder_1.buildArkMethodFromArkClass)(child, defaultClass, mthd, sourceFile);
|
|
139
145
|
if (mthd.isExported()) {
|
|
140
146
|
namespace.addExportInfo((0, ArkExportBuilder_1.buildExportInfo)(mthd, namespace.getDeclaringArkFile(), Position_1.FullPosition.buildFromNode(child, sourceFile)));
|
|
141
147
|
}
|
|
@@ -154,49 +160,11 @@ function buildNamespaceMembers(node, namespace, sourceFile) {
|
|
|
154
160
|
// join default method
|
|
155
161
|
}
|
|
156
162
|
});
|
|
157
|
-
const nestedMergedNameSpaces = mergeNameSpaces(nestedNamespaces);
|
|
158
|
-
nestedMergedNameSpaces.forEach(nestedNameSpace => {
|
|
159
|
-
namespace.addNamespace(nestedNameSpace);
|
|
160
|
-
if (nestedNameSpace.isExport()) {
|
|
161
|
-
const positions = nestedNameSpace.getOriginFullPositions();
|
|
162
|
-
if (positions.length > 0) {
|
|
163
|
-
namespace.addExportInfo((0, ArkExportBuilder_1.buildExportInfo)(nestedNameSpace, namespace.getDeclaringArkFile(), positions[0]));
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
});
|
|
167
163
|
}
|
|
168
164
|
function genDefaultArkClass(ns, node, sourceFile) {
|
|
169
|
-
let defaultClass = new ArkClass_1.ArkClass();
|
|
170
|
-
(0, ArkClassBuilder_1.
|
|
165
|
+
let defaultClass = new ArkClass_1.ArkClass(ns.getDeclaringFileID(), ns.getNamespaceSigID());
|
|
166
|
+
(0, ArkClassBuilder_1.buildDefaultArkClass)(defaultClass, sourceFile, node);
|
|
171
167
|
ns.setDefaultClass(defaultClass);
|
|
172
168
|
ns.addArkClass(defaultClass);
|
|
173
169
|
}
|
|
174
170
|
exports.genDefaultArkClass = genDefaultArkClass;
|
|
175
|
-
function mergeNameSpaces(arkNamespaces) {
|
|
176
|
-
const namespaceMap = new Map();
|
|
177
|
-
for (let i = 0; i < arkNamespaces.length; i++) {
|
|
178
|
-
const currNamespace = arkNamespaces[i];
|
|
179
|
-
const currName = currNamespace.getName();
|
|
180
|
-
if (namespaceMap.has(currName)) {
|
|
181
|
-
const prevNamespace = namespaceMap.get(currName);
|
|
182
|
-
const nestedPrevNamespaces = prevNamespace.getNamespaces();
|
|
183
|
-
const nestedCurrNamespaces = currNamespace.getNamespaces();
|
|
184
|
-
const nestedMergedNameSpaces = mergeNameSpaces([...nestedPrevNamespaces, ...nestedCurrNamespaces]);
|
|
185
|
-
nestedMergedNameSpaces.forEach(nestedNameSpace => {
|
|
186
|
-
prevNamespace.addNamespace(nestedNameSpace);
|
|
187
|
-
});
|
|
188
|
-
const classes = currNamespace.getClasses();
|
|
189
|
-
classes.forEach(cls => {
|
|
190
|
-
prevNamespace.addArkClass(cls);
|
|
191
|
-
});
|
|
192
|
-
const prevLineColPairs = prevNamespace.getOriginFullPositions();
|
|
193
|
-
const currLineColPairs = currNamespace.getOriginFullPositions();
|
|
194
|
-
prevNamespace.setOriginFullPositions([...prevLineColPairs, ...currLineColPairs]);
|
|
195
|
-
}
|
|
196
|
-
else {
|
|
197
|
-
namespaceMap.set(currName, currNamespace);
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
return [...namespaceMap.values()];
|
|
201
|
-
}
|
|
202
|
-
exports.mergeNameSpaces = mergeNameSpaces;
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import { ClassSignature, FieldSignature, MethodSignature, MethodSubSignature } from '../ArkSignature';
|
|
2
2
|
export declare class ArkSignatureBuilder {
|
|
3
|
+
/**
|
|
4
|
+
* Stub 缓存白名单(组件名域):系统组件(isEtsSystemComponent 动态集合,SDK 构建期灌入全量)+ 组件常量(自定义组件折叠名 / If / Repeat)。
|
|
5
|
+
* 白名单外的名字(new 表达式类名、C++ 类型名等任意来源)不缓存——每次 new,行为不变。
|
|
6
|
+
*/
|
|
7
|
+
private static readonly CACHEABLE_COMPONENT_STUBS;
|
|
8
|
+
/** 白名单内同名 stub 共享实例。 */
|
|
9
|
+
private static readonly componentStubCache;
|
|
3
10
|
static buildMethodSignatureFromClassNameAndMethodName(className: string, methodName: string, staticFlag?: boolean): MethodSignature;
|
|
4
11
|
static buildMethodSignatureFromMethodName(methodName: string, staticFlag?: boolean): MethodSignature;
|
|
5
12
|
static buildMethodSubSignatureFromMethodName(methodName: string, staticFlag?: boolean): MethodSubSignature;
|
|
6
13
|
static buildClassSignatureFromClassName(className: string): ClassSignature;
|
|
14
|
+
/** @internal Registry dispose 同点清理(Scene.dispose/clear 调用)。 */
|
|
15
|
+
static clearComponentStubCache(): void;
|
|
7
16
|
static buildFieldSignatureFromFieldName(fieldName: string, staticFlag?: boolean): FieldSignature;
|
|
8
17
|
}
|
|
9
18
|
//# sourceMappingURL=ArkSignatureBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArkSignatureBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/ArkSignatureBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,cAAc,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"ArkSignatureBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/ArkSignatureBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAItG,qBAAa,mBAAmB;IAC5B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAA2E;IAE5H,wBAAwB;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAqC;WAEjE,8CAA8C,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,eAAe;WAQnI,kCAAkC,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,eAAe;WAKpG,qCAAqC,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,kBAAkB;WAI1G,gCAAgC,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc;IAajF,+DAA+D;WACjD,uBAAuB,IAAI,IAAI;WAI/B,gCAAgC,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,cAAc;CAGjH"}
|