summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/analysis/SourceIndexBehaviorVisitor.java
diff options
context:
space:
mode:
authorGravatar jeff2014-09-14 23:56:43 -0400
committerGravatar jeff2014-09-14 23:56:43 -0400
commit72e918a5134c2bf747a476284bcfa1bd2ef2fa21 (patch)
tree2fd256d6a8bbe38b7b9fe1892f444a8c29de08ef /src/cuchaz/enigma/analysis/SourceIndexBehaviorVisitor.java
parentadded test to check constructor references (diff)
downloadenigma-fork-72e918a5134c2bf747a476284bcfa1bd2ef2fa21.tar.gz
enigma-fork-72e918a5134c2bf747a476284bcfa1bd2ef2fa21.tar.xz
enigma-fork-72e918a5134c2bf747a476284bcfa1bd2ef2fa21.zip
added tests to check constructor tokens
fixed a bug with constructor tokens too
Diffstat (limited to 'src/cuchaz/enigma/analysis/SourceIndexBehaviorVisitor.java')
-rw-r--r--src/cuchaz/enigma/analysis/SourceIndexBehaviorVisitor.java51
1 files changed, 45 insertions, 6 deletions
diff --git a/src/cuchaz/enigma/analysis/SourceIndexBehaviorVisitor.java b/src/cuchaz/enigma/analysis/SourceIndexBehaviorVisitor.java
index ab50552..a1dac4b 100644
--- a/src/cuchaz/enigma/analysis/SourceIndexBehaviorVisitor.java
+++ b/src/cuchaz/enigma/analysis/SourceIndexBehaviorVisitor.java
@@ -12,9 +12,11 @@ package cuchaz.enigma.analysis;
12 12
13import com.strobel.assembler.metadata.MemberReference; 13import com.strobel.assembler.metadata.MemberReference;
14import com.strobel.assembler.metadata.MethodDefinition; 14import com.strobel.assembler.metadata.MethodDefinition;
15import com.strobel.assembler.metadata.MethodReference;
15import com.strobel.assembler.metadata.ParameterDefinition; 16import com.strobel.assembler.metadata.ParameterDefinition;
16import com.strobel.assembler.metadata.TypeReference; 17import com.strobel.assembler.metadata.TypeReference;
17import com.strobel.decompiler.languages.TextLocation; 18import com.strobel.decompiler.languages.TextLocation;
19import com.strobel.decompiler.languages.java.ast.AstNode;
18import com.strobel.decompiler.languages.java.ast.ConstructorDeclaration; 20import com.strobel.decompiler.languages.java.ast.ConstructorDeclaration;
19import com.strobel.decompiler.languages.java.ast.IdentifierExpression; 21import com.strobel.decompiler.languages.java.ast.IdentifierExpression;
20import com.strobel.decompiler.languages.java.ast.InvocationExpression; 22import com.strobel.decompiler.languages.java.ast.InvocationExpression;
@@ -24,6 +26,8 @@ import com.strobel.decompiler.languages.java.ast.MethodDeclaration;
24import com.strobel.decompiler.languages.java.ast.ObjectCreationExpression; 26import com.strobel.decompiler.languages.java.ast.ObjectCreationExpression;
25import com.strobel.decompiler.languages.java.ast.ParameterDeclaration; 27import com.strobel.decompiler.languages.java.ast.ParameterDeclaration;
26import com.strobel.decompiler.languages.java.ast.SimpleType; 28import com.strobel.decompiler.languages.java.ast.SimpleType;
29import com.strobel.decompiler.languages.java.ast.SuperReferenceExpression;
30import com.strobel.decompiler.languages.java.ast.ThisReferenceExpression;
27 31
28import cuchaz.enigma.mapping.ArgumentEntry; 32import cuchaz.enigma.mapping.ArgumentEntry;
29import cuchaz.enigma.mapping.BehaviorEntry; 33import cuchaz.enigma.mapping.BehaviorEntry;
@@ -58,14 +62,49 @@ public class SourceIndexBehaviorVisitor extends SourceIndexVisitor
58 public Void visitInvocationExpression( InvocationExpression node, SourceIndex index ) 62 public Void visitInvocationExpression( InvocationExpression node, SourceIndex index )
59 { 63 {
60 MemberReference ref = node.getUserData( Keys.MEMBER_REFERENCE ); 64 MemberReference ref = node.getUserData( Keys.MEMBER_REFERENCE );
65
66 // get the behavior entry
61 ClassEntry classEntry = new ClassEntry( ref.getDeclaringType().getInternalName() ); 67 ClassEntry classEntry = new ClassEntry( ref.getDeclaringType().getInternalName() );
62 if( node.getTarget() instanceof MemberReferenceExpression ) 68 BehaviorEntry behaviorEntry = null;
69 if( ref instanceof MethodReference )
63 { 70 {
64 MethodEntry methodEntry = new MethodEntry( classEntry, ref.getName(), ref.getSignature() ); 71 MethodReference methodRef = (MethodReference)ref;
65 index.addReference( 72 if( methodRef.isConstructor() )
66 ((MemberReferenceExpression)node.getTarget()).getMemberNameToken(), 73 {
67 new EntryReference<Entry,Entry>( methodEntry, m_behaviorEntry ) 74 behaviorEntry = new ConstructorEntry( classEntry, ref.getSignature() );
68 ); 75 }
76 else if( methodRef.isTypeInitializer() )
77 {
78 behaviorEntry = new ConstructorEntry( classEntry );
79 }
80 else
81 {
82 behaviorEntry = new MethodEntry( classEntry, ref.getName(), ref.getSignature() );
83 }
84 }
85 if( behaviorEntry != null )
86 {
87 // get the node for the token
88 AstNode tokenNode = null;
89 if( node.getTarget() instanceof MemberReferenceExpression )
90 {
91 tokenNode = ((MemberReferenceExpression)node.getTarget()).getMemberNameToken();
92 }
93 else if( node.getTarget() instanceof SuperReferenceExpression )
94 {
95 tokenNode = node.getTarget();
96 }
97 else if( node.getTarget() instanceof ThisReferenceExpression )
98 {
99 tokenNode = node.getTarget();
100 }
101 if( tokenNode != null )
102 {
103 index.addReference(
104 tokenNode,
105 new EntryReference<Entry,Entry>( behaviorEntry, m_behaviorEntry )
106 );
107 }
69 } 108 }
70 109
71 return recurse( node, index ); 110 return recurse( node, index );