summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar Thog2016-09-24 15:21:51 +0200
committerGravatar Thog2016-09-24 15:21:51 +0200
commitaa031d1cbd1a6ca0d15ff72310e95600737f17c2 (patch)
tree10bea22bcfeb085d5810eddf27b43d01ba3e5743 /src/main/java
parentAdd 'enigma.useSystemLookAndFeel' system property (#30) (diff)
downloadenigma-aa031d1cbd1a6ca0d15ff72310e95600737f17c2.tar.gz
enigma-aa031d1cbd1a6ca0d15ff72310e95600737f17c2.tar.xz
enigma-aa031d1cbd1a6ca0d15ff72310e95600737f17c2.zip
Allow renaming method arguments where they're used (Fix #32)
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/cuchaz/enigma/analysis/SourceIndexBehaviorVisitor.java28
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 ******************************************************************************/
11package cuchaz.enigma.analysis; 11package cuchaz.enigma.analysis;
12 12
13import com.strobel.assembler.metadata.*; 13import com.strobel.assembler.metadata.MemberReference;
14import com.strobel.assembler.metadata.MethodReference;
15import com.strobel.assembler.metadata.ParameterDefinition;
16import com.strobel.assembler.metadata.TypeReference;
14import com.strobel.decompiler.languages.TextLocation; 17import com.strobel.decompiler.languages.TextLocation;
15import com.strobel.decompiler.languages.java.ast.*; 18import com.strobel.decompiler.languages.java.ast.*;
16
17import java.lang.Error;
18
19import cuchaz.enigma.mapping.*; 19import cuchaz.enigma.mapping.*;
20 20
21import java.util.HashMap;
22import java.util.Map;
23
21public class SourceIndexBehaviorVisitor extends SourceIndexVisitor { 24public 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 }