mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-05-07 00:39:00 +08:00
- 实现了对嵌套对象和对象数组元数据捕获的测试 - 添加了标量、对象、数组、整数和布尔类型常量元数据测试 - 验证了空字符串常量原始值和显示元数据的保留功能 - 测试了对象常量可比较键的构建逻辑 - 实现了嵌套映射和对象数组解析功能的测试 - 验证了复杂映射键的保留功能 - 添加了缺失和未知嵌套属性报告的测试 - 实现了对象数组项目问题检测功能的测试 - 验证了深层枚举不匹配的报告功能 - 测试了标量常量不匹配检测功能 - 实现了各种类型常量匹配验证的测试 - 验证了对象常量比较标准化但保持数组顺序的功能 - 添加了对象和数组常量不匹配检测的测试 - 实现了整数和布尔常量标量标准化及不匹配测试 - 验证了数字范围和字符串长度不匹配检测功能 - 测试了独占边界、模式和数组项目计数不匹配检测 - 实现了支持字符串格式验证的测试 - 验证了受支持字符串格式接受功能 - 添加了独占最大值和最大项目违规检测的测试 - 实现了对象属性计数不匹配报告功能的测试 - 验证了唯一对象属性计数约束功能 - 测试了倍数和唯一项目违规检测功能 - 实现了包含匹配计数违规报告的测试 - 验证了结构无效项目时跳过包含匹配计数功能 - 测试了仅值级违规时继续包含匹配计数功能 - 实现了最大包含违规检测的测试 - 验证了满足包含约束接受功能 - 测试了对象包含匹配允许额外声明字段功能 - 实现了大十进制倍数无浮点漂移接受的测试 - 验证了非实际倍数大数字拒绝功能 - 测试了科学记数法数字接受功能 - 实现了Unicode语义应用模式的测试 - 验证了无效数组项目跳过唯一项目检查功能 - 测试了一次通过报告每个唯一项目重复功能 - 实现了避免不同对象唯一项目可比较键冲突的测试 - 验证了标量范围和长度元数据捕获功能 - 测试了独占边界、模式和数组项目计数元数据捕获 - 实现了支持字符串格式元数据捕获的测试
GFramework.SourceGenerators
Core 侧通用源码生成器模块。
Context Get 注入
当类本身是上下文感知类型时,可以通过字段特性生成一个手动调用的注入方法:
[GetService][GetServices][GetSystem][GetSystems][GetModel][GetModels][GetUtility][GetUtilities][GetAll]
上下文感知类满足以下任一条件即可:
- 类上带有
[ContextAware] - 继承
ContextAwareBase - 实现
IContextAware
生成器会生成 __InjectContextBindings_Generated(),需要在合适的生命周期中手动调用。在 Godot 中通常放在 _Ready():
using GFramework.SourceGenerators.Abstractions.Rule;
[ContextAware]
public partial class InventoryPanel
{
[GetModel]
private IInventoryModel _inventory = null!;
[GetServices]
private IReadOnlyList<IInventoryStrategy> _strategies = null!;
public override void _Ready()
{
__InjectContextBindings_Generated();
}
}
[GetAll] 作用于类本身,会自动扫描字段并推断 Model、System、Utility 相关的 GetX 调用;已显式标记字段的优先级更高。
Service 和 Services 绑定不会在 [GetAll] 下自动推断。对于普通引用类型字段,请显式使用 [GetService] 或
[GetServices],避免将非上下文服务字段误判为服务依赖。
[GetAll] 会跳过 const、static 和 readonly 字段。若某个字段本来会被 [GetAll] 推断为
Model、System 或 Utility 绑定,但因为是不可赋值的 static 或 readonly 字段而被跳过,生成器会发出警告提示该字段不会参与生成。
注册分析器
包现在同时包含一个注册可见性分析器,用于检查 Model、System、Utility 的使用点是否能在所属架构中找到静态可见注册。
- 覆盖字段特性注入:
[GetModel]、[GetModels]、[GetSystem]、[GetSystems]、[GetUtility]、[GetUtilities] - 覆盖手写调用:
GetModel<T>()、GetModels<T>()、GetSystem<T>()、GetSystems<T>()、GetUtility<T>()、GetUtilities<T>() - 默认报告
Warning - 当前只分析静态可见的注册路径,例如
OnInitialize()、InstallModules()、InstallModule(new Module())
对于反射、运行时条件分支、外部程序集动态注册等路径,分析器不会强行推断;当无法唯一确定组件所属架构时,也会选择不报,优先降低误报。