summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/analysis/SourcedAst.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/cuchaz/enigma/analysis/SourcedAst.java')
-rw-r--r--src/cuchaz/enigma/analysis/SourcedAst.java43
1 files changed, 27 insertions, 16 deletions
diff --git a/src/cuchaz/enigma/analysis/SourcedAst.java b/src/cuchaz/enigma/analysis/SourcedAst.java
index 968c880..a88cc75 100644
--- a/src/cuchaz/enigma/analysis/SourcedAst.java
+++ b/src/cuchaz/enigma/analysis/SourcedAst.java
@@ -16,7 +16,6 @@ import java.util.HashMap;
16import javassist.bytecode.Descriptor; 16import javassist.bytecode.Descriptor;
17 17
18import com.google.common.collect.Maps; 18import com.google.common.collect.Maps;
19import com.sun.source.tree.ClassTree;
20import com.sun.source.tree.CompilationUnitTree; 19import com.sun.source.tree.CompilationUnitTree;
21import com.sun.source.tree.ImportTree; 20import com.sun.source.tree.ImportTree;
22import com.sun.source.tree.Tree; 21import com.sun.source.tree.Tree;
@@ -29,6 +28,7 @@ public class SourcedAst
29 private Trees m_trees; 28 private Trees m_trees;
30 private SourcePositions m_positions; 29 private SourcePositions m_positions;
31 private HashMap<String,String> m_classNameIndex; 30 private HashMap<String,String> m_classNameIndex;
31 private String m_packageName;
32 32
33 public SourcedAst( CompilationUnitTree tree, Trees trees ) 33 public SourcedAst( CompilationUnitTree tree, Trees trees )
34 { 34 {
@@ -49,6 +49,13 @@ public class SourcedAst
49 // get the full and simple class names 49 // get the full and simple class names
50 String fullName = Descriptor.toJvmName( importTree.getQualifiedIdentifier().toString() ); 50 String fullName = Descriptor.toJvmName( importTree.getQualifiedIdentifier().toString() );
51 String simpleName = fullName; 51 String simpleName = fullName;
52
53 if( fullName.startsWith( "__DEFAULT__/" ) )
54 {
55 // remove the default package flag
56 fullName = fullName.substring( 12 );
57 }
58
52 String[] parts = fullName.split( "/" ); 59 String[] parts = fullName.split( "/" );
53 if( parts.length > 0 ) 60 if( parts.length > 0 )
54 { 61 {
@@ -58,30 +65,26 @@ public class SourcedAst
58 m_classNameIndex.put( simpleName, fullName ); 65 m_classNameIndex.put( simpleName, fullName );
59 } 66 }
60 67
61 // index the self class using the package name 68 // get the package name
69 m_packageName = null;
62 if( m_tree.getPackageName() != null ) 70 if( m_tree.getPackageName() != null )
63 { 71 {
64 String packageName = Descriptor.toJvmName( m_tree.getPackageName().toString() ); 72 m_packageName = Descriptor.toJvmName( m_tree.getPackageName().toString() );
65 for( Tree typeTree : m_tree.getTypeDecls() )
66 {
67 if( typeTree instanceof ClassTree )
68 {
69 ClassTree classTree = (ClassTree)typeTree;
70 String className = classTree.getSimpleName().toString();
71 m_classNameIndex.put( className, packageName + "/" + className );
72 }
73 }
74 } 73 }
75 } 74 }
76 75
77 public int getStart( Tree node ) 76 public int getStart( Tree node )
78 { 77 {
79 return (int)m_positions.getStartPosition( m_tree, node ); 78 int pos = (int)m_positions.getStartPosition( m_tree, node );
79 assert( pos >= 0 );
80 return pos;
80 } 81 }
81 82
82 public int getEnd( Tree node ) 83 public int getEnd( Tree node )
83 { 84 {
84 return (int)m_positions.getEndPosition( m_tree, node ); 85 int pos = (int)m_positions.getEndPosition( m_tree, node );
86 assert( pos >= 0 );
87 return pos;
85 } 88 }
86 89
87 public int getLine( Tree node ) 90 public int getLine( Tree node )
@@ -121,8 +124,16 @@ public class SourcedAst
121 String fullClassName = m_classNameIndex.get( simpleClassName ); 124 String fullClassName = m_classNameIndex.get( simpleClassName );
122 if( fullClassName == null ) 125 if( fullClassName == null )
123 { 126 {
124 // no mapping was found, the name is probably already fully-qualified 127 if( m_packageName != null )
125 fullClassName = simpleClassName; 128 {
129 // no mapping was found, assume it's in the package
130 fullClassName = m_packageName + "/" + simpleClassName;
131 }
132 else
133 {
134 // this must be in the default package
135 fullClassName = simpleClassName;
136 }
126 } 137 }
127 return fullClassName; 138 return fullClassName;
128 } 139 }