summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/analysis/SourceIndex.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/cuchaz/enigma/analysis/SourceIndex.java')
-rw-r--r--src/cuchaz/enigma/analysis/SourceIndex.java31
1 files changed, 23 insertions, 8 deletions
diff --git a/src/cuchaz/enigma/analysis/SourceIndex.java b/src/cuchaz/enigma/analysis/SourceIndex.java
index 531f3e0..645a71d 100644
--- a/src/cuchaz/enigma/analysis/SourceIndex.java
+++ b/src/cuchaz/enigma/analysis/SourceIndex.java
@@ -17,7 +17,7 @@ import java.util.TreeMap;
17import com.google.common.collect.Lists; 17import com.google.common.collect.Lists;
18import com.google.common.collect.Maps; 18import com.google.common.collect.Maps;
19import com.strobel.decompiler.languages.Region; 19import com.strobel.decompiler.languages.Region;
20import com.strobel.decompiler.languages.java.ast.AstNode; 20import com.strobel.decompiler.languages.java.ast.Identifier;
21 21
22import cuchaz.enigma.mapping.Entry; 22import cuchaz.enigma.mapping.Entry;
23 23
@@ -51,19 +51,27 @@ public class SourceIndex
51 return m_source; 51 return m_source;
52 } 52 }
53 53
54 public Token getToken( AstNode node ) 54 public Token getToken( Identifier node )
55 { 55 {
56 // get a token for this node's region 56 // get a token for this node's region
57 Region region = node.getRegion(); 57 Region region = node.getRegion();
58 if( region.getBeginLine() == 0 || region.getEndLine() == 0 ) 58 if( region.getBeginLine() == 0 || region.getEndLine() == 0 )
59 { 59 {
60 throw new IllegalArgumentException( "Invalid region: " + region ); 60 System.err.println( "WARNING: " + node.getNodeType() + " node has invalid region: " + region );
61 return null;
61 } 62 }
62 Token token = new Token( 63 Token token = new Token(
63 toPos( region.getBeginLine(), region.getBeginColumn() ), 64 toPos( region.getBeginLine(), region.getBeginColumn() ),
64 toPos( region.getEndLine(), region.getEndColumn() ) 65 toPos( region.getEndLine(), region.getEndColumn() )
65 ); 66 );
66 67
68 // for tokens representing inner classes, make sure we only get the simple name
69 int pos = node.getName().lastIndexOf( '$' );
70 if( pos >= 0 )
71 {
72 token.end -= pos + 1;
73 }
74
67 // HACKHACK: sometimes node regions are off by one 75 // HACKHACK: sometimes node regions are off by one
68 // I think this is a bug in Procyon, but it's easy to work around 76 // I think this is a bug in Procyon, but it's easy to work around
69 if( !Character.isJavaIdentifierStart( m_source.charAt( token.start ) ) ) 77 if( !Character.isJavaIdentifierStart( m_source.charAt( token.start ) ) )
@@ -79,16 +87,23 @@ public class SourceIndex
79 return token; 87 return token;
80 } 88 }
81 89
82 public void add( AstNode node, Entry deobfEntry ) 90 public void add( Identifier node, Entry deobfEntry )
83 { 91 {
84 m_tokens.put( getToken( node ), deobfEntry ); 92 Token token = getToken( node );
93 if( token != null )
94 {
95 m_tokens.put( token, deobfEntry );
96 }
85 } 97 }
86 98
87 public void addDeclaration( AstNode node, Entry deobfEntry ) 99 public void addDeclaration( Identifier node, Entry deobfEntry )
88 { 100 {
89 Token token = getToken( node ); 101 Token token = getToken( node );
90 m_tokens.put( token, deobfEntry ); 102 if( token != null )
91 m_declarations.put( deobfEntry, token ); 103 {
104 m_tokens.put( token, deobfEntry );
105 m_declarations.put( deobfEntry, token );
106 }
92 } 107 }
93 108
94 public Token getToken( int pos ) 109 public Token getToken( int pos )