OSDN Git Service

add control flow extractor
[stigmata/stigmata-plugins.git] / opcodes / src / main / java / jp / sourceforge / stigmata / birthmarks / ControlFlowGraphExtractVisitor.java
1 package jp.sourceforge.stigmata.birthmarks;
2
3 /*
4  * $Id$
5  */
6
7 import java.util.Iterator;
8 import java.util.LinkedHashMap;
9 import java.util.Map;
10
11 import org.objectweb.asm.ClassAdapter;
12 import org.objectweb.asm.ClassVisitor;
13 import org.objectweb.asm.MethodVisitor;
14 import org.objectweb.asm.tree.MethodNode;
15
16 /**
17  *
18  *
19  * @author tamada
20  * @version $Revision$
21  */
22 public class ControlFlowGraphExtractVisitor extends ClassAdapter{
23     private Map<String, MethodNode> opcodesMap = new LinkedHashMap<String, MethodNode>();
24
25     public ControlFlowGraphExtractVisitor(ClassVisitor visitor){
26         super(visitor);
27     }
28
29     public Iterator<String> getMethodNames(){
30         return opcodesMap.keySet().iterator();
31     }
32
33     public ControlFlowGraph getGraph(String name){
34         return buildControlFlow(name, opcodesMap.get(name));
35     }
36
37     @Override
38     public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions){
39         MethodNode node = new MethodNode(access, name, descriptor, signature, exceptions);
40
41         opcodesMap.put(name + descriptor, node);
42
43         return node;
44     }
45
46     private ControlFlowGraph buildControlFlow(String methodName, MethodNode node){
47         return new ControlFlowGraph(methodName, node);
48     }
49 }