1 21 package com.db4o.nativequery.bloat; 22 23 import java.util.*; 24 25 import EDU.purdue.cs.bloat.cfg.*; 26 import EDU.purdue.cs.bloat.context.*; 27 import EDU.purdue.cs.bloat.editor.*; 28 import EDU.purdue.cs.bloat.file.*; 29 import EDU.purdue.cs.bloat.reflect.*; 30 31 public class BloatUtil { 32 private ClassFileLoader loader; 33 private CachingBloatContext context; 34 35 public BloatUtil(ClassFileLoader loader) { 36 this.loader=loader; 37 context=new CachingBloatContext(loader,new LinkedList(),false); 38 } 39 40 public FlowGraph flowGraph(String className, String methodName) throws ClassNotFoundException { 41 ClassEditor classEdit = classEditor(className); 42 return flowGraph(classEdit, methodName); 43 } 44 45 public FlowGraph flowGraph(ClassEditor classEdit, String methodName) throws ClassNotFoundException { 47 MethodInfo[] methods = classEdit.methods(); 48 for (int methodIdx = 0; methodIdx < methods.length; methodIdx++) { 49 MethodInfo methodInfo=methods[methodIdx]; 50 MethodEditor methodEdit = new MethodEditor(classEdit, methodInfo); 51 if (methodEdit.name().equals(methodName)) { 52 return new FlowGraph(methodEdit); 54 } 55 } 56 Type superType = classEdit.superclass(); 57 if(superType!=null) { 58 return flowGraph(normalizedClassName(superType),methodName); 59 } 60 return null; 61 } 62 63 public ClassEditor classEditor(String className) throws ClassNotFoundException { 64 return new ClassEditor(context, loader.loadClass(className)); 65 } 66 67 public String normalizedClassName(Type type) { 68 return type.className().replace('/', '.'); 69 } 70 } 71 | Popular Tags |