OSDN Git Service

add KGramBuilder for build kgram
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / birthmarks / kgram / KGramBasedBirthmarkExtractVisitor.java
1 package jp.sourceforge.stigmata.birthmarks.kgram;
2
3 /*
4  * $Id$
5  */
6
7 import java.util.ArrayList;
8 import java.util.HashSet;
9 import java.util.List;
10 import java.util.Set;
11
12 import jp.sourceforge.stigmata.Birthmark;
13 import jp.sourceforge.stigmata.BirthmarkEnvironment;
14 import jp.sourceforge.stigmata.birthmarks.BirthmarkExtractVisitor;
15
16 import org.objectweb.asm.ClassVisitor;
17 import org.objectweb.asm.MethodVisitor;
18
19 /**
20  * 
21  * @author Haruaki TAMADA
22  * @version $Revision$ 
23  */
24 public class KGramBasedBirthmarkExtractVisitor extends BirthmarkExtractVisitor{
25     private int kvalue;
26     private List<Integer> opcodes = new ArrayList<Integer>();
27
28     public KGramBasedBirthmarkExtractVisitor(ClassVisitor visitor, Birthmark birthmark, BirthmarkEnvironment environment){
29         super(visitor, birthmark, environment);
30     }
31
32     public int getKValue(){
33         return kvalue;
34     }
35
36     public void setKValue(int kvalue){
37         this.kvalue = kvalue;
38     }
39
40     public void visitEnd(){
41         KGramBuilder builder = KGramBuilder.getInstance();
42         KGram<Integer>[] kgrams = builder.<Integer>buildKGram(opcodes, getKValue());
43
44         for(KGram<Integer> kgram: kgrams){
45             addElement(new KGramBasedBirthmarkElement<Integer>(kgram));
46         }
47     }
48
49     @Override
50     public MethodVisitor visitMethod(int arg0, String arg1, String arg2, String arg3, String[] arg4){
51         MethodVisitor visitor = super.visitMethod(arg0, arg1, arg2, arg3, arg4);
52         MethodVisitor opcodeVisitor = new OpcodeExtractionMethodVisitor(visitor, opcodes);
53
54         return opcodeVisitor;
55     }
56 }