From f2a362a752cbb62a7074e8032a7ea530775ce8bf Mon Sep 17 00:00:00 2001 From: NebelNidas Date: Tue, 13 Aug 2024 23:02:03 +0200 Subject: [PATCH] Fix merged pending members pointing to an outdated owner instance --- .../fabricmc/mappingio/tree/MemoryMappingTree.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/fabricmc/mappingio/tree/MemoryMappingTree.java b/src/main/java/net/fabricmc/mappingio/tree/MemoryMappingTree.java index 8624d1d4..65a4d674 100644 --- a/src/main/java/net/fabricmc/mappingio/tree/MemoryMappingTree.java +++ b/src/main/java/net/fabricmc/mappingio/tree/MemoryMappingTree.java @@ -574,9 +574,10 @@ private void addPendingMember(MemberEntry member) { return; } - ClassEntry owner = member.getOwner(); + // Make sure the owner reference is pointing to an in-tree entry + ClassEntry owner = classesBySrcName.get(member.getOwner().getSrcName()); + member.setOwner(owner); boolean isField = member.getKind() == MappedElementKind.FIELD; - // tree-side src String srcName = member.getSrcName(); String dstDesc = member.getSrcDesc(); // pending members' srcDesc is actually their dst desc String srcDesc = null; @@ -1278,6 +1279,11 @@ public final ClassEntry getOwner() { return owner; } + void setOwner(ClassEntry owner) { + assert this.owner.getSrcName().equals(owner.getSrcName()); + this.owner = owner; + } + @Override void setSrcName(String name) { super.setSrcName(name); @@ -1316,7 +1322,7 @@ protected final boolean acceptMember(MappingVisitor visitor, boolean supplyDstDe return acceptElement(visitor, dstDescs); } - protected final ClassEntry owner; + protected ClassEntry owner; protected String srcDesc; private MemberKey key; }