1 package jp.sourceforge.stigmata.birthmarks;
7 import java.io.IOException;
8 import java.io.InputStream;
10 import jp.sourceforge.stigmata.Birthmark;
11 import jp.sourceforge.stigmata.BirthmarkContext;
12 import jp.sourceforge.stigmata.BirthmarkExtractionFailedException;
13 import jp.sourceforge.stigmata.spi.BirthmarkSpi;
15 import org.objectweb.asm.ClassReader;
16 import org.objectweb.asm.ClassWriter;
19 * Abstract birthmark extractor using ASM.
21 * @author Haruaki TAMADA
24 public abstract class ASMBirthmarkExtractor extends AbstractBirthmarkExtractor{
25 public ASMBirthmarkExtractor(BirthmarkSpi spi){
29 @SuppressWarnings("deprecation")
30 public ASMBirthmarkExtractor(){
34 public abstract BirthmarkExtractVisitor
35 createExtractVisitor(ClassWriter writer, Birthmark birthmark, BirthmarkContext context);
38 public Birthmark extract(Birthmark birthmark, InputStream in,
39 BirthmarkContext context) throws BirthmarkExtractionFailedException{
40 BirthmarkExtractionFailedException bee = new BirthmarkExtractionFailedException();
43 ClassReader reader = new ClassReader(in);
44 ClassWriter writer = new ClassWriter(0);
45 BirthmarkExtractVisitor visitor = createExtractVisitor(writer, birthmark, context);
46 reader.accept(visitor, 0);
48 if(!visitor.isSuccess()){
49 bee.addCauses(visitor.getCauses());
52 return visitor.getBirthmark();
53 } catch(IOException e){