From 9c1e37241a5fac55cc51de1daab14371a8a81cf7 Mon Sep 17 00:00:00 2001 From: Thog Date: Sun, 14 Aug 2016 18:00:20 +0200 Subject: Fix remapping of methods in children class with interfaces --- src/main/java/cuchaz/enigma/analysis/TranslationIndex.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/cuchaz/enigma/analysis/TranslationIndex.java b/src/main/java/cuchaz/enigma/analysis/TranslationIndex.java index 9f751083..921fff44 100644 --- a/src/main/java/cuchaz/enigma/analysis/TranslationIndex.java +++ b/src/main/java/cuchaz/enigma/analysis/TranslationIndex.java @@ -94,6 +94,7 @@ public class TranslationIndex { for (String interfaceClassName : c.getClassFile().getInterfaces()) { ClassEntry interfaceClassEntry = new ClassEntry(Descriptor.toJvmName(interfaceClassName)); if (!isJre(interfaceClassEntry)) { + this.interfaces.put(classEntry, interfaceClassEntry); } } @@ -218,12 +219,18 @@ public class TranslationIndex { // Get all possible superclasses and reverse the list List superclasses = Lists.reverse(getAncestry(originalEntry.getClassEntry())); + boolean existInEntry = false; for (ClassEntry classEntry : superclasses) { entry = entry.cloneToNewClass(classEntry); existInEntry = entryExists(entry); + + // Check for possible entry in interfaces of superclasses + ClassEntry interfaceEntry = resolveInterface(entry); + if (interfaceEntry != null) + return interfaceEntry; if (existInEntry) break; } @@ -258,6 +265,7 @@ public class TranslationIndex { public ClassEntry resolveInterface(Entry entry) { // the interfaces for any class is a forest // so let's look at all the trees + for (ClassEntry interfaceEntry : this.interfaces.get(entry.getClassEntry())) { ClassEntry resolvedClassEntry = resolveSuperclass(entry.cloneToNewClass(interfaceEntry)); if (resolvedClassEntry != null) { -- cgit v1.2.3