1 package jp.sourceforge.stigmata.birthmarks.kgram;
3 import jp.sourceforge.stigmata.Birthmark;
4 import jp.sourceforge.stigmata.BirthmarkContext;
5 import jp.sourceforge.stigmata.BirthmarkElement;
6 import jp.sourceforge.stigmata.ExtractionUnit;
7 import jp.sourceforge.stigmata.birthmarks.ASMBirthmarkExtractor;
8 import jp.sourceforge.stigmata.birthmarks.BirthmarkExtractVisitor;
9 import jp.sourceforge.stigmata.spi.BirthmarkService;
11 import org.objectweb.asm.ClassWriter;
14 * @author Haruaki TAMADA
16 public class KGramBasedBirthmarkExtractor extends ASMBirthmarkExtractor{
17 private int kvalue = 4;
19 public KGramBasedBirthmarkExtractor(BirthmarkService spi){
23 public KGramBasedBirthmarkExtractor(){
27 public void setKValue(int kvalue){
31 public int getKValue(){
36 public BirthmarkExtractVisitor createExtractVisitor(ClassWriter writer, Birthmark birthmark, BirthmarkContext context){
37 KGramBasedBirthmarkExtractVisitor extractor = new KGramBasedBirthmarkExtractVisitor(writer, birthmark, context);
38 extractor.setKValue(getKValue());
43 public ExtractionUnit[] getAcceptableUnits(){
44 return new ExtractionUnit[] {
45 ExtractionUnit.CLASS, ExtractionUnit.PACKAGE, ExtractionUnit.ARCHIVE,
51 public BirthmarkElement buildElement(String value) {
53 if(value.startsWith("{") && value.endsWith("}")){
54 String[] param = value.substring(1, value.length() - 1).split(", *");
55 KGram<Integer> kgram = new KGram<Integer>(param.length);
56 for(int i = 0; i < param.length; i++){
57 kgram.set(i, new Integer(param[i].trim()));
59 return new KGramBasedBirthmarkElement<Integer>(kgram);