/** Enhances the given class. */ public byte[] enhance(JClass jClass) throws ClassNotFoundException { String className = jClass.getName().replace('/', '.'); String extClassName = className + "__ResinExt"; try { EnhancerPrepare prepare = new EnhancerPrepare(); prepare.setWorkPath(getWorkPath()); prepare.setClassLoader(_loader); for (ClassEnhancer enhancer : _classEnhancerList) { if (enhancer.shouldEnhance(className)) { prepare.addEnhancer(enhancer); } } // prepare.renameClass(className, extClassName); prepare.renameClass(className, className); } catch (Exception e) { log.log(Level.FINE, e.toString(), e); throw new ClassNotFoundException(e.toString()); } boolean hasEnhancer = false; GenClass genClass = new GenClass(extClassName); genClass.setSuperClassName(className); for (ClassEnhancer enhancer : _classEnhancerList) { if (enhancer.shouldEnhance(className)) { try { hasEnhancer = true; enhancer.enhance(genClass, jClass, extClassName); } catch (RuntimeException e) { throw e; } catch (Exception e) { throw new RuntimeException(e); } } } // XXX: class-wide enhancements need to go first try { if (hasEnhancer) { _javaGen.setWorkDir(getPreWorkPath()); _javaGen.generate(genClass); _javaGen.compilePendingJava(); } EnhancerFixup fixup = new EnhancerFixup(); fixup.setJavaClassLoader(_jClassLoader); fixup.setClassLoader(_loader); fixup.setWorkPath(getWorkPath()); for (ClassEnhancer enhancer : _classEnhancerList) { if (enhancer.shouldEnhance(className)) { fixup.addEnhancer(enhancer); } } fixup.fixup(className, extClassName); return load(className); } catch (RuntimeException e) { throw e; } catch (Exception e) { log.log(Level.FINE, e.toString(), e); throw new ClassNotFoundException(e.getMessage()); } // return null; }