1 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 ; 39 import java.util.Iterator ; 40 41 public class AroundCompilation extends EnhancerComponent { 42 43 public final static String 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 xmls = scp.getXmldescriptor().values(); 63 for (Iterator itDesc = xmls.iterator(); itDesc.hasNext();) { 64 SpeedoXMLDescriptor desc = (SpeedoXMLDescriptor) itDesc.next(); 65 for (Iterator 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 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 |