1 package jp.sourceforge.stigmata.birthmarks;
3 import java.util.Iterator;
4 import java.util.LinkedHashMap;
7 import jp.sourceforge.stigmata.Birthmark;
8 import jp.sourceforge.stigmata.BirthmarkContext;
10 import org.objectweb.asm.ClassVisitor;
11 import org.objectweb.asm.MethodVisitor;
12 import org.objectweb.asm.tree.MethodNode;
19 public class ControlFlowGraphExtractVisitor extends BirthmarkExtractVisitor{
20 private Map<String, MethodNode> opcodesMap = new LinkedHashMap<String, MethodNode>();
22 public ControlFlowGraphExtractVisitor(ClassVisitor visitor, Birthmark birthmark, BirthmarkContext context){
23 super(visitor, birthmark, context);
30 ControlFlowGraphExtractVisitor(ClassVisitor visitor){
31 super(visitor, null, null);
34 public Iterator<String> getMethodNames(){
35 return opcodesMap.keySet().iterator();
38 public ControlFlowGraph getGraph(String name){
39 return buildControlFlow(name, opcodesMap.get(name));
43 public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions){
44 MethodNode node = new MethodNode(access, name, descriptor, signature, exceptions);
46 opcodesMap.put(name + descriptor, node);
51 private ControlFlowGraph buildControlFlow(String methodName, MethodNode node){
52 return new ControlFlowGraph(methodName, node);