OSDN Git Service

とりあえずコミットしとく.
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / birthmarks / smc / SequentialMethodCallBirthmarkExtractVisitor.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.birthmarks.BirthmarkExtractVisitor;
6
7 import org.objectweb.asm.ClassVisitor;
8 import org.objectweb.asm.MethodVisitor;
9 import org.objectweb.asm.Opcodes;
10
11 /**
12  * 
13  * 
14  *
15  * @author Haruaki TAMADA
16  */
17 public class SequentialMethodCallBirthmarkExtractVisitor extends BirthmarkExtractVisitor{
18     public SequentialMethodCallBirthmarkExtractVisitor(ClassVisitor visitor, Birthmark birthmark, BirthmarkContext context){
19         super(visitor, birthmark, context);
20     }
21
22     @Override
23     public MethodVisitor visitMethod(int access, String name, String desc,
24                                       String signature, String[] exceptions){
25
26         MethodVisitor visitor = super.visitMethod(access, name, desc, signature, exceptions);
27
28         return new MethodVisitor(Opcodes.ASM4, visitor){
29             @Override
30             public void visitMethodInsn(int opcode, String owner, String name, String desc){
31                 String className = owner.replace('/', '.');
32                 if(getEnvironment().getWellknownClassManager().isWellKnownClass(className)){
33                     addElement(className, name, desc);
34                 }
35                 super.visitMethodInsn(opcode, owner, name, desc);
36             }
37         };
38     }
39
40     protected void addElement(String className, String methodName, String description){
41         addElement(new MethodCallBirthmarkElement(className, methodName, description));
42     }
43 }