xrain
|
00fea9703c
|
docs: 宏改名为 @JsonParent——简短且与 @JsonPropertyName/@JsonIgnore 前缀风格统一
|
2026-08-17 13:32:57 +08:00 |
|
xrain
|
24c5b1e1ba
|
docs: 补充多层继承支持说明(已实测三层继承 + 中间层无宏跳过)
- §3.3 多层继承:库沿 superClass 链逐层调用每层 exportJsonFields,
每层各导各的,中间层无宏自动跳过继续向上
- 实测:三层标宏 → 爷父字段均导出;中间层无宏 → 跳过仍导出祖父字段
- 与 soulsoft super 调用链的区别:本方案靠库侧遍历,宏生成更简单
- 测试计划补充中间层无宏用例
|
2026-08-17 13:16:49 +08:00 |
|
xrain
|
fe1daec4f9
|
docs: @JsonExportFields 支持自动补 open(已实测)——非 open 类标注时宏自动加 open 修饰符
- 实测验证:宏展开的 open 在语义检查前生效,子类可正常继承
- 提供两种模式:默认自动补 open(推荐);requireOpen 严格模式非 open 报错
- 非 class 声明标注 → ASTException 编译期报错(已实测,错误定位到标注处)
- 测试计划更新为对应三条用例
|
2026-08-17 13:13:59 +08:00 |
|
xrain
|
7faea12a1e
|
docs: 宏增加 open 校验——@JsonExportFields 仅允许标注 open class,否则编译期报错
- 遍历 ClassDecl.modifiers 检查 TokenKind.OPEN(参考 soulsoft Extensions.cj isOpen)
- 非 open class / 非 class 声明 → throw MacroException 编译期报错
- 测试计划补充两条校验用例
|
2026-08-17 13:11:19 +08:00 |
|
xrain
|
a7ed2902f5
|
docs: 补充 soulsoft 参考实现分析与路线对比
- §1.5 读源码总结 soulsoft_serialization 的做法:宏给每个类生成 4 个序列化方法
+ superType 参数,继承靠编译期 super/静态方法调用链,零反射读字段
- §2 方案总览明确路线 A(入口不变+父类宏)为主方案
- §8 新增路线 A/B 取舍对比表,明确推荐路线 A 的理由:
保留 Serialize(obj)/Deserialize<T>(json) 免标注 API,只借 soulsoft
「宏生成静态类型字段代码」技巧
|
2026-08-17 12:48:03 +08:00 |
|
xrain
|
85b17ed8ab
|
docs: 父类字段序列化方案(宏 @JsonExportFields + 静态导出方法)
调研结论:Cangjie 反射对字段/prop/方法的声明类严格校验(declaringClass != instance 类型)
堵死运行时方案;宏无法编译期查询父类字段;编译器禁止子类遮蔽父类字段。
唯一可行通路(已实测):宏标注父类生成 exportJsonFields/importJsonFields 静态方法,
序列化库遍历 superClass 链通过静态方法反射调用(静态方法无实例声明类检查,
子类实例可直接作父类类型参数)。
|
2026-08-17 12:27:38 +08:00 |
|