summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/analysis/SourceIndex.java
diff options
context:
space:
mode:
authorGravatar jeff2014-09-28 15:20:54 -0400
committerGravatar jeff2014-09-28 15:20:54 -0400
commitcf3ffcee30083a71e68e3edb9ecbb936cc255992 (patch)
treef9a6415d7eef1e76640b07238d2d08daecedde17 /src/cuchaz/enigma/analysis/SourceIndex.java
parentimplemented mark-as-deobfuscated and reset-to-obfuscated (diff)
downloadenigma-fork-cf3ffcee30083a71e68e3edb9ecbb936cc255992.tar.gz
enigma-fork-cf3ffcee30083a71e68e3edb9ecbb936cc255992.tar.xz
enigma-fork-cf3ffcee30083a71e68e3edb9ecbb936cc255992.zip
added proper support for renaming constructors
Diffstat (limited to '')
-rw-r--r--src/cuchaz/enigma/analysis/SourceIndex.java29
1 files changed, 22 insertions, 7 deletions
diff --git a/src/cuchaz/enigma/analysis/SourceIndex.java b/src/cuchaz/enigma/analysis/SourceIndex.java
index 38d10da..faae1a1 100644
--- a/src/cuchaz/enigma/analysis/SourceIndex.java
+++ b/src/cuchaz/enigma/analysis/SourceIndex.java
@@ -21,6 +21,7 @@ import com.google.common.collect.Maps;
21import com.google.common.collect.Multimap; 21import com.google.common.collect.Multimap;
22import com.strobel.decompiler.languages.Region; 22import com.strobel.decompiler.languages.Region;
23import com.strobel.decompiler.languages.java.ast.AstNode; 23import com.strobel.decompiler.languages.java.ast.AstNode;
24import com.strobel.decompiler.languages.java.ast.Identifier;
24 25
25import cuchaz.enigma.mapping.Entry; 26import cuchaz.enigma.mapping.Entry;
26 27
@@ -58,40 +59,54 @@ public class SourceIndex
58 59
59 public Token getToken( AstNode node ) 60 public Token getToken( AstNode node )
60 { 61 {
62 // get the text of the node
63 String name = "";
64 if( node instanceof Identifier )
65 {
66 name = ((Identifier)node).getName();
67 }
68
61 // get a token for this node's region 69 // get a token for this node's region
62 Region region = node.getRegion(); 70 Region region = node.getRegion();
63 if( region.getBeginLine() == 0 || region.getEndLine() == 0 ) 71 if( region.getBeginLine() == 0 || region.getEndLine() == 0 )
64 { 72 {
65 // DEBUG 73 // DEBUG
66 //System.err.println( "WARNING: " + node.getNodeType() + " node has invalid region: " + region ); 74 System.err.println( String.format( "WARNING: %s \"%s\" has invalid region: %s", node.getNodeType(), name, region ) );
67 return null; 75 return null;
68 } 76 }
69 Token token = new Token( 77 Token token = new Token(
70 toPos( region.getBeginLine(), region.getBeginColumn() ), 78 toPos( region.getBeginLine(), region.getBeginColumn() ),
71 toPos( region.getEndLine(), region.getEndColumn() ) 79 toPos( region.getEndLine(), region.getEndColumn() ),
80 m_source
72 ); 81 );
73 if( token.start == 0 ) 82 if( token.start == 0 )
74 { 83 {
75 // DEBUG 84 // DEBUG
76 //System.err.println( "WARNING: " + node.getNodeType() + " node has invalid start: " + region ); 85 System.err.println( String.format( "WARNING: %s \"%s\" has invalid start: %s", node.getNodeType(), name, region ) );
77 return null; 86 return null;
78 } 87 }
79 88
89 // DEBUG
90 //System.out.println( String.format( "%s \"%s\" region: %s", node.getNodeType(), name, region ) );
91
92 /* TODO: double check that we still need this
80 // for tokens representing inner classes, make sure we only get the simple name 93 // for tokens representing inner classes, make sure we only get the simple name
81 int pos = node.toString().lastIndexOf( '$' ); 94 int pos = node.getText().lastIndexOf( '$' );
82 if( pos >= 0 ) 95 if( pos >= 0 )
83 { 96 {
84 token.end -= pos + 1; 97 token.end -= pos + 1;
85 } 98 }
99 */
86 100
87 return token; 101 return token;
88 } 102 }
89 103
90 public void addReference( AstNode node, EntryReference<Entry,Entry> deobfReference ) 104 public void addReference( AstNode node, Entry deobfEntry, Entry deobfContext )
91 { 105 {
92 Token token = getToken( node ); 106 Token token = getToken( node );
93 if( token != null ) 107 if( token != null )
94 { 108 {
109 EntryReference<Entry,Entry> deobfReference = new EntryReference<Entry,Entry>( deobfEntry, token.text, deobfContext );
95 m_tokenToReference.put( token, deobfReference ); 110 m_tokenToReference.put( token, deobfReference );
96 m_referenceToTokens.put( deobfReference, token ); 111 m_referenceToTokens.put( deobfReference, token );
97 } 112 }
@@ -102,7 +117,7 @@ public class SourceIndex
102 Token token = getToken( node ); 117 Token token = getToken( node );
103 if( token != null ) 118 if( token != null )
104 { 119 {
105 EntryReference<Entry,Entry> reference = new EntryReference<Entry,Entry>( deobfEntry ); 120 EntryReference<Entry,Entry> reference = new EntryReference<Entry,Entry>( deobfEntry, token.text );
106 m_tokenToReference.put( token, reference ); 121 m_tokenToReference.put( token, reference );
107 m_referenceToTokens.put( reference, token ); 122 m_referenceToTokens.put( reference, token );
108 m_declarationToToken.put( deobfEntry, token ); 123 m_declarationToToken.put( deobfEntry, token );
@@ -111,7 +126,7 @@ public class SourceIndex
111 126
112 public Token getReferenceToken( int pos ) 127 public Token getReferenceToken( int pos )
113 { 128 {
114 Token token = m_tokenToReference.floorKey( new Token( pos, pos ) ); 129 Token token = m_tokenToReference.floorKey( new Token( pos, pos, null ) );
115 if( token != null && token.contains( pos ) ) 130 if( token != null && token.contains( pos ) )
116 { 131 {
117 return token; 132 return token;