OSDN Git Service

BirthmarkSpi -> BirthmarkService
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / birthmarks / smc / SequentialMethodCallBirthmarkExtractor.java
1 package jp.sourceforge.stigmata.birthmarks.smc;
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.spi.BirthmarkService;
10
11 import org.objectweb.asm.ClassWriter;
12
13 /**
14  * @author Haruaki TAMADA
15  */
16 public class SequentialMethodCallBirthmarkExtractor extends ASMBirthmarkExtractor{
17     public SequentialMethodCallBirthmarkExtractor(BirthmarkService spi){
18         super(spi);
19     }
20
21     public SequentialMethodCallBirthmarkExtractor(){
22         super();
23     }
24
25     @Override
26     public BirthmarkExtractVisitor createExtractVisitor(ClassWriter writer, Birthmark birthmark, BirthmarkContext context){
27         return new SequentialMethodCallBirthmarkExtractVisitor(writer, birthmark, context);
28     }
29
30     @Override
31     public ExtractionUnit[] getAcceptableUnits(){
32         return new ExtractionUnit[] { ExtractionUnit.CLASS, ExtractionUnit.ARCHIVE, ExtractionUnit.PACKAGE, };
33     }
34
35     @Override
36     public BirthmarkElement buildElement(String value) {
37         String className = value.substring(0, value.indexOf('#'));
38         String methodName = value.substring(value.indexOf('#') + 1, value.lastIndexOf('!'));
39         String signature = value.substring(value.lastIndexOf('!') + 1);
40
41         return new MethodCallBirthmarkElement(className, methodName, signature);
42     }
43 }