diff options
| author | 2018-11-27 23:35:26 +0100 | |
|---|---|---|
| committer | 2018-11-27 23:35:26 +0100 | |
| commit | 4438a04996887882f72f228fe51ff59f27611e55 (patch) | |
| tree | 7559592a58be47d8a0c7b9543baa8544e2af97b8 /src | |
| parent | update Guava, show proper constructor tree node, fix AccessFlags.toString (diff) | |
| download | enigma-4438a04996887882f72f228fe51ff59f27611e55.tar.gz enigma-4438a04996887882f72f228fe51ff59f27611e55.tar.xz enigma-4438a04996887882f72f228fe51ff59f27611e55.zip | |
do not propagate non-argument local variable names
Diffstat (limited to 'src')
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() { |