diff options
| author | 2016-09-24 15:21:51 +0200 | |
|---|---|---|
| committer | 2016-09-24 15:21:51 +0200 | |
| commit | aa031d1cbd1a6ca0d15ff72310e95600737f17c2 (patch) | |
| tree | 10bea22bcfeb085d5810eddf27b43d01ba3e5743 | |
| parent | Add 'enigma.useSystemLookAndFeel' system property (#30) (diff) | |
| download | enigma-aa031d1cbd1a6ca0d15ff72310e95600737f17c2.tar.gz enigma-aa031d1cbd1a6ca0d15ff72310e95600737f17c2.tar.xz enigma-aa031d1cbd1a6ca0d15ff72310e95600737f17c2.zip | |
Allow renaming method arguments where they're used (Fix #32)
| -rw-r--r-- | src/main/java/cuchaz/enigma/analysis/SourceIndexBehaviorVisitor.java | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/src/main/java/cuchaz/enigma/analysis/SourceIndexBehaviorVisitor.java b/src/main/java/cuchaz/enigma/analysis/SourceIndexBehaviorVisitor.java index 9a98b918..c328f5f1 100644 --- a/src/main/java/cuchaz/enigma/analysis/SourceIndexBehaviorVisitor.java +++ b/src/main/java/cuchaz/enigma/analysis/SourceIndexBehaviorVisitor.java | |||
| @@ -10,20 +10,24 @@ | |||
| 10 | ******************************************************************************/ | 10 | ******************************************************************************/ |
| 11 | package cuchaz.enigma.analysis; | 11 | package cuchaz.enigma.analysis; |
| 12 | 12 | ||
| 13 | import com.strobel.assembler.metadata.*; | 13 | import com.strobel.assembler.metadata.MemberReference; |
| 14 | import com.strobel.assembler.metadata.MethodReference; | ||
| 15 | import com.strobel.assembler.metadata.ParameterDefinition; | ||
| 16 | import com.strobel.assembler.metadata.TypeReference; | ||
| 14 | import com.strobel.decompiler.languages.TextLocation; | 17 | import com.strobel.decompiler.languages.TextLocation; |
| 15 | import com.strobel.decompiler.languages.java.ast.*; | 18 | import com.strobel.decompiler.languages.java.ast.*; |
| 16 | |||
| 17 | import java.lang.Error; | ||
| 18 | |||
| 19 | import cuchaz.enigma.mapping.*; | 19 | import cuchaz.enigma.mapping.*; |
| 20 | 20 | ||
| 21 | import java.util.HashMap; | ||
| 22 | import java.util.Map; | ||
| 23 | |||
| 21 | public class SourceIndexBehaviorVisitor extends SourceIndexVisitor { | 24 | public class SourceIndexBehaviorVisitor extends SourceIndexVisitor { |
| 22 | 25 | ||
| 23 | private BehaviorEntry behaviorEntry; | 26 | private BehaviorEntry behaviorEntry; |
| 24 | 27 | ||
| 25 | // TODO: Really fix Procyon index problem with inner classes | 28 | // TODO: Really fix Procyon index problem with inner classes |
| 26 | private int argumentPosition; | 29 | private int argumentPosition; |
| 30 | private Map<String, Entry> argumentCache = new HashMap<>(); | ||
| 27 | 31 | ||
| 28 | public SourceIndexBehaviorVisitor(BehaviorEntry behaviorEntry) { | 32 | public SourceIndexBehaviorVisitor(BehaviorEntry behaviorEntry) { |
| 29 | this.behaviorEntry = behaviorEntry; | 33 | this.behaviorEntry = behaviorEntry; |
| @@ -96,11 +100,15 @@ public class SourceIndexBehaviorVisitor extends SourceIndexVisitor { | |||
| 96 | @Override | 100 | @Override |
| 97 | public Void visitParameterDeclaration(ParameterDeclaration node, SourceIndex index) { | 101 | public Void visitParameterDeclaration(ParameterDeclaration node, SourceIndex index) { |
| 98 | ParameterDefinition def = node.getUserData(Keys.PARAMETER_DEFINITION); | 102 | ParameterDefinition def = node.getUserData(Keys.PARAMETER_DEFINITION); |
| 99 | if (def.getMethod() instanceof MemberReference) | 103 | if (def.getMethod() instanceof MemberReference && def.getMethod() instanceof MethodReference) |
| 100 | if (def.getMethod() instanceof MethodReference) | 104 | { |
| 101 | index.addDeclaration(node.getNameToken(), | 105 | ArgumentEntry argumentEntry = new ArgumentEntry(ProcyonEntryFactory.getBehaviorEntry((MethodReference) def.getMethod()), |
| 102 | new ArgumentEntry(ProcyonEntryFactory.getBehaviorEntry((MethodReference) def.getMethod()), | 106 | argumentPosition++, node.getName()); |
| 103 | argumentPosition++, node.getName())); | 107 | Identifier identifier = node.getNameToken(); |
| 108 | // cache the argument entry and the identifier | ||
| 109 | argumentCache.put(identifier.getName(), argumentEntry); | ||
| 110 | index.addDeclaration(identifier, argumentEntry); | ||
| 111 | } | ||
| 104 | 112 | ||
| 105 | return recurse(node, index); | 113 | return recurse(node, index); |
| 106 | } | 114 | } |
| @@ -113,6 +121,8 @@ public class SourceIndexBehaviorVisitor extends SourceIndexVisitor { | |||
| 113 | FieldEntry fieldEntry = new FieldEntry(classEntry, ref.getName(), new Type(ref.getErasedSignature())); | 121 | FieldEntry fieldEntry = new FieldEntry(classEntry, ref.getName(), new Type(ref.getErasedSignature())); |
| 114 | index.addReference(node.getIdentifierToken(), fieldEntry, this.behaviorEntry); | 122 | index.addReference(node.getIdentifierToken(), fieldEntry, this.behaviorEntry); |
| 115 | } | 123 | } |
| 124 | else if (argumentCache.containsKey(node.getIdentifier())) // If it's in the argument cache, create a token! | ||
| 125 | index.addDeclaration(node.getIdentifierToken(), argumentCache.get(node.getIdentifier())); | ||
| 116 | 126 | ||
| 117 | return recurse(node, index); | 127 | return recurse(node, index); |
| 118 | } | 128 | } |