summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/cuchaz/enigma/Deobfuscator.java2
-rw-r--r--src/main/java/cuchaz/enigma/mapping/ArgumentEntry.java6
-rw-r--r--src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java21
3 files changed, 28 insertions, 1 deletions
diff --git a/src/main/java/cuchaz/enigma/Deobfuscator.java b/src/main/java/cuchaz/enigma/Deobfuscator.java
index b2f361e9..4bd9414d 100644
--- a/src/main/java/cuchaz/enigma/Deobfuscator.java
+++ b/src/main/java/cuchaz/enigma/Deobfuscator.java
@@ -463,7 +463,7 @@ public class Deobfuscator {
463 } else if (obfEntry instanceof ConstructorEntry) { 463 } else if (obfEntry instanceof ConstructorEntry) {
464 throw new IllegalArgumentException("Cannot rename constructors"); 464 throw new IllegalArgumentException("Cannot rename constructors");
465 } else if (obfEntry instanceof ArgumentEntry) { 465 } else if (obfEntry instanceof ArgumentEntry) {
466 this.renamer.setArgumentName((ArgumentEntry) obfEntry, newName); 466 this.renamer.setArgumentTreeName((ArgumentEntry) obfEntry, newName);
467 } else { 467 } else {
468 throw new Error("Unknown entry type: " + obfEntry.getClass().getName()); 468 throw new Error("Unknown entry type: " + obfEntry.getClass().getName());
469 } 469 }
diff --git a/src/main/java/cuchaz/enigma/mapping/ArgumentEntry.java b/src/main/java/cuchaz/enigma/mapping/ArgumentEntry.java
index 741849a9..662516da 100644
--- a/src/main/java/cuchaz/enigma/mapping/ArgumentEntry.java
+++ b/src/main/java/cuchaz/enigma/mapping/ArgumentEntry.java
@@ -46,6 +46,12 @@ public class ArgumentEntry implements Entry {
46 this.name = other.name; 46 this.name = other.name;
47 } 47 }
48 48
49 public ArgumentEntry(ArgumentEntry other, BehaviorEntry entry) {
50 this.behaviorEntry = entry;
51 this.index = other.index;
52 this.name = other.name;
53 }
54
49 public BehaviorEntry getBehaviorEntry() { 55 public BehaviorEntry getBehaviorEntry() {
50 return this.behaviorEntry; 56 return this.behaviorEntry;
51 } 57 }
diff --git a/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java b/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java
index 80028137..5d23dc0b 100644
--- a/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java
+++ b/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java
@@ -148,6 +148,27 @@ public class MappingsRenamer {
148 classMapping.setMethodName(obf.getName(), obf.getSignature(), obf.getName()); 148 classMapping.setMethodName(obf.getName(), obf.getSignature(), obf.getName());
149 } 149 }
150 150
151 public void setArgumentTreeName(ArgumentEntry obf, String deobfName) {
152 if (!(obf.getBehaviorEntry() instanceof MethodEntry)) {
153 setArgumentName(obf, deobfName);
154 return;
155 }
156
157 MethodEntry obfMethod = (MethodEntry) obf.getBehaviorEntry();
158
159 Set<MethodEntry> implementations = m_index.getRelatedMethodImplementations(obfMethod);
160 for (MethodEntry entry : implementations) {
161 // NOTE: don't need to check arguments for name collisions with names determined by Procyon
162 if (m_mappings.containsArgument(entry, deobfName)) {
163 throw new IllegalNameException(deobfName, "There is already an argument with that name");
164 }
165 }
166
167 for (MethodEntry entry : implementations) {
168 setArgumentName(new ArgumentEntry(obf, entry), deobfName);
169 }
170 }
171
151 public void setArgumentName(ArgumentEntry obf, String deobfName) { 172 public void setArgumentName(ArgumentEntry obf, String deobfName) {
152 deobfName = NameValidator.validateArgumentName(deobfName); 173 deobfName = NameValidator.validateArgumentName(deobfName);
153 // NOTE: don't need to check arguments for name collisions with names determined by Procyon 174 // NOTE: don't need to check arguments for name collisions with names determined by Procyon