From 97e8426698d404fd64fa832cbb63524bb6a17afb Mon Sep 17 00:00:00 2001 From: Thog Date: Mon, 31 Oct 2016 14:29:28 +0100 Subject: Fix matcher (blame @asiekierka) + add a dirty hack for inner class inside another inner class --- src/main/java/cuchaz/enigma/convert/ClassIdentity.java | 2 +- src/main/java/cuchaz/enigma/convert/MappingsConverter.java | 2 +- src/main/java/cuchaz/enigma/mapping/ClassMapping.java | 9 ++++++++- 3 files changed, 10 insertions(+), 3 deletions(-) (limited to 'src/main') diff --git a/src/main/java/cuchaz/enigma/convert/ClassIdentity.java b/src/main/java/cuchaz/enigma/convert/ClassIdentity.java index 4d1b3ca..7360011 100644 --- a/src/main/java/cuchaz/enigma/convert/ClassIdentity.java +++ b/src/main/java/cuchaz/enigma/convert/ClassIdentity.java @@ -58,7 +58,7 @@ public class ClassIdentity { // classes not in the none package can be passed through ClassEntry classEntry = new ClassEntry(className); - if (!classEntry.getClassName().contains("/")) { + if (classEntry.getPackageName() != null) { return className; } diff --git a/src/main/java/cuchaz/enigma/convert/MappingsConverter.java b/src/main/java/cuchaz/enigma/convert/MappingsConverter.java index 01de9a5..9b06a51 100644 --- a/src/main/java/cuchaz/enigma/convert/MappingsConverter.java +++ b/src/main/java/cuchaz/enigma/convert/MappingsConverter.java @@ -235,7 +235,7 @@ public class MappingsConverter { // non obfuscated classes can be migrated ClassEntry classEntry = oldObfType.getClassEntry(); - if (!classEntry.getClassName().contains("/")) { + if (classEntry.getPackageName() != null) { return true; } diff --git a/src/main/java/cuchaz/enigma/mapping/ClassMapping.java b/src/main/java/cuchaz/enigma/mapping/ClassMapping.java index 017a5b9..8f89388 100644 --- a/src/main/java/cuchaz/enigma/mapping/ClassMapping.java +++ b/src/main/java/cuchaz/enigma/mapping/ClassMapping.java @@ -17,6 +17,7 @@ import java.util.Map; import cuchaz.enigma.throwables.MappingConflict; +// FIXME: Enigma doesn't support inner classes of inner class????! public class ClassMapping implements Comparable { private String m_obfFullName; @@ -24,6 +25,7 @@ public class ClassMapping implements Comparable { private String m_deobfName; private String m_previousDeobfName; private Map m_innerClassesByObfSimple; + private Map m_innerClassesByObfFull; private Map m_innerClassesByDeobf; private Map m_fieldsByObf; private Map m_fieldsByDeobf; @@ -50,6 +52,7 @@ public class ClassMapping implements Comparable { m_previousDeobfName = null; m_deobfName = NameValidator.validateClassName(deobfName, false); m_innerClassesByObfSimple = Maps.newHashMap(); + m_innerClassesByObfFull = Maps.newHashMap(); m_innerClassesByDeobf = Maps.newHashMap(); m_fieldsByObf = Maps.newHashMap(); m_fieldsByDeobf = Maps.newHashMap(); @@ -89,9 +92,11 @@ public class ClassMapping implements Comparable { } public void addInnerClassMapping(ClassMapping classMapping) throws MappingConflict { - if (this.m_innerClassesByObfSimple.containsKey(classMapping.getObfSimpleName())) { + // FIXME: dirty hack, that can get into issues, but it's a temp fix! + if (this.m_innerClassesByObfFull.containsKey(classMapping.getObfSimpleName())) { throw new MappingConflict("classes", classMapping.getObfSimpleName(), this.m_innerClassesByObfSimple.get(classMapping.getObfSimpleName()).getObfSimpleName()); } + m_innerClassesByObfFull.put(classMapping.getObfFullName(), classMapping); m_innerClassesByObfSimple.put(classMapping.getObfSimpleName(), classMapping); if (classMapping.getDeobfName() != null) { @@ -104,6 +109,7 @@ public class ClassMapping implements Comparable { } public void removeInnerClassMapping(ClassMapping classMapping) { + m_innerClassesByObfFull.remove(classMapping.getObfFullName()); boolean obfWasRemoved = m_innerClassesByObfSimple.remove(classMapping.getObfSimpleName()) != null; assert (obfWasRemoved); if (classMapping.getDeobfName() != null) { @@ -117,6 +123,7 @@ public class ClassMapping implements Comparable { ClassMapping classMapping = m_innerClassesByObfSimple.get(obfInnerClass.getInnermostClassName()); if (classMapping == null) { classMapping = new ClassMapping(obfInnerClass.getName()); + m_innerClassesByObfFull.put(classMapping.getObfFullName(), classMapping); boolean wasAdded = m_innerClassesByObfSimple.put(classMapping.getObfSimpleName(), classMapping) == null; assert (wasAdded); this.isDirty = true; -- cgit v1.2.3