diff options
| author | 2016-10-26 17:34:06 +0200 | |
|---|---|---|
| committer | 2016-10-26 17:34:06 +0200 | |
| commit | e0f001acce44277a1e4eb0ccf79b801aa25ed216 (patch) | |
| tree | 37577a7ffbc39a3b3a49acec63820fbfce5145f5 /src/main/java/cuchaz/enigma/mapping/ClassMapping.java | |
| parent | Starting implementing local variables (#33) (diff) | |
| download | enigma-fork-e0f001acce44277a1e4eb0ccf79b801aa25ed216.tar.gz enigma-fork-e0f001acce44277a1e4eb0ccf79b801aa25ed216.tar.xz enigma-fork-e0f001acce44277a1e4eb0ccf79b801aa25ed216.zip | |
Rework saving system to improve saving time (Fix #35)
Diffstat (limited to 'src/main/java/cuchaz/enigma/mapping/ClassMapping.java')
| -rw-r--r-- | src/main/java/cuchaz/enigma/mapping/ClassMapping.java | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/main/java/cuchaz/enigma/mapping/ClassMapping.java b/src/main/java/cuchaz/enigma/mapping/ClassMapping.java index 36b35f7..923c8ec 100644 --- a/src/main/java/cuchaz/enigma/mapping/ClassMapping.java +++ b/src/main/java/cuchaz/enigma/mapping/ClassMapping.java | |||
| @@ -22,12 +22,14 @@ public class ClassMapping implements Comparable<ClassMapping> { | |||
| 22 | private String m_obfFullName; | 22 | private String m_obfFullName; |
| 23 | private String m_obfSimpleName; | 23 | private String m_obfSimpleName; |
| 24 | private String m_deobfName; | 24 | private String m_deobfName; |
| 25 | private String m_previousDeobfName; | ||
| 25 | private Map<String, ClassMapping> m_innerClassesByObfSimple; | 26 | private Map<String, ClassMapping> m_innerClassesByObfSimple; |
| 26 | private Map<String, ClassMapping> m_innerClassesByDeobf; | 27 | private Map<String, ClassMapping> m_innerClassesByDeobf; |
| 27 | private Map<String, FieldMapping> m_fieldsByObf; | 28 | private Map<String, FieldMapping> m_fieldsByObf; |
| 28 | private Map<String, FieldMapping> m_fieldsByDeobf; | 29 | private Map<String, FieldMapping> m_fieldsByDeobf; |
| 29 | private Map<String, MethodMapping> m_methodsByObf; | 30 | private Map<String, MethodMapping> m_methodsByObf; |
| 30 | private Map<String, MethodMapping> m_methodsByDeobf; | 31 | private Map<String, MethodMapping> m_methodsByDeobf; |
| 32 | private boolean isDirty; | ||
| 31 | 33 | ||
| 32 | public ClassMapping(String obfFullName) { | 34 | public ClassMapping(String obfFullName) { |
| 33 | this(obfFullName, null); | 35 | this(obfFullName, null); |
| @@ -37,6 +39,7 @@ public class ClassMapping implements Comparable<ClassMapping> { | |||
| 37 | m_obfFullName = obfFullName; | 39 | m_obfFullName = obfFullName; |
| 38 | ClassEntry classEntry = new ClassEntry(obfFullName); | 40 | ClassEntry classEntry = new ClassEntry(obfFullName); |
| 39 | m_obfSimpleName = classEntry.isInnerClass() ? classEntry.getInnermostClassName() : classEntry.getSimpleName(); | 41 | m_obfSimpleName = classEntry.isInnerClass() ? classEntry.getInnermostClassName() : classEntry.getSimpleName(); |
| 42 | m_previousDeobfName = null; | ||
| 40 | m_deobfName = NameValidator.validateClassName(deobfName, false); | 43 | m_deobfName = NameValidator.validateClassName(deobfName, false); |
| 41 | m_innerClassesByObfSimple = Maps.newHashMap(); | 44 | m_innerClassesByObfSimple = Maps.newHashMap(); |
| 42 | m_innerClassesByDeobf = Maps.newHashMap(); | 45 | m_innerClassesByDeobf = Maps.newHashMap(); |
| @@ -44,6 +47,7 @@ public class ClassMapping implements Comparable<ClassMapping> { | |||
| 44 | m_fieldsByDeobf = Maps.newHashMap(); | 47 | m_fieldsByDeobf = Maps.newHashMap(); |
| 45 | m_methodsByObf = Maps.newHashMap(); | 48 | m_methodsByObf = Maps.newHashMap(); |
| 46 | m_methodsByDeobf = Maps.newHashMap(); | 49 | m_methodsByDeobf = Maps.newHashMap(); |
| 50 | isDirty = true; | ||
| 47 | } | 51 | } |
| 48 | 52 | ||
| 49 | public String getObfFullName() { | 53 | public String getObfFullName() { |
| @@ -54,12 +58,18 @@ public class ClassMapping implements Comparable<ClassMapping> { | |||
| 54 | return m_obfSimpleName; | 58 | return m_obfSimpleName; |
| 55 | } | 59 | } |
| 56 | 60 | ||
| 61 | public String getPreviousDeobfName() { | ||
| 62 | return m_previousDeobfName; | ||
| 63 | } | ||
| 64 | |||
| 57 | public String getDeobfName() { | 65 | public String getDeobfName() { |
| 58 | return m_deobfName; | 66 | return m_deobfName; |
| 59 | } | 67 | } |
| 60 | 68 | ||
| 61 | public void setDeobfName(String val) { | 69 | public void setDeobfName(String val) { |
| 70 | m_previousDeobfName = m_deobfName; | ||
| 62 | m_deobfName = NameValidator.validateClassName(val, false); | 71 | m_deobfName = NameValidator.validateClassName(val, false); |
| 72 | this.isDirty = true; | ||
| 63 | } | 73 | } |
| 64 | 74 | ||
| 65 | //// INNER CLASSES //////// | 75 | //// INNER CLASSES //////// |
| @@ -81,6 +91,7 @@ public class ClassMapping implements Comparable<ClassMapping> { | |||
| 81 | } | 91 | } |
| 82 | m_innerClassesByDeobf.put(classMapping.getDeobfName(), classMapping); | 92 | m_innerClassesByDeobf.put(classMapping.getDeobfName(), classMapping); |
| 83 | } | 93 | } |
| 94 | this.isDirty = true; | ||
| 84 | } | 95 | } |
| 85 | 96 | ||
| 86 | public void removeInnerClassMapping(ClassMapping classMapping) { | 97 | public void removeInnerClassMapping(ClassMapping classMapping) { |
| @@ -90,6 +101,7 @@ public class ClassMapping implements Comparable<ClassMapping> { | |||
| 90 | boolean deobfWasRemoved = m_innerClassesByDeobf.remove(classMapping.getDeobfName()) != null; | 101 | boolean deobfWasRemoved = m_innerClassesByDeobf.remove(classMapping.getDeobfName()) != null; |
| 91 | assert (deobfWasRemoved); | 102 | assert (deobfWasRemoved); |
| 92 | } | 103 | } |
| 104 | this.isDirty = true; | ||
| 93 | } | 105 | } |
| 94 | 106 | ||
| 95 | public ClassMapping getOrCreateInnerClass(ClassEntry obfInnerClass) { | 107 | public ClassMapping getOrCreateInnerClass(ClassEntry obfInnerClass) { |
| @@ -98,6 +110,7 @@ public class ClassMapping implements Comparable<ClassMapping> { | |||
| 98 | classMapping = new ClassMapping(obfInnerClass.getName()); | 110 | classMapping = new ClassMapping(obfInnerClass.getName()); |
| 99 | boolean wasAdded = m_innerClassesByObfSimple.put(classMapping.getObfSimpleName(), classMapping) == null; | 111 | boolean wasAdded = m_innerClassesByObfSimple.put(classMapping.getObfSimpleName(), classMapping) == null; |
| 100 | assert (wasAdded); | 112 | assert (wasAdded); |
| 113 | this.isDirty = true; | ||
| 101 | } | 114 | } |
| 102 | return classMapping; | 115 | return classMapping; |
| 103 | } | 116 | } |
| @@ -141,6 +154,7 @@ public class ClassMapping implements Comparable<ClassMapping> { | |||
| 141 | boolean wasAdded = m_innerClassesByDeobf.put(deobfName, classMapping) == null; | 154 | boolean wasAdded = m_innerClassesByDeobf.put(deobfName, classMapping) == null; |
| 142 | assert (wasAdded); | 155 | assert (wasAdded); |
| 143 | } | 156 | } |
| 157 | this.isDirty = true; | ||
| 144 | } | 158 | } |
| 145 | 159 | ||
| 146 | public boolean hasInnerClassByObfSimple(String obfSimpleName) { | 160 | public boolean hasInnerClassByObfSimple(String obfSimpleName) { |
| @@ -181,6 +195,7 @@ public class ClassMapping implements Comparable<ClassMapping> { | |||
| 181 | boolean deobfWasAdded = m_fieldsByDeobf.put(deobfKey, fieldMapping) == null; | 195 | boolean deobfWasAdded = m_fieldsByDeobf.put(deobfKey, fieldMapping) == null; |
| 182 | assert (deobfWasAdded); | 196 | assert (deobfWasAdded); |
| 183 | assert (m_fieldsByObf.size() == m_fieldsByDeobf.size()); | 197 | assert (m_fieldsByObf.size() == m_fieldsByDeobf.size()); |
| 198 | this.isDirty = true; | ||
| 184 | } | 199 | } |
| 185 | 200 | ||
| 186 | public void removeFieldMapping(FieldMapping fieldMapping) { | 201 | public void removeFieldMapping(FieldMapping fieldMapping) { |
| @@ -190,6 +205,7 @@ public class ClassMapping implements Comparable<ClassMapping> { | |||
| 190 | boolean deobfWasRemoved = m_fieldsByDeobf.remove(getFieldKey(fieldMapping.getDeobfName(), fieldMapping.getObfType())) != null; | 205 | boolean deobfWasRemoved = m_fieldsByDeobf.remove(getFieldKey(fieldMapping.getDeobfName(), fieldMapping.getObfType())) != null; |
| 191 | assert (deobfWasRemoved); | 206 | assert (deobfWasRemoved); |
| 192 | } | 207 | } |
| 208 | this.isDirty = true; | ||
| 193 | } | 209 | } |
| 194 | 210 | ||
| 195 | public FieldMapping getFieldByObf(String obfName, Type obfType) { | 211 | public FieldMapping getFieldByObf(String obfName, Type obfType) { |
| @@ -243,6 +259,7 @@ public class ClassMapping implements Comparable<ClassMapping> { | |||
| 243 | boolean wasAdded = m_fieldsByDeobf.put(getFieldKey(deobfName, obfType), fieldMapping) == null; | 259 | boolean wasAdded = m_fieldsByDeobf.put(getFieldKey(deobfName, obfType), fieldMapping) == null; |
| 244 | assert (wasAdded); | 260 | assert (wasAdded); |
| 245 | } | 261 | } |
| 262 | this.isDirty = true; | ||
| 246 | } | 263 | } |
| 247 | 264 | ||
| 248 | public void setFieldObfNameAndType(String oldObfName, Type obfType, String newObfName, Type newObfType) { | 265 | public void setFieldObfNameAndType(String oldObfName, Type obfType, String newObfName, Type newObfType) { |
| @@ -253,6 +270,7 @@ public class ClassMapping implements Comparable<ClassMapping> { | |||
| 253 | fieldMapping.setObfType(newObfType); | 270 | fieldMapping.setObfType(newObfType); |
| 254 | boolean obfWasAdded = m_fieldsByObf.put(getFieldKey(newObfName, newObfType), fieldMapping) == null; | 271 | boolean obfWasAdded = m_fieldsByObf.put(getFieldKey(newObfName, newObfType), fieldMapping) == null; |
| 255 | assert(obfWasAdded); | 272 | assert(obfWasAdded); |
| 273 | this.isDirty = true; | ||
| 256 | } | 274 | } |
| 257 | 275 | ||
| 258 | //// METHODS //////// | 276 | //// METHODS //////// |
| @@ -285,6 +303,7 @@ public class ClassMapping implements Comparable<ClassMapping> { | |||
| 285 | boolean deobfWasAdded = m_methodsByDeobf.put(deobfKey, methodMapping) == null; | 303 | boolean deobfWasAdded = m_methodsByDeobf.put(deobfKey, methodMapping) == null; |
| 286 | assert (deobfWasAdded); | 304 | assert (deobfWasAdded); |
| 287 | } | 305 | } |
| 306 | this.isDirty = true; | ||
| 288 | assert (m_methodsByObf.size() >= m_methodsByDeobf.size()); | 307 | assert (m_methodsByObf.size() >= m_methodsByDeobf.size()); |
| 289 | } | 308 | } |
| 290 | 309 | ||
| @@ -295,6 +314,7 @@ public class ClassMapping implements Comparable<ClassMapping> { | |||
| 295 | boolean deobfWasRemoved = m_methodsByDeobf.remove(getMethodKey(methodMapping.getDeobfName(), methodMapping.getObfSignature())) != null; | 314 | boolean deobfWasRemoved = m_methodsByDeobf.remove(getMethodKey(methodMapping.getDeobfName(), methodMapping.getObfSignature())) != null; |
| 296 | assert (deobfWasRemoved); | 315 | assert (deobfWasRemoved); |
| 297 | } | 316 | } |
| 317 | this.isDirty = true; | ||
| 298 | } | 318 | } |
| 299 | 319 | ||
| 300 | public MethodMapping getMethodByObf(String obfName, Signature obfSignature) { | 320 | public MethodMapping getMethodByObf(String obfName, Signature obfSignature) { |
| @@ -328,6 +348,7 @@ public class ClassMapping implements Comparable<ClassMapping> { | |||
| 328 | boolean wasAdded = m_methodsByDeobf.put(getMethodKey(deobfName, obfSignature), methodMapping) == null; | 348 | boolean wasAdded = m_methodsByDeobf.put(getMethodKey(deobfName, obfSignature), methodMapping) == null; |
| 329 | assert (wasAdded); | 349 | assert (wasAdded); |
| 330 | } | 350 | } |
| 351 | this.isDirty = true; | ||
| 331 | } | 352 | } |
| 332 | 353 | ||
| 333 | public void setMethodObfNameAndSignature(String oldObfName, Signature obfSignature, String newObfName, Signature newObfSignature) { | 354 | public void setMethodObfNameAndSignature(String oldObfName, Signature obfSignature, String newObfName, Signature newObfSignature) { |
| @@ -338,6 +359,7 @@ public class ClassMapping implements Comparable<ClassMapping> { | |||
| 338 | methodMapping.setObfSignature(newObfSignature); | 359 | methodMapping.setObfSignature(newObfSignature); |
| 339 | boolean obfWasAdded = m_methodsByObf.put(getMethodKey(newObfName, newObfSignature), methodMapping) == null; | 360 | boolean obfWasAdded = m_methodsByObf.put(getMethodKey(newObfName, newObfSignature), methodMapping) == null; |
| 340 | assert(obfWasAdded); | 361 | assert(obfWasAdded); |
| 362 | this.isDirty = true; | ||
| 341 | } | 363 | } |
| 342 | 364 | ||
| 343 | //// ARGUMENTS //////// | 365 | //// ARGUMENTS //////// |
| @@ -349,16 +371,19 @@ public class ClassMapping implements Comparable<ClassMapping> { | |||
| 349 | methodMapping = createMethodMapping(obfMethodName, obfMethodSignature); | 371 | methodMapping = createMethodMapping(obfMethodName, obfMethodSignature); |
| 350 | } | 372 | } |
| 351 | methodMapping.setArgumentName(argumentIndex, argumentName); | 373 | methodMapping.setArgumentName(argumentIndex, argumentName); |
| 374 | this.isDirty = true; | ||
| 352 | } | 375 | } |
| 353 | 376 | ||
| 354 | public void removeArgumentName(String obfMethodName, Signature obfMethodSignature, int argumentIndex) { | 377 | public void removeArgumentName(String obfMethodName, Signature obfMethodSignature, int argumentIndex) { |
| 355 | m_methodsByObf.get(getMethodKey(obfMethodName, obfMethodSignature)).removeArgumentName(argumentIndex); | 378 | m_methodsByObf.get(getMethodKey(obfMethodName, obfMethodSignature)).removeArgumentName(argumentIndex); |
| 379 | this.isDirty = true; | ||
| 356 | } | 380 | } |
| 357 | 381 | ||
| 358 | private MethodMapping createMethodMapping(String obfName, Signature obfSignature) { | 382 | private MethodMapping createMethodMapping(String obfName, Signature obfSignature) { |
| 359 | MethodMapping methodMapping = new MethodMapping(obfName, obfSignature); | 383 | MethodMapping methodMapping = new MethodMapping(obfName, obfSignature); |
| 360 | boolean wasAdded = m_methodsByObf.put(getMethodKey(obfName, obfSignature), methodMapping) == null; | 384 | boolean wasAdded = m_methodsByObf.put(getMethodKey(obfName, obfSignature), methodMapping) == null; |
| 361 | assert (wasAdded); | 385 | assert (wasAdded); |
| 386 | this.isDirty = true; | ||
| 362 | return methodMapping; | 387 | return methodMapping; |
| 363 | } | 388 | } |
| 364 | 389 | ||
| @@ -441,6 +466,7 @@ public class ClassMapping implements Comparable<ClassMapping> { | |||
| 441 | m_obfFullName = newObfClassName; | 466 | m_obfFullName = newObfClassName; |
| 442 | return true; | 467 | return true; |
| 443 | } | 468 | } |
| 469 | this.isDirty = true; | ||
| 444 | return false; | 470 | return false; |
| 445 | } | 471 | } |
| 446 | 472 | ||
| @@ -456,4 +482,14 @@ public class ClassMapping implements Comparable<ClassMapping> { | |||
| 456 | public ClassEntry getObfEntry() { | 482 | public ClassEntry getObfEntry() { |
| 457 | return new ClassEntry(m_obfFullName); | 483 | return new ClassEntry(m_obfFullName); |
| 458 | } | 484 | } |
| 485 | |||
| 486 | public boolean isDirty() | ||
| 487 | { | ||
| 488 | return isDirty; | ||
| 489 | } | ||
| 490 | |||
| 491 | public void resetDirty() | ||
| 492 | { | ||
| 493 | this.isDirty = false; | ||
| 494 | } | ||
| 459 | } | 495 | } |