@hadss/turbo-trans-json-plugin 1.0.0-rc.1 → 1.0.0-rc.2
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/dist/core/analyzers/ClassAnalyzer.d.ts +15 -0
- package/dist/core/analyzers/ClassAnalyzer.js +193 -144
- package/dist/core/analyzers/CustomTypeAnalyzer.d.ts +3 -0
- package/dist/core/analyzers/CustomTypeAnalyzer.js +65 -60
- package/dist/core/constants/DecoratorConstants.js +2 -1
- package/dist/core/import-rewrite/services/BuildProfileUpdater.js +1 -1
- package/dist/core/import-rewrite/services/ImportRewriteService.js +1 -1
- package/dist/core/interfaces/index.d.ts +2 -2
- package/dist/core/services/CodeAnalysisService.js +2 -1
- package/dist/core/services/CodeGenerationService/generators/OriginalClassGenerator.d.ts +2 -0
- package/dist/core/services/CodeGenerationService/generators/OriginalClassGenerator.js +22 -15
- package/dist/core/services/CodeGenerationService/generators/SendableClassGenerator.d.ts +22 -0
- package/dist/core/services/CodeGenerationService/generators/SendableClassGenerator.js +194 -129
- package/dist/core/services/CodeGenerationService/generators/SerializerGenerator.js +1 -1
- package/dist/core/services/CodeGenerationService/generators/TempSerializerGenerator.js +2 -1
- package/dist/core/services/CodeGenerationService/shared/ImportManager.d.ts +2 -2
- package/dist/core/template/HandlebarsTemplateEngine.d.ts +2 -0
- package/dist/core/template/HandlebarsTemplateEngine.js +21 -2
- package/dist/core/utils/DeepCopyUtil.js +1 -1
- package/dist/core/utils/SerializationPathUtil.d.ts +1 -1
- package/dist/core/utils/TsMorphUtil.js +2 -1
- package/dist/json-plugin/JSONExecuteController.d.ts +4 -0
- package/dist/json-plugin/JSONExecuteController.js +46 -36
- package/dist/json-plugin/interfaces/impl/TargetContext.js +4 -2
- package/dist/json-plugin/tasks/BaseTask.d.ts +2 -2
- package/dist/json-plugin/tasks/WatchTask.js +2 -1
- package/package.json +1 -1
- package/src/core/Types.ts +90 -90
- package/src/core/analyzers/ClassAnalyzer.ts +335 -230
- package/src/core/analyzers/CustomTypeAnalyzer.ts +145 -73
- package/src/core/constants/DecoratorConstants.ts +7 -6
- package/src/core/constants/PathConstants.ts +7 -7
- package/src/core/constants/StringConstants.ts +95 -95
- package/src/core/handlers/BaseTypeHandler.ts +11 -2
- package/src/core/handlers/CustomClassHandler.ts +4 -4
- package/src/core/handlers/DateHandler.ts +54 -46
- package/src/core/handlers/DecimalHandler.ts +53 -45
- package/src/core/handlers/EnumHandler.ts +2 -1
- package/src/core/handlers/GenericContainerHandler.ts +3 -1
- package/src/core/handlers/TupleHandler.ts +2 -1
- package/src/core/handlers/TypeHandlerRegistry.ts +2 -1
- package/src/core/handlers/UnionTypeHandler.ts +8 -7
- package/src/core/import-rewrite/services/BuildProfileUpdater.ts +6 -4
- package/src/core/import-rewrite/services/ImportRewriteService.ts +1 -1
- package/src/core/import-rewrite/services/ImportTransformService.ts +2 -2
- package/src/core/import-rewrite/types/ImportRewriteTypes.ts +3 -3
- package/src/core/index.ts +4 -4
- package/src/core/interfaces/ITask.ts +6 -5
- package/src/core/interfaces/ITaskContext.ts +9 -9
- package/src/core/interfaces/index.ts +2 -2
- package/src/core/logger/Logger.ts +28 -28
- package/src/core/services/CodeAnalysisService.ts +2 -1
- package/src/core/services/CodeGenerationEngine.ts +42 -42
- package/src/core/services/CodeGenerationService/generators/OriginalClassGenerator.ts +25 -22
- package/src/core/services/CodeGenerationService/generators/SendableClassGenerator.ts +261 -170
- package/src/core/services/CodeGenerationService/generators/SerializerGenerator.ts +1 -1
- package/src/core/services/CodeGenerationService/generators/TempSerializerGenerator.ts +5 -3
- package/src/core/services/CodeGenerationService/shared/ImportManager.ts +8 -8
- package/src/core/template/HandlebarsTemplateEngine.ts +39 -11
- package/src/core/utils/ConfigManager.ts +2 -1
- package/src/core/utils/DeepCopyUtil.ts +1 -1
- package/src/core/utils/GenericTypeSubstitutionUtil.ts +1 -8
- package/src/core/utils/SerializationPathUtil.ts +7 -6
- package/src/core/utils/TsMorphUtil.ts +4 -1
- package/src/index.ts +2 -2
- package/src/json-plugin/JSONExecuteController.ts +51 -38
- package/src/json-plugin/interfaces/IModuleContext.ts +8 -8
- package/src/json-plugin/interfaces/ITargetContext.ts +6 -6
- package/src/json-plugin/interfaces/impl/ModuleContext.ts +10 -10
- package/src/json-plugin/interfaces/impl/TargetContext.ts +63 -58
- package/src/json-plugin/tasks/BaseTask.ts +5 -3
- package/src/json-plugin/tasks/CleanTask.ts +7 -7
- package/src/json-plugin/tasks/WatchTask.ts +20 -18
- package/template/SerializerPerformanceTemplate.hbs +5 -5
- package/template/SerializerStrictTemplate.hbs +1 -1
- package/template/SerializerTemplate.hbs +59 -42
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
* limitations under the License.
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
-
import { HvigorLogger } from '@ohos/hvigor'
|
|
16
|
+
import { HvigorLogger } from '@ohos/hvigor';
|
|
17
17
|
|
|
18
|
-
const PREFIX = '[TSerialization]'
|
|
18
|
+
const PREFIX = '[TSerialization]';
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* TSerialization 日志工具类
|
|
@@ -23,28 +23,28 @@ const PREFIX = '[TSerialization]'
|
|
|
23
23
|
*/
|
|
24
24
|
export class Logger {
|
|
25
25
|
/** 当前模块上下文 */
|
|
26
|
-
private static currentModule: string = ''
|
|
26
|
+
private static currentModule: string = '';
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
29
|
* 设置当前模块上下文
|
|
30
30
|
* @param moduleName 模块名称
|
|
31
31
|
*/
|
|
32
32
|
static setModuleContext(moduleName: string): void {
|
|
33
|
-
this.currentModule = moduleName
|
|
33
|
+
this.currentModule = moduleName;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
/**
|
|
37
37
|
* 清除当前模块上下文
|
|
38
38
|
*/
|
|
39
39
|
static clearModuleContext(): void {
|
|
40
|
-
this.currentModule = ''
|
|
40
|
+
this.currentModule = '';
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
/**
|
|
44
44
|
* 获取当前模块上下文
|
|
45
45
|
*/
|
|
46
46
|
static getCurrentModule(): string {
|
|
47
|
-
return this.currentModule
|
|
47
|
+
return this.currentModule;
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
/**
|
|
@@ -53,8 +53,8 @@ export class Logger {
|
|
|
53
53
|
* @returns 格式化后的消息
|
|
54
54
|
*/
|
|
55
55
|
private static formatMessage(msg: string): string {
|
|
56
|
-
const modulePrefix = this.currentModule ? `[${this.currentModule}]` : ''
|
|
57
|
-
return `${PREFIX}${modulePrefix} ${msg}
|
|
56
|
+
const modulePrefix = this.currentModule ? `[${this.currentModule}]` : '';
|
|
57
|
+
return `${PREFIX}${modulePrefix} ${msg}`;
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
/**
|
|
@@ -63,11 +63,11 @@ export class Logger {
|
|
|
63
63
|
* @param args 额外参数
|
|
64
64
|
*/
|
|
65
65
|
static error(msg: string, ...args: unknown[]): void {
|
|
66
|
-
const formattedMsg = this.formatMessage(msg)
|
|
66
|
+
const formattedMsg = this.formatMessage(msg);
|
|
67
67
|
if (args.length > 0) {
|
|
68
|
-
HvigorLogger.getLogger().error(formattedMsg, ...args)
|
|
68
|
+
HvigorLogger.getLogger().error(formattedMsg, ...args);
|
|
69
69
|
} else {
|
|
70
|
-
HvigorLogger.getLogger().error(formattedMsg)
|
|
70
|
+
HvigorLogger.getLogger().error(formattedMsg);
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
|
|
@@ -77,11 +77,11 @@ export class Logger {
|
|
|
77
77
|
* @param args 额外参数
|
|
78
78
|
*/
|
|
79
79
|
static info(msg: string, ...args: unknown[]): void {
|
|
80
|
-
const formattedMsg = this.formatMessage(msg)
|
|
80
|
+
const formattedMsg = this.formatMessage(msg);
|
|
81
81
|
if (args.length > 0) {
|
|
82
|
-
HvigorLogger.getLogger().info(formattedMsg, ...args)
|
|
82
|
+
HvigorLogger.getLogger().info(formattedMsg, ...args);
|
|
83
83
|
} else {
|
|
84
|
-
HvigorLogger.getLogger().info(formattedMsg)
|
|
84
|
+
HvigorLogger.getLogger().info(formattedMsg);
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
|
|
@@ -91,11 +91,11 @@ export class Logger {
|
|
|
91
91
|
* @param args 额外参数
|
|
92
92
|
*/
|
|
93
93
|
static warn(msg: string, ...args: unknown[]): void {
|
|
94
|
-
const formattedMsg = this.formatMessage(msg)
|
|
94
|
+
const formattedMsg = this.formatMessage(msg);
|
|
95
95
|
if (args.length > 0) {
|
|
96
|
-
HvigorLogger.getLogger().warn(formattedMsg, ...args)
|
|
96
|
+
HvigorLogger.getLogger().warn(formattedMsg, ...args);
|
|
97
97
|
} else {
|
|
98
|
-
HvigorLogger.getLogger().warn(formattedMsg)
|
|
98
|
+
HvigorLogger.getLogger().warn(formattedMsg);
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
|
|
@@ -105,11 +105,11 @@ export class Logger {
|
|
|
105
105
|
* @param args 额外参数
|
|
106
106
|
*/
|
|
107
107
|
static debug(msg: string, ...args: unknown[]): void {
|
|
108
|
-
const formattedMsg = this.formatMessage(msg)
|
|
108
|
+
const formattedMsg = this.formatMessage(msg);
|
|
109
109
|
if (args.length > 0) {
|
|
110
|
-
HvigorLogger.getLogger().debug(formattedMsg, ...args)
|
|
110
|
+
HvigorLogger.getLogger().debug(formattedMsg, ...args);
|
|
111
111
|
} else {
|
|
112
|
-
HvigorLogger.getLogger().debug(formattedMsg)
|
|
112
|
+
HvigorLogger.getLogger().debug(formattedMsg);
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
115
|
|
|
@@ -120,13 +120,13 @@ export class Logger {
|
|
|
120
120
|
* @returns 函数执行结果
|
|
121
121
|
*/
|
|
122
122
|
static withModuleContext<T>(moduleName: string, fn: () => T): T {
|
|
123
|
-
const previousModule = this.currentModule
|
|
123
|
+
const previousModule = this.currentModule;
|
|
124
124
|
try {
|
|
125
|
-
this.setModuleContext(moduleName)
|
|
126
|
-
return fn()
|
|
125
|
+
this.setModuleContext(moduleName);
|
|
126
|
+
return fn();
|
|
127
127
|
} finally {
|
|
128
128
|
// 恢复之前的模块上下文
|
|
129
|
-
this.currentModule = previousModule
|
|
129
|
+
this.currentModule = previousModule;
|
|
130
130
|
}
|
|
131
131
|
}
|
|
132
132
|
|
|
@@ -137,13 +137,13 @@ export class Logger {
|
|
|
137
137
|
* @returns Promise
|
|
138
138
|
*/
|
|
139
139
|
static async withModuleContextAsync<T>(moduleName: string, fn: () => Promise<T>): Promise<T> {
|
|
140
|
-
const previousModule = this.currentModule
|
|
140
|
+
const previousModule = this.currentModule;
|
|
141
141
|
try {
|
|
142
|
-
this.setModuleContext(moduleName)
|
|
143
|
-
return await fn()
|
|
142
|
+
this.setModuleContext(moduleName);
|
|
143
|
+
return await fn();
|
|
144
144
|
} finally {
|
|
145
145
|
// 恢复之前的模块上下文
|
|
146
|
-
this.currentModule = previousModule
|
|
146
|
+
this.currentModule = previousModule;
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
149
|
}
|
|
@@ -19,7 +19,8 @@ import { ClassAnalyzer } from '../analyzers/ClassAnalyzer';
|
|
|
19
19
|
import { TsMorphUtil } from '../utils/TsMorphUtil';
|
|
20
20
|
|
|
21
21
|
export class CodeAnalysisService {
|
|
22
|
-
constructor() {
|
|
22
|
+
constructor() {
|
|
23
|
+
}
|
|
23
24
|
|
|
24
25
|
analyzeFile(filePath: string): ClassAnalysis[] {
|
|
25
26
|
Logger.debug(`开始分析文件: ${filePath}`);
|
|
@@ -21,15 +21,15 @@ import { SendableMergeChecker } from '../analyzers/SendableMergeChecker';
|
|
|
21
21
|
import { CustomTypeAnalyzer } from '../analyzers/CustomTypeAnalyzer';
|
|
22
22
|
|
|
23
23
|
export class CodeGenerationEngine {
|
|
24
|
-
private readonly analysisService: CodeAnalysisService
|
|
25
|
-
private readonly generationService: CodeGenerationService
|
|
24
|
+
private readonly analysisService: CodeAnalysisService;
|
|
25
|
+
private readonly generationService: CodeGenerationService;
|
|
26
26
|
|
|
27
27
|
// 保存分析结果供导入重写使用
|
|
28
|
-
private allClassAnalysis: ClassAnalysis[] = []
|
|
28
|
+
private allClassAnalysis: ClassAnalysis[] = [];
|
|
29
29
|
|
|
30
30
|
constructor() {
|
|
31
|
-
this.analysisService = new CodeAnalysisService()
|
|
32
|
-
this.generationService = new CodeGenerationService()
|
|
31
|
+
this.analysisService = new CodeAnalysisService();
|
|
32
|
+
this.generationService = new CodeGenerationService();
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
/**
|
|
@@ -39,72 +39,72 @@ export class CodeGenerationEngine {
|
|
|
39
39
|
*/
|
|
40
40
|
processFilesUnified(scanFiles: string[], context: ITaskContext): IGenerationResult {
|
|
41
41
|
if (!scanFiles || scanFiles.length === 0) {
|
|
42
|
-
Logger.info('没有待处理的源文件')
|
|
42
|
+
Logger.info('没有待处理的源文件');
|
|
43
43
|
return {
|
|
44
44
|
generatedFiles: [],
|
|
45
45
|
skippedFiles: []
|
|
46
|
-
}
|
|
46
|
+
};
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
const generatedFiles: IGeneratedFile[] = []
|
|
50
|
-
const skippedFiles: string[] = []
|
|
49
|
+
const generatedFiles: IGeneratedFile[] = [];
|
|
50
|
+
const skippedFiles: string[] = [];
|
|
51
51
|
|
|
52
52
|
// 重置分析结果和合并性注册表
|
|
53
|
-
this.allClassAnalysis = []
|
|
54
|
-
SendableMergeabilityRegistry.clear()
|
|
53
|
+
this.allClassAnalysis = [];
|
|
54
|
+
SendableMergeabilityRegistry.clear();
|
|
55
55
|
|
|
56
|
-
Logger.info(`开始处理 ${scanFiles.length} 个源文件`)
|
|
56
|
+
Logger.info(`开始处理 ${scanFiles.length} 个源文件`);
|
|
57
57
|
|
|
58
58
|
// ========== 阶段1:分析所有文件并检查合并性 ==========
|
|
59
|
-
Logger.debug(`[阶段1] 开始分析所有文件`)
|
|
60
|
-
const fileAnalysisMap = new Map<string, ClassAnalysis[]>()
|
|
59
|
+
Logger.debug(`[阶段1] 开始分析所有文件`);
|
|
60
|
+
const fileAnalysisMap = new Map<string, ClassAnalysis[]>();
|
|
61
61
|
|
|
62
62
|
// 步骤1.1:分析所有文件的基本信息
|
|
63
63
|
for (const filePath of scanFiles) {
|
|
64
|
-
const classAnalysis = this.analysisService.analyzeFile(filePath)
|
|
64
|
+
const classAnalysis = this.analysisService.analyzeFile(filePath);
|
|
65
65
|
|
|
66
66
|
if (classAnalysis.length === 0) {
|
|
67
|
-
skippedFiles.push(filePath)
|
|
68
|
-
Logger.debug(`跳过文件(无@Serializable类): ${filePath}`)
|
|
69
|
-
continue
|
|
67
|
+
skippedFiles.push(filePath);
|
|
68
|
+
Logger.debug(`跳过文件(无@Serializable类): ${filePath}`);
|
|
69
|
+
continue;
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
// 保存分析结果
|
|
73
|
-
fileAnalysisMap.set(filePath, classAnalysis)
|
|
74
|
-
this.allClassAnalysis.push(...classAnalysis)
|
|
73
|
+
fileAnalysisMap.set(filePath, classAnalysis);
|
|
74
|
+
this.allClassAnalysis.push(...classAnalysis);
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
Logger.debug(`[阶段1.1] 完成基本分析,共 ${this.allClassAnalysis.length} 个类`)
|
|
77
|
+
Logger.debug(`[阶段1.1] 完成基本分析,共 ${this.allClassAnalysis.length} 个类`);
|
|
78
78
|
|
|
79
79
|
// 步骤1.2:检查所有类的合并性并注册到全局注册表
|
|
80
|
-
Logger.debug(`[阶段1.2] 开始检查合并性并注册`)
|
|
80
|
+
Logger.debug(`[阶段1.2] 开始检查合并性并注册`);
|
|
81
81
|
for (const analysis of this.allClassAnalysis) {
|
|
82
82
|
// 仅对启用 generateSendable 的类检查合并性
|
|
83
83
|
if (analysis.decorators.serializable?.generateSendable) {
|
|
84
|
-
analysis.canMerge = SendableMergeChecker.check(analysis)
|
|
85
|
-
SendableMergeabilityRegistry.register(analysis.className, analysis.canMerge)
|
|
84
|
+
analysis.canMerge = SendableMergeChecker.check(analysis);
|
|
85
|
+
SendableMergeabilityRegistry.register(analysis.className, analysis.canMerge);
|
|
86
86
|
} else {
|
|
87
87
|
// 未启用 generateSendable 的类,注册为不可合并
|
|
88
|
-
SendableMergeabilityRegistry.register(analysis.className, false)
|
|
88
|
+
SendableMergeabilityRegistry.register(analysis.className, false);
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
// ========== 阶段2:生成所有文件 ==========
|
|
93
|
-
Logger.debug(`[阶段2] 开始生成所有文件`)
|
|
93
|
+
Logger.debug(`[阶段2] 开始生成所有文件`);
|
|
94
94
|
|
|
95
95
|
for (const [filePath, classAnalysis] of fileAnalysisMap.entries()) {
|
|
96
|
-
const generatedFile = this.generationService.generateForSourceFile(filePath, classAnalysis, context)
|
|
96
|
+
const generatedFile = this.generationService.generateForSourceFile(filePath, classAnalysis, context);
|
|
97
97
|
if (generatedFile) {
|
|
98
|
-
generatedFiles.push(generatedFile)
|
|
99
|
-
Logger.debug(`成功处理文件: ${filePath}`)
|
|
98
|
+
generatedFiles.push(generatedFile);
|
|
99
|
+
Logger.debug(`成功处理文件: ${filePath}`);
|
|
100
100
|
} else {
|
|
101
|
-
Logger.warn(`文件生成失败: ${filePath}`)
|
|
101
|
+
Logger.warn(`文件生成失败: ${filePath}`);
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
Logger.info(`处理完成,成功 ${generatedFiles.length} 个,跳过 ${skippedFiles.length} 个`)
|
|
105
|
+
Logger.info(`处理完成,成功 ${generatedFiles.length} 个,跳过 ${skippedFiles.length} 个`);
|
|
106
106
|
|
|
107
|
-
return { generatedFiles, skippedFiles }
|
|
107
|
+
return { generatedFiles, skippedFiles };
|
|
108
108
|
}
|
|
109
109
|
|
|
110
110
|
/**
|
|
@@ -113,19 +113,19 @@ export class CodeGenerationEngine {
|
|
|
113
113
|
* @returns 生成的文件信息,如果无需生成则返回null
|
|
114
114
|
*/
|
|
115
115
|
processFileUnified(filePath: string, context: ITaskContext): IGeneratedFile | null {
|
|
116
|
-
const classAnalysis = this.analysisService.analyzeFile(filePath)
|
|
116
|
+
const classAnalysis = this.analysisService.analyzeFile(filePath);
|
|
117
117
|
|
|
118
118
|
// 如果没有@Serializable类,跳过生成
|
|
119
119
|
if (classAnalysis.length === 0) {
|
|
120
|
-
Logger.debug(`源文件 ${filePath} 无@Serializable类,跳过生成`)
|
|
121
|
-
return null
|
|
120
|
+
Logger.debug(`源文件 ${filePath} 无@Serializable类,跳过生成`);
|
|
121
|
+
return null;
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
// 保存分析结果供导入重写使用
|
|
125
|
-
this.allClassAnalysis.push(...classAnalysis)
|
|
125
|
+
this.allClassAnalysis.push(...classAnalysis);
|
|
126
126
|
|
|
127
127
|
// 生成对应文件
|
|
128
|
-
return this.generationService.generateForSourceFile(filePath, classAnalysis, context)
|
|
128
|
+
return this.generationService.generateForSourceFile(filePath, classAnalysis, context);
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
|
|
@@ -165,7 +165,7 @@ export class CodeGenerationEngine {
|
|
|
165
165
|
* 供外部使用(如调试)
|
|
166
166
|
*/
|
|
167
167
|
getAllAnalysisResults(): ClassAnalysis[] {
|
|
168
|
-
return [...this.allClassAnalysis]
|
|
168
|
+
return [...this.allClassAnalysis];
|
|
169
169
|
}
|
|
170
170
|
|
|
171
171
|
/**
|
|
@@ -173,9 +173,9 @@ export class CodeGenerationEngine {
|
|
|
173
173
|
* 注意:这个方法应该在整个流程(包括导入重写)完成后调用
|
|
174
174
|
*/
|
|
175
175
|
cleanup(): void {
|
|
176
|
-
this.analysisService.dispose()
|
|
177
|
-
this.allClassAnalysis = []
|
|
178
|
-
CustomTypeAnalyzer.getInstance().clearCache()
|
|
179
|
-
SendableMergeabilityRegistry.clear()
|
|
176
|
+
this.analysisService.dispose();
|
|
177
|
+
this.allClassAnalysis = [];
|
|
178
|
+
CustomTypeAnalyzer.getInstance().clearCache();
|
|
179
|
+
SendableMergeabilityRegistry.clear();
|
|
180
180
|
}
|
|
181
181
|
}
|
|
@@ -203,28 +203,8 @@ export class OriginalClassGenerator {
|
|
|
203
203
|
// ============= toSendable方法生成 =============
|
|
204
204
|
|
|
205
205
|
private generateConvertToSendableMethodBody(classAnalysis: ClassAnalysis, returnType: string): string {
|
|
206
|
-
const constructorProps
|
|
207
|
-
|
|
208
|
-
classAnalysis.constructorParams.forEach((cp) => {
|
|
209
|
-
// 查找 classAnalysis.properties 中是否存在该属性
|
|
210
|
-
const matchingProperty = classAnalysis.properties.find((p) => p.name === cp.name);
|
|
211
|
-
|
|
212
|
-
// 如果找到匹配的属性,按顺序添加到 constructorProps
|
|
213
|
-
if (matchingProperty) {
|
|
214
|
-
constructorProps.push({
|
|
215
|
-
...matchingProperty,
|
|
216
|
-
type: {
|
|
217
|
-
...matchingProperty.type,
|
|
218
|
-
// 使用 constructorParam 中的 isOptional
|
|
219
|
-
isOptional: cp.isOptional,
|
|
220
|
-
}
|
|
221
|
-
});
|
|
222
|
-
}
|
|
223
|
-
});
|
|
224
|
-
|
|
225
|
-
const assignmentProps = classAnalysis.properties.filter((p) => {
|
|
226
|
-
return classAnalysis.constructorParams.every((cp) => cp.name !== p.name);
|
|
227
|
-
});
|
|
206
|
+
const constructorProps = this.getConstructorProperties(classAnalysis);
|
|
207
|
+
const assignmentProps = this.getAssignmentProperties(classAnalysis);
|
|
228
208
|
const statements: string[] = [];
|
|
229
209
|
|
|
230
210
|
// 生成构造函数调用
|
|
@@ -247,6 +227,29 @@ export class OriginalClassGenerator {
|
|
|
247
227
|
return statements.join('\n');
|
|
248
228
|
}
|
|
249
229
|
|
|
230
|
+
private getConstructorProperties(classAnalysis: ClassAnalysis): PropertyAnalysis[] {
|
|
231
|
+
const constructorProps: PropertyAnalysis[] = [];
|
|
232
|
+
classAnalysis.constructorParams.forEach((cp) => {
|
|
233
|
+
const matchingProperty = classAnalysis.properties.find((p) => p.name === cp.name);
|
|
234
|
+
if (matchingProperty) {
|
|
235
|
+
constructorProps.push({
|
|
236
|
+
...matchingProperty,
|
|
237
|
+
type: {
|
|
238
|
+
...matchingProperty.type,
|
|
239
|
+
isOptional: cp.isOptional,
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
return constructorProps;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
private getAssignmentProperties(classAnalysis: ClassAnalysis): PropertyAnalysis[] {
|
|
248
|
+
return classAnalysis.properties.filter((p) => {
|
|
249
|
+
return classAnalysis.constructorParams.every((cp) => cp.name !== p.name);
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
|
|
250
253
|
private generateConstructorCall(constructorProps: PropertyAnalysis[], returnType: string): string {
|
|
251
254
|
if (constructorProps.length === 0) {
|
|
252
255
|
return `new ${returnType}()`;
|