OSDN Git Service

a3e2086141d9a7eeda0048fbef4b3e16e74c340c
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / birthmarks / fmc / FrequencyMethodCallBirthmarkExtractor.java
1 package jp.sourceforge.stigmata.birthmarks.fmc;
2
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.birthmarks.FrequencyBirthmark;
10 import jp.sourceforge.stigmata.birthmarks.FrequencyBirthmarkElement;
11 import jp.sourceforge.stigmata.birthmarks.smc.SequentialMethodCallBirthmarkExtractVisitor;
12 import jp.sourceforge.stigmata.spi.BirthmarkService;
13
14 import org.objectweb.asm.ClassWriter;
15
16 /**
17  * @author Haruaki TAMADA
18  */
19 public class FrequencyMethodCallBirthmarkExtractor extends ASMBirthmarkExtractor{
20     public FrequencyMethodCallBirthmarkExtractor(BirthmarkService spi){
21         super(spi);
22     }
23
24     public FrequencyMethodCallBirthmarkExtractor(){
25         super();
26     }
27
28     @Override
29     public BirthmarkExtractVisitor createExtractVisitor(ClassWriter writer, Birthmark birthmark, BirthmarkContext context){
30         return new SequentialMethodCallBirthmarkExtractVisitor(writer, birthmark, context){
31             @Override
32             protected void addElement(String className, String methodName, String description){
33                 addElement(new FrequencyBirthmarkElement(className + "#" + methodName + description));
34             }
35         };
36     }
37
38     @Override
39     public ExtractionUnit[] getAcceptableUnits(){
40         return new ExtractionUnit[] {
41             ExtractionUnit.CLASS, ExtractionUnit.PACKAGE, ExtractionUnit.ARCHIVE, 
42         };
43     }
44
45     @Override
46     public Birthmark createBirthmark(){
47         return new FrequencyBirthmark(getProvider().getType());
48     }
49
50
51     @Override
52     public BirthmarkElement buildElement(String value) {
53         return new FrequencyBirthmarkElement(value);
54     }
55 }