1 32 package net.sf.retrotranslator.transformer; 33 34 37 class JRockitJITRetrotranslator { 38 39 private static class ClassPreProcessorImpl implements ClassPreProcessor { 40 41 private final ClassTransformer transformer; 42 private final ClassPreProcessor delegate; 43 44 public ClassPreProcessorImpl(ClassTransformer transformer, ClassPreProcessor delegate) { 45 this.transformer = transformer; 46 this.delegate = delegate; 47 } 48 49 public byte[] preProcess(ClassLoader classLoader, String string, byte[] bytes) { 50 bytes = transformer.transform(bytes, 0, bytes.length); 51 return delegate != null ? delegate.preProcess(classLoader, string, bytes) : bytes; 52 } 53 } 54 55 public static void install(ClassTransformer transformer) { 56 try { 57 Class jvmFactoryClass = Class.forName("com.bea.jvm.JVMFactory"); 58 Object jvm = jvmFactoryClass.getMethod("getJVM").invoke(null); 59 Object classLibrary = jvm.getClass().getMethod("getClassLibrary").invoke(jvm); 60 ClassPreProcessor preProcessor = (ClassPreProcessor) 61 classLibrary.getClass().getMethod("getClassPreProcessor").invoke(classLibrary); 62 if (!(preProcessor instanceof ClassPreProcessorImpl)) { 63 classLibrary.getClass().getMethod("setClassPreProcessor", ClassPreProcessor.class). 64 invoke(classLibrary, new ClassPreProcessorImpl(transformer, preProcessor)); 65 } 66 } catch (Throwable e) { 67 } 69 } 70 } 71 | Popular Tags |