From 357e86d096f91c2734b78227cff3166332a54636 Mon Sep 17 00:00:00 2001 From: Thog Date: Thu, 1 Sep 2016 18:50:56 +0200 Subject: Converter: fix inheritance issue with matcher system --- .../java/cuchaz/enigma/convert/MemberMatches.java | 29 ++++++++++++++++++---- .../java/cuchaz/enigma/gui/MemberMatchingGui.java | 4 +-- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/main/java/cuchaz/enigma/convert/MemberMatches.java b/src/main/java/cuchaz/enigma/convert/MemberMatches.java index 32850cca..e0888d54 100644 --- a/src/main/java/cuchaz/enigma/convert/MemberMatches.java +++ b/src/main/java/cuchaz/enigma/convert/MemberMatches.java @@ -11,13 +11,13 @@ package cuchaz.enigma.convert; import com.google.common.collect.*; +import cuchaz.enigma.Deobfuscator; +import cuchaz.enigma.mapping.ClassEntry; +import cuchaz.enigma.mapping.Entry; import java.util.Collection; import java.util.Set; -import cuchaz.enigma.mapping.ClassEntry; -import cuchaz.enigma.mapping.Entry; - public class MemberMatches { @@ -123,8 +123,17 @@ public class MemberMatches { public boolean isUnmatchableSourceEntry(T sourceEntry) { return m_unmatchableSourceEntries.containsEntry(sourceEntry.getClassEntry(), sourceEntry); } - public void makeMatch(T sourceEntry, T destEntry) { + makeMatch(sourceEntry, destEntry, null, null); + } + + public void makeMatch(T sourceEntry, T destEntry, Deobfuscator sourceDeobfuscator, Deobfuscator destDeobfuscator) { + if (sourceDeobfuscator != null && destDeobfuscator != null) + { + makeMatch(sourceEntry, destEntry); + sourceEntry = (T) sourceEntry.cloneToNewClass(sourceDeobfuscator.getJarIndex().getTranslationIndex().resolveEntryClass(sourceEntry, true)); + destEntry = (T) destEntry.cloneToNewClass(destDeobfuscator.getJarIndex().getTranslationIndex().resolveEntryClass(destEntry, true)); + } boolean wasRemoved = m_unmatchedSourceEntries.remove(sourceEntry.getClassEntry(), sourceEntry); assert (wasRemoved); wasRemoved = m_unmatchedDestEntries.remove(destEntry.getClassEntry(), destEntry); @@ -137,7 +146,17 @@ public class MemberMatches { return match != null && match.equals(destEntry); } - public void unmakeMatch(T sourceEntry, T destEntry) { + public void unmakeMatch(T sourceEntry, T destEntry, Deobfuscator sourceDeobfuscator, Deobfuscator destDeobfuscator) + { + if (sourceDeobfuscator != null && destDeobfuscator != null) + { + makeMatch(sourceEntry, destEntry); + sourceEntry = (T) sourceEntry.cloneToNewClass( + sourceDeobfuscator.getJarIndex().getTranslationIndex().resolveEntryClass(sourceEntry, true)); + destEntry = (T) destEntry.cloneToNewClass( + destDeobfuscator.getJarIndex().getTranslationIndex().resolveEntryClass(destEntry, true)); + } + boolean wasRemoved = m_matches.remove(sourceEntry) != null; assert (wasRemoved); wasRemoved = m_matchedSourceEntries.remove(sourceEntry.getClassEntry(), sourceEntry); diff --git a/src/main/java/cuchaz/enigma/gui/MemberMatchingGui.java b/src/main/java/cuchaz/enigma/gui/MemberMatchingGui.java index 30902c44..8f7d6e3c 100644 --- a/src/main/java/cuchaz/enigma/gui/MemberMatchingGui.java +++ b/src/main/java/cuchaz/enigma/gui/MemberMatchingGui.java @@ -437,7 +437,7 @@ public class MemberMatchingGui { protected void match() { // update the field matches - m_memberMatches.makeMatch(m_obfSourceEntry, m_obfDestEntry); + m_memberMatches.makeMatch(m_obfSourceEntry, m_obfDestEntry, m_sourceDeobfuscator, m_destDeobfuscator); save(); // update the ui @@ -451,7 +451,7 @@ public class MemberMatchingGui { protected void unmatch() { // update the field matches - m_memberMatches.unmakeMatch(m_obfSourceEntry, m_obfDestEntry); + m_memberMatches.unmakeMatch(m_obfSourceEntry, m_obfDestEntry, m_sourceDeobfuscator, m_destDeobfuscator); save(); // update the ui -- cgit v1.2.3