1 package jp.sourceforge.stigmata.digger;
4 import java.io.FileInputStream;
5 import java.io.FileNotFoundException;
6 import java.io.IOException;
7 import java.io.InputStream;
8 import java.net.MalformedURLException;
10 import java.util.ArrayList;
11 import java.util.Iterator;
12 import java.util.List;
14 import org.objectweb.asm.AnnotationVisitor;
15 import org.objectweb.asm.Attribute;
16 import org.objectweb.asm.ClassReader;
17 import org.objectweb.asm.ClassVisitor;
18 import org.objectweb.asm.FieldVisitor;
19 import org.objectweb.asm.MethodVisitor;
25 * @author Haruaki TAMADA
27 public class DefaultClassFileArchive implements ClassFileArchive{
29 private String className;
31 public DefaultClassFileArchive(String file){
35 public DefaultClassFileArchive(File file){
40 public DefaultClassFileArchive(String file, String className){
41 this(new File(file), className);
44 public DefaultClassFileArchive(File file, String className){
46 this.className = className;
49 public URL getLocation(){
51 return file.toURI().toURL();
52 } catch (MalformedURLException ex) {
57 public InputStream getInputStream(ClassFileEntry entry) throws IOException{
58 return new FileInputStream(file);
61 public Iterator<ClassFileEntry> iterator(){
62 List<ClassFileEntry> list = new ArrayList<ClassFileEntry>();
63 list.add(new ClassFileEntry(className, getLocation()));
65 return list.iterator();
68 public boolean hasEntry(String className){
69 return this.className.equals(className);
72 public ClassFileEntry getEntry(String className) throws ClassNotFoundException{
73 return new ClassFileEntry(className, getLocation());
76 public String getName(){
80 private void parseClassName(){
81 FileInputStream in = null;
83 in = new FileInputStream(file);
84 ClassReader reader = new ClassReader(in);
85 ClassNameExtractVisitor visitor = new ClassNameExtractVisitor();
86 reader.accept(visitor, ClassReader.SKIP_CODE | ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES);
88 this.className = visitor.getClassName();
89 } catch (FileNotFoundException ex) {
91 } catch (IOException ex) {
97 } catch(IOException e){
103 private static class ClassNameExtractVisitor implements ClassVisitor{
104 private String className;
106 public String getClassName(){
111 public void visit(int version, int access, String name, String signature,
112 String superClassName, String[] interfaces){
117 public AnnotationVisitor visitAnnotation(String arg0, boolean arg1){
122 public void visitAttribute(Attribute arg0){
126 public void visitEnd(){
130 public FieldVisitor visitField(int arg0, String arg1, String arg2,
131 String arg3, Object arg4){
136 public void visitInnerClass(String arg0, String arg1, String arg2,
141 public MethodVisitor visitMethod(int arg0, String arg1, String arg2,
142 String arg3, String[] arg4){
147 public void visitOuterClass(String arg0, String arg1, String arg2){
151 public void visitSource(String arg0, String arg1){