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 ++++++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) (limited to 'src/main/java/cuchaz/enigma/convert/MemberMatches.java') diff --git a/src/main/java/cuchaz/enigma/convert/MemberMatches.java b/src/main/java/cuchaz/enigma/convert/MemberMatches.java index 32850cc..e0888d5 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); -- cgit v1.2.3