Class JarClassHierarchy

java.lang.Object
dev.architectury.loom.forge.JarClassHierarchy
All Implemented Interfaces:
AccessTransformerRuleTranslator.ClassHierarchy

public final class JarClassHierarchy extends Object implements AccessTransformerRuleTranslator.ClassHierarchy
从 jar 里读出类继承关系,供 AccessTransformerRuleTranslator 做继承回退.

AT 允许把规则写在子类上、而成员声明在父类;翻译时必须沿继承链找到声明类。 映射表只按「声明类」收录成员,这个索引补的正是映射表没有的那部分信息。

为什么从 jar 读而不是从映射读

tiny 映射不含父类关系,只含类与成员的名字对应。继承关系必须以字节码为准, 因此这里直接读待处理 jar 的 class 头部(只取 this/super/interfaces,不碰指令体)。

名称一律保持 jar 里的原始形态(notch 名、斜杠分隔),与映射树的 official 列一致, 命名空间换算交给翻译器,本类不做任何名称翻译。

  • Method Details

    • read

      public static JarClassHierarchy read(Iterable<Path> jars) throws IOException
      读取若干 jar 的继承关系.

      多个 jar 合并成一张表:MC 的 client/server/merged jar 与 forge jar 会分头提供一部分类, 继承链可能跨越它们。同名类以先出现者为准(与「同一份产物只该有一个定义」一致)。

      Parameters:
      jars - 待扫描的 jar;不存在或无法打开的直接跳过
      Returns:
      继承关系索引
      Throws:
      IOException - 读 jar 失败(文件存在但内容损坏)
    • parentsOf

      public List<String> parentsOf(String className)
      Description copied from interface: AccessTransformerRuleTranslator.ClassHierarchy
      Returns 该类的直接父类型(父类与接口). 名称用斜杠形式(net/minecraft/...); 无父类型时返回空列表。
      Specified by:
      parentsOf in interface AccessTransformerRuleTranslator.ClassHierarchy
      Returns:
      该类的直接父类型(父类与接口)