From 60c486959c69cd7f85ffe9506beb537cd30e4746 Mon Sep 17 00:00:00 2001 From: Thog Date: Sat, 13 Aug 2016 18:57:18 +0200 Subject: Avoid using the override fix in others case than remapping (fix unit tests failures) --- src/main/java/cuchaz/enigma/analysis/TranslationIndex.java | 14 +++++++++++--- src/main/java/cuchaz/enigma/mapping/Translator.java | 3 +-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/java/cuchaz/enigma/analysis/TranslationIndex.java b/src/main/java/cuchaz/enigma/analysis/TranslationIndex.java index 94af0311..14bc6044 100644 --- a/src/main/java/cuchaz/enigma/analysis/TranslationIndex.java +++ b/src/main/java/cuchaz/enigma/analysis/TranslationIndex.java @@ -186,11 +186,15 @@ public class TranslationIndex { } public ClassEntry resolveEntryClass(Entry entry) { + return resolveEntryClass(entry, false); + } + + public ClassEntry resolveEntryClass(Entry entry, boolean checkSuperclassBeforeChild) { if (entry instanceof ClassEntry) { return (ClassEntry) entry; } - ClassEntry superclassEntry = resolveSuperclass(entry); + ClassEntry superclassEntry = resolveSuperclass(entry, checkSuperclassBeforeChild); if (superclassEntry != null) { return superclassEntry; } @@ -204,6 +208,10 @@ public class TranslationIndex { } public ClassEntry resolveSuperclass(Entry entry) { + return resolveSuperclass(entry, false); + } + + public ClassEntry resolveSuperclass(Entry entry, boolean checkSuperclassBeforeChild) { // this entry could refer to a method on a class where the method is not actually implemented // travel up the inheritance tree to find the closest implementation @@ -212,14 +220,14 @@ public class TranslationIndex { // Scan superclass before main class to avoid missing override issues ClassEntry superclassEntry = null; - while (superclassEntry == null || !entryExists(entry)) { + while ((checkSuperclassBeforeChild && superclassEntry == null) || !entryExists(entry)) { // is there a parent class? superclassEntry = getSuperclass(entry.getClassEntry()); if (superclassEntry == null) { // this is probably a method from a class in a library or it's in the default class // we can't trace the implementation up any higher unless we index the library - return entryExists(originalEntry) ? originalEntry.getClassEntry() : null; + return checkSuperclassBeforeChild && entryExists(originalEntry) ? originalEntry.getClassEntry() : null; } // move up to the parent class diff --git a/src/main/java/cuchaz/enigma/mapping/Translator.java b/src/main/java/cuchaz/enigma/mapping/Translator.java index eb6a1892..de48c9a1 100644 --- a/src/main/java/cuchaz/enigma/mapping/Translator.java +++ b/src/main/java/cuchaz/enigma/mapping/Translator.java @@ -157,9 +157,8 @@ public class Translator { } public String translate(MethodEntry in) { - // resolve the class entry - ClassEntry resolvedClassEntry = this.index.resolveEntryClass(in); + ClassEntry resolvedClassEntry = this.index.resolveEntryClass(in, true); if (resolvedClassEntry != null) { // look for class -- cgit v1.2.3