summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar asie2018-11-27 23:35:26 +0100
committerGravatar asie2018-11-27 23:35:26 +0100
commit4438a04996887882f72f228fe51ff59f27611e55 (patch)
tree7559592a58be47d8a0c7b9543baa8544e2af97b8 /src
parentupdate Guava, show proper constructor tree node, fix AccessFlags.toString (diff)
downloadenigma-4438a04996887882f72f228fe51ff59f27611e55.tar.gz
enigma-4438a04996887882f72f228fe51ff59f27611e55.tar.xz
enigma-4438a04996887882f72f228fe51ff59f27611e55.zip
do not propagate non-argument local variable names
Diffstat (limited to 'src')
-rw-r--r--src/main/java/cuchaz/enigma/analysis/EntryRenamer.java5
-rw-r--r--src/main/java/cuchaz/enigma/analysis/SourceIndexMethodVisitor.java4
-rw-r--r--src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java2
-rw-r--r--src/main/java/cuchaz/enigma/mapping/DirectionalTranslator.java4
-rw-r--r--src/main/java/cuchaz/enigma/mapping/LocalVariableMapping.java5
-rw-r--r--src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java6
-rw-r--r--src/main/java/cuchaz/enigma/mapping/entry/LocalVariableDefEntry.java8
-rw-r--r--src/main/java/cuchaz/enigma/mapping/entry/LocalVariableEntry.java13
8 files changed, 36 insertions, 11 deletions
diff --git a/src/main/java/cuchaz/enigma/analysis/EntryRenamer.java b/src/main/java/cuchaz/enigma/analysis/EntryRenamer.java
index 9be8378e..c474d689 100644
--- a/src/main/java/cuchaz/enigma/analysis/EntryRenamer.java
+++ b/src/main/java/cuchaz/enigma/analysis/EntryRenamer.java
@@ -99,7 +99,8 @@ public class EntryRenamer {
99 return (T) new LocalVariableEntry( 99 return (T) new LocalVariableEntry(
100 renameMethodsInThing(renames, variableEntry.getOwnerEntry()), 100 renameMethodsInThing(renames, variableEntry.getOwnerEntry()),
101 variableEntry.getIndex(), 101 variableEntry.getIndex(),
102 variableEntry.getName() 102 variableEntry.getName(),
103 variableEntry.isParameter()
103 ); 104 );
104 } else if (thing instanceof EntryReference) { 105 } else if (thing instanceof EntryReference) {
105 EntryReference<Entry, Entry> reference = (EntryReference<Entry, Entry>) thing; 106 EntryReference<Entry, Entry> reference = (EntryReference<Entry, Entry>) thing;
@@ -147,7 +148,7 @@ public class EntryRenamer {
147 ); 148 );
148 } else if (thing instanceof LocalVariableEntry) { 149 } else if (thing instanceof LocalVariableEntry) {
149 LocalVariableEntry argumentEntry = (LocalVariableEntry) thing; 150 LocalVariableEntry argumentEntry = (LocalVariableEntry) thing;
150 return (T) new LocalVariableEntry(renameClassesInThing(renames, argumentEntry.getOwnerEntry()), argumentEntry.getIndex(), argumentEntry.getName()); 151 return (T) new LocalVariableEntry(renameClassesInThing(renames, argumentEntry.getOwnerEntry()), argumentEntry.getIndex(), argumentEntry.getName(), argumentEntry.isParameter());
151 } else if (thing instanceof EntryReference) { 152 } else if (thing instanceof EntryReference) {
152 EntryReference<Entry, Entry> reference = (EntryReference<Entry, Entry>) thing; 153 EntryReference<Entry, Entry> reference = (EntryReference<Entry, Entry>) thing;
153 reference.entry = renameClassesInThing(renames, reference.entry); 154 reference.entry = renameClassesInThing(renames, reference.entry);
diff --git a/src/main/java/cuchaz/enigma/analysis/SourceIndexMethodVisitor.java b/src/main/java/cuchaz/enigma/analysis/SourceIndexMethodVisitor.java
index 45f7a0ef..139fceac 100644
--- a/src/main/java/cuchaz/enigma/analysis/SourceIndexMethodVisitor.java
+++ b/src/main/java/cuchaz/enigma/analysis/SourceIndexMethodVisitor.java
@@ -111,7 +111,7 @@ public class SourceIndexMethodVisitor extends SourceIndexVisitor {
111 int parameterIndex = def.getSlot(); 111 int parameterIndex = def.getSlot();
112 112
113 if (parameterIndex >= 0) { 113 if (parameterIndex >= 0) {
114 LocalVariableEntry localVariableEntry = new LocalVariableEntry(methodEntry, parameterIndex, node.getName()); 114 LocalVariableEntry localVariableEntry = new LocalVariableEntry(methodEntry, parameterIndex, node.getName(), true);
115 Identifier identifier = node.getNameToken(); 115 Identifier identifier = node.getNameToken();
116 // cache the argument entry and the identifier 116 // cache the argument entry and the identifier
117 identifierEntryCache.put(identifier.getName(), localVariableEntry); 117 identifierEntryCache.put(identifier.getName(), localVariableEntry);
@@ -184,7 +184,7 @@ public class SourceIndexMethodVisitor extends SourceIndexVisitor {
184 if (originalVariable != null) { 184 if (originalVariable != null) {
185 int variableIndex = originalVariable.getSlot(); 185 int variableIndex = originalVariable.getSlot();
186 if (variableIndex >= 0) { 186 if (variableIndex >= 0) {
187 LocalVariableEntry localVariableEntry = new LocalVariableEntry(methodEntry, variableIndex, initializer.getName()); 187 LocalVariableEntry localVariableEntry = new LocalVariableEntry(methodEntry, variableIndex, initializer.getName(), false);
188 identifierEntryCache.put(identifier.getName(), localVariableEntry); 188 identifierEntryCache.put(identifier.getName(), localVariableEntry);
189 addDeclarationToUnmatched(identifier.getName(), index); 189 addDeclarationToUnmatched(identifier.getName(), index);
190 index.addDeclaration(identifier, localVariableEntry); 190 index.addDeclaration(identifier, localVariableEntry);
diff --git a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java b/src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java
index 48854701..0064153e 100644
--- a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java
+++ b/src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java
@@ -150,7 +150,7 @@ public class TranslationMethodVisitor extends MethodVisitor {
150 int offset = 0; 150 int offset = 0;
151 151
152 for (int index = 0; index < arguments.size(); index++) { 152 for (int index = 0; index < arguments.size(); index++) {
153 LocalVariableEntry entry = new LocalVariableEntry(methodEntry, offset, ""); 153 LocalVariableEntry entry = new LocalVariableEntry(methodEntry, offset, "", true);
154 LocalVariableEntry translatedEntry = translator.getTranslatedVariable(entry); 154 LocalVariableEntry translatedEntry = translator.getTranslatedVariable(entry);
155 String translatedName = translatedEntry.getName(); 155 String translatedName = translatedEntry.getName();
156 if (translatedName.equals(entry.getName())) { 156 if (translatedName.equals(entry.getName())) {
diff --git a/src/main/java/cuchaz/enigma/mapping/DirectionalTranslator.java b/src/main/java/cuchaz/enigma/mapping/DirectionalTranslator.java
index b0bb129d..99a63154 100644
--- a/src/main/java/cuchaz/enigma/mapping/DirectionalTranslator.java
+++ b/src/main/java/cuchaz/enigma/mapping/DirectionalTranslator.java
@@ -203,7 +203,7 @@ public class DirectionalTranslator implements Translator {
203 } 203 }
204 // TODO: Translating arguments calls method translation.. Can we refactor the code in such a way that we don't need this? 204 // TODO: Translating arguments calls method translation.. Can we refactor the code in such a way that we don't need this?
205 MethodEntry translatedOwner = getTranslatedMethod(entry.getOwnerEntry()); 205 MethodEntry translatedOwner = getTranslatedMethod(entry.getOwnerEntry());
206 return new LocalVariableEntry(translatedOwner, entry.getIndex(), translatedArgumentName); 206 return new LocalVariableEntry(translatedOwner, entry.getIndex(), translatedArgumentName, entry.isParameter());
207 } 207 }
208 208
209 @Override 209 @Override
@@ -215,7 +215,7 @@ public class DirectionalTranslator implements Translator {
215 // TODO: Translating arguments calls method translation.. Can we refactor the code in such a way that we don't need this? 215 // TODO: Translating arguments calls method translation.. Can we refactor the code in such a way that we don't need this?
216 MethodDefEntry translatedOwner = getTranslatedMethodDef(entry.getOwnerEntry()); 216 MethodDefEntry translatedOwner = getTranslatedMethodDef(entry.getOwnerEntry());
217 TypeDescriptor translatedTypeDesc = getTranslatedTypeDesc(entry.getDesc()); 217 TypeDescriptor translatedTypeDesc = getTranslatedTypeDesc(entry.getDesc());
218 return new LocalVariableDefEntry(translatedOwner, entry.getIndex(), translatedArgumentName != null ? translatedArgumentName : entry.getName(), translatedTypeDesc); 218 return new LocalVariableDefEntry(translatedOwner, entry.getIndex(), translatedArgumentName != null ? translatedArgumentName : entry.getName(), entry.isParameter(), translatedTypeDesc);
219 } 219 }
220 220
221 @Override 221 @Override
diff --git a/src/main/java/cuchaz/enigma/mapping/LocalVariableMapping.java b/src/main/java/cuchaz/enigma/mapping/LocalVariableMapping.java
index 62dbcf31..bfe66b2c 100644
--- a/src/main/java/cuchaz/enigma/mapping/LocalVariableMapping.java
+++ b/src/main/java/cuchaz/enigma/mapping/LocalVariableMapping.java
@@ -42,10 +42,15 @@ public class LocalVariableMapping implements Comparable<LocalVariableMapping> {
42 this.name = NameValidator.validateArgumentName(val); 42 this.name = NameValidator.validateArgumentName(val);
43 } 43 }
44 44
45 @Deprecated
45 public LocalVariableEntry getObfEntry(MethodEntry methodEntry) { 46 public LocalVariableEntry getObfEntry(MethodEntry methodEntry) {
46 return new LocalVariableEntry(methodEntry, index, name); 47 return new LocalVariableEntry(methodEntry, index, name);
47 } 48 }
48 49
50 public LocalVariableEntry getObfEntry(MethodEntry methodEntry, boolean parameter) {
51 return new LocalVariableEntry(methodEntry, index, name, parameter);
52 }
53
49 @Override 54 @Override
50 public int compareTo(LocalVariableMapping other) { 55 public int compareTo(LocalVariableMapping other) {
51 return Integer.compare(this.index, other.index); 56 return Integer.compare(this.index, other.index);
diff --git a/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java b/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java
index 85b6d2ab..72a12c26 100644
--- a/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java
+++ b/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java
@@ -197,6 +197,10 @@ public class MappingsRenamer {
197 197
198 public void setLocalVariableTreeName(LocalVariableEntry obf, String deobfName) { 198 public void setLocalVariableTreeName(LocalVariableEntry obf, String deobfName) {
199 MethodEntry obfMethod = obf.getOwnerEntry(); 199 MethodEntry obfMethod = obf.getOwnerEntry();
200 if (!obf.isParameter()) {
201 setLocalVariableName(obf, deobfName);
202 return;
203 }
200 204
201 Set<MethodEntry> implementations = index.getRelatedMethodImplementations(obfMethod); 205 Set<MethodEntry> implementations = index.getRelatedMethodImplementations(obfMethod);
202 for (MethodEntry entry : implementations) { 206 for (MethodEntry entry : implementations) {
@@ -219,7 +223,7 @@ public class MappingsRenamer {
219 } 223 }
220 224
221 for (MethodEntry entry : implementations) { 225 for (MethodEntry entry : implementations) {
222 setLocalVariableName(new LocalVariableEntry(entry, obf.getIndex(), obf.getName()), deobfName); 226 setLocalVariableName(new LocalVariableEntry(entry, obf.getIndex(), obf.getName(), obf.isParameter()), deobfName);
223 } 227 }
224 } 228 }
225 229
diff --git a/src/main/java/cuchaz/enigma/mapping/entry/LocalVariableDefEntry.java b/src/main/java/cuchaz/enigma/mapping/entry/LocalVariableDefEntry.java
index 77422720..d1866644 100644
--- a/src/main/java/cuchaz/enigma/mapping/entry/LocalVariableDefEntry.java
+++ b/src/main/java/cuchaz/enigma/mapping/entry/LocalVariableDefEntry.java
@@ -15,7 +15,11 @@ public class LocalVariableDefEntry extends LocalVariableEntry {
15 protected final TypeDescriptor desc; 15 protected final TypeDescriptor desc;
16 16
17 public LocalVariableDefEntry(MethodDefEntry ownerEntry, int index, String name, TypeDescriptor desc) { 17 public LocalVariableDefEntry(MethodDefEntry ownerEntry, int index, String name, TypeDescriptor desc) {
18 super(ownerEntry, index, name); 18 this(ownerEntry, index, name, true, desc);
19 }
20
21 public LocalVariableDefEntry(MethodDefEntry ownerEntry, int index, String name, boolean parameter, TypeDescriptor desc) {
22 super(ownerEntry, index, name, parameter);
19 Preconditions.checkNotNull(desc, "Variable desc cannot be null"); 23 Preconditions.checkNotNull(desc, "Variable desc cannot be null");
20 24
21 this.ownerEntry = ownerEntry; 25 this.ownerEntry = ownerEntry;
@@ -33,7 +37,7 @@ public class LocalVariableDefEntry extends LocalVariableEntry {
33 37
34 @Override 38 @Override
35 public LocalVariableDefEntry updateOwnership(ClassEntry classEntry) { 39 public LocalVariableDefEntry updateOwnership(ClassEntry classEntry) {
36 return new LocalVariableDefEntry(ownerEntry.updateOwnership(classEntry), index, name, desc); 40 return new LocalVariableDefEntry(ownerEntry.updateOwnership(classEntry), index, name, parameter, desc);
37 } 41 }
38 42
39 @Override 43 @Override
diff --git a/src/main/java/cuchaz/enigma/mapping/entry/LocalVariableEntry.java b/src/main/java/cuchaz/enigma/mapping/entry/LocalVariableEntry.java
index a794d0a0..3507b252 100644
--- a/src/main/java/cuchaz/enigma/mapping/entry/LocalVariableEntry.java
+++ b/src/main/java/cuchaz/enigma/mapping/entry/LocalVariableEntry.java
@@ -14,8 +14,14 @@ public class LocalVariableEntry implements Entry {
14 protected final MethodEntry ownerEntry; 14 protected final MethodEntry ownerEntry;
15 protected final String name; 15 protected final String name;
16 protected final int index; 16 protected final int index;
17 protected final boolean parameter;
17 18
19 @Deprecated
18 public LocalVariableEntry(MethodEntry ownerEntry, int index, String name) { 20 public LocalVariableEntry(MethodEntry ownerEntry, int index, String name) {
21 this(ownerEntry, index, name, true);
22 }
23
24 public LocalVariableEntry(MethodEntry ownerEntry, int index, String name, boolean parameter) {
19 Preconditions.checkNotNull(ownerEntry, "Variable owner cannot be null"); 25 Preconditions.checkNotNull(ownerEntry, "Variable owner cannot be null");
20 Preconditions.checkNotNull(name, "Variable name cannot be null"); 26 Preconditions.checkNotNull(name, "Variable name cannot be null");
21 Preconditions.checkArgument(index >= 0, "Index must be positive"); 27 Preconditions.checkArgument(index >= 0, "Index must be positive");
@@ -23,6 +29,11 @@ public class LocalVariableEntry implements Entry {
23 this.ownerEntry = ownerEntry; 29 this.ownerEntry = ownerEntry;
24 this.name = name; 30 this.name = name;
25 this.index = index; 31 this.index = index;
32 this.parameter = parameter;
33 }
34
35 public boolean isParameter() {
36 return this.parameter;
26 } 37 }
27 38
28 public MethodEntry getOwnerEntry() { 39 public MethodEntry getOwnerEntry() {
@@ -50,7 +61,7 @@ public class LocalVariableEntry implements Entry {
50 61
51 @Override 62 @Override
52 public LocalVariableEntry updateOwnership(ClassEntry classEntry) { 63 public LocalVariableEntry updateOwnership(ClassEntry classEntry) {
53 return new LocalVariableEntry(ownerEntry.updateOwnership(classEntry), index, name); 64 return new LocalVariableEntry(ownerEntry.updateOwnership(classEntry), index, name, parameter);
54 } 65 }
55 66
56 public String getMethodName() { 67 public String getMethodName() {