summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/mapping
diff options
context:
space:
mode:
authorGravatar jeff2015-03-08 20:48:30 -0400
committerGravatar jeff2015-03-08 20:48:30 -0400
commit4ceb8d490058e48df666bf7227ce020e60928be5 (patch)
treebdfb432cd1d61dc4914b8591468193dcd7e7421c /src/cuchaz/enigma/mapping
parentlots of small tweaks and improvements (diff)
downloadenigma-fork-4ceb8d490058e48df666bf7227ce020e60928be5.tar.gz
enigma-fork-4ceb8d490058e48df666bf7227ce020e60928be5.tar.xz
enigma-fork-4ceb8d490058e48df666bf7227ce020e60928be5.zip
more tweaks, improvements, and bug fixes
Diffstat (limited to 'src/cuchaz/enigma/mapping')
-rw-r--r--src/cuchaz/enigma/mapping/ArgumentMapping.java5
-rw-r--r--src/cuchaz/enigma/mapping/ClassMapping.java11
-rw-r--r--src/cuchaz/enigma/mapping/FieldMapping.java26
-rw-r--r--src/cuchaz/enigma/mapping/MethodMapping.java16
-rw-r--r--src/cuchaz/enigma/mapping/Signature.java5
-rw-r--r--src/cuchaz/enigma/mapping/Type.java13
6 files changed, 74 insertions, 2 deletions
diff --git a/src/cuchaz/enigma/mapping/ArgumentMapping.java b/src/cuchaz/enigma/mapping/ArgumentMapping.java
index f4d8e77..9f366a0 100644
--- a/src/cuchaz/enigma/mapping/ArgumentMapping.java
+++ b/src/cuchaz/enigma/mapping/ArgumentMapping.java
@@ -25,6 +25,11 @@ public class ArgumentMapping implements Serializable, Comparable<ArgumentMapping
25 m_name = NameValidator.validateArgumentName(name); 25 m_name = NameValidator.validateArgumentName(name);
26 } 26 }
27 27
28 public ArgumentMapping(ArgumentMapping other) {
29 m_index = other.m_index;
30 m_name = other.m_name;
31 }
32
28 public int getIndex() { 33 public int getIndex() {
29 return m_index; 34 return m_index;
30 } 35 }
diff --git a/src/cuchaz/enigma/mapping/ClassMapping.java b/src/cuchaz/enigma/mapping/ClassMapping.java
index 3610e33..43605e5 100644
--- a/src/cuchaz/enigma/mapping/ClassMapping.java
+++ b/src/cuchaz/enigma/mapping/ClassMapping.java
@@ -393,6 +393,17 @@ public class ClassMapping implements Serializable, Comparable<ClassMapping> {
393 } 393 }
394 } 394 }
395 395
396 // rename field types
397 for (FieldMapping fieldMapping : new ArrayList<FieldMapping>(m_fieldsByObf.values())) {
398 String oldFieldKey = getFieldKey(fieldMapping.getObfName(), fieldMapping.getObfType());
399 if (fieldMapping.renameObfClass(oldObfClassName, newObfClassName)) {
400 boolean wasRemoved = m_fieldsByObf.remove(oldFieldKey) != null;
401 assert (wasRemoved);
402 boolean wasAdded = m_fieldsByObf.put(getFieldKey(fieldMapping.getObfName(), fieldMapping.getObfType()), fieldMapping) == null;
403 assert (wasAdded);
404 }
405 }
406
396 // rename method signatures 407 // rename method signatures
397 for (MethodMapping methodMapping : new ArrayList<MethodMapping>(m_methodsByObf.values())) { 408 for (MethodMapping methodMapping : new ArrayList<MethodMapping>(m_methodsByObf.values())) {
398 String oldMethodKey = getMethodKey(methodMapping.getObfName(), methodMapping.getObfSignature()); 409 String oldMethodKey = getMethodKey(methodMapping.getObfName(), methodMapping.getObfSignature());
diff --git a/src/cuchaz/enigma/mapping/FieldMapping.java b/src/cuchaz/enigma/mapping/FieldMapping.java
index 14b20dd..55b0a19 100644
--- a/src/cuchaz/enigma/mapping/FieldMapping.java
+++ b/src/cuchaz/enigma/mapping/FieldMapping.java
@@ -26,6 +26,12 @@ public class FieldMapping implements Serializable, Comparable<FieldMapping> {
26 m_obfType = obfType; 26 m_obfType = obfType;
27 } 27 }
28 28
29 public FieldMapping(FieldMapping other, ClassNameReplacer obfClassNameReplacer) {
30 m_obfName = other.m_obfName;
31 m_deobfName = other.m_deobfName;
32 m_obfType = new Type(other.m_obfType, obfClassNameReplacer);
33 }
34
29 public String getObfName() { 35 public String getObfName() {
30 return m_obfName; 36 return m_obfName;
31 } 37 }
@@ -46,4 +52,24 @@ public class FieldMapping implements Serializable, Comparable<FieldMapping> {
46 public int compareTo(FieldMapping other) { 52 public int compareTo(FieldMapping other) {
47 return (m_obfName + m_obfType).compareTo(other.m_obfName + other.m_obfType); 53 return (m_obfName + m_obfType).compareTo(other.m_obfName + other.m_obfType);
48 } 54 }
55
56 public boolean renameObfClass(final String oldObfClassName, final String newObfClassName) {
57
58 // rename obf classes in the type
59 Type newType = new Type(m_obfType, new ClassNameReplacer() {
60 @Override
61 public String replace(String className) {
62 if (className.equals(oldObfClassName)) {
63 return newObfClassName;
64 }
65 return null;
66 }
67 });
68
69 if (!newType.equals(m_obfType)) {
70 m_obfType = newType;
71 return true;
72 }
73 return false;
74 }
49} 75}
diff --git a/src/cuchaz/enigma/mapping/MethodMapping.java b/src/cuchaz/enigma/mapping/MethodMapping.java
index 1704428..bf8a94f 100644
--- a/src/cuchaz/enigma/mapping/MethodMapping.java
+++ b/src/cuchaz/enigma/mapping/MethodMapping.java
@@ -12,7 +12,9 @@ package cuchaz.enigma.mapping;
12 12
13import java.io.Serializable; 13import java.io.Serializable;
14import java.util.Map; 14import java.util.Map;
15import java.util.TreeMap; 15import java.util.Map.Entry;
16
17import com.google.common.collect.Maps;
16 18
17public class MethodMapping implements Serializable, Comparable<MethodMapping> { 19public class MethodMapping implements Serializable, Comparable<MethodMapping> {
18 20
@@ -37,9 +39,19 @@ public class MethodMapping implements Serializable, Comparable<MethodMapping> {
37 m_obfName = obfName; 39 m_obfName = obfName;
38 m_deobfName = NameValidator.validateMethodName(deobfName); 40 m_deobfName = NameValidator.validateMethodName(deobfName);
39 m_obfSignature = obfSignature; 41 m_obfSignature = obfSignature;
40 m_arguments = new TreeMap<Integer,ArgumentMapping>(); 42 m_arguments = Maps.newTreeMap();
41 } 43 }
42 44
45 public MethodMapping(MethodMapping other, ClassNameReplacer obfClassNameReplacer) {
46 m_obfName = other.m_obfName;
47 m_deobfName = other.m_deobfName;
48 m_obfSignature = new Signature(other.m_obfSignature, obfClassNameReplacer);
49 m_arguments = Maps.newTreeMap();
50 for (Entry<Integer,ArgumentMapping> entry : other.m_arguments.entrySet()) {
51 m_arguments.put(entry.getKey(), new ArgumentMapping(entry.getValue()));
52 }
53 }
54
43 public String getObfName() { 55 public String getObfName() {
44 return m_obfName; 56 return m_obfName;
45 } 57 }
diff --git a/src/cuchaz/enigma/mapping/Signature.java b/src/cuchaz/enigma/mapping/Signature.java
index 273a77b..ea83e40 100644
--- a/src/cuchaz/enigma/mapping/Signature.java
+++ b/src/cuchaz/enigma/mapping/Signature.java
@@ -39,6 +39,11 @@ public class Signature implements Serializable {
39 } 39 }
40 } 40 }
41 41
42 public Signature(Signature other) {
43 m_argumentTypes = Lists.newArrayList(other.m_argumentTypes);
44 m_returnType = new Type(other.m_returnType);
45 }
46
42 public Signature(Signature other, ClassNameReplacer replacer) { 47 public Signature(Signature other, ClassNameReplacer replacer) {
43 m_argumentTypes = Lists.newArrayList(other.m_argumentTypes); 48 m_argumentTypes = Lists.newArrayList(other.m_argumentTypes);
44 for (int i=0; i<m_argumentTypes.size(); i++) { 49 for (int i=0; i<m_argumentTypes.size(); i++) {
diff --git a/src/cuchaz/enigma/mapping/Type.java b/src/cuchaz/enigma/mapping/Type.java
index d8c073e..72118b0 100644
--- a/src/cuchaz/enigma/mapping/Type.java
+++ b/src/cuchaz/enigma/mapping/Type.java
@@ -68,6 +68,11 @@ public class Type implements Serializable {
68 if (c == 'L') { 68 if (c == 'L') {
69 return readClass(in); 69 return readClass(in);
70 } 70 }
71
72 // then check for templates
73 if (c == 'T') {
74 return readClass(in);
75 }
71 76
72 // then check for arrays 77 // then check for arrays
73 int dim = countArrayDimension(in); 78 int dim = countArrayDimension(in);
@@ -85,6 +90,10 @@ public class Type implements Serializable {
85 m_name = name; 90 m_name = name;
86 } 91 }
87 92
93 public Type(Type other) {
94 m_name = other.m_name;
95 }
96
88 public Type(ClassEntry classEntry) { 97 public Type(ClassEntry classEntry) {
89 m_name = "L" + classEntry.getClassName() + ";"; 98 m_name = "L" + classEntry.getClassName() + ";";
90 } 99 }
@@ -128,6 +137,10 @@ public class Type implements Serializable {
128 return m_name.charAt(0) == 'L' && m_name.charAt(m_name.length() - 1) == ';'; 137 return m_name.charAt(0) == 'L' && m_name.charAt(m_name.length() - 1) == ';';
129 } 138 }
130 139
140 public boolean isTemplate() {
141 return m_name.charAt(0) == 'T' && m_name.charAt(m_name.length() - 1) == ';';
142 }
143
131 public ClassEntry getClassEntry() { 144 public ClassEntry getClassEntry() {
132 if (isClass()) { 145 if (isClass()) {
133 String name = m_name.substring(1, m_name.length() - 1); 146 String name = m_name.substring(1, m_name.length() - 1);