summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/mapping/Translator.java
diff options
context:
space:
mode:
authorGravatar jeff2015-03-16 12:29:17 -0400
committerGravatar jeff2015-03-16 12:29:17 -0400
commitc133e05b786ff5357931842581571c046f958c74 (patch)
tree9fc998ac7b85828f3b57f04600244c6a79b2b2e8 /src/cuchaz/enigma/mapping/Translator.java
parentAdded tag v0.9 beta for changeset 856528c00d1c (diff)
downloadenigma-fork-c133e05b786ff5357931842581571c046f958c74.tar.gz
enigma-fork-c133e05b786ff5357931842581571c046f958c74.tar.xz
enigma-fork-c133e05b786ff5357931842581571c046f958c74.zip
fix a zillion issues with inner classes
Diffstat (limited to 'src/cuchaz/enigma/mapping/Translator.java')
-rw-r--r--src/cuchaz/enigma/mapping/Translator.java73
1 files changed, 19 insertions, 54 deletions
diff --git a/src/cuchaz/enigma/mapping/Translator.java b/src/cuchaz/enigma/mapping/Translator.java
index d3b6e77..fb187b9 100644
--- a/src/cuchaz/enigma/mapping/Translator.java
+++ b/src/cuchaz/enigma/mapping/Translator.java
@@ -24,6 +24,13 @@ public class Translator {
24 private Map<String,ClassMapping> m_classes; 24 private Map<String,ClassMapping> m_classes;
25 private TranslationIndex m_index; 25 private TranslationIndex m_index;
26 26
27 private ClassNameReplacer m_classNameReplacer = new ClassNameReplacer() {
28 @Override
29 public String replace(String className) {
30 return translateEntry(new ClassEntry(className)).getName();
31 }
32 };
33
27 public Translator() { 34 public Translator() {
28 m_direction = null; 35 m_direction = null;
29 m_classes = Maps.newHashMap(); 36 m_classes = Maps.newHashMap();
@@ -69,48 +76,16 @@ public class Translator {
69 } 76 }
70 } 77 }
71 78
72 public String translateClass(String className) {
73 return translate(new ClassEntry(className));
74 }
75
76 public String translate(ClassEntry in) { 79 public String translate(ClassEntry in) {
77 80 ClassEntry translated = translateEntry(in);
78 if (in.isInnerClass()) { 81 if (translated.equals(in)) {
79 82 return null;
80 // translate everything in the class chain, or return null
81 List<ClassMapping> mappingsChain = getClassMappingChain(in);
82 StringBuilder buf = new StringBuilder();
83 for (ClassMapping classMapping : mappingsChain) {
84 if (classMapping == null) {
85 return null;
86 }
87 boolean isFirstClass = buf.length() == 0;
88 String name = m_direction.choose(
89 classMapping.getDeobfName(),
90 isFirstClass ? classMapping.getObfFullName() : classMapping.getObfSimpleName()
91 );
92 if (name == null) {
93 return null;
94 }
95 if (!isFirstClass) {
96 buf.append("$");
97 }
98 buf.append(name);
99 }
100 return buf.toString();
101
102 } else {
103
104 // normal classes are easier
105 ClassMapping classMapping = m_classes.get(in.getName());
106 if (classMapping == null) {
107 return null;
108 }
109 return m_direction.choose(
110 classMapping.getDeobfName(),
111 classMapping.getObfFullName()
112 );
113 } 83 }
84 return translated.getName();
85 }
86
87 public String translateClass(String className) {
88 return translate(new ClassEntry(className));
114 } 89 }
115 90
116 public ClassEntry translateEntry(ClassEntry in) { 91 public ClassEntry translateEntry(ClassEntry in) {
@@ -264,21 +239,11 @@ public class Translator {
264 } 239 }
265 240
266 public Type translateType(Type type) { 241 public Type translateType(Type type) {
267 return new Type(type, new ClassNameReplacer() { 242 return new Type(type, m_classNameReplacer);
268 @Override
269 public String replace(String className) {
270 return translateClass(className);
271 }
272 });
273 } 243 }
274 244
275 public Signature translateSignature(Signature signature) { 245 public Signature translateSignature(Signature signature) {
276 return new Signature(signature, new ClassNameReplacer() { 246 return new Signature(signature, m_classNameReplacer);
277 @Override
278 public String replace(String className) {
279 return translateClass(className);
280 }
281 });
282 } 247 }
283 248
284 private ClassMapping findClassMapping(ClassEntry in) { 249 private ClassMapping findClassMapping(ClassEntry in) {
@@ -302,8 +267,8 @@ public class Translator {
302 ClassMapping innerClassMapping = null; 267 ClassMapping innerClassMapping = null;
303 if (outerClassMapping != null) { 268 if (outerClassMapping != null) {
304 innerClassMapping = m_direction.choose( 269 innerClassMapping = m_direction.choose(
305 outerClassMapping.getInnerClassByObf(parts[i]), 270 outerClassMapping.getInnerClassByObfSimple(parts[i]),
306 outerClassMapping.getInnerClassByDeobfThenObf(parts[i]) 271 outerClassMapping.getInnerClassByDeobfThenObfSimple(parts[i])
307 ); 272 );
308 } 273 }
309 mappingsChain.add(innerClassMapping); 274 mappingsChain.add(innerClassMapping);