summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Thog2016-10-31 14:29:28 +0100
committerGravatar Thog2016-10-31 14:29:28 +0100
commit97e8426698d404fd64fa832cbb63524bb6a17afb (patch)
treed3dfceee22292c96c84df9288a37dd6145c19960
parentFix NPE with converter when computeClassMatches (diff)
downloadenigma-97e8426698d404fd64fa832cbb63524bb6a17afb.tar.gz
enigma-97e8426698d404fd64fa832cbb63524bb6a17afb.tar.xz
enigma-97e8426698d404fd64fa832cbb63524bb6a17afb.zip
Fix matcher (blame @asiekierka) + add a dirty hack for inner class inside another inner class
-rw-r--r--src/main/java/cuchaz/enigma/convert/ClassIdentity.java2
-rw-r--r--src/main/java/cuchaz/enigma/convert/MappingsConverter.java2
-rw-r--r--src/main/java/cuchaz/enigma/mapping/ClassMapping.java9
3 files changed, 10 insertions, 3 deletions
diff --git a/src/main/java/cuchaz/enigma/convert/ClassIdentity.java b/src/main/java/cuchaz/enigma/convert/ClassIdentity.java
index 4d1b3caa..73600114 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 {
58 58
59 // classes not in the none package can be passed through 59 // classes not in the none package can be passed through
60 ClassEntry classEntry = new ClassEntry(className); 60 ClassEntry classEntry = new ClassEntry(className);
61 if (!classEntry.getClassName().contains("/")) { 61 if (classEntry.getPackageName() != null) {
62 return className; 62 return className;
63 } 63 }
64 64
diff --git a/src/main/java/cuchaz/enigma/convert/MappingsConverter.java b/src/main/java/cuchaz/enigma/convert/MappingsConverter.java
index 01de9a51..9b06a511 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 {
235 235
236 // non obfuscated classes can be migrated 236 // non obfuscated classes can be migrated
237 ClassEntry classEntry = oldObfType.getClassEntry(); 237 ClassEntry classEntry = oldObfType.getClassEntry();
238 if (!classEntry.getClassName().contains("/")) { 238 if (classEntry.getPackageName() != null) {
239 return true; 239 return true;
240 } 240 }
241 241
diff --git a/src/main/java/cuchaz/enigma/mapping/ClassMapping.java b/src/main/java/cuchaz/enigma/mapping/ClassMapping.java
index 017a5b9f..8f893889 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;
17 17
18import cuchaz.enigma.throwables.MappingConflict; 18import cuchaz.enigma.throwables.MappingConflict;
19 19
20// FIXME: Enigma doesn't support inner classes of inner class????!
20public class ClassMapping implements Comparable<ClassMapping> { 21public class ClassMapping implements Comparable<ClassMapping> {
21 22
22 private String m_obfFullName; 23 private String m_obfFullName;
@@ -24,6 +25,7 @@ public class ClassMapping implements Comparable<ClassMapping> {
24 private String m_deobfName; 25 private String m_deobfName;
25 private String m_previousDeobfName; 26 private String m_previousDeobfName;
26 private Map<String, ClassMapping> m_innerClassesByObfSimple; 27 private Map<String, ClassMapping> m_innerClassesByObfSimple;
28 private Map<String, ClassMapping> m_innerClassesByObfFull;
27 private Map<String, ClassMapping> m_innerClassesByDeobf; 29 private Map<String, ClassMapping> m_innerClassesByDeobf;
28 private Map<String, FieldMapping> m_fieldsByObf; 30 private Map<String, FieldMapping> m_fieldsByObf;
29 private Map<String, FieldMapping> m_fieldsByDeobf; 31 private Map<String, FieldMapping> m_fieldsByDeobf;
@@ -50,6 +52,7 @@ public class ClassMapping implements Comparable<ClassMapping> {
50 m_previousDeobfName = null; 52 m_previousDeobfName = null;
51 m_deobfName = NameValidator.validateClassName(deobfName, false); 53 m_deobfName = NameValidator.validateClassName(deobfName, false);
52 m_innerClassesByObfSimple = Maps.newHashMap(); 54 m_innerClassesByObfSimple = Maps.newHashMap();
55 m_innerClassesByObfFull = Maps.newHashMap();
53 m_innerClassesByDeobf = Maps.newHashMap(); 56 m_innerClassesByDeobf = Maps.newHashMap();
54 m_fieldsByObf = Maps.newHashMap(); 57 m_fieldsByObf = Maps.newHashMap();
55 m_fieldsByDeobf = Maps.newHashMap(); 58 m_fieldsByDeobf = Maps.newHashMap();
@@ -89,9 +92,11 @@ public class ClassMapping implements Comparable<ClassMapping> {
89 } 92 }
90 93
91 public void addInnerClassMapping(ClassMapping classMapping) throws MappingConflict { 94 public void addInnerClassMapping(ClassMapping classMapping) throws MappingConflict {
92 if (this.m_innerClassesByObfSimple.containsKey(classMapping.getObfSimpleName())) { 95 // FIXME: dirty hack, that can get into issues, but it's a temp fix!
96 if (this.m_innerClassesByObfFull.containsKey(classMapping.getObfSimpleName())) {
93 throw new MappingConflict("classes", classMapping.getObfSimpleName(), this.m_innerClassesByObfSimple.get(classMapping.getObfSimpleName()).getObfSimpleName()); 97 throw new MappingConflict("classes", classMapping.getObfSimpleName(), this.m_innerClassesByObfSimple.get(classMapping.getObfSimpleName()).getObfSimpleName());
94 } 98 }
99 m_innerClassesByObfFull.put(classMapping.getObfFullName(), classMapping);
95 m_innerClassesByObfSimple.put(classMapping.getObfSimpleName(), classMapping); 100 m_innerClassesByObfSimple.put(classMapping.getObfSimpleName(), classMapping);
96 101
97 if (classMapping.getDeobfName() != null) { 102 if (classMapping.getDeobfName() != null) {
@@ -104,6 +109,7 @@ public class ClassMapping implements Comparable<ClassMapping> {
104 } 109 }
105 110
106 public void removeInnerClassMapping(ClassMapping classMapping) { 111 public void removeInnerClassMapping(ClassMapping classMapping) {
112 m_innerClassesByObfFull.remove(classMapping.getObfFullName());
107 boolean obfWasRemoved = m_innerClassesByObfSimple.remove(classMapping.getObfSimpleName()) != null; 113 boolean obfWasRemoved = m_innerClassesByObfSimple.remove(classMapping.getObfSimpleName()) != null;
108 assert (obfWasRemoved); 114 assert (obfWasRemoved);
109 if (classMapping.getDeobfName() != null) { 115 if (classMapping.getDeobfName() != null) {
@@ -117,6 +123,7 @@ public class ClassMapping implements Comparable<ClassMapping> {
117 ClassMapping classMapping = m_innerClassesByObfSimple.get(obfInnerClass.getInnermostClassName()); 123 ClassMapping classMapping = m_innerClassesByObfSimple.get(obfInnerClass.getInnermostClassName());
118 if (classMapping == null) { 124 if (classMapping == null) {
119 classMapping = new ClassMapping(obfInnerClass.getName()); 125 classMapping = new ClassMapping(obfInnerClass.getName());
126 m_innerClassesByObfFull.put(classMapping.getObfFullName(), classMapping);
120 boolean wasAdded = m_innerClassesByObfSimple.put(classMapping.getObfSimpleName(), classMapping) == null; 127 boolean wasAdded = m_innerClassesByObfSimple.put(classMapping.getObfSimpleName(), classMapping) == null;
121 assert (wasAdded); 128 assert (wasAdded);
122 this.isDirty = true; 129 this.isDirty = true;