001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one
003     * or more contributor license agreements.  See the NOTICE file
004     * distributed with this work for additional information
005     * regarding copyright ownership.  The ASF licenses this file
006     * to you under the Apache License, Version 2.0 (the
007     * "License"); you may not use this file except in compliance
008     * with the License.  You may obtain a copy of the License at
009     *
010     *  http://www.apache.org/licenses/LICENSE-2.0
011     *
012     * Unless required by applicable law or agreed to in writing,
013     * software distributed under the License is distributed on an
014     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015     * KIND, either express or implied.  See the License for the
016     * specific language governing permissions and limitations
017     * under the License.
018     */
019    
020    //
021    // This source code implements specifications defined by the Java
022    // Community Process. In order to remain compliant with the specification
023    // DO NOT add/change/or delete method signatures!
024    //
025    
026    package javax.persistence.spi;
027    
028    import java.security.ProtectionDomain;
029    import java.lang.instrument.IllegalClassFormatException;
030    
031    /**
032     * @version $Rev: 467742 $ $Date: 2006-10-25 21:30:38 +0200 (Wed, 25 Oct 2006) $
033     */
034    public interface ClassTransformer {
035        /**
036         * Invoked when a class is being loaded or redefined. The implementation of this
037         * method may transform the supplied class file and return a new replacement class
038         * file.
039         *
040         * @param loader              The defining loader of the class to be transformed, may be null if
041         *                            the bootstrap loader
042         * @param className           The name of the class in the internal form of fully qualified
043         *                            class and interface names
044         * @param classBeingRedefined If this is a redefine, the class being redefined,
045         *                            otherwise null
046         * @param protectionDomain    The protection domain of the class being defined or
047         *                            redefined
048         * @param classfileBuffer     The input byte buffer in class file format - must not be
049         *                            modified
050         * @return A well-formed class file buffer (the result of the transform), or null if
051         *         no transform is performed
052         * @throws java.lang.instrument.IllegalClassFormatException
053         *          If the input does not represent a well-formed
054         *          class file
055         */
056        byte[] transform(
057                ClassLoader loader,
058                String className,
059                Class<?> classBeingRedefined,
060                ProtectionDomain protectionDomain,
061                byte[] classfileBuffer) throws IllegalClassFormatException;
062    
063    }