OSDN Git Service

4a22861629b295cf90b062b2a00b389761472958
[stigmata/stigmata-plugins.git] / opcodes / 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 org.objectweb.asm.ClassAdapter;
8 import org.objectweb.asm.ClassVisitor;
9 import org.objectweb.asm.MethodVisitor;
10 import org.objectweb.asm.tree.MethodNode;
11
12 /**
13  *
14  *
15  * @author tamada
16  */
17 public class ControlFlowGraphExtractVisitor extends ClassAdapter{
18     private Map<String, MethodNode> opcodesMap = new LinkedHashMap<String, MethodNode>();
19
20     public ControlFlowGraphExtractVisitor(ClassVisitor visitor){
21         super(visitor);
22     }
23
24     public Iterator<String> getMethodNames(){
25         return opcodesMap.keySet().iterator();
26     }
27
28     public ControlFlowGraph getGraph(String name){
29         return buildControlFlow(name, opcodesMap.get(name));
30     }
31
32     @Override
33     public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions){
34         MethodNode node = new MethodNode(access, name, descriptor, signature, exceptions);
35
36         opcodesMap.put(name + descriptor, node);
37
38         return node;
39     }
40
41     private ControlFlowGraph buildControlFlow(String methodName, MethodNode node){
42         return new ControlFlowGraph(methodName, node);
43     }
44 }