1 package jp.sourceforge.stigmata.digger;
8 import java.io.FileInputStream;
9 import java.io.FileNotFoundException;
10 import java.io.IOException;
11 import java.io.InputStream;
12 import java.net.MalformedURLException;
14 import java.util.ArrayList;
15 import java.util.Iterator;
16 import java.util.List;
18 import org.objectweb.asm.ClassReader;
19 import org.objectweb.asm.commons.EmptyVisitor;
25 * @author Haruaki TAMADA
28 public class DefaultClassFileArchive implements ClassFileArchive{
30 private String className;
32 public DefaultClassFileArchive(String file){
36 public DefaultClassFileArchive(File file){
41 public DefaultClassFileArchive(String file, String className){
42 this(new File(file), className);
45 public DefaultClassFileArchive(File file, String className){
47 this.className = className;
50 public URL getLocation(){
52 return file.toURI().toURL();
53 } catch (MalformedURLException ex) {
58 public InputStream getInputStream(ClassFileEntry entry) throws IOException{
59 return new FileInputStream(file);
62 public Iterator<ClassFileEntry> iterator(){
63 List<ClassFileEntry> list = new ArrayList<ClassFileEntry>();
64 list.add(new ClassFileEntry(className, getLocation()));
66 return list.iterator();
69 public boolean hasEntry(String className){
70 return this.className.equals(className);
73 public ClassFileEntry getEntry(String className) throws ClassNotFoundException{
74 return new ClassFileEntry(className, getLocation());
77 public String getName(){
81 private void parseClassName(){
82 FileInputStream in = null;
84 in = new FileInputStream(file);
85 ClassReader reader = new ClassReader(in);
86 ClassNameExtractVisitor visitor = new ClassNameExtractVisitor();
87 reader.accept(visitor, ClassReader.SKIP_CODE | ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES);
89 this.className = visitor.getClassName();
90 } catch (FileNotFoundException ex) {
92 } catch (IOException ex) {
98 } catch(IOException e){
104 private static class ClassNameExtractVisitor extends EmptyVisitor{
105 private String className;
107 public String getClassName(){
112 public void visit(int version, int access, String name, String signature,
113 String superClassName, String[] interfaces){