OSDN Git Service

2057dd49f90d44b73d047b38ff575f64f7e123ba
[stigmata/stigmata-plugins.git] / cflib / src / main / java / jp / sourceforge / stigmata / birthmarks / ControlFlowGraphExtractVisitor.java
1 package jp.sourceforge.stigmata.birthmarks;
2
3 import java.util.Iterator;
4 import java.util.LinkedHashMap;
5 import java.util.Map;
6
7 import jp.sourceforge.stigmata.Birthmark;
8 import jp.sourceforge.stigmata.BirthmarkContext;
9
10 import org.objectweb.asm.ClassVisitor;
11 import org.objectweb.asm.MethodVisitor;
12 import org.objectweb.asm.tree.MethodNode;
13
14 /**
15  *
16  *
17  * @author tamada
18  */
19 public class ControlFlowGraphExtractVisitor extends BirthmarkExtractVisitor{
20     private Map<String, MethodNode> opcodesMap = new LinkedHashMap<String, MethodNode>();
21
22     public ControlFlowGraphExtractVisitor(ClassVisitor visitor, Birthmark birthmark, BirthmarkContext context){
23         super(visitor, birthmark, context);
24     }
25
26     /**
27      * テストのためのコンストラクタ.
28      * @param visitor
29      */
30     ControlFlowGraphExtractVisitor(ClassVisitor visitor){
31         super(visitor, null, null);
32     }
33
34     public Iterator<String> getMethodNames(){
35         return opcodesMap.keySet().iterator();
36     }
37
38     public ControlFlowGraph getGraph(String name){
39         return buildControlFlow(name, opcodesMap.get(name));
40     }
41
42     @Override
43     public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions){
44         MethodNode node = new MethodNode(access, name, descriptor, signature, exceptions);
45
46         opcodesMap.put(name + descriptor, node);
47
48         return node;
49     }
50
51     private ControlFlowGraph buildControlFlow(String methodName, MethodNode node){
52         return new ControlFlowGraph(methodName, node);
53     }
54 }