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 } |