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,
37 Birthmark birthmark, BirthmarkContext context){
38 KGramBasedBirthmarkExtractVisitor extractor =
39 new KGramBasedBirthmarkExtractVisitor(writer, birthmark, context);
40 extractor.setKValue(getKValue());
45 public ExtractionUnit[] getAcceptableUnits(){
46 return new ExtractionUnit[] {
47 ExtractionUnit.CLASS, ExtractionUnit.PACKAGE,
48 ExtractionUnit.ARCHIVE,
54 public BirthmarkElement buildElement(String value) {
56 if(value.startsWith("{") && value.endsWith("}")){
58 value.substring(1, value.length() - 1).split(", *");
59 KGram<Integer> kgram = new KGram<Integer>(param.length);
60 for(int i = 0; i < param.length; i++){
61 kgram.set(i, new Integer(param[i].trim()));
63 return new KGramBasedBirthmarkElement<Integer>(kgram);