@hadss/turbo-trans-json-plugin 1.0.0-rc.0 → 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.
Files changed (88) hide show
  1. package/README.md +1 -1
  2. package/dist/core/Types.d.ts +7 -0
  3. package/dist/core/Types.js +7 -1
  4. package/dist/core/analyzers/ClassAnalyzer.d.ts +15 -0
  5. package/dist/core/analyzers/ClassAnalyzer.js +200 -120
  6. package/dist/core/analyzers/CustomTypeAnalyzer.d.ts +3 -0
  7. package/dist/core/analyzers/CustomTypeAnalyzer.js +65 -60
  8. package/dist/core/constants/DecoratorConstants.d.ts +1 -0
  9. package/dist/core/constants/DecoratorConstants.js +3 -1
  10. package/dist/core/handlers/CustomClassHandler.js +0 -1
  11. package/dist/core/import-rewrite/services/BuildProfileUpdater.js +1 -1
  12. package/dist/core/import-rewrite/services/ImportRewriteService.js +1 -1
  13. package/dist/core/interfaces/index.d.ts +2 -2
  14. package/dist/core/services/CodeAnalysisService.js +2 -1
  15. package/dist/core/services/CodeGenerationService/CodeGenerationService.js +1 -1
  16. package/dist/core/services/CodeGenerationService/generators/MergedSendableClassGenerator.d.ts +0 -1
  17. package/dist/core/services/CodeGenerationService/generators/MergedSendableClassGenerator.js +0 -20
  18. package/dist/core/services/CodeGenerationService/generators/OriginalClassGenerator.d.ts +4 -4
  19. package/dist/core/services/CodeGenerationService/generators/OriginalClassGenerator.js +26 -45
  20. package/dist/core/services/CodeGenerationService/generators/SendableClassGenerator.d.ts +22 -0
  21. package/dist/core/services/CodeGenerationService/generators/SendableClassGenerator.js +194 -129
  22. package/dist/core/services/CodeGenerationService/generators/SerializerGenerator.js +20 -15
  23. package/dist/core/services/CodeGenerationService/generators/TempSerializerGenerator.js +2 -1
  24. package/dist/core/services/CodeGenerationService/shared/ImportManager.d.ts +2 -2
  25. package/dist/core/template/HandlebarsTemplateEngine.d.ts +2 -0
  26. package/dist/core/template/HandlebarsTemplateEngine.js +24 -2
  27. package/dist/core/utils/DeepCopyUtil.js +4 -2
  28. package/dist/core/utils/GenericTypeSubstitutionUtil.d.ts +1 -0
  29. package/dist/core/utils/GenericTypeSubstitutionUtil.js +27 -1
  30. package/dist/core/utils/SerializationPathUtil.d.ts +1 -1
  31. package/dist/core/utils/TsMorphUtil.js +6 -1
  32. package/dist/json-plugin/JSONExecuteController.d.ts +4 -0
  33. package/dist/json-plugin/JSONExecuteController.js +46 -36
  34. package/dist/json-plugin/interfaces/impl/TargetContext.js +4 -2
  35. package/dist/json-plugin/tasks/BaseTask.d.ts +2 -2
  36. package/dist/json-plugin/tasks/WatchTask.js +2 -1
  37. package/package.json +1 -1
  38. package/src/core/Types.ts +97 -89
  39. package/src/core/analyzers/ClassAnalyzer.ts +358 -197
  40. package/src/core/analyzers/CustomTypeAnalyzer.ts +145 -74
  41. package/src/core/constants/DecoratorConstants.ts +7 -5
  42. package/src/core/constants/PathConstants.ts +7 -7
  43. package/src/core/constants/StringConstants.ts +95 -97
  44. package/src/core/handlers/BaseTypeHandler.ts +11 -2
  45. package/src/core/handlers/CustomClassHandler.ts +4 -7
  46. package/src/core/handlers/DateHandler.ts +54 -46
  47. package/src/core/handlers/DecimalHandler.ts +53 -45
  48. package/src/core/handlers/EnumHandler.ts +2 -1
  49. package/src/core/handlers/GenericContainerHandler.ts +3 -1
  50. package/src/core/handlers/TupleHandler.ts +2 -1
  51. package/src/core/handlers/TypeHandlerRegistry.ts +3 -2
  52. package/src/core/handlers/UnionTypeHandler.ts +8 -7
  53. package/src/core/import-rewrite/services/BuildProfileUpdater.ts +7 -5
  54. package/src/core/import-rewrite/services/ImportRewriteService.ts +1 -3
  55. package/src/core/import-rewrite/services/ImportTransformService.ts +2 -2
  56. package/src/core/import-rewrite/types/ImportRewriteTypes.ts +3 -3
  57. package/src/core/index.ts +4 -4
  58. package/src/core/interfaces/ITask.ts +6 -5
  59. package/src/core/interfaces/ITaskContext.ts +9 -9
  60. package/src/core/interfaces/index.ts +2 -2
  61. package/src/core/logger/Logger.ts +28 -28
  62. package/src/core/services/CodeAnalysisService.ts +3 -2
  63. package/src/core/services/CodeGenerationEngine.ts +42 -42
  64. package/src/core/services/CodeGenerationService/CodeGenerationService.ts +1 -2
  65. package/src/core/services/CodeGenerationService/generators/MergedSendableClassGenerator.ts +0 -29
  66. package/src/core/services/CodeGenerationService/generators/OriginalClassGenerator.ts +31 -64
  67. package/src/core/services/CodeGenerationService/generators/SendableClassGenerator.ts +261 -170
  68. package/src/core/services/CodeGenerationService/generators/SerializerGenerator.ts +26 -19
  69. package/src/core/services/CodeGenerationService/generators/TempSerializerGenerator.ts +5 -3
  70. package/src/core/services/CodeGenerationService/shared/ImportManager.ts +8 -8
  71. package/src/core/template/HandlebarsTemplateEngine.ts +43 -10
  72. package/src/core/utils/ConfigManager.ts +2 -1
  73. package/src/core/utils/DeepCopyUtil.ts +4 -2
  74. package/src/core/utils/GenericTypeSubstitutionUtil.ts +45 -2
  75. package/src/core/utils/SerializationPathUtil.ts +7 -6
  76. package/src/core/utils/TsMorphUtil.ts +9 -2
  77. package/src/index.ts +2 -2
  78. package/src/json-plugin/JSONExecuteController.ts +51 -38
  79. package/src/json-plugin/interfaces/IModuleContext.ts +8 -8
  80. package/src/json-plugin/interfaces/ITargetContext.ts +6 -6
  81. package/src/json-plugin/interfaces/impl/ModuleContext.ts +10 -10
  82. package/src/json-plugin/interfaces/impl/TargetContext.ts +63 -58
  83. package/src/json-plugin/tasks/BaseTask.ts +5 -4
  84. package/src/json-plugin/tasks/CleanTask.ts +7 -7
  85. package/src/json-plugin/tasks/WatchTask.ts +20 -18
  86. package/template/SerializerPerformanceTemplate.hbs +14 -4
  87. package/template/SerializerStrictTemplate.hbs +9 -1
  88. package/template/SerializerTemplate.hbs +71 -46
@@ -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
  }
@@ -13,13 +13,14 @@
13
13
  * limitations under the License.
14
14
  */
15
15
 
16
- import { ClassDeclaration, ModuleKind, Project, ScriptTarget } from 'ts-morph';
16
+ import { ClassDeclaration } from 'ts-morph';
17
17
  import { ClassAnalysis, DecoratorConstants, Logger } from '..';
18
18
  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
  }
@@ -13,7 +13,6 @@
13
13
  * limitations under the License.
14
14
  */
15
15
 
16
- import { IndentationText, Project, QuoteKind } from 'ts-morph';
17
16
  import { OriginalClassGenerator } from './generators/OriginalClassGenerator';
18
17
  import { SendableClassGenerator } from './generators/SendableClassGenerator';
19
18
  import { SerializerGenerator } from './generators/SerializerGenerator';
@@ -69,7 +68,7 @@ export class CodeGenerationService {
69
68
  }
70
69
 
71
70
  // 生成原始类结构
72
- this.originalClassGenerator.generate(outputSourceFile, originalSourceFile, results, context);
71
+ this.originalClassGenerator.generate(outputSourceFile, originalSourceFile, results);
73
72
 
74
73
  for (const content of serializableGeneratorContext) {
75
74
  this.serializerGenerator.generateRegistration(outputSourceFile, content);
@@ -89,22 +89,6 @@ export class MergedSendableClassGenerator {
89
89
  classDecl.addImplements(['ITSerializable', 'lang.ISendable']);
90
90
  }
91
91
 
92
- private generateGetTypeMethod(classDecl: ClassDeclaration, classAnalysis: ClassAnalysis): void {
93
- // 检查是否已存在该方法
94
- if (classDecl.getMethod('getType')) {
95
- Logger.warn(`类 ${classAnalysis.className} 已存在getType方法,跳过生成`);
96
- return;
97
- }
98
-
99
- const methodBody = `return ${classAnalysis.className};`;
100
-
101
- classDecl.addMethod({
102
- name: 'getType',
103
- returnType: 'Function',
104
- statements: [methodBody]
105
- });
106
- }
107
-
108
92
  /**
109
93
  * 生成toSendable方法
110
94
  * 对于合并版Sendable类,直接返回自身(因为类本身已经是Sendable)
@@ -162,19 +146,6 @@ export class MergedSendableClassGenerator {
162
146
 
163
147
  const methodBody = 'return TJSON.toString(this, typeKey)';
164
148
 
165
- // 获取类的泛型参数
166
- const genericParameters = classAnalysis.generics.parameters;
167
-
168
- // 构建完整的类型名(包含泛型参数)
169
- let fullTypeName: string;
170
- if (genericParameters.length > 0) {
171
- // 对于泛型类:ClassName<T, U>
172
- fullTypeName = `${classDecl.getNameOrThrow()}<${genericParameters.join(', ')}>`;
173
- } else {
174
- // 对于非泛型类:ClassName
175
- fullTypeName = classDecl.getNameOrThrow();
176
- }
177
-
178
149
  classDecl.addMethod({
179
150
  name: 'toJson',
180
151
  returnType: 'string',
@@ -13,8 +13,8 @@
13
13
  * limitations under the License.
14
14
  */
15
15
 
16
- import { ClassDeclaration, Project, SourceFile } from 'ts-morph';
17
- import { ClassAnalysis, PropertyAnalysis, Logger, PropertyKind, ITaskContext } from '../../..';
16
+ import { ClassDeclaration, SourceFile } from 'ts-morph';
17
+ import { ClassAnalysis, PropertyAnalysis, Logger, PropertyKind } from '../../..';
18
18
  import { ImportManager } from '../shared/ImportManager';
19
19
  import SerializationPathUtil from '../../../utils/SerializationPathUtil';
20
20
  import { ConversionDirection } from '../../../handlers/ITypeHandler';
@@ -32,7 +32,7 @@ export class OriginalClassGenerator {
32
32
  this.mergedSendableGenerator = new MergedSendableClassGenerator();
33
33
  }
34
34
 
35
- generate(outputSourceFile: SourceFile, originalSourceFile: SourceFile, results: ClassAnalysis[], context: ITaskContext): void {
35
+ generate(outputSourceFile: SourceFile, originalSourceFile: SourceFile, results: ClassAnalysis[]): void {
36
36
  this.registerImports();
37
37
 
38
38
  // 1. 获取原始源文件的完整内容并移除原始import语句
@@ -53,7 +53,7 @@ export class OriginalClassGenerator {
53
53
  this.mergedSendableGenerator.generate(targetClass, result);
54
54
  } else {
55
55
  this.addITSerializableInterface(targetClass);
56
- this.addStaticSerialName(targetClass, result, context);
56
+ this.addStaticSerialName(targetClass, result);
57
57
  this.generateConvertToSendableMethod(targetClass, result);
58
58
  this.generateToJsonMethod(targetClass, result);
59
59
  }
@@ -129,14 +129,7 @@ export class OriginalClassGenerator {
129
129
  Logger.debug(`为类 ${classDecl.getName()} 添加ITSerializable接口实现`);
130
130
  }
131
131
 
132
- private generateSerialNameConstant(result: ClassAnalysis, context: ITaskContext): string {
133
- const relativePath = context.calculateSourceRootToModuleRoot(result.sourceFilePath);
134
- const serialName = SerializationPathUtil.join(context.getPackageName(), relativePath, result.className + '.class')
135
- .replaceAll(SerializationPathUtil.sep, '/');
136
- return result.decorators.serialName || serialName;
137
- }
138
-
139
- private addStaticSerialName(classDecl: ClassDeclaration, result: ClassAnalysis, context: ITaskContext): void {
132
+ private addStaticSerialName(classDecl: ClassDeclaration, result: ClassAnalysis): void {
140
133
  // 添加静态属性
141
134
  classDecl.addProperty({
142
135
  name: 'SERIAL_NAME',
@@ -148,22 +141,6 @@ export class OriginalClassGenerator {
148
141
  Logger.debug(`为类 ${classDecl.getName()} 添加静态属性 serialName`);
149
142
  }
150
143
 
151
- private generateGetTypeMethod(classDecl: ClassDeclaration, result: ClassAnalysis): void {
152
- // 检查是否已存在该方法
153
- if (classDecl.getMethod('getType')) {
154
- Logger.warn(`类 ${result.className} 已存在getType方法,跳过生成`);
155
- return;
156
- }
157
-
158
- const methodBody = `return ${result.className};`;
159
-
160
- classDecl.addMethod({
161
- name: 'getType',
162
- returnType: 'Function',
163
- statements: [methodBody]
164
- });
165
- }
166
-
167
144
  private generateConvertToSendableMethod(classDecl: ClassDeclaration, result: ClassAnalysis): void {
168
145
  // 检查是否已存在该方法
169
146
  if (classDecl.getMethod('toSendable')) {
@@ -205,19 +182,6 @@ export class OriginalClassGenerator {
205
182
 
206
183
  const methodBody = 'return TJSON.toString(this, typeKey)';
207
184
 
208
- // 获取类的泛型参数
209
- const genericParameters = result.generics.parameters;
210
-
211
- // 构建完整的类型名(包含泛型参数)
212
- let fullTypeName: string;
213
- if (genericParameters.length > 0) {
214
- // 对于泛型类:ClassName<T, U>
215
- fullTypeName = `${classDecl.getNameOrThrow()}<${genericParameters.join(', ')}>`;
216
- } else {
217
- // 对于非泛型类:ClassName
218
- fullTypeName = classDecl.getNameOrThrow();
219
- }
220
-
221
185
  classDecl.addMethod({
222
186
  name: 'toJson',
223
187
  returnType: 'string',
@@ -233,34 +197,14 @@ export class OriginalClassGenerator {
233
197
  private registerImports(): void {
234
198
  this.importManager.registerJsonImports(['ITSerializable', 'TJSON']);
235
199
 
236
- this.importManager.registerCoreImports(['TypeKey', 'Serializable']);
200
+ this.importManager.registerCoreImports(['TypeKey', 'Serializable', 'Encoder', 'SerialDescriptor']);
237
201
  }
238
202
 
239
203
  // ============= toSendable方法生成 =============
240
204
 
241
205
  private generateConvertToSendableMethodBody(classAnalysis: ClassAnalysis, returnType: string): string {
242
- const constructorProps: PropertyAnalysis[] = [];
243
- // 遍历 constructorParams 按顺序处理
244
- classAnalysis.constructorParams.forEach((cp) => {
245
- // 查找 classAnalysis.properties 中是否存在该属性
246
- const matchingProperty = classAnalysis.properties.find((p) => p.name === cp.name);
247
-
248
- // 如果找到匹配的属性,按顺序添加到 constructorProps
249
- if (matchingProperty) {
250
- constructorProps.push({
251
- ...matchingProperty,
252
- type: {
253
- ...matchingProperty.type,
254
- // 使用 constructorParam 中的 isOptional
255
- isOptional: cp.isOptional,
256
- }
257
- });
258
- }
259
- });
260
-
261
- const assignmentProps = classAnalysis.properties.filter((p) => {
262
- return classAnalysis.constructorParams.every((cp) => cp.name !== p.name);
263
- });
206
+ const constructorProps = this.getConstructorProperties(classAnalysis);
207
+ const assignmentProps = this.getAssignmentProperties(classAnalysis);
264
208
  const statements: string[] = [];
265
209
 
266
210
  // 生成构造函数调用
@@ -283,6 +227,29 @@ export class OriginalClassGenerator {
283
227
  return statements.join('\n');
284
228
  }
285
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
+
286
253
  private generateConstructorCall(constructorProps: PropertyAnalysis[], returnType: string): string {
287
254
  if (constructorProps.length === 0) {
288
255
  return `new ${returnType}()`;