summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/analysis/JarClassIterator.java
diff options
context:
space:
mode:
authorGravatar jeff2014-08-23 23:43:31 -0400
committerGravatar jeff2014-08-23 23:43:31 -0400
commit8fa1741b621644ef84a9395a4c395d4ff3a89207 (patch)
tree9cc054e2636dd13a32950ad68dba212275d33026 /src/cuchaz/enigma/analysis/JarClassIterator.java
parentadded export command with progress bar (diff)
downloadenigma-fork-8fa1741b621644ef84a9395a4c395d4ff3a89207.tar.gz
enigma-fork-8fa1741b621644ef84a9395a4c395d4ff3a89207.tar.xz
enigma-fork-8fa1741b621644ef84a9395a4c395d4ff3a89207.zip
moved all classes from the default package into a package called "default" so they can be properly imported by other classes
Diffstat (limited to 'src/cuchaz/enigma/analysis/JarClassIterator.java')
-rw-r--r--src/cuchaz/enigma/analysis/JarClassIterator.java45
1 files changed, 27 insertions, 18 deletions
diff --git a/src/cuchaz/enigma/analysis/JarClassIterator.java b/src/cuchaz/enigma/analysis/JarClassIterator.java
index cf6df80..6c9f124 100644
--- a/src/cuchaz/enigma/analysis/JarClassIterator.java
+++ b/src/cuchaz/enigma/analysis/JarClassIterator.java
@@ -28,6 +28,7 @@ import javassist.bytecode.Descriptor;
28import com.beust.jcommander.internal.Lists; 28import com.beust.jcommander.internal.Lists;
29 29
30import cuchaz.enigma.Constants; 30import cuchaz.enigma.Constants;
31import cuchaz.enigma.mapping.ClassEntry;
31 32
32public class JarClassIterator implements Iterator<CtClass> 33public class JarClassIterator implements Iterator<CtClass>
33{ 34{
@@ -36,13 +37,22 @@ public class JarClassIterator implements Iterator<CtClass>
36 37
37 public JarClassIterator( JarFile jar ) 38 public JarClassIterator( JarFile jar )
38 { 39 {
39 this( jar, getClassEntries( jar ) );
40 }
41
42 public JarClassIterator( JarFile jar, List<JarEntry> entries )
43 {
44 m_jar = jar; 40 m_jar = jar;
45 m_iter = entries.iterator(); 41
42 // get the jar entries that correspond to classes
43 List<JarEntry> classEntries = Lists.newArrayList();
44 Enumeration<JarEntry> entries = m_jar.entries();
45 while( entries.hasMoreElements() )
46 {
47 JarEntry entry = entries.nextElement();
48
49 // is this a class file?
50 if( entry.getName().endsWith( ".class" ) )
51 {
52 classEntries.add( entry );
53 }
54 }
55 m_iter = classEntries.iterator();
46 } 56 }
47 57
48 @Override 58 @Override
@@ -79,19 +89,13 @@ public class JarClassIterator implements Iterator<CtClass>
79 } 89 }
80 } 90 }
81 91
82 // determine the class name (ie chop off the ".class")
83 String className = Descriptor.toJavaName( entry.getName().substring( 0, entry.getName().length() - ".class".length() ) );
84
85 // get a javassist handle for the class 92 // get a javassist handle for the class
93 String className = Descriptor.toJavaName( getClassEntry( entry ).getName() );
86 ClassPool classPool = new ClassPool(); 94 ClassPool classPool = new ClassPool();
87 classPool.insertClassPath( new ByteArrayClassPath( className, bos.toByteArray() ) ); 95 classPool.insertClassPath( new ByteArrayClassPath( className, bos.toByteArray() ) );
88 return classPool.get( className ); 96 return classPool.get( className );
89 } 97 }
90 catch( IOException ex ) 98 catch( IOException | NotFoundException ex )
91 {
92 throw new Error( "Unable to read class: " + entry.getName() );
93 }
94 catch( NotFoundException ex )
95 { 99 {
96 throw new Error( "Unable to load class: " + entry.getName() ); 100 throw new Error( "Unable to load class: " + entry.getName() );
97 } 101 }
@@ -103,9 +107,9 @@ public class JarClassIterator implements Iterator<CtClass>
103 throw new UnsupportedOperationException(); 107 throw new UnsupportedOperationException();
104 } 108 }
105 109
106 public static List<JarEntry> getClassEntries( JarFile jar ) 110 public static List<ClassEntry> getClassEntries( JarFile jar )
107 { 111 {
108 List<JarEntry> classes = Lists.newArrayList(); 112 List<ClassEntry> classEntries = Lists.newArrayList();
109 Enumeration<JarEntry> entries = jar.entries(); 113 Enumeration<JarEntry> entries = jar.entries();
110 while( entries.hasMoreElements() ) 114 while( entries.hasMoreElements() )
111 { 115 {
@@ -114,10 +118,10 @@ public class JarClassIterator implements Iterator<CtClass>
114 // is this a class file? 118 // is this a class file?
115 if( !entry.isDirectory() && entry.getName().endsWith( ".class" ) ) 119 if( !entry.isDirectory() && entry.getName().endsWith( ".class" ) )
116 { 120 {
117 classes.add( entry ); 121 classEntries.add( getClassEntry( entry ) );
118 } 122 }
119 } 123 }
120 return classes; 124 return classEntries;
121 } 125 }
122 126
123 public static Iterable<CtClass> classes( final JarFile jar ) 127 public static Iterable<CtClass> classes( final JarFile jar )
@@ -131,4 +135,9 @@ public class JarClassIterator implements Iterator<CtClass>
131 } 135 }
132 }; 136 };
133 } 137 }
138
139 private static ClassEntry getClassEntry( JarEntry entry )
140 {
141 return new ClassEntry( entry.getName().substring( 0, entry.getName().length() - ".class".length() ) );
142 }
134} 143}