src/share/classes/sun/misc/ClassFileTransformer.java

Print this page




   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 package sun.misc;
  26 
  27 import java.util.ArrayList;

  28 
  29 /**
  30  * This is an abstract base class which is called by java.lang.ClassLoader
  31  * when ClassFormatError is thrown inside defineClass().
  32  *
  33  * The purpose of this class is to allow applications (e.g. Java Plug-in)
  34  * to have a chance to transform the byte code from one form to another
  35  * if necessary.
  36  *
  37  * One application of this class is used by Java Plug-in to transform
  38  * malformed JDK 1.1 class file into a well-formed Java 2 class file
  39  * on-the-fly, so JDK 1.1 applets with malformed class file in the
  40  * Internet may run in Java 2 after transformation.
  41  *
  42  * @author      Stanley Man-Kit Ho
  43  */
  44 
  45 public abstract class ClassFileTransformer
  46 {
  47     // Singleton of ClassFileTransformer
  48     //
  49     private static ArrayList<ClassFileTransformer> transformerList
  50         = new ArrayList<ClassFileTransformer>();
  51     private static ClassFileTransformer[] transformers
  52         = new ClassFileTransformer[0];
  53 
  54     /**
  55      * Add the class file transformer object.
  56      *
  57      * @param t Class file transformer instance
  58      */
  59     public static void add(ClassFileTransformer t)
  60     {
  61         synchronized(transformerList)
  62         {
  63             transformerList.add(t);
  64             transformers = transformerList.toArray(new ClassFileTransformer[0]);
  65         }
  66     }
  67 
  68     /**
  69      * Get the array of ClassFileTransformer object.
  70      *
  71      * @return ClassFileTransformer object array
  72      */
  73     public static ClassFileTransformer[] getTransformers()
  74     {
  75         // transformers is not intended to be changed frequently,
  76         // so it is okay to not put synchronized block here
  77         // to speed up performance.
  78         //
  79         return transformers;
  80     }
  81 
  82 
  83     /**
  84      * Transform a byte array from one to the other.
  85      *
  86      * @param b Byte array
  87      * @param off Offset
  88      * @param len Length of byte array
  89      * @return Transformed byte array
  90      */
  91     public abstract byte[] transform(byte[] b, int off, int len)
  92                            throws ClassFormatError;
  93 }


   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 package sun.misc;
  26 
  27 import java.util.ArrayList;
  28 import java.util.List;
  29 
  30 /**
  31  * This is an abstract base class originally intended to be called by
  32  * {@code java.lang.ClassLoader} when {@code ClassFormatError} is
  33  * thrown inside {@code defineClass()}. It is no longer hooked into
  34  * {@code ClassLoader} and will be removed in a future release.







  35  *
  36  * @author      Stanley Man-Kit Ho
  37  */
  38 
  39 @Deprecated
  40 public abstract class ClassFileTransformer {
  41 
  42     private static final List<ClassFileTransformer> transformers

  43         = new ArrayList<ClassFileTransformer>();


  44 
  45     /**
  46      * Add the class file transformer object.
  47      *
  48      * @param t Class file transformer instance
  49      */
  50     public static void add(ClassFileTransformer t) {
  51         synchronized (transformers) {
  52             transformers.add(t);



  53         }
  54     }
  55 
  56     /**
  57      * Get the array of ClassFileTransformer object.
  58      *
  59      * @return ClassFileTransformer object array
  60      */
  61     public static ClassFileTransformer[] getTransformers() {
  62         synchronized (transformers) {
  63             ClassFileTransformer[] result = new ClassFileTransformer[transformers.size()];
  64             return transformers.toArray(result);
  65         }


  66     }
  67 
  68 
  69     /**
  70      * Transform a byte array from one to the other.
  71      *
  72      * @param b Byte array
  73      * @param off Offset
  74      * @param len Length of byte array
  75      * @return Transformed byte array
  76      */
  77     public abstract byte[] transform(byte[] b, int off, int len)
  78         throws ClassFormatError;
  79 }