Commit Graph
8 Commits
Author SHA1 Message Date
xrain e24b73ee96 refactor: JsonAnnotations.cj 移至根目录改名 Annotations.cj
- 注解类 SerializerPropertyName/SerializerIgnore 从 simapi_serialization.json
  子包移至根包 simapi_serialization(文件 src/Annotations.cj)
- 打破循环依赖:根锚点不再 public import json 子包,序列化器由用户显式
  import simapi_serialization.json.*
- ReflectionCache / 测试文件补 import simapi_serialization.*
- serialization_test 同步补 import simapi_serialization.json.*
- 16 用例全绿
2026-08-17 14:00:47 +08:00
xrain 990f10f98c refactor: 注解与宏改名——Serializer 前缀统一命名
- @JsonPropertyName → @SerializerPropertyName
- @JsonIgnore → @SerializerIgnore
- @JsonParent → @SerializerParent(宏文件 JsonParentMacro.cj → SerializerParentMacro.cj)
- 同步更新:JsonAnnotations、ReflectionCache、宏内部注解判断、
  测试、方案文档、serialization_test 独立项目
- 16 用例全绿
2026-08-17 13:58:05 +08:00
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