KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > db4o > nativequery > optimization > NativeQueryEnhancer


1 /* Copyright (C) 2004 - 2006 db4objects Inc. http://www.db4o.com
2
3 This file is part of the db4o open source object database.
4
5 db4o is free software; you can redistribute it and/or modify it under
6 the terms of version 2 of the GNU General Public License as published
7 by the Free Software Foundation and as clarified by db4objects' GPL
8 interpretation policy, available at
9 http://www.db4o.com/about/company/legalpolicies/gplinterpretation/
10 Alternatively you can write to db4objects, Inc., 1900 S Norfolk Street,
11 Suite 350, San Mateo, CA 94403, USA.
12
13 db4o is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License along
19 with this program; if not, write to the Free Software Foundation, Inc.,
20 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */

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 JavaDoc methodName,ClassLoader JavaDoc classLoader) throws Exception JavaDoc {
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 JavaDoc methodName) {
54         FlowGraph flowGraph=null;
55         try {
56             flowGraph=bloatUtil.flowGraph(classEditor,methodName);
57         } catch (ClassNotFoundException JavaDoc 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