Package dev.architectury.loom.forge
Class AccessTransformerRuleTranslator
java.lang.Object
dev.architectury.loom.forge.AccessTransformerRuleTranslator
把 Forge 的 access transformer 规则翻译到「目标 jar 所在的命名空间」.
为什么必须翻译
legacy Forge 的forge_at.cfg 用的是 SRG 命名空间:类名是 MCP 名
(net.minecraft.util.ObjectIntIdentityMap),成员名是 SRG 名
(field_148749_a)。而 AT 工具(TransformerProcessor)是纯 ASM 重写器,
它按字面量匹配类名与成员名,自身不做任何名称翻译。
本仓库 legacy 链路上 AT 作用的对象是 merged-patched.jar,其内容是 official(notch)名
(fd.class 的字段 a)。把 SRG 形态的规则直接喂给 AT 工具,规则一条都匹配不上:
AT 工具不报错、产物照常生成,表现为「AT 静默失效」,最终在运行期炸成
IllegalAccessError(如 Forge 读 ObjectIntIdentityMap.identityMap)。
因此必须在 AT 执行前把规则翻译到目标 jar 的命名空间。翻译是纯查表,无副作用。
规则形态
每行形如<access> <类名> [成员名 [描述符]],# 之后是注释。翻译只改类名与成员名:
- 类名:按
源命名空间 → 目标命名空间查类映射; - 成员名:在该类的成员表里按名字(方法的签名一并参与)查映射;
- 描述符、修饰符关键字原样保留。
失败即报错
与「静默跳过」相反,本类对无法翻译的规则直接抛异常,并汇总全部失败行。 AT 失效在生产上极难诊断(症状出现在运行期的IllegalAccessError,与构建毫无关联),
因此宁可让构建在翻译阶段失败并列出具体规则,也不允许它带着残缺的 AT 继续产出 jar。-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final classAT 规则翻译失败;failures汇总全部失败行,而不是只报第一条.static interface类继承关系的查询入口.static final record一次翻译所需的全部输入. -
Method Summary
Modifier and TypeMethodDescription翻译全部规则.
-
Method Details
-
translate
翻译全部规则.注释行、空行原样保留(保持产物可读且便于与原始 AT 对照),只有规则行会被改写。
- Parameters:
input- 翻译输入- Returns:
- 翻译后的规则行,与输入行数一一对应
- Throws:
AccessTransformerRuleTranslator.AccessTransformerTranslationException- 存在无法翻译的规则行时
-