1 21 package com.db4o.nativequery.optimization; 22 23 import EDU.purdue.cs.bloat.cfg.*; 24 import EDU.purdue.cs.bloat.editor.*; 25 import EDU.purdue.cs.bloat.tree.*; 26 27 import com.db4o.nativequery.*; 28 import com.db4o.nativequery.analysis.*; 29 import com.db4o.nativequery.bloat.*; 30 import com.db4o.nativequery.expr.*; 31 32 public class NativeQueryEnhancer { 33 34 private static SODABloatMethodBuilder BLOAT_BUILDER=new SODABloatMethodBuilder(); 35 36 public void enhance(BloatUtil bloatUtil,ClassEditor classEditor,String methodName,ClassLoader classLoader) throws Exception { 37 if(NQDebug.LOG) { 38 System.err.println("Enhancing "+classEditor.name()); 39 } 40 Expression expr = analyze(bloatUtil, classEditor, methodName); 41 if(expr==null) { 42 return; 43 } 44 MethodEditor methodEditor=BLOAT_BUILDER.injectOptimization(expr,classEditor,classLoader); 45 if(NQDebug.LOG) { 46 System.out.println("SODA BYTE CODE:"); 47 methodEditor.print(System.out); 48 } 49 methodEditor.commit(); 50 classEditor.commit(); 51 } 52 53 public Expression analyze(BloatUtil bloatUtil, ClassEditor classEditor, String methodName) { 54 FlowGraph flowGraph=null; 55 try { 56 flowGraph=bloatUtil.flowGraph(classEditor,methodName); 57 } catch (ClassNotFoundException e) { 58 return null; 59 } 60 if(flowGraph!=null) { 61 BloatExprBuilderVisitor builder = new BloatExprBuilderVisitor(bloatUtil); 62 if(NQDebug.LOG) { 63 System.out.println("FLOW GRAPH:"); 64 flowGraph.visit(new PrintVisitor()); 65 } 66 flowGraph.visit(builder); 67 Expression expr=builder.expression(); 68 if(NQDebug.LOG) { 69 System.out.println("EXPRESSION TREE:"); 70 System.out.println(expr); 71 } 72 return expr; 73 } 74 return null; 75 } 76 } 77 | Popular Tags |