OSDN Git Service

cflib は plugins プロジェクトから,Stigmata直下のプロジェクトに移行したため,このリポジトリからは削除した.
[stigmata/stigmata-plugins.git] / kgram / 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,
22             Birthmark birthmark, BirthmarkContext context){
23         super(visitor, birthmark, context);
24     }
25
26     public int getKValue(){
27         return kvalue;
28     }
29
30     public void setKValue(int kvalue){
31         this.kvalue = kvalue;
32     }
33
34     @Override
35     public void visitEnd(){
36         KGramBuilder builder = KGramBuilder.getInstance();
37         KGram<Integer>[] kgrams = builder.<Integer>buildKGram(
38             opcodes, getKValue()
39         );
40
41         for(KGram<Integer> kgram: kgrams){
42             addElement(new KGramBasedBirthmarkElement<Integer>(kgram));
43         }
44     }
45
46     @Override
47     public MethodVisitor visitMethod(int arg0, String arg1, String arg2,
48                                      String arg3, String[] arg4){
49         MethodVisitor visitor = super.visitMethod(
50             arg0, arg1, arg2, arg3, arg4
51         );
52         MethodVisitor opcodeVisitor =
53             new OpcodeExtractionMethodVisitor(visitor, opcodes);
54
55         return opcodeVisitor;
56     }
57 }