summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/mapping/MethodMapping.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/cuchaz/enigma/mapping/MethodMapping.java')
-rw-r--r--src/cuchaz/enigma/mapping/MethodMapping.java168
1 files changed, 69 insertions, 99 deletions
diff --git a/src/cuchaz/enigma/mapping/MethodMapping.java b/src/cuchaz/enigma/mapping/MethodMapping.java
index c51b011..4dab3c6 100644
--- a/src/cuchaz/enigma/mapping/MethodMapping.java
+++ b/src/cuchaz/enigma/mapping/MethodMapping.java
@@ -16,8 +16,8 @@ import java.util.TreeMap;
16 16
17import cuchaz.enigma.mapping.SignatureUpdater.ClassNameUpdater; 17import cuchaz.enigma.mapping.SignatureUpdater.ClassNameUpdater;
18 18
19public class MethodMapping implements Serializable, Comparable<MethodMapping> 19public class MethodMapping implements Serializable, Comparable<MethodMapping> {
20{ 20
21 private static final long serialVersionUID = -4409570216084263978L; 21 private static final long serialVersionUID = -4409570216084263978L;
22 22
23 private String m_obfName; 23 private String m_obfName;
@@ -25,165 +25,135 @@ public class MethodMapping implements Serializable, Comparable<MethodMapping>
25 private String m_obfSignature; 25 private String m_obfSignature;
26 private Map<Integer,ArgumentMapping> m_arguments; 26 private Map<Integer,ArgumentMapping> m_arguments;
27 27
28 public MethodMapping( String obfName, String obfSignature ) 28 public MethodMapping(String obfName, String obfSignature) {
29 { 29 this(obfName, obfSignature, null);
30 this( obfName, obfSignature, null );
31 } 30 }
32 31
33 public MethodMapping( String obfName, String obfSignature, String deobfName ) 32 public MethodMapping(String obfName, String obfSignature, String deobfName) {
34 { 33 if (obfName == null) {
35 if( obfName == null ) 34 throw new IllegalArgumentException("obf name cannot be null!");
36 {
37 throw new IllegalArgumentException( "obf name cannot be null!" );
38 } 35 }
39 if( obfSignature == null ) 36 if (obfSignature == null) {
40 { 37 throw new IllegalArgumentException("obf signature cannot be null!");
41 throw new IllegalArgumentException( "obf signature cannot be null!" );
42 } 38 }
43 m_obfName = obfName; 39 m_obfName = obfName;
44 m_deobfName = NameValidator.validateMethodName( deobfName ); 40 m_deobfName = NameValidator.validateMethodName(deobfName);
45 m_obfSignature = obfSignature; 41 m_obfSignature = obfSignature;
46 m_arguments = new TreeMap<Integer,ArgumentMapping>(); 42 m_arguments = new TreeMap<Integer,ArgumentMapping>();
47 } 43 }
48 44
49 public String getObfName( ) 45 public String getObfName() {
50 {
51 return m_obfName; 46 return m_obfName;
52 } 47 }
53 48
54 public String getDeobfName( ) 49 public String getDeobfName() {
55 {
56 return m_deobfName; 50 return m_deobfName;
57 } 51 }
58 public void setDeobfName( String val ) 52
59 { 53 public void setDeobfName(String val) {
60 m_deobfName = NameValidator.validateMethodName( val ); 54 m_deobfName = NameValidator.validateMethodName(val);
61 } 55 }
62 56
63 public String getObfSignature( ) 57 public String getObfSignature() {
64 {
65 return m_obfSignature; 58 return m_obfSignature;
66 } 59 }
67 60
68 public Iterable<ArgumentMapping> arguments( ) 61 public Iterable<ArgumentMapping> arguments() {
69 {
70 return m_arguments.values(); 62 return m_arguments.values();
71 } 63 }
72 64
73 public boolean isConstructor( ) 65 public boolean isConstructor() {
74 { 66 return m_obfName.startsWith("<");
75 return m_obfName.startsWith( "<" );
76 } 67 }
77 68
78 public void addArgumentMapping( ArgumentMapping argumentMapping ) 69 public void addArgumentMapping(ArgumentMapping argumentMapping) {
79 { 70 boolean wasAdded = m_arguments.put(argumentMapping.getIndex(), argumentMapping) == null;
80 boolean wasAdded = m_arguments.put( argumentMapping.getIndex(), argumentMapping ) == null; 71 assert (wasAdded);
81 assert( wasAdded );
82 } 72 }
83 73
84 public String getObfArgumentName( int index ) 74 public String getObfArgumentName(int index) {
85 { 75 ArgumentMapping argumentMapping = m_arguments.get(index);
86 ArgumentMapping argumentMapping = m_arguments.get( index ); 76 if (argumentMapping != null) {
87 if( argumentMapping != null )
88 {
89 return argumentMapping.getName(); 77 return argumentMapping.getName();
90 } 78 }
91 79
92 return null; 80 return null;
93 } 81 }
94 82
95 public String getDeobfArgumentName( int index ) 83 public String getDeobfArgumentName(int index) {
96 { 84 ArgumentMapping argumentMapping = m_arguments.get(index);
97 ArgumentMapping argumentMapping = m_arguments.get( index ); 85 if (argumentMapping != null) {
98 if( argumentMapping != null )
99 {
100 return argumentMapping.getName(); 86 return argumentMapping.getName();
101 } 87 }
102 88
103 return null; 89 return null;
104 } 90 }
105 91
106 public void setArgumentName( int index, String name ) 92 public void setArgumentName(int index, String name) {
107 { 93 ArgumentMapping argumentMapping = m_arguments.get(index);
108 ArgumentMapping argumentMapping = m_arguments.get( index ); 94 if (argumentMapping == null) {
109 if( argumentMapping == null ) 95 argumentMapping = new ArgumentMapping(index, name);
110 { 96 boolean wasAdded = m_arguments.put(index, argumentMapping) == null;
111 argumentMapping = new ArgumentMapping( index, name ); 97 assert (wasAdded);
112 boolean wasAdded = m_arguments.put( index, argumentMapping ) == null; 98 } else {
113 assert( wasAdded ); 99 argumentMapping.setName(name);
114 }
115 else
116 {
117 argumentMapping.setName( name );
118 } 100 }
119 } 101 }
120 102
121 public void removeArgumentName( int index ) 103 public void removeArgumentName(int index) {
122 { 104 boolean wasRemoved = m_arguments.remove(index) != null;
123 boolean wasRemoved = m_arguments.remove( index ) != null; 105 assert (wasRemoved);
124 assert( wasRemoved );
125 } 106 }
126 107
127 @Override 108 @Override
128 public String toString( ) 109 public String toString() {
129 {
130 StringBuilder buf = new StringBuilder(); 110 StringBuilder buf = new StringBuilder();
131 buf.append( "\t" ); 111 buf.append("\t");
132 buf.append( m_obfName ); 112 buf.append(m_obfName);
133 buf.append( " <-> " ); 113 buf.append(" <-> ");
134 buf.append( m_deobfName ); 114 buf.append(m_deobfName);
135 buf.append( "\n" ); 115 buf.append("\n");
136 buf.append( "\t" ); 116 buf.append("\t");
137 buf.append( m_obfSignature ); 117 buf.append(m_obfSignature);
138 buf.append( "\n" ); 118 buf.append("\n");
139 buf.append( "\tArguments:\n" ); 119 buf.append("\tArguments:\n");
140 for( ArgumentMapping argumentMapping : m_arguments.values() ) 120 for (ArgumentMapping argumentMapping : m_arguments.values()) {
141 { 121 buf.append("\t\t");
142 buf.append( "\t\t" ); 122 buf.append(argumentMapping.getIndex());
143 buf.append( argumentMapping.getIndex() ); 123 buf.append(" -> ");
144 buf.append( " -> " ); 124 buf.append(argumentMapping.getName());
145 buf.append( argumentMapping.getName() ); 125 buf.append("\n");
146 buf.append( "\n" );
147 } 126 }
148 return buf.toString(); 127 return buf.toString();
149 } 128 }
150 129
151 @Override 130 @Override
152 public int compareTo( MethodMapping other ) 131 public int compareTo(MethodMapping other) {
153 { 132 return (m_obfName + m_obfSignature).compareTo(other.m_obfName + other.m_obfSignature);
154 return ( m_obfName + m_obfSignature ).compareTo( other.m_obfName + other.m_obfSignature );
155 } 133 }
156 134
157 public boolean renameObfClass( final String oldObfClassName, final String newObfClassName ) 135 public boolean renameObfClass(final String oldObfClassName, final String newObfClassName) {
158 {
159 // rename obf classes in the signature 136 // rename obf classes in the signature
160 String newSignature = SignatureUpdater.update( m_obfSignature, new ClassNameUpdater( ) 137 String newSignature = SignatureUpdater.update(m_obfSignature, new ClassNameUpdater() {
161 {
162 @Override 138 @Override
163 public String update( String className ) 139 public String update(String className) {
164 { 140 if (className.equals(oldObfClassName)) {
165 if( className.equals( oldObfClassName ) )
166 {
167 return newObfClassName; 141 return newObfClassName;
168 } 142 }
169 return className; 143 return className;
170 } 144 }
171 } ); 145 });
172 146
173 if( newSignature != m_obfSignature ) 147 if (newSignature != m_obfSignature) {
174 {
175 m_obfSignature = newSignature; 148 m_obfSignature = newSignature;
176 return true; 149 return true;
177 } 150 }
178 return false; 151 return false;
179 } 152 }
180 153
181 public boolean containsArgument( String name ) 154 public boolean containsArgument(String name) {
182 { 155 for (ArgumentMapping argumentMapping : m_arguments.values()) {
183 for( ArgumentMapping argumentMapping : m_arguments.values() ) 156 if (argumentMapping.getName().equals(name)) {
184 {
185 if( argumentMapping.getName().equals( name ) )
186 {
187 return true; 157 return true;
188 } 158 }
189 } 159 }