/************************************************************************************** * Copyright (c) Jonas Bon�r, Alexandre Vasseur. All rights reserved. * * http://aspectwerkz.codehaus.org * * ---------------------------------------------------------------------------------- * * The software in this package is published under the terms of the LGPL license * * a copy of which has been included with this distribution in the license.txt file. * **************************************************************************************/ package org.codehaus.aspectwerkz.hook; import org.codehaus.aspectwerkz.hook.impl.ClassPreProcessorHelper; import java.lang.instrument.IllegalClassFormatException; import java.lang.instrument.ClassFileTransformer; import java.security.ProtectionDomain; /** * Java 1.5 adapter for load time weaving * * @author <a href="mailto:alex@gnilux.com">Alexandre Vasseur</a> */ public class PreProcessorAdapter implements ClassFileTransformer { /** * Concrete AspectWerkz preprocessor. */ private static ClassPreProcessor s_preProcessor; static { try { s_preProcessor = ClassPreProcessorHelper.getClassPreProcessor(); } catch (Exception e) { throw new ExceptionInInitializerError("could not initialize JSR163 preprocessor due to: " + e.toString()); } } /** * Weaving delegation * * @param loader the defining class loader * @param className the name of class beeing loaded * @param classBeingRedefined when hotswap is called * @param protectionDomain * @param bytes the bytecode before weaving * @return the weaved bytecode */ public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] bytes) throws IllegalClassFormatException { // TODO: do we really have to skip hotswap ? if (classBeingRedefined == null) { return s_preProcessor.preProcess(className, bytes, loader); } else { //return s_preProcessor.preProcess(className, bytes, loader); return bytes; } } }