OSDN Git Service

とりあえずコミットしとく.
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / birthmarks / BirthmarkExtractVisitor.java
1 package jp.sourceforge.stigmata.birthmarks;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import jp.sourceforge.stigmata.Birthmark;
7 import jp.sourceforge.stigmata.BirthmarkContext;
8 import jp.sourceforge.stigmata.BirthmarkElement;
9 import jp.sourceforge.stigmata.BirthmarkEnvironment;
10
11 import org.objectweb.asm.ClassVisitor;
12 import org.objectweb.asm.Opcodes;
13
14 /**
15  * Abstract visitor class of extracting birthmarks from class file.
16  *
17  * @author Haruaki TAMADA
18  */
19 public abstract class BirthmarkExtractVisitor extends ClassVisitor{
20     private Birthmark birthmark;
21     private BirthmarkContext context;
22     private List<Throwable> causes = new ArrayList<Throwable>();
23
24     public BirthmarkExtractVisitor(ClassVisitor visitor, Birthmark birthmark, BirthmarkContext context){
25         super(Opcodes.ASM4, visitor);
26         this.birthmark = birthmark;
27         this.context = context;
28     }
29
30     protected BirthmarkEnvironment getEnvironment(){
31         return context.getEnvironment();
32     }
33
34     protected BirthmarkContext getContext(){
35         return context;
36     }
37
38     protected void addElement(BirthmarkElement element){
39         birthmark.addElement(element);
40     }
41
42     public Birthmark getBirthmark(){
43         return birthmark;
44     }
45
46     public synchronized void addFailur(Throwable e){
47         causes.add(e);
48     }
49
50     public boolean isSuccess(){
51        return causes.size() == 0;
52     }
53
54     public synchronized Throwable[] getCauses(){
55        return causes.toArray(new Throwable[causes.size()]);
56     }
57 }