diff options
Diffstat (limited to 'src/cuchaz/enigma/mapping/ClassMapping.java')
| -rw-r--r-- | src/cuchaz/enigma/mapping/ClassMapping.java | 78 |
1 files changed, 46 insertions, 32 deletions
diff --git a/src/cuchaz/enigma/mapping/ClassMapping.java b/src/cuchaz/enigma/mapping/ClassMapping.java index e2c3d56..7133265 100644 --- a/src/cuchaz/enigma/mapping/ClassMapping.java +++ b/src/cuchaz/enigma/mapping/ClassMapping.java | |||
| @@ -152,78 +152,92 @@ public class ClassMapping implements Serializable, Comparable<ClassMapping> { | |||
| 152 | return m_fieldsByObf.values(); | 152 | return m_fieldsByObf.values(); |
| 153 | } | 153 | } |
| 154 | 154 | ||
| 155 | public boolean containsObfField(String obfName) { | 155 | public boolean containsObfField(String obfName, Type obfType) { |
| 156 | return m_fieldsByObf.containsKey(obfName); | 156 | return m_fieldsByObf.containsKey(getFieldKey(obfName, obfType)); |
| 157 | } | 157 | } |
| 158 | 158 | ||
| 159 | public boolean containsDeobfField(String deobfName) { | 159 | public boolean containsDeobfField(String deobfName, Type deobfType) { |
| 160 | return m_fieldsByDeobf.containsKey(deobfName); | 160 | return m_fieldsByDeobf.containsKey(getFieldKey(deobfName, deobfType)); |
| 161 | } | 161 | } |
| 162 | 162 | ||
| 163 | public void addFieldMapping(FieldMapping fieldMapping) { | 163 | public void addFieldMapping(FieldMapping fieldMapping) { |
| 164 | if (m_fieldsByObf.containsKey(fieldMapping.getObfName())) { | 164 | String obfKey = getFieldKey(fieldMapping.getObfName(), fieldMapping.getObfType()); |
| 165 | throw new Error("Already have mapping for " + m_obfName + "." + fieldMapping.getObfName()); | 165 | if (m_fieldsByObf.containsKey(obfKey)) { |
| 166 | throw new Error("Already have mapping for " + m_obfName + "." + obfKey); | ||
| 166 | } | 167 | } |
| 167 | if (m_fieldsByDeobf.containsKey(fieldMapping.getDeobfName())) { | 168 | String deobfKey = getFieldKey(fieldMapping.getDeobfName(), fieldMapping.getObfType()); |
| 168 | throw new Error("Already have mapping for " + m_deobfName + "." + fieldMapping.getDeobfName()); | 169 | if (m_fieldsByDeobf.containsKey(deobfKey)) { |
| 170 | throw new Error("Already have mapping for " + m_deobfName + "." + deobfKey); | ||
| 169 | } | 171 | } |
| 170 | boolean obfWasAdded = m_fieldsByObf.put(fieldMapping.getObfName(), fieldMapping) == null; | 172 | boolean obfWasAdded = m_fieldsByObf.put(obfKey, fieldMapping) == null; |
| 171 | assert (obfWasAdded); | 173 | assert (obfWasAdded); |
| 172 | boolean deobfWasAdded = m_fieldsByDeobf.put(fieldMapping.getDeobfName(), fieldMapping) == null; | 174 | boolean deobfWasAdded = m_fieldsByDeobf.put(deobfKey, fieldMapping) == null; |
| 173 | assert (deobfWasAdded); | 175 | assert (deobfWasAdded); |
| 174 | assert (m_fieldsByObf.size() == m_fieldsByDeobf.size()); | 176 | assert (m_fieldsByObf.size() == m_fieldsByDeobf.size()); |
| 175 | } | 177 | } |
| 176 | 178 | ||
| 177 | public void removeFieldMapping(FieldMapping fieldMapping) { | 179 | public void removeFieldMapping(FieldMapping fieldMapping) { |
| 178 | boolean obfWasRemoved = m_fieldsByObf.remove(fieldMapping.getObfName()) != null; | 180 | boolean obfWasRemoved = m_fieldsByObf.remove(getFieldKey(fieldMapping.getObfName(), fieldMapping.getObfType())) != null; |
| 179 | assert (obfWasRemoved); | 181 | assert (obfWasRemoved); |
| 180 | if (fieldMapping.getDeobfName() != null) { | 182 | if (fieldMapping.getDeobfName() != null) { |
| 181 | boolean deobfWasRemoved = m_fieldsByDeobf.remove(fieldMapping.getDeobfName()) != null; | 183 | boolean deobfWasRemoved = m_fieldsByDeobf.remove(getFieldKey(fieldMapping.getDeobfName(), fieldMapping.getObfType())) != null; |
| 182 | assert (deobfWasRemoved); | 184 | assert (deobfWasRemoved); |
| 183 | } | 185 | } |
| 184 | } | 186 | } |
| 185 | 187 | ||
| 186 | public FieldMapping getFieldByObf(String obfName) { | 188 | public FieldMapping getFieldByObf(String obfName, Type obfType) { |
| 187 | return m_fieldsByObf.get(obfName); | 189 | return m_fieldsByObf.get(getFieldKey(obfName, obfType)); |
| 188 | } | 190 | } |
| 189 | 191 | ||
| 190 | public FieldMapping getFieldByDeobf(String deobfName) { | 192 | public FieldMapping getFieldByDeobf(String deobfName, Type obfType) { |
| 191 | return m_fieldsByDeobf.get(deobfName); | 193 | return m_fieldsByDeobf.get(getFieldKey(deobfName, obfType)); |
| 192 | } | 194 | } |
| 193 | 195 | ||
| 194 | public String getObfFieldName(String deobfName) { | 196 | public String getObfFieldName(String deobfName, Type obfType) { |
| 195 | FieldMapping fieldMapping = m_fieldsByDeobf.get(deobfName); | 197 | FieldMapping fieldMapping = m_fieldsByDeobf.get(getFieldKey(deobfName, obfType)); |
| 196 | if (fieldMapping != null) { | 198 | if (fieldMapping != null) { |
| 197 | return fieldMapping.getObfName(); | 199 | return fieldMapping.getObfName(); |
| 198 | } | 200 | } |
| 199 | return null; | 201 | return null; |
| 200 | } | 202 | } |
| 201 | 203 | ||
| 202 | public String getDeobfFieldName(String obfName) { | 204 | public String getDeobfFieldName(String obfName, Type obfType) { |
| 203 | FieldMapping fieldMapping = m_fieldsByObf.get(obfName); | 205 | FieldMapping fieldMapping = m_fieldsByObf.get(getFieldKey(obfName, obfType)); |
| 204 | if (fieldMapping != null) { | 206 | if (fieldMapping != null) { |
| 205 | return fieldMapping.getDeobfName(); | 207 | return fieldMapping.getDeobfName(); |
| 206 | } | 208 | } |
| 207 | return null; | 209 | return null; |
| 208 | } | 210 | } |
| 209 | 211 | ||
| 210 | public void setFieldName(String obfName, String deobfName) { | 212 | private String getFieldKey(String name, Type type) { |
| 211 | FieldMapping fieldMapping = m_fieldsByObf.get(obfName); | 213 | if (name == null) { |
| 214 | throw new IllegalArgumentException("name cannot be null!"); | ||
| 215 | } | ||
| 216 | if (type == null) { | ||
| 217 | throw new IllegalArgumentException("type cannot be null!"); | ||
| 218 | } | ||
| 219 | return name + ":" + type; | ||
| 220 | } | ||
| 221 | |||
| 222 | |||
| 223 | public void setFieldName(String obfName, Type obfType, String deobfName) { | ||
| 224 | FieldMapping fieldMapping = m_fieldsByObf.get(getFieldKey(obfName, obfType)); | ||
| 212 | if (fieldMapping == null) { | 225 | if (fieldMapping == null) { |
| 213 | fieldMapping = new FieldMapping(obfName, deobfName); | 226 | fieldMapping = new FieldMapping(obfName, obfType, deobfName); |
| 214 | boolean obfWasAdded = m_fieldsByObf.put(obfName, fieldMapping) == null; | 227 | boolean obfWasAdded = m_fieldsByObf.put(getFieldKey(obfName, obfType), fieldMapping) == null; |
| 215 | assert (obfWasAdded); | 228 | assert (obfWasAdded); |
| 216 | } else { | 229 | } else { |
| 217 | boolean wasRemoved = m_fieldsByDeobf.remove(fieldMapping.getDeobfName()) != null; | 230 | boolean wasRemoved = m_fieldsByDeobf.remove(getFieldKey(fieldMapping.getDeobfName(), obfType)) != null; |
| 218 | assert (wasRemoved); | 231 | assert (wasRemoved); |
| 219 | } | 232 | } |
| 220 | fieldMapping.setDeobfName(deobfName); | 233 | fieldMapping.setDeobfName(deobfName); |
| 221 | if (deobfName != null) { | 234 | if (deobfName != null) { |
| 222 | boolean wasAdded = m_fieldsByDeobf.put(deobfName, fieldMapping) == null; | 235 | boolean wasAdded = m_fieldsByDeobf.put(getFieldKey(deobfName, obfType), fieldMapping) == null; |
| 223 | assert (wasAdded); | 236 | assert (wasAdded); |
| 224 | } | 237 | } |
| 225 | } | 238 | } |
| 226 | 239 | ||
| 240 | |||
| 227 | //// METHODS //////// | 241 | //// METHODS //////// |
| 228 | 242 | ||
| 229 | public Iterable<MethodMapping> methods() { | 243 | public Iterable<MethodMapping> methods() { |
| @@ -235,8 +249,8 @@ public class ClassMapping implements Serializable, Comparable<ClassMapping> { | |||
| 235 | return m_methodsByObf.containsKey(getMethodKey(obfName, obfSignature)); | 249 | return m_methodsByObf.containsKey(getMethodKey(obfName, obfSignature)); |
| 236 | } | 250 | } |
| 237 | 251 | ||
| 238 | public boolean containsDeobfMethod(String deobfName, Signature deobfSignature) { | 252 | public boolean containsDeobfMethod(String deobfName, Signature obfSignature) { |
| 239 | return m_methodsByDeobf.containsKey(getMethodKey(deobfName, deobfSignature)); | 253 | return m_methodsByDeobf.containsKey(getMethodKey(deobfName, obfSignature)); |
| 240 | } | 254 | } |
| 241 | 255 | ||
| 242 | public void addMethodMapping(MethodMapping methodMapping) { | 256 | public void addMethodMapping(MethodMapping methodMapping) { |
| @@ -266,12 +280,12 @@ public class ClassMapping implements Serializable, Comparable<ClassMapping> { | |||
| 266 | } | 280 | } |
| 267 | } | 281 | } |
| 268 | 282 | ||
| 269 | public MethodMapping getMethodByObf(String obfName, Signature signature) { | 283 | public MethodMapping getMethodByObf(String obfName, Signature obfSignature) { |
| 270 | return m_methodsByObf.get(getMethodKey(obfName, signature)); | 284 | return m_methodsByObf.get(getMethodKey(obfName, obfSignature)); |
| 271 | } | 285 | } |
| 272 | 286 | ||
| 273 | public MethodMapping getMethodByDeobf(String deobfName, Signature signature) { | 287 | public MethodMapping getMethodByDeobf(String deobfName, Signature obfSignature) { |
| 274 | return m_methodsByDeobf.get(getMethodKey(deobfName, signature)); | 288 | return m_methodsByDeobf.get(getMethodKey(deobfName, obfSignature)); |
| 275 | } | 289 | } |
| 276 | 290 | ||
| 277 | private String getMethodKey(String name, Signature signature) { | 291 | private String getMethodKey(String name, Signature signature) { |