KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > speedo > generation > enhancer > AroundCompilation


1 /**
2  * Speedo: an implementation of JDO compliant personality on top of JORM generic
3  * I/O sub-system.
4  * Copyright (C) 2001-2004 France Telecom R&D
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19  *
20  *
21  *
22  * Contact: speedo@objectweb.org
23  *
24  * Authors: S.Chassande-Barrioz.
25  *
26  */

27
28 package org.objectweb.speedo.generation.enhancer;
29
30 import org.objectweb.asm.ClassReader;
31 import org.objectweb.asm.ClassWriter;
32 import org.objectweb.speedo.api.SpeedoException;
33 import org.objectweb.speedo.api.SpeedoProperties;
34 import org.objectweb.speedo.metadata.SpeedoClass;
35 import org.objectweb.speedo.metadata.SpeedoXMLDescriptor;
36 import org.objectweb.util.monolog.api.BasicLevel;
37
38 import java.util.Collection JavaDoc;
39 import java.util.Iterator JavaDoc;
40
41 public class AroundCompilation extends EnhancerComponent {
42
43     public final static String JavaDoc LOGGER_NAME
44         = SpeedoProperties.LOGGER_NAME + ".generation.enhancer.precompile";
45
46     boolean beforeCompilation;
47
48     public AroundCompilation(boolean beforeCompilation) {
49         this.beforeCompilation = beforeCompilation;
50     }
51
52     public boolean init() throws SpeedoException {
53         logger = scp.loggerFactory.getLogger(LOGGER_NAME);
54         debug = logger.isLoggable(BasicLevel.DEBUG);
55         return !scp.getXmldescriptor().isEmpty();
56     }
57
58     public void process() throws SpeedoException {
59         if (scp.getXmldescriptor() == null || scp.getXmldescriptor().isEmpty()) {
60             return;
61         }
62         Collection JavaDoc xmls = scp.getXmldescriptor().values();
63         for (Iterator JavaDoc itDesc = xmls.iterator(); itDesc.hasNext();) {
64             SpeedoXMLDescriptor desc = (SpeedoXMLDescriptor) itDesc.next();
65             for (Iterator JavaDoc itclass = desc.getSpeedoClasses().iterator(); itclass.hasNext();) {
66                 SpeedoClass jdoclass = (SpeedoClass) itclass.next();
67                 if (debug) {
68                     logger.log(BasicLevel.DEBUG,
69                             "Arround the compilation of the class "
70                             + jdoclass.getFQName() + ": "
71                             + (beforeCompilation ? "before" : "after")
72                             + " the compilation");
73                 }
74                 ClassWriter cw = new ClassWriter(false);
75                 InheritanceModifier im = new InheritanceModifier(
76                     cw, logger, jdoclass, beforeCompilation);
77                 DummyAccessorModifier dam = new DummyAccessorModifier(
78                     im, logger, jdoclass, beforeCompilation);
79                 String JavaDoc name = jdoclass.getFQName();
80                 ClassReader cr = loadJavaClass(false, name, scp.output, false);
81                 if (beforeCompilation) {
82                     EmptyConstructorAdder eca = new EmptyConstructorAdder(
83                         dam, logger, jdoclass.noArgConstructorStatus);
84                     PersistentFieldRemover pfr = new PersistentFieldRemover(
85                             eca, jdoclass, logger);
86                     cr.accept(pfr, false);
87                 } else {
88                     cr.accept(dam, false);
89                 }
90                 writeJavaClass(name, cw, scp.output);
91             }
92         }
93     }
94 }
95
Popular Tags