OSDN Git Service

BirthmarkSpi -> BirthmarkService
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / birthmarks / kgram / KGramBasedBirthmarkExtractVisitor.java
1 package jp.sourceforge.stigmata.birthmarks.kgram;
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.birthmarks.BirthmarkExtractVisitor;
9
10 import org.objectweb.asm.ClassVisitor;
11 import org.objectweb.asm.MethodVisitor;
12
13 /**
14  * 
15  * @author Haruaki TAMADA
16  */
17 public class KGramBasedBirthmarkExtractVisitor extends BirthmarkExtractVisitor{
18     private int kvalue;
19     private List<Integer> opcodes = new ArrayList<Integer>();
20
21     public KGramBasedBirthmarkExtractVisitor(ClassVisitor visitor, Birthmark birthmark, BirthmarkContext context){
22         super(visitor, birthmark, context);
23     }
24
25     public int getKValue(){
26         return kvalue;
27     }
28
29     public void setKValue(int kvalue){
30         this.kvalue = kvalue;
31     }
32
33     @Override
34     public void visitEnd(){
35         KGramBuilder builder = KGramBuilder.getInstance();
36         KGram<Integer>[] kgrams = builder.<Integer>buildKGram(opcodes, getKValue());
37
38         for(KGram<Integer> kgram: kgrams){
39             addElement(new KGramBasedBirthmarkElement<Integer>(kgram));
40         }
41     }
42
43     @Override
44     public MethodVisitor visitMethod(int arg0, String arg1, String arg2, String arg3, String[] arg4){
45         MethodVisitor visitor = super.visitMethod(arg0, arg1, arg2, arg3, arg4);
46         MethodVisitor opcodeVisitor = new OpcodeExtractionMethodVisitor(visitor, opcodes);
47
48         return opcodeVisitor;
49     }
50 }